diff --git a/contract-tests/index.js b/contract-tests/index.js index 5df159619..3b507ffca 100644 --- a/contract-tests/index.js +++ b/contract-tests/index.js @@ -35,6 +35,7 @@ app.get('/', (req, res) => { 'inline-context', 'anonymous-redaction', 'evaluation-hooks', + 'wrapper' ], }); }); diff --git a/contract-tests/sdkClientEntity.js b/contract-tests/sdkClientEntity.js index be6620c54..930afdeeb 100644 --- a/contract-tests/sdkClientEntity.js +++ b/contract-tests/sdkClientEntity.js @@ -67,6 +67,14 @@ export function makeSdkConfig(options, tag) { (hook) => new TestHook(hook.name, hook.callbackUri, hook.data, hook.errors), ); } + if (options.wrapper) { + if(options.wrapper.name) { + cf.wrapperName = options.wrapper.name; + } + if(options.wrapper.version) { + cf.wrapperVersion = options.wrapper.version; + } + } return cf; } diff --git a/packages/sdk/server-node/__tests__/platform/NodeInfo.test.ts b/packages/sdk/server-node/__tests__/platform/NodeInfo.test.ts index 4a7e5bd34..7a042256d 100644 --- a/packages/sdk/server-node/__tests__/platform/NodeInfo.test.ts +++ b/packages/sdk/server-node/__tests__/platform/NodeInfo.test.ts @@ -3,7 +3,7 @@ import * as os from 'os'; import NodeInfo from '../../src/platform/NodeInfo'; describe('given an information instance', () => { - const info = new NodeInfo(); + const info = new NodeInfo({}); it('can get platform information', () => { const data = info.platformData(); @@ -25,8 +25,14 @@ describe('given an information instance', () => { }); }); +test('it supports wrapper name and version', () => { + const info = new NodeInfo({ wrapperName: 'the-wrapper', wrapperVersion: 'the-version' }); + expect(info.sdkData().wrapperName).toEqual('the-wrapper'); + expect(info.sdkData().wrapperVersion).toEqual('the-version'); +}); + describe('given an information instance with mock data', () => { - const info = new NodeInfo(); + const info = new NodeInfo({}); it('can get platform information', () => { const platformSpy = jest.spyOn(os, 'platform'); diff --git a/packages/sdk/server-node/src/platform/NodeInfo.ts b/packages/sdk/server-node/src/platform/NodeInfo.ts index 4f3b5a2b6..1494d8362 100644 --- a/packages/sdk/server-node/src/platform/NodeInfo.ts +++ b/packages/sdk/server-node/src/platform/NodeInfo.ts @@ -19,6 +19,7 @@ function processPlatformName(name: string): string { } export default class NodeInfo implements platform.Info { + constructor(private readonly config: { wrapperName?: string; wrapperVersion?: string }) {} platformData(): platform.PlatformData { return { os: { @@ -38,7 +39,8 @@ export default class NodeInfo implements platform.Info { name: packageJson.name, version: packageJson.version, userAgentBase: 'NodeJSClient', - // No wrapper name/version at the moment. + wrapperName: this.config.wrapperName, + wrapperVersion: this.config.wrapperVersion, }; } } diff --git a/packages/sdk/server-node/src/platform/NodePlatform.ts b/packages/sdk/server-node/src/platform/NodePlatform.ts index 0ebdec483..7a5fed5cb 100644 --- a/packages/sdk/server-node/src/platform/NodePlatform.ts +++ b/packages/sdk/server-node/src/platform/NodePlatform.ts @@ -6,7 +6,7 @@ import NodeInfo from './NodeInfo'; import NodeRequests from './NodeRequests'; export default class NodePlatform implements platform.Platform { - info: platform.Info = new NodeInfo(); + info: platform.Info; fileSystem?: platform.Filesystem | undefined = new NodeFilesystem(); @@ -15,6 +15,7 @@ export default class NodePlatform implements platform.Platform { requests: platform.Requests; constructor(options: LDOptions) { + this.info = new NodeInfo(options); this.requests = new NodeRequests(options.tlsParams, options.proxyOptions, options.logger); } }