@traffical/openfeature-web 0.2.1 → 0.2.2
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.
- package/dist/provider.d.ts +25 -7
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +36 -9
- package/dist/provider.js.map +1 -1
- package/package.json +1 -1
package/dist/provider.d.ts
CHANGED
|
@@ -13,11 +13,12 @@
|
|
|
13
13
|
* - `onContextChange` re-binds the context and clears the per-context decision
|
|
14
14
|
* memo, then RETURNS — the web SDK (not the provider) emits the reconcile
|
|
15
15
|
* lifecycle events (§9, finding V2).
|
|
16
|
-
* - `track(name, details)`
|
|
16
|
+
* - `track(name, context, details)` — the app calls `client.track(name, details)`
|
|
17
|
+
* and the SDK injects the bound context before calling the provider.
|
|
17
18
|
* - `flagMetadata` gates BOTH `traffical.propensity` AND `traffical.modelVersion`
|
|
18
19
|
* out — browser devtools must not leak bandit selection internals (§3.5).
|
|
19
20
|
*/
|
|
20
|
-
import { OpenFeatureEventEmitter, type EvaluationContext, type JsonValue, type Logger, type Paradigm, type Provider, type ProviderMetadata, type ResolutionDetails, type
|
|
21
|
+
import { OpenFeatureEventEmitter, type EvaluationContext, type JsonValue, type Logger, type Paradigm, type Provider, type ProviderMetadata, type ResolutionDetails, type TrackingEventDetails } from "@openfeature/web-sdk";
|
|
21
22
|
import { type TrafficalClientLike, type TrafficalProviderOptions } from "@traffical/openfeature-core";
|
|
22
23
|
/**
|
|
23
24
|
* The optional lifecycle surface a browser client may expose on top of the
|
|
@@ -44,7 +45,7 @@ export interface TrafficalWebClient extends TrafficalClientLike {
|
|
|
44
45
|
onConfigUpdate?: (bundle: unknown) => void;
|
|
45
46
|
}): unknown;
|
|
46
47
|
}
|
|
47
|
-
export declare class TrafficalWebProvider implements Provider
|
|
48
|
+
export declare class TrafficalWebProvider implements Provider {
|
|
48
49
|
readonly metadata: ProviderMetadata;
|
|
49
50
|
/** The web SDK enforces this paradigm at runtime (prevents server/web mixups). */
|
|
50
51
|
readonly runsOn: Paradigm;
|
|
@@ -91,7 +92,23 @@ export declare class TrafficalWebProvider implements Provider, Tracking {
|
|
|
91
92
|
* `reason: ERROR` (§4.4). We do NOT blanket-catch to `GENERAL`.
|
|
92
93
|
*/
|
|
93
94
|
private resolve;
|
|
94
|
-
|
|
95
|
+
/**
|
|
96
|
+
* PROVIDER-side tracking contract: `track(name, context, details)`.
|
|
97
|
+
*
|
|
98
|
+
* Note the arity. The APPLICATION calls `client.track(name, details)` — the
|
|
99
|
+
* web `Tracking` interface takes no context, because identity is the bound
|
|
100
|
+
* static context. The SDK then injects that (frozen) context and calls the
|
|
101
|
+
* PROVIDER with three arguments (`CommonProvider.track` in
|
|
102
|
+
* `@openfeature/core`). A provider that declares only `(name, details)`
|
|
103
|
+
* receives the CONTEXT as its details and silently loses every `flagKey` and
|
|
104
|
+
* reward `value`.
|
|
105
|
+
*
|
|
106
|
+
* TypeScript cannot catch this — a function with fewer parameters is
|
|
107
|
+
* assignable to one with more — so the arity is pinned by a test that drives
|
|
108
|
+
* a real `OpenFeature.getClient().track(...)` through this provider. Do not
|
|
109
|
+
* replace that test with a direct `provider.track(...)` call.
|
|
110
|
+
*/
|
|
111
|
+
track(trackingEventName: string, context: EvaluationContext, details?: TrackingEventDetails): void;
|
|
95
112
|
/**
|
|
96
113
|
* Exposure route: stitch to the memoized decision and call `trackExposure`.
|
|
97
114
|
* NEVER re-decide. A miss (no memoized decision for `flagKey`) warns once and
|
|
@@ -99,9 +116,10 @@ export declare class TrafficalWebProvider implements Provider, Tracking {
|
|
|
99
116
|
*/
|
|
100
117
|
private routeExposure;
|
|
101
118
|
/**
|
|
102
|
-
* Reward route: identity comes from the
|
|
103
|
-
*
|
|
104
|
-
*
|
|
119
|
+
* Reward route: identity comes from the targeting key the SDK handed us (the
|
|
120
|
+
* frozen bound context at track time), falling back to our own copy of the
|
|
121
|
+
* bound context and then to the client's anonymous stableId. `value` is
|
|
122
|
+
* lifted out of `details`; the rest ride as properties.
|
|
105
123
|
*/
|
|
106
124
|
private routeReward;
|
|
107
125
|
private maybeFireNoExposureAlarm;
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/provider.js
CHANGED
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
* - `onContextChange` re-binds the context and clears the per-context decision
|
|
14
14
|
* memo, then RETURNS — the web SDK (not the provider) emits the reconcile
|
|
15
15
|
* lifecycle events (§9, finding V2).
|
|
16
|
-
* - `track(name, details)`
|
|
16
|
+
* - `track(name, context, details)` — the app calls `client.track(name, details)`
|
|
17
|
+
* and the SDK injects the bound context before calling the provider.
|
|
17
18
|
* - `flagMetadata` gates BOTH `traffical.propensity` AND `traffical.modelVersion`
|
|
18
19
|
* out — browser devtools must not leak bandit selection internals (§3.5).
|
|
19
20
|
*/
|
|
@@ -35,6 +36,10 @@ const NO_EXPOSURE_ALARM_THRESHOLD = 10;
|
|
|
35
36
|
function isInertDecision(decision) {
|
|
36
37
|
return decision.metadata.unitKeyValue === "" || decision.metadata.layers.length === 0;
|
|
37
38
|
}
|
|
39
|
+
// Implements `Provider` only: its `CommonProvider.track?(name, context, details)`
|
|
40
|
+
// is the provider-side contract. The `Tracking` interface exported by the web
|
|
41
|
+
// SDK is the CLIENT-side one (`track(name, details)`) — a provider must not
|
|
42
|
+
// claim to implement it, or it ends up with the wrong arity.
|
|
38
43
|
export class TrafficalWebProvider {
|
|
39
44
|
metadata = { name: PROVIDER_NAME };
|
|
40
45
|
/** The web SDK enforces this paradigm at runtime (prevents server/web mixups). */
|
|
@@ -202,15 +207,31 @@ export class TrafficalWebProvider {
|
|
|
202
207
|
return details;
|
|
203
208
|
}
|
|
204
209
|
// ===========================================================================
|
|
205
|
-
// Tracking
|
|
210
|
+
// Tracking
|
|
206
211
|
// ===========================================================================
|
|
207
|
-
|
|
212
|
+
/**
|
|
213
|
+
* PROVIDER-side tracking contract: `track(name, context, details)`.
|
|
214
|
+
*
|
|
215
|
+
* Note the arity. The APPLICATION calls `client.track(name, details)` — the
|
|
216
|
+
* web `Tracking` interface takes no context, because identity is the bound
|
|
217
|
+
* static context. The SDK then injects that (frozen) context and calls the
|
|
218
|
+
* PROVIDER with three arguments (`CommonProvider.track` in
|
|
219
|
+
* `@openfeature/core`). A provider that declares only `(name, details)`
|
|
220
|
+
* receives the CONTEXT as its details and silently loses every `flagKey` and
|
|
221
|
+
* reward `value`.
|
|
222
|
+
*
|
|
223
|
+
* TypeScript cannot catch this — a function with fewer parameters is
|
|
224
|
+
* assignable to one with more — so the arity is pinned by a test that drives
|
|
225
|
+
* a real `OpenFeature.getClient().track(...)` through this provider. Do not
|
|
226
|
+
* replace that test with a direct `provider.track(...)` call.
|
|
227
|
+
*/
|
|
228
|
+
track(trackingEventName, context, details) {
|
|
208
229
|
const exposureEventName = this.options.exposureEventName ?? EXPOSURE_EVENT_NAME;
|
|
209
230
|
if (trackingEventName === exposureEventName) {
|
|
210
231
|
this.routeExposure(details);
|
|
211
232
|
return;
|
|
212
233
|
}
|
|
213
|
-
this.routeReward(trackingEventName, details);
|
|
234
|
+
this.routeReward(trackingEventName, context, details);
|
|
214
235
|
}
|
|
215
236
|
/**
|
|
216
237
|
* Exposure route: stitch to the memoized decision and call `trackExposure`.
|
|
@@ -233,13 +254,19 @@ export class TrafficalWebProvider {
|
|
|
233
254
|
this.client.trackExposure(decision);
|
|
234
255
|
}
|
|
235
256
|
/**
|
|
236
|
-
* Reward route: identity comes from the
|
|
237
|
-
*
|
|
238
|
-
*
|
|
257
|
+
* Reward route: identity comes from the targeting key the SDK handed us (the
|
|
258
|
+
* frozen bound context at track time), falling back to our own copy of the
|
|
259
|
+
* bound context and then to the client's anonymous stableId. `value` is
|
|
260
|
+
* lifted out of `details`; the rest ride as properties.
|
|
239
261
|
*/
|
|
240
|
-
routeReward(eventName, details) {
|
|
262
|
+
routeReward(eventName, context, details) {
|
|
263
|
+
const trackedKey = context?.targetingKey;
|
|
241
264
|
const boundKey = this.boundContext.targetingKey;
|
|
242
|
-
const unitKey = typeof
|
|
265
|
+
const unitKey = typeof trackedKey === "string" && trackedKey !== ""
|
|
266
|
+
? trackedKey
|
|
267
|
+
: typeof boundKey === "string" && boundKey !== ""
|
|
268
|
+
? boundKey
|
|
269
|
+
: this.client.getStableId?.();
|
|
243
270
|
const value = details && typeof details.value === "number" ? details.value : undefined;
|
|
244
271
|
const rest = {};
|
|
245
272
|
if (details) {
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|