From 32cb7ddd0f776dee2d133f47f6ceeafcd9870e40 Mon Sep 17 00:00:00 2001 From: Todd Baert Date: Wed, 18 Dec 2024 15:40:48 -0500 Subject: [PATCH] chore: update sdks, absorb changes Signed-off-by: Todd Baert --- .../providers/multi-provider-web/package.json | 2 +- .../src/lib/hook-executor.ts | 9 +++- .../src/lib/multi-provider-web.spec.ts | 40 ++++++++++----- .../src/lib/multi-provider-web.ts | 44 ++++++++++++---- libs/providers/multi-provider/package.json | 2 +- .../multi-provider/src/lib/hook-executor.ts | 9 +++- .../src/lib/multi-provider.spec.ts | 40 ++++++++++----- .../multi-provider/src/lib/multi-provider.ts | 50 ++++++++++++++----- libs/providers/ofrep-web/package.json | 2 +- .../ofrep-web/src/lib/ofrep-web-provider.ts | 2 +- package-lock.json | 28 +++++------ package.json | 8 +-- .../client/src/lib/__libFileName__.ts__tmpl__ | 2 +- .../server/src/lib/__libFileName__.ts__tmpl__ | 2 +- .../src/generators/open-feature/index.ts | 7 ++- 15 files changed, 170 insertions(+), 77 deletions(-) diff --git a/libs/providers/multi-provider-web/package.json b/libs/providers/multi-provider-web/package.json index 2ad1ff997..c4283e239 100644 --- a/libs/providers/multi-provider-web/package.json +++ b/libs/providers/multi-provider-web/package.json @@ -11,6 +11,6 @@ "current-version": "echo $npm_package_version" }, "peerDependencies": { - "@openfeature/web-sdk": "^1.2.1" + "@openfeature/web-sdk": "^1.4.0" } } diff --git a/libs/providers/multi-provider-web/src/lib/hook-executor.ts b/libs/providers/multi-provider-web/src/lib/hook-executor.ts index 278adf8b3..d91239558 100644 --- a/libs/providers/multi-provider-web/src/lib/hook-executor.ts +++ b/libs/providers/multi-provider-web/src/lib/hook-executor.ts @@ -39,11 +39,16 @@ export class HookExecutor { } } - finallyHooks(hooks: Hook[] | undefined, hookContext: HookContext, hints: HookHints) { + finallyHooks( + hooks: Hook[] | undefined, + hookContext: HookContext, + evaluationDetails: EvaluationDetails, + hints: HookHints, + ) { // run "finally" hooks sequentially for (const hook of hooks ?? []) { try { - hook?.finally?.(hookContext, hints); + hook?.finally?.(hookContext, evaluationDetails, hints); } catch (err) { this.logger.error(`Unhandled error during 'finally' hook: ${err}`); if (err instanceof Error) { diff --git a/libs/providers/multi-provider-web/src/lib/multi-provider-web.spec.ts b/libs/providers/multi-provider-web/src/lib/multi-provider-web.spec.ts index 80b558782..e3276ecea 100644 --- a/libs/providers/multi-provider-web/src/lib/multi-provider-web.spec.ts +++ b/libs/providers/multi-provider-web/src/lib/multi-provider-web.spec.ts @@ -390,7 +390,11 @@ describe('MultiProvider', () => { ]); const context = {}; callBeforeHook(multiProvider, context, 'flag', 'string', 'default'); - expect(multiProvider.resolveStringEvaluation('flag', 'default', context)).toEqual({ value: 'value' }); + expect(multiProvider.resolveStringEvaluation('flag', 'default', context)).toEqual({ + value: 'value', + flagKey: 'flag', + flagMetadata: {}, + }); }); it('evaluates a number variable', () => { @@ -406,7 +410,11 @@ describe('MultiProvider', () => { callBeforeHook(multiProvider, context, 'flag', 'number', 0); - expect(multiProvider.resolveNumberEvaluation('flag', 0, context)).toEqual({ value: 1 }); + expect(multiProvider.resolveNumberEvaluation('flag', 0, context)).toEqual({ + value: 1, + flagKey: 'flag', + flagMetadata: {}, + }); }); it('evaluates a boolean variable', () => { @@ -420,7 +428,11 @@ describe('MultiProvider', () => { ]); const context = {}; callBeforeHook(multiProvider, context, 'flag', 'boolean', false); - expect(multiProvider.resolveBooleanEvaluation('flag', false, context)).toEqual({ value: true }); + expect(multiProvider.resolveBooleanEvaluation('flag', false, context)).toEqual({ + value: true, + flagKey: 'flag', + flagMetadata: {}, + }); }); it('evaluates an object variable', () => { @@ -434,7 +446,11 @@ describe('MultiProvider', () => { ]); const context = {}; callBeforeHook(multiProvider, context, 'flag', 'object', {}); - expect(multiProvider.resolveObjectEvaluation('flag', {}, context)).toEqual({ value: { test: true } }); + expect(multiProvider.resolveObjectEvaluation('flag', {}, context)).toEqual({ + value: { test: true }, + flagKey: 'flag', + flagMetadata: {}, + }); }); }); describe('first match strategy', () => { @@ -509,7 +525,7 @@ describe('MultiProvider', () => { new FirstMatchStrategy(), ); const result = callEvaluation(multiProvider, {}); - expect(result).toEqual({ value: true }); + expect(result).toEqual({ value: true, flagKey: 'flag', flagMetadata: {} }); expect(provider2.resolveBooleanEvaluation).toHaveBeenCalled(); expect(provider3.resolveBooleanEvaluation).not.toHaveBeenCalled(); }); @@ -539,7 +555,7 @@ describe('MultiProvider', () => { new FirstMatchStrategy(), ); const result = callEvaluation(multiProvider, {}); - expect(result).toEqual({ value: true }); + expect(result).toEqual({ value: true, flagKey: 'flag', flagMetadata: {} }); expect(provider2.resolveBooleanEvaluation).toHaveBeenCalled(); expect(provider3.resolveBooleanEvaluation).not.toHaveBeenCalled(); }); @@ -572,7 +588,7 @@ describe('MultiProvider', () => { new FirstSuccessfulStrategy(), ); const result = callEvaluation(multiProvider, {}); - expect(result).toEqual({ value: true }); + expect(result).toEqual({ value: true, flagKey: 'flag', flagMetadata: {} }); expect(provider2.resolveBooleanEvaluation).toHaveBeenCalled(); expect(provider3.resolveBooleanEvaluation).not.toHaveBeenCalled(); }); @@ -607,7 +623,7 @@ describe('MultiProvider', () => { expect(provider2.resolveBooleanEvaluation).toHaveBeenCalled(); expect(provider3.resolveBooleanEvaluation).toHaveBeenCalled(); - expect(result).toEqual({ value: true }); + expect(result).toEqual({ value: true, flagKey: 'flag', flagMetadata: {} }); }); it('calls every provider and returns the fallback value if any disagree, and calls onMismatch', () => { @@ -648,21 +664,21 @@ describe('MultiProvider', () => { { provider: provider1, providerName: 'TestProvider-1', - details: { value: true }, + details: { value: true, flagKey: 'flag', flagMetadata: {} }, }, { provider: provider2, providerName: 'TestProvider-2', - details: { value: false }, + details: { value: false, flagKey: 'flag', flagMetadata: {} }, }, { provider: provider3, providerName: 'TestProvider-3', - details: { value: false }, + details: { value: false, flagKey: 'flag', flagMetadata: {} }, }, ]); - expect(result).toEqual({ value: true }); + expect(result).toEqual({ value: true, flagKey: 'flag', flagMetadata: {} }); }); it('returns an error if any provider returns an error', () => { diff --git a/libs/providers/multi-provider-web/src/lib/multi-provider-web.ts b/libs/providers/multi-provider-web/src/lib/multi-provider-web.ts index bcec4ce2d..45a134c30 100644 --- a/libs/providers/multi-provider-web/src/lib/multi-provider-web.ts +++ b/libs/providers/multi-provider-web/src/lib/multi-provider-web.ts @@ -13,6 +13,12 @@ import { ProviderMetadata, BeforeHookContext, ResolutionDetails, + FlagMetadata, + ErrorCode, + EvaluationDetails, + FlagValue, + OpenFeatureError, + StandardResolutionReasons, } from '@openfeature/web-sdk'; import { HookExecutor } from './hook-executor'; import { constructAggregateError, throwAggregateErrorFromPromiseResults } from './errors'; @@ -232,32 +238,31 @@ export class WebMultiProvider implements Provider { hookContext: HookContext, hookHints: HookHints, ) { - let evaluationResult: ResolutionDetails; + let evaluationDetails: EvaluationDetails; try { this.hookExecutor.beforeHooks(provider.hooks, hookContext, hookHints); - evaluationResult = this.callProviderResolve( + const resolutionDetails = this.callProviderResolve( provider, flagKey, defaultValue, hookContext.context, ) as ResolutionDetails; - const afterHookEvalDetails = { - ...evaluationResult, - flagMetadata: Object.freeze(evaluationResult.flagMetadata ?? {}), + evaluationDetails = { + ...resolutionDetails, + flagMetadata: Object.freeze(resolutionDetails.flagMetadata ?? {}), flagKey, }; - this.hookExecutor.afterHooks(provider.hooks, hookContext, afterHookEvalDetails, hookHints); - return evaluationResult; + this.hookExecutor.afterHooks(provider.hooks, hookContext, evaluationDetails, hookHints); } catch (error: unknown) { this.hookExecutor.errorHooks(provider.hooks, hookContext, error, hookHints); - throw error; - } finally { - this.hookExecutor.finallyHooks(provider.hooks, hookContext, hookHints); + evaluationDetails = this.getErrorEvaluationDetails(flagKey, defaultValue, error); } + this.hookExecutor.finallyHooks(provider.hooks, hookContext, evaluationDetails, hookHints); + return evaluationDetails; } private callProviderResolve( @@ -291,4 +296,23 @@ export class WebMultiProvider implements Provider { }, ]; } + + private getErrorEvaluationDetails( + flagKey: string, + defaultValue: T, + err: unknown, + flagMetadata: FlagMetadata = {}, + ): EvaluationDetails { + const errorMessage: string = (err as Error)?.message; + const errorCode: ErrorCode = (err as OpenFeatureError)?.code || ErrorCode.GENERAL; + + return { + errorCode, + errorMessage, + value: defaultValue, + reason: StandardResolutionReasons.ERROR, + flagMetadata: Object.freeze(flagMetadata), + flagKey, + }; + } } diff --git a/libs/providers/multi-provider/package.json b/libs/providers/multi-provider/package.json index 5b4d888f4..4a8599424 100644 --- a/libs/providers/multi-provider/package.json +++ b/libs/providers/multi-provider/package.json @@ -11,6 +11,6 @@ "current-version": "echo $npm_package_version" }, "peerDependencies": { - "@openfeature/server-sdk": "^1.6.0" + "@openfeature/server-sdk": "^1.17.0" } } diff --git a/libs/providers/multi-provider/src/lib/hook-executor.ts b/libs/providers/multi-provider/src/lib/hook-executor.ts index 0561fa4fe..9ada84ac2 100644 --- a/libs/providers/multi-provider/src/lib/hook-executor.ts +++ b/libs/providers/multi-provider/src/lib/hook-executor.ts @@ -47,11 +47,16 @@ export class HookExecutor { } } - async finallyHooks(hooks: Hook[] | undefined, hookContext: HookContext, hints: HookHints) { + async finallyHooks( + hooks: Hook[] | undefined, + hookContext: HookContext, + evaluationDetails: EvaluationDetails, + hints: HookHints, + ) { // run "finally" hooks sequentially for (const hook of hooks ?? []) { try { - await hook?.finally?.(hookContext, hints); + await hook?.finally?.(hookContext, evaluationDetails, hints); } catch (err) { this.logger.error(`Unhandled error during 'finally' hook: ${err}`); if (err instanceof Error) { diff --git a/libs/providers/multi-provider/src/lib/multi-provider.spec.ts b/libs/providers/multi-provider/src/lib/multi-provider.spec.ts index 859b5dca7..3b34f990d 100644 --- a/libs/providers/multi-provider/src/lib/multi-provider.spec.ts +++ b/libs/providers/multi-provider/src/lib/multi-provider.spec.ts @@ -437,7 +437,11 @@ describe('MultiProvider', () => { ]); const context = {}; await callBeforeHook(multiProvider, context, 'flag', 'string', 'default'); - expect(await multiProvider.resolveStringEvaluation('flag', 'default', context)).toEqual({ value: 'value' }); + expect(await multiProvider.resolveStringEvaluation('flag', 'default', context)).toEqual({ + value: 'value', + flagKey: 'flag', + flagMetadata: {}, + }); }); it('evaluates a number variable', async () => { @@ -453,7 +457,11 @@ describe('MultiProvider', () => { await callBeforeHook(multiProvider, context, 'flag', 'number', 0); - expect(await multiProvider.resolveNumberEvaluation('flag', 0, context)).toEqual({ value: 1 }); + expect(await multiProvider.resolveNumberEvaluation('flag', 0, context)).toEqual({ + value: 1, + flagKey: 'flag', + flagMetadata: {}, + }); }); it('evaluates a boolean variable', async () => { @@ -467,7 +475,11 @@ describe('MultiProvider', () => { ]); const context = {}; await callBeforeHook(multiProvider, context, 'flag', 'boolean', false); - expect(await multiProvider.resolveBooleanEvaluation('flag', false, context)).toEqual({ value: true }); + expect(await multiProvider.resolveBooleanEvaluation('flag', false, context)).toEqual({ + value: true, + flagKey: 'flag', + flagMetadata: {}, + }); }); it('evaluates an object variable', async () => { @@ -481,7 +493,11 @@ describe('MultiProvider', () => { ]); const context = {}; await callBeforeHook(multiProvider, context, 'flag', 'object', {}); - expect(await multiProvider.resolveObjectEvaluation('flag', {}, context)).toEqual({ value: { test: true } }); + expect(await multiProvider.resolveObjectEvaluation('flag', {}, context)).toEqual({ + flagKey: 'flag', + flagMetadata: {}, + value: { test: true }, + }); }); }); describe('first match strategy', () => { @@ -554,7 +570,7 @@ describe('MultiProvider', () => { new FirstMatchStrategy(), ); const result = await callEvaluation(multiProvider, {}, logger); - expect(result).toEqual({ value: true }); + expect(result).toEqual({ value: true, flagKey: 'flag', flagMetadata: {} }); expect(provider2.resolveBooleanEvaluation).toHaveBeenCalled(); expect(provider3.resolveBooleanEvaluation).not.toHaveBeenCalled(); }); @@ -582,7 +598,7 @@ describe('MultiProvider', () => { new FirstMatchStrategy(), ); const result = await callEvaluation(multiProvider, {}, logger); - expect(result).toEqual({ value: true }); + expect(result).toEqual({ value: true, flagKey: 'flag', flagMetadata: {} }); expect(provider2.resolveBooleanEvaluation).toHaveBeenCalled(); expect(provider3.resolveBooleanEvaluation).not.toHaveBeenCalled(); }); @@ -615,7 +631,7 @@ describe('MultiProvider', () => { new FirstSuccessfulStrategy(), ); const result = await callEvaluation(multiProvider, {}, logger); - expect(result).toEqual({ value: true }); + expect(result).toEqual({ value: true, flagKey: 'flag', flagMetadata: {} }); expect(provider2.resolveBooleanEvaluation).toHaveBeenCalled(); expect(provider3.resolveBooleanEvaluation).not.toHaveBeenCalled(); }); @@ -659,7 +675,7 @@ describe('MultiProvider', () => { expect(provider2.resolveBooleanEvaluation).toHaveBeenCalled(); expect(provider3.resolveBooleanEvaluation).toHaveBeenCalled(); - expect(await resultPromise).toEqual({ value: true }); + expect(await resultPromise).toEqual({ value: true, flagKey: 'flag', flagMetadata: {} }); }); it('calls every provider and returns the fallback value if any disagree, and calls onMismatch', async () => { @@ -700,21 +716,21 @@ describe('MultiProvider', () => { { provider: provider1, providerName: 'TestProvider-1', - details: { value: true }, + details: { value: true, flagKey: 'flag', flagMetadata: {} }, }, { provider: provider2, providerName: 'TestProvider-2', - details: { value: false }, + details: { value: false, flagKey: 'flag', flagMetadata: {} }, }, { provider: provider3, providerName: 'TestProvider-3', - details: { value: false }, + details: { value: false, flagKey: 'flag', flagMetadata: {} }, }, ]); - expect(result).toEqual({ value: true }); + expect(result).toEqual({ value: true, flagKey: 'flag', flagMetadata: {} }); }); it('returns an error if any provider returns an error', async () => { diff --git a/libs/providers/multi-provider/src/lib/multi-provider.ts b/libs/providers/multi-provider/src/lib/multi-provider.ts index db35cafc3..02a210b0d 100644 --- a/libs/providers/multi-provider/src/lib/multi-provider.ts +++ b/libs/providers/multi-provider/src/lib/multi-provider.ts @@ -1,6 +1,11 @@ import { + BeforeHookContext, DefaultLogger, + ErrorCode, EvaluationContext, + EvaluationDetails, + FlagMetadata, + FlagValue, FlagValueType, GeneralError, Hook, @@ -8,16 +13,17 @@ import { HookHints, JsonValue, Logger, + OpenFeatureError, OpenFeatureEventEmitter, Provider, ProviderMetadata, - BeforeHookContext, ResolutionDetails, + StandardResolutionReasons, } from '@openfeature/server-sdk'; -import { HookExecutor } from './hook-executor'; import { constructAggregateError, throwAggregateErrorFromPromiseResults } from './errors'; -import { BaseEvaluationStrategy, ProviderResolutionResult, FirstMatchStrategy } from './strategies'; +import { HookExecutor } from './hook-executor'; import { StatusTracker } from './status-tracker'; +import { BaseEvaluationStrategy, FirstMatchStrategy, ProviderResolutionResult } from './strategies'; import { ProviderEntryInput, RegisteredProvider } from './types'; export class MultiProvider implements Provider { @@ -239,7 +245,7 @@ export class MultiProvider implements Provider { hookHints: HookHints, ) { let providerContext: EvaluationContext | undefined = undefined; - let evaluationResult: ResolutionDetails; + let evaluationDetails: EvaluationDetails; // create a copy of the shared hook context because we're going to mutate the evaluation context const hookContextCopy = { ...hookContext, context: { ...hookContext.context } }; @@ -248,27 +254,26 @@ export class MultiProvider implements Provider { // return the modified provider context and mutate the hook context to contain it providerContext = await this.hookExecutor.beforeHooks(provider.hooks, hookContextCopy, hookHints); - evaluationResult = (await this.callProviderResolve( + const resolutionDetails = (await this.callProviderResolve( provider, flagKey, defaultValue, providerContext, )) as ResolutionDetails; - const afterHookEvalDetails = { - ...evaluationResult, - flagMetadata: Object.freeze(evaluationResult.flagMetadata ?? {}), + evaluationDetails = { + ...resolutionDetails, + flagMetadata: Object.freeze(resolutionDetails.flagMetadata ?? {}), flagKey, }; - await this.hookExecutor.afterHooks(provider.hooks, hookContextCopy, afterHookEvalDetails, hookHints); - return evaluationResult; + await this.hookExecutor.afterHooks(provider.hooks, hookContextCopy, evaluationDetails, hookHints); } catch (error: unknown) { await this.hookExecutor.errorHooks(provider.hooks, hookContextCopy, error, hookHints); - throw error; - } finally { - await this.hookExecutor.finallyHooks(provider.hooks, hookContextCopy, hookHints); + evaluationDetails = this.getErrorEvaluationDetails(flagKey, defaultValue, error); } + await this.hookExecutor.finallyHooks(provider.hooks, hookContextCopy, evaluationDetails, hookHints); + return evaluationDetails; } private async callProviderResolve( @@ -302,4 +307,23 @@ export class MultiProvider implements Provider { }, ]; } + + private getErrorEvaluationDetails( + flagKey: string, + defaultValue: T, + err: unknown, + flagMetadata: FlagMetadata = {}, + ): EvaluationDetails { + const errorMessage: string = (err as Error)?.message; + const errorCode: ErrorCode = (err as OpenFeatureError)?.code || ErrorCode.GENERAL; + + return { + errorCode, + errorMessage, + value: defaultValue, + reason: StandardResolutionReasons.ERROR, + flagMetadata: Object.freeze(flagMetadata), + flagKey, + }; + } } diff --git a/libs/providers/ofrep-web/package.json b/libs/providers/ofrep-web/package.json index 58380bc37..ab7436804 100644 --- a/libs/providers/ofrep-web/package.json +++ b/libs/providers/ofrep-web/package.json @@ -11,6 +11,6 @@ "current-version": "echo $npm_package_version" }, "peerDependencies": { - "@openfeature/web-sdk": ">=0.4.0" + "@openfeature/web-sdk": "^1.4.0" } } diff --git a/libs/providers/ofrep-web/src/lib/ofrep-web-provider.ts b/libs/providers/ofrep-web/src/lib/ofrep-web-provider.ts index e4265c984..42d5cf8b0 100644 --- a/libs/providers/ofrep-web/src/lib/ofrep-web-provider.ts +++ b/libs/providers/ofrep-web/src/lib/ofrep-web-provider.ts @@ -92,7 +92,7 @@ export class OFREPWebProvider implements Provider { this._logger?.debug(`${this.metadata.name} initialized successfully`); } catch (error) { if (error instanceof OFREPApiUnauthorizedError || error instanceof OFREPForbiddenError) { - throw new ProviderFatalError('Initialization failed', error); + throw new ProviderFatalError('Initialization failed', { cause: error }); } throw error; } diff --git a/package-lock.json b/package-lock.json index c3afc1aaf..2f177df51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,9 +46,9 @@ "@nx/rollup": "16.9.1", "@nx/web": "16.9.1", "@nx/workspace": "16.9.1", - "@openfeature/core": "^1.1.0", - "@openfeature/server-sdk": "^1.13.2", - "@openfeature/web-sdk": "^1.1.0", + "@openfeature/core": "^1.6.0", + "@openfeature/server-sdk": "^1.17.0", + "@openfeature/web-sdk": "^1.4.0", "@opentelemetry/sdk-metrics": "^1.15.0", "@swc-node/register": "~1.10.0", "@swc/cli": "~0.4.0", @@ -3652,30 +3652,30 @@ "dev": true }, "node_modules/@openfeature/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@openfeature/core/-/core-1.2.0.tgz", - "integrity": "sha512-JyIiije5f+8Big1xz7UAmxqVmHBuFUI9Dh8DEFG2D1ocgjMm1tEzYXJDr3urCQGNnX9M/cYtNhEcGfyontIgJw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@openfeature/core/-/core-1.6.0.tgz", + "integrity": "sha512-QYAtwdreZU9Mi/LXLRzXsUA7PhbtT7+UJfRBMIAy6MidZjMgIbNfoh6+MncXb3UocThn0OsYa8WLfWD9q43eCQ==", "dev": true }, "node_modules/@openfeature/server-sdk": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@openfeature/server-sdk/-/server-sdk-1.14.0.tgz", - "integrity": "sha512-PGPI6OZdyAy2FZVUiH1suw/WuWZJsIlK2xd1KbRl5rlMLawYk2bKGBGgZYX9rcozsGKOZM6/vaFjCSB6QCjCfw==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@openfeature/server-sdk/-/server-sdk-1.17.0.tgz", + "integrity": "sha512-M5Dcw6/IROlvIVPzzgPEpq5JhbIGyGY7oVlN6cJMd9EbhJtQzmMQBuXKCqoar59OgQXKH/u2LQxEhS1ccaR/RA==", "dev": true, "engines": { "node": ">=18" }, "peerDependencies": { - "@openfeature/core": "1.2.0" + "@openfeature/core": "^1.6.0" } }, "node_modules/@openfeature/web-sdk": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@openfeature/web-sdk/-/web-sdk-1.1.0.tgz", - "integrity": "sha512-qfJBWVN0AzYGoZZUE4w4LrQc3Oq3MWaUys+bkBjkgyFFDJM4TrgRz+wz/f3TwRVKj2Bc0EZ0ouyfupdWjR7bsQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@openfeature/web-sdk/-/web-sdk-1.4.0.tgz", + "integrity": "sha512-cMCt5jszLiZ9mLacS7XjMTEpbIS3asttSpyrPJ8rAdwDk86UjzfPwzMTSiccVolJqS299hWGXC1FGbu4IHX40Q==", "dev": true, "peerDependencies": { - "@openfeature/core": "1.2.0" + "@openfeature/core": "^1.6.0" } }, "node_modules/@opentelemetry/api": { diff --git a/package.json b/package.json index 4443df189..e8952333e 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "tslib": "2.8.0" }, "devDependencies": { + "@bufbuild/buf": "^1.34.0", "@nx/devkit": "16.9.1", "@nx/eslint-plugin": "16.9.1", "@nx/jest": "16.9.1", @@ -50,9 +51,9 @@ "@nx/rollup": "16.9.1", "@nx/web": "16.9.1", "@nx/workspace": "16.9.1", - "@openfeature/core": "^1.1.0", - "@openfeature/server-sdk": "^1.13.2", - "@openfeature/web-sdk": "^1.1.0", + "@openfeature/core": "^1.6.0", + "@openfeature/server-sdk": "^1.17.0", + "@openfeature/web-sdk": "^1.4.0", "@opentelemetry/sdk-metrics": "^1.15.0", "@swc-node/register": "~1.10.0", "@swc/cli": "~0.4.0", @@ -71,7 +72,6 @@ "assert": "^2.0.0", "axios-mock-adapter": "2.1.0", "babel-preset-minify": "0.5.2", - "@bufbuild/buf": "^1.34.0", "eslint": "8.57.1", "eslint-config-prettier": "8.10.0", "eslint-plugin-prettier": "^5.0.1", diff --git a/tools/workspace-plugin/src/generators/open-feature/files/hook/client/src/lib/__libFileName__.ts__tmpl__ b/tools/workspace-plugin/src/generators/open-feature/files/hook/client/src/lib/__libFileName__.ts__tmpl__ index 99037ed13..87616dc28 100644 --- a/tools/workspace-plugin/src/generators/open-feature/files/hook/client/src/lib/__libFileName__.ts__tmpl__ +++ b/tools/workspace-plugin/src/generators/open-feature/files/hook/client/src/lib/__libFileName__.ts__tmpl__ @@ -17,5 +17,5 @@ export class <%= libClassName %> implements Hook { error(hookContext: HookContext, err: unknown, hookHints?: HookHints) {} - finally(hookContext: HookContext, hookHints?: HookHints) {} + finally(hookContext: HookContext, evaluationDetails: EvaluationDetails, hookHints?: HookHints) {} } diff --git a/tools/workspace-plugin/src/generators/open-feature/files/hook/server/src/lib/__libFileName__.ts__tmpl__ b/tools/workspace-plugin/src/generators/open-feature/files/hook/server/src/lib/__libFileName__.ts__tmpl__ index d4f96f30e..3be643cf5 100644 --- a/tools/workspace-plugin/src/generators/open-feature/files/hook/server/src/lib/__libFileName__.ts__tmpl__ +++ b/tools/workspace-plugin/src/generators/open-feature/files/hook/server/src/lib/__libFileName__.ts__tmpl__ @@ -17,5 +17,5 @@ export class <%= libClassName %> implements Hook { error(hookContext: HookContext, err: unknown, hookHints?: HookHints) {} - finally(hookContext: HookContext, hookHints?: HookHints) {} + finally(hookContext: HookContext, evaluationDetails: EvaluationDetails, hookHints?: HookHints) {} } diff --git a/tools/workspace-plugin/src/generators/open-feature/index.ts b/tools/workspace-plugin/src/generators/open-feature/index.ts index 7b30fd8f6..17648f07d 100644 --- a/tools/workspace-plugin/src/generators/open-feature/index.ts +++ b/tools/workspace-plugin/src/generators/open-feature/index.ts @@ -183,14 +183,17 @@ function updatePackage(tree: Tree, projectRoot: string, schema: SchemaOptions) { // use undefined or this defaults to "commonjs", which breaks things: https://github.com/open-feature/js-sdk-contrib/pull/596 json.type = undefined; + // everything should be Apache-2.0 + json.license = 'Apache-2.0'; + // client packages have a web-sdk dep, server js-sdk json.peerDependencies = schema.category === 'client' ? { - '@openfeature/web-sdk': '^1.0.0', + '@openfeature/web-sdk': '^1.6.0', } : { - '@openfeature/server-sdk': '^1.13.0', + '@openfeature/server-sdk': '^1.17.0', }; return json;