@cqrs-ddd/pipeline-feature-flags 0.5.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,8 +2,8 @@
2
2
  * Thrown by {@link FeatureFlagBehavior} when a handler is gated behind a flag
3
3
  * that resolves to disabled and no `fallback` was configured.
4
4
  *
5
- * Over HTTP, register {@link FeatureDisabledFilter}: it answers `403 Forbidden`
6
- * with the flag, or a plain `404 Not Found` to hide the feature.
5
+ * Over HTTP, `toHttpResponse` of `@cqrs-ddd/pipeline-feature-flags/http` answers
6
+ * `403 Forbidden` with the flag, or a plain `404 Not Found` to hide the feature.
7
7
  */
8
8
  export declare class FeatureDisabledError extends Error {
9
9
  /** The flag key that gated the request. */
@@ -3,8 +3,8 @@
3
3
  * Thrown by {@link FeatureFlagBehavior} when a handler is gated behind a flag
4
4
  * that resolves to disabled and no `fallback` was configured.
5
5
  *
6
- * Over HTTP, register {@link FeatureDisabledFilter}: it answers `403 Forbidden`
7
- * with the flag, or a plain `404 Not Found` to hide the feature.
6
+ * Over HTTP, `toHttpResponse` of `@cqrs-ddd/pipeline-feature-flags/http` answers
7
+ * `403 Forbidden` with the flag, or a plain `404 Not Found` to hide the feature.
8
8
  */
9
9
  export class FeatureDisabledError extends Error {
10
10
  /** The flag key that gated the request. */
@@ -1,63 +1,33 @@
1
1
  import { type IPipelineBehavior, type IPipelineBehaviorContract, type IPipelineBehaviorOptionsResolver, type IPipelineContext, type NextDelegate, PIPELINE_BEHAVIOR_CONTRACT, type PipelineItemToken, type PipelineLogger } from '@cqrs-ddd/pipeline';
2
- import type { Client, EvaluationContext } from '@openfeature/server-sdk';
3
- import type { FeatureFlagBehaviorOptions, FeatureFlagDecision, TargetingKeyFactory } from './interfaces/feature-flags-options.interface.js';
2
+ import type { Client } from '@openfeature/server-sdk';
3
+ import type { FeatureFlagBehaviorOptions, FeatureFlagDecision } from './interfaces/feature-flags-options.interface.js';
4
4
  /**
5
- * Unique symbol key set on `context.items` recording the final boolean gate
5
+ * The `context.items` entry recording the final boolean gate
6
6
  * decision (`true` means the handler was allowed to execute).
7
7
  *
8
8
  * Use this when only the final gate result is needed. For provider variant,
9
9
  * reason, error metadata, and targeting identity use
10
10
  * {@link FEATURE_FLAG_DECISION_ITEM}.
11
11
  *
12
- * @example
13
- * ```ts
14
- * const isEnabled = context.items.get(FEATURE_FLAG_ITEM) === true;
15
- * ```
16
- */
17
- export declare const FEATURE_FLAG_ITEM: unique symbol;
18
- /**
19
- * Typed token for {@link FEATURE_FLAG_ITEM}: the feature flag gate decision. Reads and writes the same
20
- * `context.items` entry through `getPipelineItem` / `requirePipelineItem`.
12
+ * Read it with `getPipelineItem` or `requirePipelineItem`.
21
13
  */
22
14
  export declare const FEATURE_FLAG_ITEM_TOKEN: PipelineItemToken<boolean>;
23
15
  /**
24
- * Unique symbol key set on `context.items` recording the evaluated feature flag
16
+ * The `context.items` entry recording the evaluated feature flag
25
17
  * key string.
26
18
  *
27
- * @example
28
- * ```ts
29
- * const flagKey = context.items.get(FEATURE_FLAG_KEY_ITEM) as string | undefined;
30
- * ```
31
- */
32
- export declare const FEATURE_FLAG_KEY_ITEM: unique symbol;
33
- /**
34
- * Typed token for {@link FEATURE_FLAG_KEY_ITEM}: the evaluated feature flag key. Reads and writes the same
35
- * `context.items` entry through `getPipelineItem` / `requirePipelineItem`.
19
+ * Read it with `getPipelineItem` or `requirePipelineItem`.
36
20
  */
37
21
  export declare const FEATURE_FLAG_KEY_ITEM_TOKEN: PipelineItemToken<string>;
38
22
  /**
39
- * Unique symbol key set on `context.items` with the full
23
+ * The `context.items` entry with the full
40
24
  * {@link FeatureFlagDecision}: raw boolean value, final enabled decision,
41
25
  * provider variant/reason/error metadata, and targeting key when available.
42
26
  *
43
27
  * This lets audit/logging/telemetry behaviors inspect the exact decision without
44
28
  * evaluating the flag a second time.
45
29
  *
46
- * @example
47
- * ```ts
48
- * const decision = context.items.get(FEATURE_FLAG_DECISION_ITEM) as
49
- * | FeatureFlagDecision
50
- * | undefined;
51
- *
52
- * if (decision?.variant === 'treatment-a') {
53
- * // enrich telemetry/audit metadata
54
- * }
55
- * ```
56
- */
57
- export declare const FEATURE_FLAG_DECISION_ITEM: unique symbol;
58
- /**
59
- * Typed token for {@link FEATURE_FLAG_DECISION_ITEM}: the feature flag decision. Reads and writes the same
60
- * `context.items` entry through `getPipelineItem` / `requirePipelineItem`.
30
+ * Read it with `getPipelineItem` or `requirePipelineItem`.
61
31
  */
62
32
  export declare const FEATURE_FLAG_DECISION_ITEM_TOKEN: PipelineItemToken<FeatureFlagDecision>;
63
33
  /**
@@ -127,12 +97,10 @@ export declare const FEATURE_FLAG_DECISION_ITEM_TOKEN: PipelineItemToken<Feature
127
97
  */
128
98
  export declare class FeatureFlagBehavior implements IPipelineBehavior, IPipelineBehaviorOptionsResolver<FeatureFlagBehaviorOptions> {
129
99
  private readonly client;
130
- private readonly moduleContext?;
131
- private readonly moduleTargetingKeyFactory?;
132
100
  static readonly [PIPELINE_BEHAVIOR_CONTRACT]: IPipelineBehaviorContract;
133
101
  private readonly logger;
134
102
  private readonly defaults;
135
- constructor(client: Client, defaults?: FeatureFlagBehaviorOptions, moduleContext?: EvaluationContext | undefined, logger?: PipelineLogger, moduleTargetingKeyFactory?: TargetingKeyFactory | undefined);
103
+ constructor(client: Client, defaults?: FeatureFlagBehaviorOptions, logger?: PipelineLogger);
136
104
  handle(context: IPipelineContext, next: NextDelegate): Promise<unknown>;
137
105
  /** Evaluates the flag for this request and builds the decision that gates it. */
138
106
  private decide;
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flag.behavior.d.ts","sourceRoot":"","sources":["../src/feature-flag.behavior.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,0BAA0B,EAG1B,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAIzE,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,iDAAiD,CAAC;AAEzD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,iBAAiB,CAAC,OAAO,CACM,CAAC;AAEtE;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,eAAkC,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,2BAA2B,EAAE,iBAAiB,CAAC,MAAM,CACU,CAAC;AAE7E;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,0BAA0B,eAAuC,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,gCAAgC,EAAE,iBAAiB,CAAC,mBAAmB,CAIjF,CAAC;AAkBJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,qBAAa,mBACX,YACE,iBAAiB,EACjB,gCAAgC,CAAC,0BAA0B,CAAC;IAiD5D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAE/B,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAnD7C,MAAM,CAAC,QAAQ,CAAC,CAAC,0BAA0B,CAAC,EAAE,yBAAyB,CAyCrE;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAEtD,YACmB,MAAM,EAAE,MAAM,EAC/B,QAAQ,CAAC,EAAE,0BAA0B,EACpB,aAAa,CAAC,EAAE,iBAAiB,YAAA,EAClD,MAAM,CAAC,EAAE,cAAc,EACN,yBAAyB,CAAC,EAAE,mBAAmB,YAAA,EASjE;IAEK,MAAM,CACV,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,OAAO,CAAC,CA+BlB;IAED,iFAAiF;YACnE,MAAM;IAyCpB,OAAO,CAAC,WAAW;IAgBnB;;;;;;OAMG;YACW,QAAQ;IA2CtB,2EAA2E;IAC3E,uBAAuB,CACrB,OAAO,CAAC,EAAE,0BAA0B,GACnC,0BAA0B,CAE5B;CACF"}
1
+ {"version":3,"file":"feature-flag.behavior.d.ts","sourceRoot":"","sources":["../src/feature-flag.behavior.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,0BAA0B,EAG1B,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,yBAAyB,CAAC;AAIzE,OAAO,KAAK,EACV,0BAA0B,EAC1B,mBAAmB,EACpB,MAAM,iDAAiD,CAAC;AAEzD;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,EAAE,iBAAiB,CAAC,OAAO,CACb,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,iBAAiB,CAAC,MAAM,CACb,CAAC;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,gCAAgC,EAAE,iBAAiB,CAAC,mBAAmB,CACb,CAAC;AAkBxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,qBAAa,mBACX,YACE,iBAAiB,EACjB,gCAAgC,CAAC,0BAA0B,CAAC;IAiD5D,OAAO,CAAC,QAAQ,CAAC,MAAM;IA/CzB,MAAM,CAAC,QAAQ,CAAC,CAAC,0BAA0B,CAAC,EAAE,yBAAyB,CAyCrE;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAEtD,YACmB,MAAM,EAAE,MAAM,EAC/B,QAAQ,CAAC,EAAE,0BAA0B,EACrC,MAAM,CAAC,EAAE,cAAc,EASxB;IAEK,MAAM,CACV,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,OAAO,CAAC,CA+BlB;IAED,iFAAiF;YACnE,MAAM;IAyCpB,OAAO,CAAC,WAAW;IAgBnB;;;;;;OAMG;YACW,QAAQ;IA2CtB,2EAA2E;IAC3E,uBAAuB,CACrB,OAAO,CAAC,EAAE,0BAA0B,GACnC,0BAA0B,CAE5B;CACF"}
@@ -4,64 +4,34 @@ import { FeatureDisabledError } from './errors/feature-disabled.error.js';
4
4
  import { FeatureFlagEvaluationError } from './errors/feature-flag-evaluation.error.js';
5
5
  import { buildEvaluationContext } from './helpers/evaluation-context.js';
6
6
  /**
7
- * Unique symbol key set on `context.items` recording the final boolean gate
7
+ * The `context.items` entry recording the final boolean gate
8
8
  * decision (`true` means the handler was allowed to execute).
9
9
  *
10
10
  * Use this when only the final gate result is needed. For provider variant,
11
11
  * reason, error metadata, and targeting identity use
12
12
  * {@link FEATURE_FLAG_DECISION_ITEM}.
13
13
  *
14
- * @example
15
- * ```ts
16
- * const isEnabled = context.items.get(FEATURE_FLAG_ITEM) === true;
17
- * ```
18
- */
19
- export const FEATURE_FLAG_ITEM = Symbol('FEATURE_FLAG_ITEM');
20
- /**
21
- * Typed token for {@link FEATURE_FLAG_ITEM}: the feature flag gate decision. Reads and writes the same
22
- * `context.items` entry through `getPipelineItem` / `requirePipelineItem`.
14
+ * Read it with `getPipelineItem` or `requirePipelineItem`.
23
15
  */
24
- export const FEATURE_FLAG_ITEM_TOKEN = createPipelineItem('FEATURE_FLAG_ITEM', FEATURE_FLAG_ITEM);
16
+ export const FEATURE_FLAG_ITEM_TOKEN = createPipelineItem('FEATURE_FLAG_ITEM');
25
17
  /**
26
- * Unique symbol key set on `context.items` recording the evaluated feature flag
18
+ * The `context.items` entry recording the evaluated feature flag
27
19
  * key string.
28
20
  *
29
- * @example
30
- * ```ts
31
- * const flagKey = context.items.get(FEATURE_FLAG_KEY_ITEM) as string | undefined;
32
- * ```
33
- */
34
- export const FEATURE_FLAG_KEY_ITEM = Symbol('FEATURE_FLAG_KEY_ITEM');
35
- /**
36
- * Typed token for {@link FEATURE_FLAG_KEY_ITEM}: the evaluated feature flag key. Reads and writes the same
37
- * `context.items` entry through `getPipelineItem` / `requirePipelineItem`.
21
+ * Read it with `getPipelineItem` or `requirePipelineItem`.
38
22
  */
39
- export const FEATURE_FLAG_KEY_ITEM_TOKEN = createPipelineItem('FEATURE_FLAG_KEY_ITEM', FEATURE_FLAG_KEY_ITEM);
23
+ export const FEATURE_FLAG_KEY_ITEM_TOKEN = createPipelineItem('FEATURE_FLAG_KEY_ITEM');
40
24
  /**
41
- * Unique symbol key set on `context.items` with the full
25
+ * The `context.items` entry with the full
42
26
  * {@link FeatureFlagDecision}: raw boolean value, final enabled decision,
43
27
  * provider variant/reason/error metadata, and targeting key when available.
44
28
  *
45
29
  * This lets audit/logging/telemetry behaviors inspect the exact decision without
46
30
  * evaluating the flag a second time.
47
31
  *
48
- * @example
49
- * ```ts
50
- * const decision = context.items.get(FEATURE_FLAG_DECISION_ITEM) as
51
- * | FeatureFlagDecision
52
- * | undefined;
53
- *
54
- * if (decision?.variant === 'treatment-a') {
55
- * // enrich telemetry/audit metadata
56
- * }
57
- * ```
58
- */
59
- export const FEATURE_FLAG_DECISION_ITEM = Symbol('FEATURE_FLAG_DECISION_ITEM');
60
- /**
61
- * Typed token for {@link FEATURE_FLAG_DECISION_ITEM}: the feature flag decision. Reads and writes the same
62
- * `context.items` entry through `getPipelineItem` / `requirePipelineItem`.
32
+ * Read it with `getPipelineItem` or `requirePipelineItem`.
63
33
  */
64
- export const FEATURE_FLAG_DECISION_ITEM_TOKEN = createPipelineItem('FEATURE_FLAG_DECISION_ITEM', FEATURE_FLAG_DECISION_ITEM);
34
+ export const FEATURE_FLAG_DECISION_ITEM_TOKEN = createPipelineItem('FEATURE_FLAG_DECISION_ITEM');
65
35
  /**
66
36
  * Pipeline behavior that gates a handler behind an OpenFeature boolean flag.
67
37
  *
@@ -129,8 +99,6 @@ export const FEATURE_FLAG_DECISION_ITEM_TOKEN = createPipelineItem('FEATURE_FLAG
129
99
  */
130
100
  export class FeatureFlagBehavior {
131
101
  client;
132
- moduleContext;
133
- moduleTargetingKeyFactory;
134
102
  static [PIPELINE_BEHAVIOR_CONTRACT] = {
135
103
  validate: (context) => {
136
104
  const options = context.effectiveOptions;
@@ -162,10 +130,8 @@ export class FeatureFlagBehavior {
162
130
  };
163
131
  logger;
164
132
  defaults;
165
- constructor(client, defaults, moduleContext, logger, moduleTargetingKeyFactory) {
133
+ constructor(client, defaults, logger) {
166
134
  this.client = client;
167
- this.moduleContext = moduleContext;
168
- this.moduleTargetingKeyFactory = moduleTargetingKeyFactory;
169
135
  if (typeof client?.getBooleanDetails !== 'function') {
170
136
  throw new TypeError('FeatureFlagBehavior requires an OpenFeature client, such as the one createFeatureFlagClient() resolves.');
171
137
  }
@@ -195,7 +161,7 @@ export class FeatureFlagBehavior {
195
161
  }
196
162
  /** Evaluates the flag for this request and builds the decision that gates it. */
197
163
  async decide(context, flag, options) {
198
- const evaluationContext = buildEvaluationContext(context, this.moduleContext, options.context, options.targetingKeyFactory ?? this.moduleTargetingKeyFactory);
164
+ const evaluationContext = buildEvaluationContext(context, options.baseContext, options.context, options.targetingKeyFactory);
199
165
  const { details, failure } = await this.evaluate(flag, options.defaultValue ?? false, evaluationContext);
200
166
  // A boolean true is necessary but, when allowedVariants is configured, not
201
167
  // sufficient: the provider must also resolve one of the selected variants.
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flag.behavior.js","sourceRoot":"","sources":["../src/feature-flag.behavior.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature-flag.behavior.js","sourceRoot":"","sources":["../src/feature-flag.behavior.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import type { EvaluationContextFactory, TargetingKeyFactory } from '../interface
8
8
  export declare function baseEvaluationContext(context: IPipelineContext): EvaluationContext;
9
9
  /**
10
10
  * Builds an evaluation context in this order:
11
- * base pipeline attributes → module context → handler context → targeting-key factory.
11
+ * base pipeline attributes → `baseContext` → `context` → targeting-key factory.
12
12
  *
13
13
  * A targeting key already provided by module/handler context is preserved when
14
14
  * the factory returns `undefined`. A non-empty factory result wins when present.
@@ -14,7 +14,7 @@ export function baseEvaluationContext(context) {
14
14
  }
15
15
  /**
16
16
  * Builds an evaluation context in this order:
17
- * base pipeline attributes → module context → handler context → targeting-key factory.
17
+ * base pipeline attributes → `baseContext` → `context` → targeting-key factory.
18
18
  *
19
19
  * A targeting key already provided by module/handler context is preserved when
20
20
  * the factory returns `undefined`. A non-empty factory result wins when present.
package/dist/http.d.ts CHANGED
@@ -1,10 +1,6 @@
1
+ import type { HttpResponse } from '@cqrs-ddd/pipeline';
1
2
  import type { FeatureDisabledError } from './errors/feature-disabled.error.js';
2
- /** An HTTP answer for an error: status, JSON body and headers. */
3
- export interface HttpResponse {
4
- status: number;
5
- body: Record<string, unknown>;
6
- headers: Record<string, string>;
7
- }
3
+ export type { HttpResponse };
8
4
  /**
9
5
  * The HTTP answer for a {@link FeatureDisabledError}: `403 Forbidden` naming the flag, or
10
6
  * with `hideFeature` a plain `404 Not Found` that does not reveal the feature exists.
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,oBAAoB,EAC3B,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,YAAY,CAkBd"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,oBAAoB,EAC3B,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,YAAY,CAkBd"}
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAWtE;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,KAA2B,EAC3B,OAAO,GAA8B,EAAE;IAEvC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO;YACL,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;YACnE,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,GAAG;QACX,IAAI,EAAE;YACJ,UAAU,EAAE,GAAG;YACf,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB;QACD,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAOtE;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,KAA2B,EAC3B,OAAO,GAA8B,EAAE;IAEvC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO;YACL,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;YACnE,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,GAAG;QACX,IAAI,EAAE;YACJ,UAAU,EAAE,GAAG;YACf,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB;QACD,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  */
6
6
  export { FeatureDisabledError } from './errors/feature-disabled.error.js';
7
7
  export { FeatureFlagEvaluationError } from './errors/feature-flag-evaluation.error.js';
8
- export { FEATURE_FLAG_DECISION_ITEM, FEATURE_FLAG_DECISION_ITEM_TOKEN, FEATURE_FLAG_ITEM, FEATURE_FLAG_ITEM_TOKEN, FEATURE_FLAG_KEY_ITEM, FEATURE_FLAG_KEY_ITEM_TOKEN, FeatureFlagBehavior, } from './feature-flag.behavior.js';
8
+ export { FEATURE_FLAG_DECISION_ITEM_TOKEN, FEATURE_FLAG_ITEM_TOKEN, FEATURE_FLAG_KEY_ITEM_TOKEN, FeatureFlagBehavior, } from './feature-flag.behavior.js';
9
9
  export { buildFeatureFlagAttributes } from './helpers/build-attributes.js';
10
10
  export { baseEvaluationContext, buildEvaluationContext, } from './helpers/evaluation-context.js';
11
11
  export { type FeatureFlagIntentOptions, featureFlag, } from './helpers/feature-flag.intent.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,KAAK,wBAAwB,EAC7B,WAAW,GACZ,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iDAAiD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EACL,gCAAgC,EAChC,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,KAAK,wBAAwB,EAC7B,WAAW,GACZ,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iDAAiD,CAAC"}
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@
6
6
  */
7
7
  export { FeatureDisabledError } from './errors/feature-disabled.error.js';
8
8
  export { FeatureFlagEvaluationError } from './errors/feature-flag-evaluation.error.js';
9
- export { FEATURE_FLAG_DECISION_ITEM, FEATURE_FLAG_DECISION_ITEM_TOKEN, FEATURE_FLAG_ITEM, FEATURE_FLAG_ITEM_TOKEN, FEATURE_FLAG_KEY_ITEM, FEATURE_FLAG_KEY_ITEM_TOKEN, FeatureFlagBehavior, } from './feature-flag.behavior.js';
9
+ export { FEATURE_FLAG_DECISION_ITEM_TOKEN, FEATURE_FLAG_ITEM_TOKEN, FEATURE_FLAG_KEY_ITEM_TOKEN, FeatureFlagBehavior, } from './feature-flag.behavior.js';
10
10
  export { buildFeatureFlagAttributes } from './helpers/build-attributes.js';
11
11
  export { baseEvaluationContext, buildEvaluationContext, } from './helpers/evaluation-context.js';
12
12
  export { featureFlag, } from './helpers/feature-flag.intent.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,WAAW,GACZ,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EACL,gCAAgC,EAChC,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEL,WAAW,GACZ,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kCAAkC,CAAC"}
@@ -81,10 +81,20 @@ export interface FeatureFlagBehaviorOptions {
81
81
  * ```
82
82
  */
83
83
  context?: EvaluationContextFactory;
84
+ /**
85
+ * Fixed attributes of every evaluation, such as the environment. The result of
86
+ * `context` is merged over them. Set it in the constructor defaults.
87
+ *
88
+ * @example
89
+ * ```ts
90
+ * new FeatureFlagBehavior(client, { baseContext: { environment: 'production' } });
91
+ * ```
92
+ */
93
+ baseContext?: EvaluationContext;
84
94
  /**
85
95
  * Stable identity used for percentage rollouts / sticky targeting.
86
96
  *
87
- * Handler-level `targetingKeyFactory` overrides the constructor's resolver.
97
+ * A handler-level `targetingKeyFactory` overrides the one of the constructor defaults.
88
98
  * Correlation IDs are intentionally **not** used automatically because they
89
99
  * normally change on every request and can move the same user between rollout
90
100
  * cohorts.
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flags-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/feature-flags-options.interface.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EACV,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACT,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,gBAAgB,KACtB,iBAAiB,CAAC;AAEvB;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAChC,OAAO,EAAE,gBAAgB,KACtB,MAAM,GAAG,SAAS,CAAC;AAExB;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,OAAO,EAAE,gBAAgB,KACtB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,yEAAyE;AACzE,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG,OAAO,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,KAAK,EAAE,OAAO,CAAC;IACf,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAElC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,wBAAwB,CAAC;IAEnC;;;;;;;;;;;;;;;;OAgBG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAE1C;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED,+EAA+E;AAC/E,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
1
+ {"version":3,"file":"feature-flags-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/feature-flags-options.interface.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EACV,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACT,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,gBAAgB,KACtB,iBAAiB,CAAC;AAEvB;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAChC,OAAO,EAAE,gBAAgB,KACtB,MAAM,GAAG,SAAS,CAAC;AAExB;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,OAAO,EAAE,gBAAgB,KACtB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,yEAAyE;AACzE,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG,OAAO,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,KAAK,EAAE,OAAO,CAAC;IACf,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAElC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,wBAAwB,CAAC;IAEnC;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAEhC;;;;;;;;;;;;;;;;OAgBG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAE1C;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED,+EAA+E;AAC/E,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cqrs-ddd/pipeline-feature-flags",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "description": "Feature flags for @cqrs-ddd/pipeline through OpenFeature: an operation runs only while its flag is on",
5
5
  "author": "Aristotelis",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -49,11 +49,11 @@
49
49
  "access": "public"
50
50
  },
51
51
  "peerDependencies": {
52
- "@cqrs-ddd/pipeline": "^0.5.2",
52
+ "@cqrs-ddd/pipeline": "^0.6.0",
53
53
  "@openfeature/server-sdk": "^1.13.0"
54
54
  },
55
55
  "devDependencies": {
56
- "@cqrs-ddd/pipeline": "0.5.2",
56
+ "@cqrs-ddd/pipeline": "0.6.0",
57
57
  "@openfeature/server-sdk": "^1.23.0",
58
58
  "@vitest/coverage-v8": "^5.0.5",
59
59
  "vitest": "^5.0.5"