@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.
- package/dist/assignment-logger.test.js +61 -0
- package/dist/assignment-logger.test.js.map +1 -1
- package/dist/client.d.ts +22 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +103 -45
- package/dist/client.js.map +1 -1
- package/dist/error-posture.test.d.ts +8 -0
- package/dist/error-posture.test.d.ts.map +1 -0
- package/dist/error-posture.test.js +203 -0
- package/dist/error-posture.test.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/warehouse-native-logger.test.d.ts +11 -0
- package/dist/warehouse-native-logger.test.d.ts.map +1 -0
- package/dist/warehouse-native-logger.test.js +89 -0
- package/dist/warehouse-native-logger.test.js.map +1 -0
- package/package.json +3 -3
|
@@ -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":"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,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,YAAY,EAAE,SAAS;gBACvB,cAAc,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"assignment-logger.test.js","sourceRoot":"","sources":["../src/assignment-logger.test.ts"],"names":[],"mappings":"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"}
|
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.
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,KAAK,sBAAsB,IAAI,iBAAiB,EAChD,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EAMrB,KAAK,gBAAgB,EAGrB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,gBAAgB,
|
|
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
|
-
|
|
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: {
|
|
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
|
-
|
|
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
|
|
510
|
-
|
|
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
|
-
|
|
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
|
-
|
|
679
|
-
|
|
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);
|
package/dist/client.js.map
CHANGED
|
@@ -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 @@
|
|
|
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.
|
|
1
|
+
export declare const SDK_VERSION = "0.12.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -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.
|
|
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.
|
|
27
|
-
"@traffical/core-io": "0.
|
|
26
|
+
"@traffical/core": "0.12.0",
|
|
27
|
+
"@traffical/core-io": "0.7.1"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/bun": "latest",
|