@traffical/node 0.10.1 → 0.12.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.
@@ -8,6 +8,9 @@
8
8
  import { describe, test, expect, afterEach, mock } from "bun:test";
9
9
  import { TrafficalClient } from "./client.js";
10
10
  const originalFetch = globalThis.fetch;
11
+ // Mirrors what the edge actually returns: `/v1/resolve` passes
12
+ // `decision.metadata` straight through from the core resolver, so the layer
13
+ // rows carry `policyKey`/`allocationKey` alongside the opaque ids.
11
14
  const serverResolveResponse = {
12
15
  decisionId: "dec_server_1",
13
16
  assignments: { "ui.color": "#F00" },
@@ -19,14 +22,48 @@ const serverResolveResponse = {
19
22
  layerId: "layer_1",
20
23
  bucket: 500,
21
24
  policyId: "pol_1",
25
+ policyKey: "color-test",
22
26
  allocationId: "alloc_1",
23
27
  allocationName: "treatment",
28
+ allocationKey: "treatment-key",
24
29
  },
25
30
  ],
26
31
  },
27
32
  stateVersion: "2024-01-01T00:00:00Z",
28
33
  suggestedRefreshMs: 30000,
29
34
  };
35
+ /** Bundle whose policy/allocation keys differ from their ids and names. */
36
+ const bundleWithDistinctKeys = {
37
+ version: "2024-01-01T00:00:00.000Z",
38
+ orgId: "org_test",
39
+ projectId: "proj_test",
40
+ env: "production",
41
+ hashing: { unitKey: "userId", bucketCount: 1000 },
42
+ parameters: [{ key: "ui.color", type: "string", default: "#000", layerId: "layer_ui" }],
43
+ layers: [
44
+ {
45
+ id: "layer_ui",
46
+ policies: [
47
+ {
48
+ id: "policy_01",
49
+ key: "color-test",
50
+ state: "running",
51
+ kind: "static",
52
+ conditions: [],
53
+ allocations: [
54
+ {
55
+ id: "alloc_01",
56
+ key: "treatment-key",
57
+ name: "treatment",
58
+ bucketRange: [0, 999],
59
+ overrides: { "ui.color": "#F00" },
60
+ },
61
+ ],
62
+ },
63
+ ],
64
+ },
65
+ ],
66
+ };
30
67
  function setupFetchMock() {
31
68
  const fetchMock = mock(async () => {
32
69
  return {
@@ -68,6 +105,9 @@ describe("Node TrafficalClient assignmentLogger", () => {
68
105
  expect(entry.type).toBe("decision");
69
106
  expect(entry.policyId).toBe("pol_1");
70
107
  expect(entry.allocationName).toBe("treatment");
108
+ // Stable keys — what warehouse assignment definitions join on.
109
+ expect(entry.policyKey).toBe("color-test");
110
+ expect(entry.allocationKey).toBe("treatment-key");
71
111
  // Server mode now mints a FRESH decisionId per decide() (spec 0.7.0 S8) —
72
112
  // it no longer reuses the resolve response's decisionId across decisions.
73
113
  expect(entry.decisionId).toMatch(/^dec_/);
@@ -100,6 +140,27 @@ describe("Node TrafficalClient assignmentLogger", () => {
100
140
  expect(entries[0]?.id).not.toBe(entries[1]?.id);
101
141
  await client.destroy();
102
142
  });
143
+ test("bundle mode: entries carry the stable policy/allocation keys, not just ids", () => {
144
+ const entries = [];
145
+ const client = new TrafficalClient({
146
+ ...clientOpts,
147
+ evaluationMode: "bundle",
148
+ localConfig: bundleWithDistinctKeys,
149
+ assignmentLogger: (entry) => entries.push(entry),
150
+ });
151
+ const decision = client.decide({ userId: "user-1" }, { "ui.color": "#000" });
152
+ client.trackExposure(decision);
153
+ expect(entries).toHaveLength(2);
154
+ for (const entry of entries) {
155
+ // The ids are opaque; the keys are the warehouse join contract. Assert
156
+ // they are distinct values so a fallback to `policyId` can't pass.
157
+ expect(entry.policyId).toBe("policy_01");
158
+ expect(entry.policyKey).toBe("color-test");
159
+ expect(entry.allocationId).toBe("alloc_01");
160
+ expect(entry.allocationName).toBe("treatment");
161
+ expect(entry.allocationKey).toBe("treatment-key");
162
+ }
163
+ });
103
164
  test("repeated decide() calls for the same unit are deduplicated", async () => {
104
165
  setupFetchMock();
105
166
  const entries = [];
@@ -1 +1 @@
1
- {"version":3,"file":"assignment-logger.test.js","sourceRoot":"","sources":["../src/assignment-logger.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assignment-logger.test.js","sourceRoot":"","sources":["../src/assignment-logger.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;AAEvC,+DAA+D;AAC/D,4EAA4E;AAC5E,mEAAmE;AACnE,MAAM,qBAAqB,GAAG;IAC5B,UAAU,EAAE,cAAc;IAC1B,WAAW,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;IACnC,QAAQ,EAAE;QACR,SAAS,EAAE,sBAAsB;QACjC,YAAY,EAAE,QAAQ;QACtB,MAAM,EAAE;YACN;gBACE,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,GAAG;gBACX,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,YAAY;gBACvB,YAAY,EAAE,SAAS;gBACvB,cAAc,EAAE,WAAW;gBAC3B,aAAa,EAAE,eAAe;aAC/B;SACF;KACF;IACD,YAAY,EAAE,sBAAsB;IACpC,kBAAkB,EAAE,KAAK;CAC1B,CAAC;AAEF,2EAA2E;AAC3E,MAAM,sBAAsB,GAAG;IAC7B,OAAO,EAAE,0BAA0B;IACnC,KAAK,EAAE,UAAU;IACjB,SAAS,EAAE,WAAW;IACtB,GAAG,EAAE,YAAY;IACjB,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE;IACjD,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACvF,MAAM,EAAE;QACN;YACE,EAAE,EAAE,UAAU;YACd,QAAQ,EAAE;gBACR;oBACE,EAAE,EAAE,WAAW;oBACf,GAAG,EAAE,YAAY;oBACjB,KAAK,EAAE,SAAS;oBAChB,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;oBACd,WAAW,EAAE;wBACX;4BACE,EAAE,EAAE,UAAU;4BACd,GAAG,EAAE,eAAe;4BACpB,IAAI,EAAE,WAAW;4BACjB,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;4BACrB,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;yBAClC;qBACF;iBACF;aACF;SACF;KACF;CACyB,CAAC;AAE7B,SAAS,cAAc;IACrB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;QAChC,OAAO;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,qBAAqB;YACvC,OAAO,EAAE,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SAChB,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,UAAU,CAAC,KAAK,GAAG,SAAoC,CAAC;IACxD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,UAAU;IACjB,SAAS,EAAE,WAAW;IACtB,GAAG,EAAE,YAAY;IACjB,MAAM,EAAE,mBAAmB;IAC3B,iBAAiB,EAAE,CAAC,CAAC;IACrB,cAAc,EAAE,KAAK;IACrB,cAAc,EAAE,QAAiB;IACjC,kBAAkB,EAAE,IAAI;CACzB,CAAC;AAEF,SAAS,CAAC,GAAG,EAAE;IACb,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,IAAI,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACzF,cAAc,EAAE,CAAC;QACjB,MAAM,OAAO,GAAyB,EAAE,CAAC;QAEzC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,GAAG,UAAU;YACb,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;SACjD,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAE1B,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAEnF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,+DAA+D;QAC/D,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAClD,0EAA0E;QAC1E,0EAA0E;QAC1E,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClC,iEAAiE;QACjE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACrE,yEAAyE;QACzE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,CAAC;QAE3C,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC/F,cAAc,EAAE,CAAC;QACjB,MAAM,OAAO,GAAyB,EAAE,CAAC;QAEzC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,GAAG,UAAU;YACb,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;SACjD,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAE1B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;YAC7B,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;SACjC,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE/B,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QAC5E,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACtF,MAAM,OAAO,GAAyB,EAAE,CAAC;QAEzC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,GAAG,UAAU;YACb,cAAc,EAAE,QAAQ;YACxB,WAAW,EAAE,sBAAsB;YACnC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;SACjD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7E,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE/B,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,uEAAuE;YACvE,mEAAmE;YACnE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/C,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC5E,cAAc,EAAE,CAAC;QACjB,MAAM,OAAO,GAAyB,EAAE,CAAC;QAEzC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,GAAG,UAAU;YACb,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;SACjD,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAE1B,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACnF,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAEnF,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1C,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/client.d.ts CHANGED
@@ -11,7 +11,7 @@
11
11
  * - Batched event transport for efficiency
12
12
  * - Graceful degradation with local config and schema defaults
13
13
  */
14
- import { type Context, type DecisionResult, type ParameterValue, type TrafficalClientOptions as CoreClientOptions, type TrackOptions, type TrackEventOptions, type DecideOptions, type GetParamsOptions, type AssignmentLogger, type TrackableEventLogger, type TrackEventMap, type OnSchemaWarnings } from "@traffical/core";
14
+ import { type Context, type DecisionResult, type ParameterValue, type TrafficalClientOptions as CoreClientOptions, type TrackOptions, type TrackEventOptions, type DecideOptions, type GetParamsOptions, type AssignmentLogger, type TrackableEventLogger, type TrackEventMap, type OnSchemaWarnings, type SdkDiagnostics } from "@traffical/core";
15
15
  /**
16
16
  * Options for the Node.js Traffical client.
17
17
  * Extends the core options with Node-specific settings.
@@ -137,6 +137,7 @@ export interface TrafficalClientOptions extends CoreClientOptions {
137
137
  export declare class TrafficalClient<TEvents extends TrackEventMap = TrackEventMap> {
138
138
  private readonly _options;
139
139
  private _state;
140
+ private readonly _errorPolicy;
140
141
  private readonly _eventBatcher;
141
142
  private readonly _requestTimeoutMs;
142
143
  private readonly _decisionDedup;
@@ -158,6 +159,22 @@ export declare class TrafficalClient<TEvents extends TrackEventMap = TrackEventM
158
159
  private _readyResolve;
159
160
  private readonly _readyPromise;
160
161
  constructor(options: TrafficalClientOptions);
162
+ /**
163
+ * Counters for degradation that is otherwise invisible: contained resolution
164
+ * errors, dropped assignment/event log rows, rejected bundles, and the most
165
+ * recent contained error.
166
+ *
167
+ * Monotonic for the life of the client. Poll it, or pass `onError` for a
168
+ * push-based bridge into your own telemetry.
169
+ */
170
+ getDiagnostics(): SdkDiagnostics;
171
+ /**
172
+ * The result a contained resolution failure returns: the caller's defaults,
173
+ * with `metadata.reason` saying why. Shaped like a real DecisionResult so
174
+ * callers never have to null-check, and carrying a real decisionId so an
175
+ * event built from it is still traceable.
176
+ */
177
+ private _degradedDecision;
161
178
  /**
162
179
  * Initializes the client by fetching the config bundle.
163
180
  * This is called automatically by createTrafficalClient.
@@ -221,6 +238,7 @@ export declare class TrafficalClient<TEvents extends TrackEventMap = TrackEventM
221
238
  getParams<T extends Record<string, ParameterValue>>(context: Context, defaults: T): T;
222
239
  /** @deprecated Pass `(context, defaults)` positionally (spec 0.7.0 contract). */
223
240
  getParams<T extends Record<string, ParameterValue>>(options: GetParamsOptions<T>): T;
241
+ private _getParamsImpl;
224
242
  /**
225
243
  * Makes a decision with full metadata for tracking.
226
244
  *
@@ -230,6 +248,7 @@ export declare class TrafficalClient<TEvents extends TrackEventMap = TrackEventM
230
248
  decide<T extends Record<string, ParameterValue>>(context: Context, defaults: T): DecisionResult;
231
249
  /** @deprecated Pass `(context, defaults)` positionally (spec 0.7.0 contract). */
232
250
  decide<T extends Record<string, ParameterValue>>(options: DecideOptions<T>): DecisionResult;
251
+ private _decideImpl;
233
252
  /**
234
253
  * Tracks an exposure event — the "user was actually shown this treatment"
235
254
  * signal (treatment-on-the-treated).
@@ -243,6 +262,7 @@ export declare class TrafficalClient<TEvents extends TrackEventMap = TrackEventM
243
262
  * exposure event for contextual bandit training.
244
263
  */
245
264
  trackExposure(decision: DecisionResult): void;
265
+ private _trackExposureImpl;
246
266
  /**
247
267
  * Tracks a user event.
248
268
  *
@@ -257,6 +277,7 @@ export declare class TrafficalClient<TEvents extends TrackEventMap = TrackEventM
257
277
  * client.track('checkout_complete', { value: 1 }, { decisionId: 'dec_xyz' });
258
278
  */
259
279
  track<E extends Extract<keyof TEvents, string>>(event: E, properties?: TEvents[E], options?: TrackEventOptions): void;
280
+ private _trackImpl;
260
281
  /**
261
282
  * @deprecated Use track() instead.
262
283
  * Tracks a reward event.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -11,7 +11,7 @@
11
11
  * - Batched event transport for efficiency
12
12
  * - Graceful degradation with local config and schema defaults
13
13
  */
14
- import { resolveParameters, decide as coreDecide, getUnitKeyField as coreGetUnitKeyField, getParameterLayerId as coreGetParameterLayerId, DecisionDeduplicator, generateExposureId, generateTrackEventId, generateAssignmentId, generateDecisionId, } from "@traffical/core";
14
+ import { ErrorPolicy, validateConfigBundle, resolveParameters, decide as coreDecide, getUnitKeyField as coreGetUnitKeyField, getParameterLayerId as coreGetParameterLayerId, DecisionDeduplicator, generateExposureId, generateTrackEventId, generateAssignmentId, generateDecisionId, } from "@traffical/core";
15
15
  import { DecisionClient } from "@traffical/core-io";
16
16
  import { EventBatcher } from "./event-batcher.js";
17
17
  import { SDK_VERSION } from "./version.js";
@@ -49,33 +49,6 @@ function jitteredInterval(intervalMs) {
49
49
  const delta = intervalMs * REFRESH_JITTER_RATIO;
50
50
  return intervalMs + (Math.random() * 2 - 1) * delta;
51
51
  }
52
- /**
53
- * Structural guard for a fetched config bundle. A 200 response can still carry a
54
- * malformed body (truncated CDN write, partial deploy); serving it would corrupt
55
- * every bucket assignment. Requires the hashing config the resolver depends on
56
- * (`unitKey` non-empty, `bucketCount` an integer >= 1) plus the top-level
57
- * parameters/layers arrays.
58
- */
59
- function isValidConfigBundle(bundle) {
60
- if (!bundle || typeof bundle !== "object")
61
- return false;
62
- const b = bundle;
63
- if (!Array.isArray(b.parameters))
64
- return false;
65
- if (!Array.isArray(b.layers))
66
- return false;
67
- const hashing = b.hashing;
68
- if (!hashing || typeof hashing !== "object")
69
- return false;
70
- if (typeof hashing.unitKey !== "string" || hashing.unitKey.length === 0)
71
- return false;
72
- if (typeof hashing.bucketCount !== "number" ||
73
- !Number.isInteger(hashing.bucketCount) ||
74
- hashing.bucketCount < 1) {
75
- return false;
76
- }
77
- return true;
78
- }
79
52
  // =============================================================================
80
53
  // Traffical Client Class
81
54
  // =============================================================================
@@ -102,6 +75,7 @@ export class TrafficalClient {
102
75
  isInitialized: false,
103
76
  serverResponse: null,
104
77
  };
78
+ _errorPolicy;
105
79
  _eventBatcher;
106
80
  _requestTimeoutMs;
107
81
  _decisionDedup;
@@ -133,10 +107,15 @@ export class TrafficalClient {
133
107
  baseUrl: options.baseUrl || DEFAULT_BASE_URL,
134
108
  localConfig: options.localConfig,
135
109
  refreshIntervalMs: options.refreshIntervalMs ?? DEFAULT_REFRESH_INTERVAL_MS,
136
- strictMode: options.strictMode ?? false,
137
110
  trackDecisions: options.trackDecisions !== false,
138
111
  evaluationMode: options.evaluationMode ?? "bundle",
139
112
  };
113
+ // Tiered error containment. Constructed first so every path below can
114
+ // route through it. Tier 1 (side effects) ignores onResolutionError.
115
+ this._errorPolicy = new ErrorPolicy({
116
+ onResolutionError: options.onResolutionError,
117
+ onError: options.onError,
118
+ });
140
119
  // Config-fetch timeout: canonical configTimeoutMs wins, else legacy requestTimeoutMs.
141
120
  this._requestTimeoutMs =
142
121
  options.configTimeoutMs ?? options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
@@ -188,11 +167,54 @@ export class TrafficalClient {
188
167
  : null;
189
168
  this._exposureDedup = options.deduplicateExposures !== false ? new Map() : null;
190
169
  this._exposureSessionTtlMs = options.exposureSessionTtlMs ?? DEFAULT_EXPOSURE_SESSION_TTL_MS;
191
- // Initialize with local config if provided
170
+ // Initialize with local config if provided.
171
+ //
172
+ // `localConfig` is validated on exactly the same terms as a fetched bundle.
173
+ // It used to be trusted implicitly, which had it backwards: the bundle
174
+ // arriving over TLS from our own edge was checked, and the one a customer
175
+ // hand-assembles, commits, and may hand-edit was not. A rejected local
176
+ // bundle is dropped whole — the client then serves caller defaults until a
177
+ // valid bundle arrives, rather than resolving against a broken one.
192
178
  if (this._options.localConfig) {
193
- this._state.bundle = this._options.localConfig;
179
+ const validation = validateConfigBundle(this._options.localConfig);
180
+ if (validation.ok) {
181
+ this._state.bundle = this._options.localConfig;
182
+ }
183
+ else {
184
+ this._errorPolicy.recordRejectedBundle("localConfig", validation.path, validation.reason);
185
+ this._options.localConfig = undefined;
186
+ }
194
187
  }
195
188
  }
189
+ /**
190
+ * Counters for degradation that is otherwise invisible: contained resolution
191
+ * errors, dropped assignment/event log rows, rejected bundles, and the most
192
+ * recent contained error.
193
+ *
194
+ * Monotonic for the life of the client. Poll it, or pass `onError` for a
195
+ * push-based bridge into your own telemetry.
196
+ */
197
+ getDiagnostics() {
198
+ return this._errorPolicy.getDiagnostics();
199
+ }
200
+ /**
201
+ * The result a contained resolution failure returns: the caller's defaults,
202
+ * with `metadata.reason` saying why. Shaped like a real DecisionResult so
203
+ * callers never have to null-check, and carrying a real decisionId so an
204
+ * event built from it is still traceable.
205
+ */
206
+ _degradedDecision(defaults, reason) {
207
+ return {
208
+ decisionId: generateDecisionId(),
209
+ assignments: { ...defaults },
210
+ metadata: {
211
+ timestamp: new Date().toISOString(),
212
+ unitKeyValue: "",
213
+ layers: [],
214
+ reason,
215
+ },
216
+ };
217
+ }
196
218
  /**
197
219
  * Initializes the client by fetching the config bundle.
198
220
  * This is called automatically by createTrafficalClient.
@@ -288,6 +310,9 @@ export class TrafficalClient {
288
310
  }
289
311
  getParams(contextOrOptions, maybeDefaults) {
290
312
  const { context, defaults } = normalizeEvalArgs(contextOrOptions, maybeDefaults);
313
+ return this._errorPolicy.resolve("getParams", () => this._getParamsImpl(context, defaults), () => ({ ...defaults }));
314
+ }
315
+ _getParamsImpl(context, defaults) {
291
316
  // Server mode: return from cached server response
292
317
  if (this._options.evaluationMode === "server" && this._state.serverResponse) {
293
318
  // Thread THIS call's context into a per-call resolve so the cached
@@ -307,8 +332,11 @@ export class TrafficalClient {
307
332
  return resolveParameters(bundle, context, defaults);
308
333
  }
309
334
  decide(contextOrOptions, maybeDefaults) {
310
- const start = Date.now();
311
335
  const { context, defaults } = normalizeEvalArgs(contextOrOptions, maybeDefaults);
336
+ return this._errorPolicy.resolve("decide", () => this._decideImpl(context, defaults), () => this._degradedDecision(defaults, "error"));
337
+ }
338
+ _decideImpl(context, defaults) {
339
+ const start = Date.now();
312
340
  // Server mode: return from cached server response
313
341
  if (this._options.evaluationMode === "server" && this._state.serverResponse) {
314
342
  // Thread THIS call's context into a per-call resolve so the snapshot
@@ -331,7 +359,11 @@ export class TrafficalClient {
331
359
  // Snapshot the resolve stateVersion at decision time so events
332
360
  // built later stamp the version this decision was evaluated
333
361
  // against (not whatever response is cached at event-build time).
334
- metadata: { ...resp.metadata, configVersion: resp.stateVersion },
362
+ metadata: {
363
+ ...resp.metadata,
364
+ configVersion: resp.stateVersion,
365
+ reason: resp.metadata.layers?.some((l) => l.policyId) ? "resolved" : "default",
366
+ },
335
367
  };
336
368
  this._cacheDecision(decision);
337
369
  if (this._options.trackDecisions) {
@@ -343,6 +375,14 @@ export class TrafficalClient {
343
375
  const bundle = this._getEffectiveBundle();
344
376
  const decision = coreDecide(bundle, context, defaults);
345
377
  const latencyMs = Date.now() - start;
378
+ // Why these values: a matched policy, parameter/caller defaults, or no
379
+ // usable bundle at all. Visible in the return value so a caller can detect
380
+ // degradation without catching anything.
381
+ decision.metadata.reason = !bundle
382
+ ? "no-bundle"
383
+ : decision.metadata.layers.some((l) => l.policyId)
384
+ ? "resolved"
385
+ : "default";
346
386
  this._cacheDecision(decision);
347
387
  if (this._options.trackDecisions) {
348
388
  this._trackDecision(decision, latencyMs, Object.keys(defaults));
@@ -363,6 +403,9 @@ export class TrafficalClient {
363
403
  * exposure event for contextual bandit training.
364
404
  */
365
405
  trackExposure(decision) {
406
+ this._errorPolicy.resolve("trackExposure", () => this._trackExposureImpl(decision), () => undefined);
407
+ }
408
+ _trackExposureImpl(decision) {
366
409
  const unitKey = decision.metadata.unitKeyValue;
367
410
  if (!unitKey) {
368
411
  return;
@@ -433,6 +476,9 @@ export class TrafficalClient {
433
476
  * client.track('checkout_complete', { value: 1 }, { decisionId: 'dec_xyz' });
434
477
  */
435
478
  track(event, properties, options) {
479
+ this._errorPolicy.resolve("track", () => this._trackImpl(event, properties, options), () => undefined);
480
+ }
481
+ _trackImpl(event, properties, options) {
436
482
  // Single numeric value: explicit options.value wins, else properties.value.
437
483
  const value = typeof options?.value === "number"
438
484
  ? options.value
@@ -491,6 +537,9 @@ export class TrafficalClient {
491
537
  for (const layer of decision.metadata.layers) {
492
538
  if (!layer.policyId || !layer.allocationName)
493
539
  continue;
540
+ // Bind the narrowed values: the closure below loses the guard's narrowing.
541
+ const policyId = layer.policyId;
542
+ const allocationName = layer.allocationName;
494
543
  if (this._assignmentLoggerDedup) {
495
544
  const dedupKey = `${unitKey}:${layer.policyId}:${layer.allocationName}:${type}`;
496
545
  const expiry = this._assignmentLoggerDedup.get(dedupKey);
@@ -504,10 +553,20 @@ export class TrafficalClient {
504
553
  }
505
554
  this._assignmentLoggerDedup.set(dedupKey, now + ASSIGNMENT_LOGGER_LRU_TTL_MS);
506
555
  }
507
- this._assignmentLogger({
556
+ // Tier 1: the customer's sink must never change a caller's answer, in
557
+ // any mode. A bounded queue throws precisely when traffic spikes, so
558
+ // letting this fall through to defaults would put a load-correlated
559
+ // confound directly into the treatment assignment.
560
+ this._errorPolicy.sideEffect("assignmentLogger", "assignmentLog", () => this._assignmentLogger({
508
561
  unitKey,
509
- policyId: layer.policyId,
510
- allocationName: layer.allocationName,
562
+ policyId,
563
+ // Stable keys are what warehouse assignment definitions join on
564
+ // (`policy_key` / `allocation_key`); the `*_id` fields are opaque.
565
+ // Mirrors js-client/PHP/Python/iOS — omitting these silently yields
566
+ // zero-row metrics in a BYO-warehouse pipeline.
567
+ policyKey: layer.policyKey,
568
+ allocationName,
569
+ allocationKey: layer.allocationKey,
511
570
  timestamp: decision.metadata.timestamp,
512
571
  layerId: layer.layerId,
513
572
  allocationId: layer.allocationId,
@@ -525,7 +584,7 @@ export class TrafficalClient {
525
584
  probability: layer.probability,
526
585
  modelVersion: layer.modelVersion,
527
586
  configVersion,
528
- });
587
+ }));
529
588
  }
530
589
  }
531
590
  /**
@@ -570,10 +629,12 @@ export class TrafficalClient {
570
629
  }
571
630
  const bundle = (await response.json());
572
631
  const etag = response.headers.get("ETag");
573
- // A 200 can still carry a malformed body. Discard it and keep the
632
+ // A 200 can still carry a malformed body. Discard it whole and keep the
574
633
  // previous last-good bundle rather than corrupting bucket assignments or
575
634
  // falling through to defaults when we already have a valid config.
576
- if (!isValidConfigBundle(bundle)) {
635
+ const validation = validateConfigBundle(bundle);
636
+ if (!validation.ok) {
637
+ this._errorPolicy.recordRejectedBundle("fetchConfig", validation.path, validation.reason);
577
638
  this._logMalformedBundleWarning();
578
639
  return;
579
640
  }
@@ -675,12 +736,9 @@ export class TrafficalClient {
675
736
  */
676
737
  _dispatchEvent(event) {
677
738
  if (this._byoEventLogger) {
678
- try {
679
- this._byoEventLogger(event);
680
- }
681
- catch {
682
- // Swallow BYO logger errors — they must not break SDK event handling.
683
- }
739
+ // Tier 1, same contract as the assignment logger — now counted rather
740
+ // than silently swallowed.
741
+ this._errorPolicy.sideEffect("eventLogger", "eventLog", () => this._byoEventLogger(event));
684
742
  }
685
743
  if (!this._disableCloudEvents) {
686
744
  this._eventBatcher.log(event);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Error-posture contract for the Node SDK.
3
+ *
4
+ * Three tiers, and the rule that binds them: a lower tier must never change a
5
+ * higher tier's answer. See docs/design/sdk-error-posture.md.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=error-posture.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-posture.test.d.ts","sourceRoot":"","sources":["../src/error-posture.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Error-posture contract for the Node SDK.
3
+ *
4
+ * Three tiers, and the rule that binds them: a lower tier must never change a
5
+ * higher tier's answer. See docs/design/sdk-error-posture.md.
6
+ */
7
+ import { describe, test, expect, mock } from "bun:test";
8
+ import { TrafficalClient } from "./client.js";
9
+ const BASE = {
10
+ orgId: "org_test",
11
+ projectId: "proj_test",
12
+ env: "production",
13
+ apiKey: "traffical_sk_test",
14
+ refreshIntervalMs: -1,
15
+ trackDecisions: false,
16
+ disableCloudEvents: true,
17
+ };
18
+ function bundle() {
19
+ return {
20
+ version: "2024-01-01T00:00:00.000Z",
21
+ orgId: "org_test",
22
+ projectId: "proj_test",
23
+ env: "production",
24
+ hashing: { unitKey: "userId", bucketCount: 1000 },
25
+ parameters: [{ key: "ui.color", type: "string", default: "#DEFAULT", layerId: "layer_ui" }],
26
+ layers: [
27
+ {
28
+ id: "layer_ui",
29
+ policies: [
30
+ {
31
+ id: "policy_01",
32
+ key: "color-test",
33
+ state: "running",
34
+ kind: "static",
35
+ conditions: [],
36
+ allocations: [
37
+ {
38
+ id: "alloc_01",
39
+ key: "treatment-key",
40
+ name: "treatment",
41
+ bucketRange: [0, 999],
42
+ overrides: { "ui.color": "#TREATMENT" },
43
+ },
44
+ ],
45
+ },
46
+ ],
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ // =============================================================================
52
+ // Tier 1 — a failing sink costs a log row, never a variant
53
+ // =============================================================================
54
+ describe("Tier 1: customer callbacks never change a caller's answer", () => {
55
+ test("a throwing assignmentLogger does not propagate, and does not alter the decision", () => {
56
+ const client = new TrafficalClient({
57
+ ...BASE,
58
+ localConfig: bundle(),
59
+ assignmentLogger: () => { throw new Error("jitsu queue full"); },
60
+ });
61
+ let decision;
62
+ expect(() => { decision = client.decide({ userId: "u1" }, { "ui.color": "#CALLER" }); }).not.toThrow();
63
+ // The unit WAS bucketed into treatment. A sink failure must not silently
64
+ // downgrade that to control — a bounded queue throws exactly when traffic
65
+ // spikes, which would put a load-correlated confound into the assignment.
66
+ expect(decision.assignments["ui.color"]).toBe("#TREATMENT");
67
+ expect(decision.metadata.layers).toHaveLength(1);
68
+ expect(decision.metadata.reason).toBe("resolved");
69
+ expect(client.getDiagnostics().droppedAssignmentLogs).toBe(1);
70
+ });
71
+ test("decide() and getParams() agree when the sink is broken", () => {
72
+ const client = new TrafficalClient({
73
+ ...BASE,
74
+ localConfig: bundle(),
75
+ assignmentLogger: () => { throw new Error("boom"); },
76
+ });
77
+ const viaDecide = client.decide({ userId: "u1" }, { "ui.color": "#CALLER" });
78
+ const viaParams = client.getParams({ userId: "u1" }, { "ui.color": "#CALLER" });
79
+ expect(viaDecide.assignments["ui.color"]).toBe(viaParams["ui.color"]);
80
+ });
81
+ test("a throwing assignmentLogger stays contained in strict mode too", () => {
82
+ const client = new TrafficalClient({
83
+ ...BASE,
84
+ localConfig: bundle(),
85
+ onResolutionError: "throw",
86
+ assignmentLogger: () => { throw new Error("boom"); },
87
+ });
88
+ // Strictness is about resolution. It must not turn the customer's own
89
+ // logging sink into an exception in their request path.
90
+ expect(() => client.decide({ userId: "u1" }, { "ui.color": "#CALLER" })).not.toThrow();
91
+ expect(client.getDiagnostics().droppedAssignmentLogs).toBe(1);
92
+ });
93
+ test("a throwing eventLogger is contained and counted", () => {
94
+ const client = new TrafficalClient({
95
+ ...BASE,
96
+ localConfig: bundle(),
97
+ eventLogger: () => { throw new Error("sink down"); },
98
+ });
99
+ expect(() => client.track("purchase", {}, { unitKey: "u1" })).not.toThrow();
100
+ expect(client.getDiagnostics().droppedEventLogs).toBe(1);
101
+ });
102
+ test("trackExposure still emits its exposure entry when the decision entry threw", () => {
103
+ const seen = [];
104
+ let calls = 0;
105
+ const client = new TrafficalClient({
106
+ ...BASE,
107
+ localConfig: bundle(),
108
+ assignmentLogger: (e) => {
109
+ calls++;
110
+ if (e.type === "decision")
111
+ throw new Error("transient");
112
+ seen.push(e.type);
113
+ },
114
+ });
115
+ const decision = client.decide({ userId: "u1" }, { "ui.color": "#CALLER" });
116
+ client.trackExposure(decision);
117
+ expect(calls).toBe(2);
118
+ expect(seen).toEqual(["exposure"]);
119
+ });
120
+ });
121
+ // =============================================================================
122
+ // Tier 2 — resolution failures, and the onResolutionError switch
123
+ // =============================================================================
124
+ describe("Tier 2: resolution", () => {
125
+ test("metadata.reason distinguishes resolved / default / no-bundle", () => {
126
+ const withPolicy = new TrafficalClient({ ...BASE, localConfig: bundle() });
127
+ expect(withPolicy.decide({ userId: "u1" }, { "ui.color": "#C" }).metadata.reason).toBe("resolved");
128
+ const noBundle = new TrafficalClient({ ...BASE });
129
+ expect(noBundle.decide({ userId: "u1" }, { "ui.color": "#C" }).metadata.reason).toBe("no-bundle");
130
+ const empty = bundle();
131
+ empty.layers[0].policies = [];
132
+ const noMatch = new TrafficalClient({ ...BASE, localConfig: empty });
133
+ expect(noMatch.decide({ userId: "u1" }, { "ui.color": "#C" }).metadata.reason).toBe("default");
134
+ });
135
+ test('default mode returns caller defaults with reason "error"', () => {
136
+ const client = new TrafficalClient({ ...BASE, localConfig: bundle() });
137
+ // Force a resolution failure from inside the engine.
138
+ client._getEffectiveBundle = () => {
139
+ throw new Error("engine exploded");
140
+ };
141
+ const decision = client.decide({ userId: "u1" }, { "ui.color": "#CALLER" });
142
+ expect(decision.assignments["ui.color"]).toBe("#CALLER");
143
+ expect(decision.metadata.reason).toBe("error");
144
+ expect(decision.decisionId).toMatch(/^dec_/);
145
+ expect(client.getDiagnostics().resolutionErrors).toBe(1);
146
+ });
147
+ test('"throw" mode rethrows the resolution failure', () => {
148
+ const client = new TrafficalClient({ ...BASE, localConfig: bundle(), onResolutionError: "throw" });
149
+ client._getEffectiveBundle = () => {
150
+ throw new Error("engine exploded");
151
+ };
152
+ expect(() => client.decide({ userId: "u1" }, { "ui.color": "#C" })).toThrow("engine exploded");
153
+ });
154
+ test("onError observes contained failures", () => {
155
+ const onError = mock((_tag, _err) => { });
156
+ const client = new TrafficalClient({
157
+ ...BASE,
158
+ localConfig: bundle(),
159
+ onError,
160
+ assignmentLogger: () => { throw new Error("boom"); },
161
+ });
162
+ client.decide({ userId: "u1" }, { "ui.color": "#C" });
163
+ expect(onError).toHaveBeenCalledTimes(1);
164
+ expect(onError.mock.calls[0]?.[0]).toBe("assignmentLogger");
165
+ });
166
+ });
167
+ // =============================================================================
168
+ // Tier 3 — ingestion, at every entry point
169
+ // =============================================================================
170
+ describe("Tier 3: bundle ingestion", () => {
171
+ test("a malformed nested localConfig is rejected instead of crashing decide()", () => {
172
+ const broken = bundle();
173
+ // The exact shape that threw out of the resolver into the host.
174
+ delete broken.layers[0].policies;
175
+ const client = new TrafficalClient({ ...BASE, localConfig: broken });
176
+ let params;
177
+ expect(() => { params = client.getParams({ userId: "u1" }, { "ui.color": "#CALLER" }); }).not.toThrow();
178
+ expect(params["ui.color"]).toBe("#CALLER");
179
+ expect(client.getDiagnostics().rejectedBundles).toBe(1);
180
+ });
181
+ test("localConfig is validated at all — it used to be trusted implicitly", () => {
182
+ const client = new TrafficalClient({
183
+ ...BASE,
184
+ localConfig: { hashing: { unitKey: "userId", bucketCount: 1000 } },
185
+ });
186
+ expect(client.getDiagnostics().rejectedBundles).toBe(1);
187
+ expect(client.getConfigVersion()).toBeNull();
188
+ });
189
+ test("a rejected bundle is dropped whole, never partially applied", () => {
190
+ const broken = bundle();
191
+ broken.layers[0]
192
+ .policies[0].allocations = "not-an-array";
193
+ const client = new TrafficalClient({ ...BASE, localConfig: broken });
194
+ // Not "resolve what parses and skip the rest" — the caller's defaults win.
195
+ expect(client.getParams({ userId: "u1" }, { "ui.color": "#CALLER" })["ui.color"]).toBe("#CALLER");
196
+ });
197
+ test("a valid localConfig still resolves normally", () => {
198
+ const client = new TrafficalClient({ ...BASE, localConfig: bundle() });
199
+ expect(client.getParams({ userId: "u1" }, { "ui.color": "#CALLER" })["ui.color"]).toBe("#TREATMENT");
200
+ expect(client.getDiagnostics().rejectedBundles).toBe(0);
201
+ });
202
+ });
203
+ //# sourceMappingURL=error-posture.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-posture.test.js","sourceRoot":"","sources":["../src/error-posture.test.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const SDK_VERSION = "0.10.1";
1
+ export declare const SDK_VERSION = "0.12.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Auto-generated from package.json — do not edit manually.
2
- export const SDK_VERSION = "0.10.1";
2
+ export const SDK_VERSION = "0.12.0";
3
3
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Warehouse-native logger availability + end-to-end wiring on Node.
3
+ *
4
+ * The factory lives in `@traffical/core-io` and reaches `@traffical/node`
5
+ * through its `export *`. Before that move it was only exported from
6
+ * `@traffical/js-client` (a browser package), so the server-side
7
+ * bring-your-own-warehouse path — the one that actually needs a Jitsu sink —
8
+ * had no built-in destination at all.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=warehouse-native-logger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warehouse-native-logger.test.d.ts","sourceRoot":"","sources":["../src/warehouse-native-logger.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Warehouse-native logger availability + end-to-end wiring on Node.
3
+ *
4
+ * The factory lives in `@traffical/core-io` and reaches `@traffical/node`
5
+ * through its `export *`. Before that move it was only exported from
6
+ * `@traffical/js-client` (a browser package), so the server-side
7
+ * bring-your-own-warehouse path — the one that actually needs a Jitsu sink —
8
+ * had no built-in destination at all.
9
+ */
10
+ import { describe, test, expect, mock } from "bun:test";
11
+ import { createWarehouseNativeLogger, createWarehouseNativeLoggerPlugin } from "./index.js";
12
+ import { TrafficalClient } from "./client.js";
13
+ const bundle = {
14
+ version: "2024-01-01T00:00:00.000Z",
15
+ orgId: "org_test",
16
+ projectId: "proj_test",
17
+ env: "production",
18
+ hashing: { unitKey: "userId", bucketCount: 1000 },
19
+ parameters: [{ key: "ui.color", type: "string", default: "#000", layerId: "layer_ui" }],
20
+ layers: [
21
+ {
22
+ id: "layer_ui",
23
+ policies: [
24
+ {
25
+ id: "policy_01",
26
+ key: "color-test",
27
+ state: "running",
28
+ kind: "static",
29
+ conditions: [],
30
+ allocations: [
31
+ {
32
+ id: "alloc_01",
33
+ key: "treatment-key",
34
+ name: "treatment",
35
+ bucketRange: [0, 999],
36
+ overrides: { "ui.color": "#F00" },
37
+ },
38
+ ],
39
+ },
40
+ ],
41
+ },
42
+ ],
43
+ };
44
+ describe("@traffical/node warehouse-native logger", () => {
45
+ test("the factory is reachable from the package entrypoint", () => {
46
+ expect(typeof createWarehouseNativeLogger).toBe("function");
47
+ expect(typeof createWarehouseNativeLoggerPlugin).toBe("function");
48
+ });
49
+ test("client → Jitsu: the posted row carries the stable warehouse-join keys", () => {
50
+ const fetchImpl = mock(async (_url, _init) => ({ ok: true, status: 200 }));
51
+ const { assignmentLogger } = createWarehouseNativeLogger({
52
+ destination: {
53
+ type: "jitsu",
54
+ host: "https://ingest.example.com",
55
+ mode: "s2s",
56
+ writeKey: "wk_test",
57
+ fetchImpl: fetchImpl,
58
+ },
59
+ });
60
+ const client = new TrafficalClient({
61
+ orgId: "org_test",
62
+ projectId: "proj_test",
63
+ env: "production",
64
+ apiKey: "traffical_sk_test",
65
+ refreshIntervalMs: -1,
66
+ trackDecisions: false,
67
+ disableCloudEvents: true,
68
+ localConfig: bundle,
69
+ assignmentLogger,
70
+ });
71
+ client.decide({ userId: "user-1" }, { "ui.color": "#000" });
72
+ expect(fetchImpl).toHaveBeenCalledTimes(1);
73
+ const [url, init] = fetchImpl.mock.calls[0];
74
+ expect(url).toBe("https://ingest.example.com/api/s/s2s/track");
75
+ expect(init.headers["X-Write-Key"]).toBe("wk_test");
76
+ const body = JSON.parse(init.body);
77
+ expect(body).toMatchObject({ type: "track", event: "Experiment Assignment", userId: "user-1" });
78
+ // The end-to-end guarantee: an assignment definition mapping `policy_key`
79
+ // has a real policy key to join on, not an opaque `policy_01`.
80
+ expect(body.properties).toMatchObject({
81
+ policy_id: "policy_01",
82
+ policy_key: "color-test",
83
+ allocation_name: "treatment",
84
+ allocation_key: "treatment-key",
85
+ type: "decision",
86
+ });
87
+ });
88
+ });
89
+ //# sourceMappingURL=warehouse-native-logger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warehouse-native-logger.test.js","sourceRoot":"","sources":["../src/warehouse-native-logger.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@traffical/node",
3
- "version": "0.10.1",
3
+ "version": "0.12.0",
4
4
  "description": "Traffical SDK for Node.js - HTTP client with caching and event tracking",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,8 +23,8 @@
23
23
  "typecheck": "bun run generate-version && tsc --noEmit"
24
24
  },
25
25
  "dependencies": {
26
- "@traffical/core": "0.11.1",
27
- "@traffical/core-io": "0.6.2"
26
+ "@traffical/core": "0.12.0",
27
+ "@traffical/core-io": "0.7.1"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/bun": "latest",