W
File size: 1,922 Bytes
2b64d42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import { parseFields } from '../src/proto.js';

function metadataStrings(buf) {
  return Object.fromEntries(
    parseFields(buf)
      .filter(field => field.wireType === 2)
      .map(field => [field.field, field.value.toString('utf8')])
  );
}

describe('client fingerprint metadata', () => {
  it('uses the current Windsurf client version by default', async () => {
    const previous = process.env.WINDSURF_CLIENT_VERSION;
    delete process.env.WINDSURF_CLIENT_VERSION;

    try {
      const { buildMetadata } = await import('../src/windsurf.js?fingerprint-default');
      const metadata = metadataStrings(buildMetadata('apikey', undefined, 'sess'));

      assert.equal(metadata[2], '2.0.67');
      assert.equal(metadata[7], '2.0.67');
    } finally {
      if (previous == null) delete process.env.WINDSURF_CLIENT_VERSION;
      else process.env.WINDSURF_CLIENT_VERSION = previous;
    }
  });

  it('uses WINDSURF_CLIENT_VERSION when set before import', async () => {
    const previous = process.env.WINDSURF_CLIENT_VERSION;
    process.env.WINDSURF_CLIENT_VERSION = '9.9.9';

    try {
      const { buildMetadata } = await import('../src/windsurf.js?fingerprint-env');
      const metadata = metadataStrings(buildMetadata('apikey', undefined, 'sess'));

      assert.equal(metadata[2], '9.9.9');
      assert.equal(metadata[7], '9.9.9');
    } finally {
      if (previous == null) delete process.env.WINDSURF_CLIENT_VERSION;
      else process.env.WINDSURF_CLIENT_VERSION = previous;
    }
  });

  it('lets an explicit version override the default', async () => {
    const { buildMetadata } = await import('../src/windsurf.js?fingerprint-explicit');
    const metadata = metadataStrings(buildMetadata('apikey', '1.2.3', 'sess'));

    assert.equal(metadata[2], '1.2.3');
    assert.equal(metadata[7], '1.2.3');
  });
});