@traffical/js-client 0.17.0 → 0.19.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/README.md +65 -9
- package/dist/client.d.ts +3 -3
- package/dist/client.js +2 -2
- package/dist/exposure-dedup.d.ts +1 -1
- package/dist/exposure-dedup.js +1 -1
- package/dist/global.d.ts +2 -1
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +4 -1
- package/dist/global.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/auto-attributes.d.ts +51 -0
- package/dist/plugins/auto-attributes.d.ts.map +1 -0
- package/dist/plugins/auto-attributes.js +234 -0
- package/dist/plugins/auto-attributes.js.map +1 -0
- package/dist/plugins/debug.d.ts +24 -0
- package/dist/plugins/debug.d.ts.map +1 -1
- package/dist/plugins/debug.js +61 -2
- package/dist/plugins/debug.js.map +1 -1
- package/dist/plugins/index.d.ts +1 -0
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +1 -0
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/redirect.d.ts.map +1 -1
- package/dist/plugins/redirect.js +9 -0
- package/dist/plugins/redirect.js.map +1 -1
- package/dist/traffical.min.js +2 -2
- package/dist/traffical.min.js.map +4 -4
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/plugins/debug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/plugins/debug.ts"],"names":[],"mappings":"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"}
|
package/dist/plugins/debug.js
CHANGED
|
@@ -67,6 +67,21 @@ function emitRegistryEvent(event) {
|
|
|
67
67
|
// Helpers
|
|
68
68
|
// ---------------------------------------------------------------------------
|
|
69
69
|
let _idCounter = 0;
|
|
70
|
+
/**
|
|
71
|
+
* The OpenFeature web SDK stores its API singleton on globalThis under a
|
|
72
|
+
* well-known symbol. Nudging its context makes `@traffical/openfeature-web`
|
|
73
|
+
* re-resolve every flag (through this client's `decide`, and therefore
|
|
74
|
+
* through the debug plugin's `onBeforeDecision`) and emit
|
|
75
|
+
* `PROVIDER_CONTEXT_CHANGED`, which is what host-app hooks re-render on.
|
|
76
|
+
*/
|
|
77
|
+
const OPENFEATURE_API_SYMBOL = Symbol.for("@openfeature/web-sdk/api");
|
|
78
|
+
function getOpenFeatureApi() {
|
|
79
|
+
const api = globalThis[OPENFEATURE_API_SYMBOL];
|
|
80
|
+
if (api && typeof api.getContext === "function" && typeof api.setContext === "function") {
|
|
81
|
+
return api;
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
70
85
|
function generateId() {
|
|
71
86
|
return `traffical_${Date.now().toString(36)}_${(++_idCounter).toString(36)}`;
|
|
72
87
|
}
|
|
@@ -87,6 +102,9 @@ export function createDebugPlugin(options = {}) {
|
|
|
87
102
|
let _layers = [];
|
|
88
103
|
let _lastDecisionId = null;
|
|
89
104
|
let _effectiveUnitKey = null;
|
|
105
|
+
let _contextOverrides = {};
|
|
106
|
+
let _lastContext = null;
|
|
107
|
+
let _lastDefaults = null;
|
|
90
108
|
const _events = [];
|
|
91
109
|
let _stateListeners = [];
|
|
92
110
|
let _eventListeners = [];
|
|
@@ -100,6 +118,8 @@ export function createDebugPlugin(options = {}) {
|
|
|
100
118
|
layers: [..._layers],
|
|
101
119
|
lastDecisionId: _lastDecisionId,
|
|
102
120
|
overrides: _client?.getOverrides?.() ?? {},
|
|
121
|
+
contextOverrides: { ..._contextOverrides },
|
|
122
|
+
lastContext: _lastContext ? { ..._lastContext } : null,
|
|
103
123
|
};
|
|
104
124
|
}
|
|
105
125
|
function notifyStateListeners() {
|
|
@@ -134,9 +154,30 @@ export function createDebugPlugin(options = {}) {
|
|
|
134
154
|
}
|
|
135
155
|
}
|
|
136
156
|
function triggerReDecide() {
|
|
137
|
-
if (_client)
|
|
157
|
+
if (!_client)
|
|
158
|
+
return;
|
|
159
|
+
// Replay the app's last real decision. Unknown parameter keys keep the
|
|
160
|
+
// values we pass; known ones are re-resolved from the bundle, so the
|
|
161
|
+
// previous assignments are a faithful stand-in for the app's defaults.
|
|
162
|
+
// Before the app has decided once there is nothing to replay: an empty
|
|
163
|
+
// decision still refreshes layer/bucket info without resolving params.
|
|
164
|
+
try {
|
|
165
|
+
_client.decide({
|
|
166
|
+
context: _lastContext ? { ..._lastContext } : {},
|
|
167
|
+
defaults: _lastDefaults ? { ..._lastDefaults } : {},
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Best-effort
|
|
172
|
+
}
|
|
173
|
+
// OpenFeature-hosted apps resolve through the provider's bound context,
|
|
174
|
+
// not through the decision above. Re-setting the same context forces the
|
|
175
|
+
// provider to clear its memo and re-resolve, and fires
|
|
176
|
+
// PROVIDER_CONTEXT_CHANGED so the app's hooks pick up the new values.
|
|
177
|
+
const openFeature = getOpenFeatureApi();
|
|
178
|
+
if (openFeature) {
|
|
138
179
|
try {
|
|
139
|
-
|
|
180
|
+
void openFeature.setContext({ ...openFeature.getContext() }).catch(() => { });
|
|
140
181
|
}
|
|
141
182
|
catch {
|
|
142
183
|
// Best-effort
|
|
@@ -208,6 +249,14 @@ export function createDebugPlugin(options = {}) {
|
|
|
208
249
|
getOverrides() {
|
|
209
250
|
return _client?.getOverrides?.() ?? {};
|
|
210
251
|
},
|
|
252
|
+
setContextOverrides(context) {
|
|
253
|
+
_contextOverrides = { ...context };
|
|
254
|
+
notifyStateListeners();
|
|
255
|
+
triggerReDecide();
|
|
256
|
+
},
|
|
257
|
+
getContextOverrides() {
|
|
258
|
+
return { ..._contextOverrides };
|
|
259
|
+
},
|
|
211
260
|
reDecide() {
|
|
212
261
|
triggerReDecide();
|
|
213
262
|
},
|
|
@@ -242,7 +291,14 @@ export function createDebugPlugin(options = {}) {
|
|
|
242
291
|
debugInstance.meta.env = bundle.env;
|
|
243
292
|
notifyStateListeners();
|
|
244
293
|
},
|
|
294
|
+
onBeforeDecision(context) {
|
|
295
|
+
_lastContext = { ...context };
|
|
296
|
+
if (Object.keys(_contextOverrides).length === 0)
|
|
297
|
+
return;
|
|
298
|
+
return { ...context, ..._contextOverrides };
|
|
299
|
+
},
|
|
245
300
|
onDecision(decision) {
|
|
301
|
+
_lastDefaults = { ...decision.assignments };
|
|
246
302
|
_assignments = { ...decision.assignments };
|
|
247
303
|
_layers = decision.metadata?.layers ? [...decision.metadata.layers] : [];
|
|
248
304
|
_lastDecisionId = decision.decisionId;
|
|
@@ -273,6 +329,9 @@ export function createDebugPlugin(options = {}) {
|
|
|
273
329
|
}
|
|
274
330
|
_stateListeners = [];
|
|
275
331
|
_eventListeners = [];
|
|
332
|
+
_contextOverrides = {};
|
|
333
|
+
_lastContext = null;
|
|
334
|
+
_lastDefaults = null;
|
|
276
335
|
_client = null;
|
|
277
336
|
},
|
|
278
337
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/plugins/debug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/plugins/debug.ts"],"names":[],"mappings":"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"}
|
package/dist/plugins/index.d.ts
CHANGED
|
@@ -70,6 +70,7 @@ export type { TrafficalPlugin, PluginOptions, PluginClientAPI } from "./types.js
|
|
|
70
70
|
export { createDecisionTrackingPlugin, type DecisionTrackingPluginOptions, type DecisionTrackingPluginDeps, } from "./decision-tracking.js";
|
|
71
71
|
export { createRedirectPlugin, type RedirectPluginOptions, } from "./redirect.js";
|
|
72
72
|
export { createRedirectAttributionPlugin, type RedirectAttributionPluginOptions, } from "./redirect-attribution.js";
|
|
73
|
+
export { autoAttributesPlugin, createAutoAttributesPlugin, AUTO_ATTRIBUTE_KEYS, type AutoAttributeKey, type AutoAttributesPluginOptions, type AutoBrowser, type AutoOS, type AutoDeviceType, } from "./auto-attributes.js";
|
|
73
74
|
export { createWarehouseNativeLoggerPlugin, createWarehouseNativeLogger, type WarehouseNativeLoggerOptions, type JitsuDestination, type AnalyticsLike, } from "./warehouse-native-logger.js";
|
|
74
75
|
export { createDebugPlugin, type DebugPluginOptions, type TrafficalDebugRegistry, type TrafficalDebugInstance, type DebugState, type DebugEvent, type RegistryEvent, } from "./debug.js";
|
|
75
76
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,UAAU,EACV,OAAO,EACP,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAOlF,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAA0B;IAE1C;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe,GAAG,OAAO;IAc3D;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQjC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI9C;;OAEG;IACH,MAAM,IAAI,eAAe,EAAE;IAI3B;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3D;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAY3C;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAmB5C;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAY3C;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI;IAYxD;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAiB1C;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAiBpC;;OAEG;IACH,UAAU,IAAI,IAAI;IAYlB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAGD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlF,OAAO,EACL,4BAA4B,EAC5B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,GAChC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,+BAA+B,EAC/B,KAAK,gCAAgC,GACtC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,iCAAiC,EACjC,2BAA2B,EAC3B,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,UAAU,EACV,OAAO,EACP,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAOlF,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAA0B;IAE1C;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe,GAAG,OAAO;IAc3D;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQjC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI9C;;OAEG;IACH,MAAM,IAAI,eAAe,EAAE;IAI3B;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3D;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAY3C;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAmB5C;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAY3C;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI;IAYxD;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAiB1C;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAiBpC;;OAEG;IACH,UAAU,IAAI,IAAI;IAYlB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAGD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlF,OAAO,EACL,4BAA4B,EAC5B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,GAChC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,+BAA+B,EAC/B,KAAK,gCAAgC,GACtC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,2BAA2B,EAChC,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,cAAc,GACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iCAAiC,EACjC,2BAA2B,EAC3B,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC"}
|
package/dist/plugins/index.js
CHANGED
|
@@ -193,6 +193,7 @@ export class PluginManager {
|
|
|
193
193
|
export { createDecisionTrackingPlugin, } from "./decision-tracking.js";
|
|
194
194
|
export { createRedirectPlugin, } from "./redirect.js";
|
|
195
195
|
export { createRedirectAttributionPlugin, } from "./redirect-attribution.js";
|
|
196
|
+
export { autoAttributesPlugin, createAutoAttributesPlugin, AUTO_ATTRIBUTE_KEYS, } from "./auto-attributes.js";
|
|
196
197
|
export { createWarehouseNativeLoggerPlugin, createWarehouseNativeLogger, } from "./warehouse-native-logger.js";
|
|
197
198
|
export { createDebugPlugin, } from "./debug.js";
|
|
198
199
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redirect.d.ts","sourceRoot":"","sources":["../../src/plugins/redirect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,YAAY,CAAC;AAMnE,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;iEAE6D;IAC7D,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAClC,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAWD,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,qBAA0B,GAClC,eAAe,
|
|
1
|
+
{"version":3,"file":"redirect.d.ts","sourceRoot":"","sources":["../../src/plugins/redirect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,YAAY,CAAC;AAMnE,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;iEAE6D;IAC7D,WAAW,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAClC,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAWD,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,qBAA0B,GAClC,eAAe,CAgEjB"}
|
package/dist/plugins/redirect.js
CHANGED
|
@@ -24,6 +24,15 @@ export function createRedirectPlugin(options = {}) {
|
|
|
24
24
|
defaults: { [parameterKey]: "" },
|
|
25
25
|
});
|
|
26
26
|
},
|
|
27
|
+
/**
|
|
28
|
+
* Injects the current pathname under the literal, flat key
|
|
29
|
+
* `"url.pathname"` (one property whose name contains a dot — NOT a nested
|
|
30
|
+
* `{ url: { pathname } }` object). The evaluator resolves a condition
|
|
31
|
+
* field flat-key-first, then by dot-path traversal (sdk-spec "Field
|
|
32
|
+
* lookup"), so a policy condition on `url.pathname` matches this key
|
|
33
|
+
* directly and would equally match a nested shape supplied by the caller.
|
|
34
|
+
* Caller-supplied context wins over the injected key.
|
|
35
|
+
*/
|
|
27
36
|
onBeforeDecision(context) {
|
|
28
37
|
if (typeof window === "undefined")
|
|
29
38
|
return context;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../src/plugins/redirect.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,GAAG,eAAe,CAAC;AACnC,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,sBAAsB;AAaxD,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,MAAc;IAC5D,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,IAAI,CAAC;QACH,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,aAAa,MAAM,wBAAwB,CAAC;IACpG,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,UAAiC,EAAE;IAEnC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,cAAc,CAAC;IAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,UAAU,CAAC;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC;IAEpD,OAAO;QACL,IAAI,EAAE,UAAU;QAEhB,YAAY,CAAC,MAAuB;YAClC,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO;YAE1C,MAAM,CAAC,MAAM,CAAC;gBACZ,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE;aACjC,CAAC,CAAC;QACL,CAAC;QAED,gBAAgB,CAAC,OAAgB;YAC/B,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO,OAAO,CAAC;YAClD,OAAO;gBACL,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;gBACxC,GAAG,OAAO;aACX,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,QAAwB;YACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG;gBAAE,OAAO;YAE5C,MAAM,OAAO,GACX,WAAW,KAAK,MAAM;gBACpB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI;gBACtB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAE/B,IAAI,GAAG,KAAK,OAAO;gBAAE,OAAO;YAE5B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,cAAc,CACtC,CAAC;YACF,IAAI,KAAK,EAAE,CAAC;gBACV,SAAS,CACP,UAAU,EACV,IAAI,CAAC,SAAS,CAAC;oBACb,CAAC,EAAE,KAAK,CAAC,OAAO;oBAChB,CAAC,EAAE,KAAK,CAAC,QAAQ;oBACjB,CAAC,EAAE,KAAK,CAAC,cAAc;oBACvB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;iBACf,CAAC,EACF,WAAW,CACZ,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../src/plugins/redirect.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,GAAG,eAAe,CAAC;AACnC,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,sBAAsB;AAaxD,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,MAAc;IAC5D,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,IAAI,CAAC;QACH,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,aAAa,MAAM,wBAAwB,CAAC;IACpG,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,UAAiC,EAAE;IAEnC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,cAAc,CAAC;IAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,UAAU,CAAC;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC;IAEpD,OAAO;QACL,IAAI,EAAE,UAAU;QAEhB,YAAY,CAAC,MAAuB;YAClC,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO;YAE1C,MAAM,CAAC,MAAM,CAAC;gBACZ,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE;aACjC,CAAC,CAAC;QACL,CAAC;QAED;;;;;;;;WAQG;QACH,gBAAgB,CAAC,OAAgB;YAC/B,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO,OAAO,CAAC;YAClD,OAAO;gBACL,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;gBACxC,GAAG,OAAO;aACX,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,QAAwB;YACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG;gBAAE,OAAO;YAE5C,MAAM,OAAO,GACX,WAAW,KAAK,MAAM;gBACpB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI;gBACtB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAE/B,IAAI,GAAG,KAAK,OAAO;gBAAE,OAAO;YAE5B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,cAAc,CACtC,CAAC;YACF,IAAI,KAAK,EAAE,CAAC;gBACV,SAAS,CACP,UAAU,EACV,IAAI,CAAC,SAAS,CAAC;oBACb,CAAC,EAAE,KAAK,CAAC,OAAO;oBAChB,CAAC,EAAE,KAAK,CAAC,QAAQ;oBACjB,CAAC,EAAE,KAAK,CAAC,cAAc;oBACvB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;iBACf,CAAC,EACF,WAAW,CACZ,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/traffical.min.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/* @traffical/js-client v0.
|
|
2
|
-
"use strict";var Traffical=(()=>{var Z=Object.defineProperty;var ut=Object.getOwnPropertyDescriptor;var dt=Object.getOwnPropertyNames;var ft=Object.prototype.hasOwnProperty;var gt=(r,e,t)=>e in r?Z(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var ht=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),pt=(r,e)=>{for(var t in e)Z(r,t,{get:e[t],enumerable:!0})},mt=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of dt(e))!ft.call(r,i)&&i!==t&&Z(r,i,{get:()=>e[i],enumerable:!(n=ut(e,i))||n.enumerable});return r};var yt=r=>mt(Z({},"__esModule",{value:!0}),r);var h=(r,e,t)=>(gt(r,typeof e!="symbol"?e+"":e,t),t);var qe=ht(()=>{});var Dn={};pt(Dn,{TrafficalClient:()=>V,createDOMBindingPlugin:()=>lt,createDebugPlugin:()=>Ve,createRedirectAttributionPlugin:()=>Ne,createRedirectPlugin:()=>Be,destroy:()=>kn,init:()=>Cn,initSync:()=>An,instance:()=>Sn});function vt(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in r&&r.BYTES_PER_ELEMENT===1}function ve(r,e,t=""){let n=vt(r),i=r?.length,o=e!==void 0;if(!n||o&&i!==e){let s=t&&`"${t}" `,a=o?` of length ${e}`:"",c=n?`length=${i}`:`type=${typeof r}`,d=s+"expected Uint8Array"+a+", got "+c;throw n?new RangeError(d):new TypeError(d)}return r}function _e(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Fe(r,e){ve(r,void 0,"digestInto() output");let t=e.outputLen;if(r.length<t)throw new RangeError('"digestInto() output" expected to be of length >='+t)}function F(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function ee(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function w(r,e){return r<<32-e|r>>>e}function Ke(r,e={}){let t=(i,o)=>r(o).update(i).digest(),n=r(void 0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.canXOF=n.canXOF,t.create=i=>r(i),Object.assign(t,e),Object.freeze(t)}var $e=r=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,r])});function je(r,e,t){return r&e^~r&t}function He(r,e,t){return r&e^r&t^e&t}var te=class{constructor(e,t,n,i){h(this,"blockLen");h(this,"outputLen");h(this,"canXOF",!1);h(this,"padOffset");h(this,"isLE");h(this,"buffer");h(this,"view");h(this,"finished",!1);h(this,"length",0);h(this,"pos",0);h(this,"destroyed",!1);this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.buffer=new Uint8Array(e),this.view=ee(this.buffer)}update(e){_e(this),ve(e);let{view:t,buffer:n,blockLen:i}=this,o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let c=ee(e);for(;i<=o-s;s+=i)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){_e(this),Fe(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=this,{pos:s}=this;t[s++]=128,F(this.buffer.subarray(s)),this.padOffset>i-s&&(this.process(n,0),s=0);for(let l=s;l<i;l++)t[l]=0;n.setBigUint64(i-8,BigInt(this.length*8),o),this.process(n,0);let a=ee(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen must be aligned to 32bit");let d=c/4,g=this.get();if(d>g.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l<d;l++)a.setUint32(4*l,g[l],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:i,finished:o,destroyed:s,pos:a}=this;return e.destroyed=s,e.finished=o,e.length=i,e.pos=a,i%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},k=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var _t=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),P=new Uint32Array(64),be=class extends te{constructor(e){super(64,e,8,!1)}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:c}=this;return[e,t,n,i,o,s,a,c]}set(e,t,n,i,o,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let l=0;l<16;l++,t+=4)P[l]=e.getUint32(t,!1);for(let l=16;l<64;l++){let m=P[l-15],u=P[l-2],p=w(m,7)^w(m,18)^m>>>3,_=w(u,17)^w(u,19)^u>>>10;P[l]=_+P[l-7]+p+P[l-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:c,G:d,H:g}=this;for(let l=0;l<64;l++){let m=w(a,6)^w(a,11)^w(a,25),u=g+m+je(a,c,d)+_t[l]+P[l]|0,_=(w(n,2)^w(n,13)^w(n,22))+He(n,i,o)|0;g=d,d=c,c=a,a=s+u|0,s=o,o=i,i=n,n=u+_|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,d=d+this.G|0,g=g+this.H|0,this.set(n,i,o,s,a,c,d,g)}roundClean(){F(P)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),F(this.buffer)}},xe=class extends be{constructor(){super(32);h(this,"A",k[0]|0);h(this,"B",k[1]|0);h(this,"C",k[2]|0);h(this,"D",k[3]|0);h(this,"E",k[4]|0);h(this,"F",k[5]|0);h(this,"G",k[6]|0);h(this,"H",k[7]|0)}};var We=Ke(()=>new xe,$e(1));var ze=new TextEncoder,Ee="v2";function ne(r){return ze.encode(r).length}function ie(r,e){let t=ne(r),n=ne(e);return`traffical:assignment:${Ee}|u:${t}:${r}|l:${n}:${e}`}function K(r){return We(ze.encode(r))}function $(r){let e=0n;for(let t=0;t<8;t++)e=e<<8n|BigInt(r[t]);return e}function re(r){return $(K(r))}function oe(r,e,t){let n=K(ie(r,e)),i=$(n);return Number(i%BigInt(t))}function Ie(r,e){return r>=e[0]&&r<=e[1]}function se(r,e){for(let t of e)if(Ie(r,t.bucketRange))return t;return null}var bt=1n<<53n,xt=9007199254740992;function O(r,e){if(r.length===0||r.length===1)return 0;let t=re(e),n=Number(t%bt)/xt,i=0;for(let o=0;o<r.length;o++)if(i+=r[o],n<i)return o;return r.length-1}function Te(r,e){let{field:t,op:n,value:i,values:o}=r,s=Tt(e,t);switch(n){case"eq":return s===i;case"neq":return s!==i;case"in":return Array.isArray(o)?o.includes(s):!1;case"nin":return Array.isArray(o)?!o.includes(s):!0;case"gt":return typeof s=="number"&&s>i;case"gte":return typeof s=="number"&&s>=i;case"lt":return typeof s=="number"&&s<i;case"lte":return typeof s=="number"&&s<=i;case"contains":return typeof s=="string"&&typeof i=="string"&&s.includes(i);case"startsWith":return typeof s=="string"&&typeof i=="string"&&s.startsWith(i);case"endsWith":return typeof s=="string"&&typeof i=="string"&&s.endsWith(i);case"regex":if(typeof s!="string"||typeof i!="string")return!1;try{return new RegExp(i).test(s)}catch{return!1}case"exists":return s!=null;case"notExists":return s==null;default:return!1}}function ae(r,e){return r.length===0?!0:r.every(t=>Te(t,e))}function Tt(r,e){let t=e.split("."),n=r;for(let i of t){if(n==null)return;if(typeof n=="object")n=n[i];else return}return n}function we(r,e){let t=r.intercept;for(let{key:n,coef:i,missing:o}of r.numeric){let s=e[n];t+=typeof s=="number"?i*s:o}for(let{key:n,values:i,missing:o}of r.categorical){let s=e[n],a=s!=null?String(s):null;t+=a!==null&&a in i?i[a]:o}return t}function Ce(r,e){if(r.length===0)return[];if(r.length===1)return[1];let t=Math.max(e,1e-10),n=r.map(a=>a/t),i=Math.max(...n),o=n.map(a=>Math.exp(a-i)),s=o.reduce((a,c)=>a+c,0);return o.map(a=>a/s)}function Ae(r,e){if(r.length===0)return[];if(e<=0)return r;let t=r.length,n=1/t,i=Math.min(e,n),o=r.map(a=>Math.max(a,i)),s=o.reduce((a,c)=>a+c,0);return s===0?Array(t).fill(1/t):o.map(a=>a/s)}function ce(r,e,t){let n=r.contextualModel;if(!n||r.allocations.length===0)return null;let i=wt(n,r.allocations,e),o=Ce(i,n.gamma),s=Ae(o,n.actionProbabilityFloor),a=`ctx:${t}:${r.id}`,c=O(s,a);return{allocation:r.allocations[c],probability:s[c]}}function wt(r,e,t){return e.map(n=>{let i=r.coefficients[n.key??n.name];return i?we(i,t):r.defaultAllocationScore})}var Ct=r=>crypto.getRandomValues(new Uint8Array(r)),At=(r,e,t)=>{let n=(2<<Math.log2(r.length-1))-1,i=-~(1.6*n*e/r.length);return(o=e)=>{let s="";for(;;){let a=t(i),c=i|0;for(;c--;)if(s+=r[a[c]&n]||"",s.length>=o)return s}}},Ge=(r,e=21)=>At(r,e|0,Ct);function le(r){let e=new Error(r);return e.source="ulid",e}var Se="0123456789ABCDEFGHJKMNPQRSTVWXYZ",j=Se.length,Xe=Math.pow(2,48)-1,St=10,kt=16;function Dt(r){let e=Math.floor(r()*j);return e===j&&(e=j-1),Se.charAt(e)}function Pt(r,e){if(isNaN(r))throw new Error(r+" must be a number");if(r>Xe)throw le("cannot encode time greater than "+Xe);if(r<0)throw le("time must be positive");if(Number.isInteger(Number(r))===!1)throw le("time must be an integer");let t,n="";for(;e>0;e--)t=r%j,n=Se.charAt(t)+n,r=(r-t)/j;return n}function Rt(r,e){let t="";for(;r>0;r--)t=Dt(e)+t;return t}function Lt(r=!1,e){e||(e=typeof window<"u"?window:null);let t=e&&(e.crypto||e.msCrypto);if(t)return()=>{let n=new Uint8Array(1);return t.getRandomValues(n),n[0]/255};try{let n=qe();return()=>n.randomBytes(1).readUInt8()/255}catch{}if(r){try{console.error("secure crypto unusable, falling back to insecure Math.random()!")}catch{}return()=>Math.random()}throw le("secure crypto unusable, insecure Math.random not allowed")}function Mt(r){return r||(r=Lt()),function(t){return isNaN(t)&&(t=Date.now()),Pt(t,St)+Rt(kt,r)}}var Je=Mt();var Ot="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Bt=8,ci=Ge(Ot,Bt);function H(r){return`${r}_${Je()}`}function B(){return H("dec")}function ke(){return H("exp")}function De(){return H("trk")}function Pe(){return H("asn")}function Nt(r,e){let t=new Set;for(let i of e)if(i.contextLogging?.allowedFields)for(let o of i.contextLogging.allowedFields)t.add(o);if(t.size===0)return;let n={};for(let i of t)i in r&&(n[i]=r[i]);return Object.keys(n).length>0?n:void 0}function Vt(r,e){let t=[];for(let n of r){let i=e[n];if(i==null)return null;t.push(String(i))}return t.join("_")}function Qe(r){if(r<=0)return[];let e=1/r;return Array(r).fill(e)}function Ut(r,e,t,n){let i=r.entityState?.[e];if(!i)return Qe(n);let o=i.entities[t];if(o&&o.weights.length===n)return o.weights;let s=i._global;return s&&s.weights.length===n?s.weights:Qe(n)}function Ft(r,e,t,n){let i=e.entityConfig;if(!i)return null;let o=Vt(i.entityKeys,t);if(!o)return null;let s,a;if(i.dynamicAllocations){let l=i.dynamicAllocations.countKey,m=t[l];if(typeof m!="number"||m<=0)return null;a=Math.floor(m),s=Array.from({length:a},(u,p)=>({id:`${e.id}_dynamic_${p}`,name:String(p),bucketRange:[0,0],overrides:{}}))}else s=e.allocations,a=s.length;if(a===0)return null;let c=Ut(r,e.id,o,a),d=`${o}:${n}:${e.id}`,g=O(c,d);return{allocation:s[g],weight:c[g],entityId:o}}function W(r,e){let t=e[r.hashing.unitKey];return t==null?null:String(t)}function ue(r){return r?.hashing?.unitKey??null}function de(r,e){return r?r.parameters.find(n=>n.key===e)?.layerId??null:null}function Ye(r,e,t,n){let i={...t},o=[],s=[];if(!r)return{assignments:i,unitKeyValue:"",layers:o,matchedPolicies:s};let a=W(r,e)??"",c=new Set(Object.keys(t)),d=r.parameters.filter(l=>c.has(l.key));for(let l of d)l.key in i&&(i[l.key]=l.default);let g=new Map;for(let l of d){let m=g.get(l.layerId)||[];m.push(l),g.set(l.layerId,m)}for(let l of r.layers){let m=g.get(l.id),u=m&&m.length>0,p=l.unitKey,_=p!=null;if(_&&String(p).trim()===""){o.push({layerId:l.id,bucket:-1,...u?{}:{attributionOnly:!0}});continue}let x=_?String(e[p]??""):a;if(!x){o.push({layerId:l.id,bucket:-1,..._?{unitKey:p,unitKeyValue:""}:{},...u?{}:{attributionOnly:!0}});continue}let C=oe(x,l.id,r.hashing.bucketCount),f,b,A,U;for(let y of l.policies)if(y.state==="running"){if(y.eligibleBucketRange){let{start:E,end:I}=y.eligibleBucketRange;if(C<E||C>I)continue}if(ae(y.conditions,e)){if(y.contextualModel){let E=ce(y,e,x);if(E){if(f=y,b=E.allocation,A=E.probability,U=y.contextualModel.generatedAt??y.contextualModel.modelVersion,s.push(y),u)for(let[I,S]of Object.entries(E.allocation.overrides))I in i&&(i[I]=S);break}}if(y.entityConfig&&y.entityConfig.resolutionMode==="bundle"){let E=Ft(r,y,e,x);if(E){if(f=y,b=E.allocation,A=E.weight,s.push(y),u&&!y.entityConfig.dynamicAllocations)for(let[I,S]of Object.entries(E.allocation.overrides))I in i&&(i[I]=S);break}}else if(y.entityConfig&&y.entityConfig.resolutionMode==="edge"){let E=n?.edgeResults?.get(y.id);if(E){if(f=y,s.push(y),y.entityConfig.dynamicAllocations)b={id:`${y.id}_dynamic_${E.allocationIndex}`,name:String(E.allocationIndex),bucketRange:[0,0],overrides:{}};else if(y.allocations[E.allocationIndex]&&(b=y.allocations[E.allocationIndex],u&&b))for(let[I,S]of Object.entries(b.overrides))I in i&&(i[I]=S);break}continue}else{let E=se(C,y.allocations);if(E){if(f=y,b=E,y.kind==="adaptive"){let[I,S]=E.bucketRange;A=(S-I+1)/r.hashing.bucketCount}if(s.push(y),u)for(let[I,S]of Object.entries(E.overrides))I in i&&(i[I]=S);break}}}}o.push({layerId:l.id,bucket:C,policyId:f?.id,policyKey:f?.key,allocationId:b?.id,allocationName:b?.name,allocationKey:b?.key,...A!==void 0&&A>0&&A<=1?{probability:A}:{},...U!==void 0?{modelVersion:U}:{},..._?{unitKey:p,unitKeyValue:x}:{},...u?{}:{attributionOnly:!0}})}return{assignments:i,unitKeyValue:a,layers:o,matchedPolicies:s}}function fe(r,e,t,n){return Ye(r,e,t,n).assignments}function ge(r,e,t,n){let{assignments:i,unitKeyValue:o,layers:s,matchedPolicies:a}=Ye(r,e,t,n),c=Nt(e,a);return{decisionId:B(),assignments:i,metadata:{timestamp:new Date().toISOString(),unitKeyValue:o,layers:s,filteredContext:c,...r?.version?{configVersion:r.version}:{}}}}var M=class r{constructor(e={}){h(this,"_seen",new Map);h(this,"_ttlMs");h(this,"_maxEntries");h(this,"_lastCleanup",Date.now());this._ttlMs=e.ttlMs??36e5,this._maxEntries=e.maxEntries??1e4}static hashAssignments(e){let t=Object.keys(e).sort(),n=[];for(let i of t){let o=e[i],s=typeof o=="object"?JSON.stringify(o):String(o);n.push(`${i}=${s}`)}return n.join("|")}static createKey(e,t){return`${e}:${t}`}checkAndMark(e,t){let n=r.createKey(e,t),i=Date.now(),o=this._seen.get(n);return o!==void 0&&i-o<this._ttlMs?!1:(this._seen.set(n,i),this._maybeCleanup(i),!0)}wouldBeNew(e,t){let n=r.createKey(e,t),i=Date.now(),o=this._seen.get(n);return o===void 0?!0:i-o>=this._ttlMs}clear(){this._seen.clear()}get size(){return this._seen.size}_maybeCleanup(e){(e-this._lastCleanup>this._ttlMs*.2||this._seen.size>this._maxEntries)&&(this._lastCleanup=e,this._cleanup(e))}_cleanup(e){let t=[];for(let[n,i]of this._seen.entries())e-i>=this._ttlMs&&t.push(n);for(let n of t)this._seen.delete(n);if(this._seen.size>this._maxEntries){let i=Array.from(this._seen.entries()).sort((o,s)=>o[1]-s[1]).slice(0,this._seen.size-this._maxEntries);for(let[o]of i)this._seen.delete(o)}}};var Ze={resolutionErrors:0,droppedAssignmentLogs:0,droppedEventLogs:0,rejectedBundles:0,sideEffectErrors:0,lastError:null};function nn(r){return r instanceof Error?r:typeof r=="string"?new Error(r):new Error("An unknown error occurred")}var N=class{constructor(e={}){h(this,"_onResolutionError");h(this,"_onError");h(this,"_seen",new Set);h(this,"_counters",{...Ze});this._onResolutionError=e.onResolutionError??"default",this._onError=e.onError}get throwsOnResolutionError(){return this._onResolutionError==="throw"}resolve(e,t,n){try{return t()}catch(i){if(this._counters.resolutionErrors++,this._report(e,i),this._onResolutionError==="throw")throw i;return n()}}async resolveAsync(e,t,n){try{return await t()}catch(i){if(this._counters.resolutionErrors++,this._report(e,i),this._onResolutionError==="throw")throw i;return n()}}sideEffect(e,t,n){try{n()}catch(i){this._countSideEffect(t),this._report(e,i)}}async sideEffectAsync(e,t,n){try{await n()}catch(i){this._countSideEffect(t),this._report(e,i)}}recordRejectedBundle(e,t,n){this._counters.rejectedBundles++,this._report(e,new Error(t?`${t}: ${n}`:n))}getDiagnostics(){return{...this._counters}}reset(){Object.assign(this._counters,Ze,{lastError:null}),this._seen.clear()}_countSideEffect(e){switch(e){case"assignmentLog":this._counters.droppedAssignmentLogs++;break;case"eventLog":this._counters.droppedEventLogs++;break;case"bundleRejected":this._counters.rejectedBundles++;break;default:this._counters.sideEffectErrors++}}_report(e,t){let n=nn(t);this._counters.lastError={tag:e,name:n.name,message:n.message};let i=`${e}:${n.name}:${n.message}`;if(!this._seen.has(i)&&(this._seen.add(i),console.warn(`[Traffical] Contained error in ${e}:`,n.message),!!this._onError))try{this._onError(e,n)}catch{}}};function v(r,e){return{ok:!1,path:r,reason:e}}function R(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function D(r){return typeof r=="string"&&r.length>0}function z(r){if(!R(r))return v("","bundle is not an object");let e=r.hashing;if(!R(e))return v("hashing","missing or not an object");if(!D(e.unitKey))return v("hashing.unitKey","missing or not a non-empty string");if(typeof e.bucketCount!="number"||!Number.isInteger(e.bucketCount)||e.bucketCount<1)return v("hashing.bucketCount","not an integer >= 1");if(!Array.isArray(r.parameters))return v("parameters","not an array");for(let t=0;t<r.parameters.length;t++){let n=r.parameters[t],i=`parameters[${t}]`;if(!R(n))return v(i,"not an object");if(!D(n.key))return v(`${i}.key`,"missing or not a non-empty string");if(!D(n.layerId))return v(`${i}.layerId`,"missing or not a non-empty string");if(!("default"in n))return v(`${i}.default`,"missing")}if(!Array.isArray(r.layers))return v("layers","not an array");for(let t=0;t<r.layers.length;t++){let n=r.layers[t],i=`layers[${t}]`;if(!R(n))return v(i,"not an object");if(!D(n.id))return v(`${i}.id`,"missing or not a non-empty string");if(n.unitKey!==void 0&&typeof n.unitKey!="string")return v(`${i}.unitKey`,"present but not a string");if(!Array.isArray(n.policies))return v(`${i}.policies`,"not an array");for(let o=0;o<n.policies.length;o++){let s=n.policies[o],a=`${i}.policies[${o}]`;if(!R(s))return v(a,"not an object");if(!D(s.id))return v(`${a}.id`,"missing or not a non-empty string");if(!D(s.state))return v(`${a}.state`,"missing or not a non-empty string");if(!Array.isArray(s.allocations))return v(`${a}.allocations`,"not an array");if(!Array.isArray(s.conditions))return v(`${a}.conditions`,"not an array");for(let c=0;c<s.conditions.length;c++){let d=s.conditions[c],g=`${a}.conditions[${c}]`;if(!R(d))return v(g,"not an object");if(!D(d.field))return v(`${g}.field`,"missing or not a non-empty string");if(!D(d.op))return v(`${g}.op`,"missing or not a non-empty string")}for(let c=0;c<s.allocations.length;c++){let d=s.allocations[c],g=`${a}.allocations[${c}]`;if(!R(d))return v(g,"not an object");if(!D(d.name))return v(`${g}.name`,"missing or not a non-empty string");let l=d.bucketRange;if(!Array.isArray(l)||l.length!==2)return v(`${g}.bucketRange`,"not a 2-element array");let[m,u]=l;if(typeof m!="number"||typeof u!="number"||!Number.isInteger(m)||!Number.isInteger(u))return v(`${g}.bucketRange`,"bounds are not integers");if(m<0||u<m)return v(`${g}.bucketRange`,"bounds are negative or inverted");if(d.overrides!==void 0&&!R(d.overrides))return v(`${g}.overrides`,"present but not an object")}}}return{ok:!0}}var G=class{constructor(e){h(this,"config");h(this,"defaultTimeout");this.config=e,this.defaultTimeout=e.defaultTimeoutMs??5e3}async resolve(e){try{let t=new AbortController,n=setTimeout(()=>t.abort(),this.defaultTimeout),i=`${this.config.baseUrl}/v1/resolve`,o=await fetch(i,{method:"POST",headers:this._headers(),body:JSON.stringify({context:e.context,env:e.env??this.config.env,parameters:e.parameters}),signal:t.signal});return clearTimeout(n),o.ok?await o.json():(console.warn(`[Traffical] Resolve failed: ${o.status} ${o.statusText}`),null)}catch(t){return t instanceof Error&&t.name==="AbortError"?console.warn(`[Traffical] Resolve timed out after ${this.defaultTimeout}ms`):console.warn("[Traffical] Resolve error:",t),null}}async decideEntity(e,t){let n=t??Math.min(this.defaultTimeout,100);try{let i=new AbortController,o=setTimeout(()=>i.abort(),n),s=`${this.config.baseUrl}/v1/decide/${e.policyId}`,a=await fetch(s,{method:"POST",headers:this._headers(),body:JSON.stringify({entityId:e.entityId,unitKeyValue:e.unitKeyValue,allocationCount:e.allocationCount,context:e.context}),signal:i.signal});return clearTimeout(o),a.ok?await a.json():(console.warn(`[Traffical] Edge decide failed: ${a.status} ${a.statusText}`),null)}catch(i){return i instanceof Error&&i.name==="AbortError"?console.warn(`[Traffical] Edge decide timed out after ${n}ms`):console.warn("[Traffical] Edge decide error:",i),null}}async decideEntityBatch(e,t){if(e.length===0)return[];if(e.length===1)return[await this.decideEntity(e[0],t)];let n=t??Math.min(this.defaultTimeout,200);try{let i=new AbortController,o=setTimeout(()=>i.abort(),n),s=`${this.config.baseUrl}/v1/decide/batch`,a=await fetch(s,{method:"POST",headers:this._headers(),body:JSON.stringify({requests:e}),signal:i.signal});return clearTimeout(o),a.ok?(await a.json()).responses:(console.warn(`[Traffical] Edge batch decide failed: ${a.status} ${a.statusText}`),e.map(()=>null))}catch(i){return i instanceof Error&&i.name==="AbortError"?console.warn(`[Traffical] Edge batch decide timed out after ${n}ms`):console.warn("[Traffical] Edge batch decide error:",i),e.map(()=>null)}}_headers(){return{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"X-Org-Id":this.config.orgId,"X-Project-Id":this.config.projectId,"X-Env":this.config.env}}};function Re(r,e,t,n,i){let o=[];for(let a of e){let c=t[a];if(c==null)return null;o.push(String(c))}let s=o.join("_");return{policyId:r,entityId:s,unitKeyValue:n,allocationCount:i,context:t}}var q="failed_events";var he=class{constructor(e){this._queue=[];this._flushTimer=null;this._isFlushing=!1;this._isDisabled=!1;this._droppedCount=0;this._endpoint=e.endpoint,this._apiKey=e.apiKey,this._storage=e.storage,this._batchSize=e.batchSize??10,this._flushIntervalMs=e.flushIntervalMs??3e4,this._requestTimeoutMs=e.requestTimeoutMs??1e4,this._maxQueueSize=e.maxQueueSize??1e3,this._onError=e.onError,this._onSchemaWarnings=e.onSchemaWarnings,this._lifecycleProvider=e.lifecycleProvider,this._setupListeners(),this._retryFailedEvents(),this._startFlushTimer()}log(e){this._isDisabled||(this._queue.length>=this._maxQueueSize&&(this._queue.shift(),this._droppedCount++),this._queue.push(e),this._queue.length>=this._batchSize&&this.flush())}async flush(){if(this._isFlushing||this._isDisabled||this._queue.length===0)return;this._isFlushing=!0;let e=[...this._queue];this._queue=[];try{let t=await this._sendEvents(e);if(t>=200&&t<300)return;if(t===401){this._disable();return}if(t===429||t>=500){this._persistFailedEvents(e),this._onError?.(new Error(`HTTP ${t}: event delivery failed, will retry`));return}this._onError?.(new Error(`HTTP ${t}: batch rejected, dropping ${e.length} events`))}catch(t){this._persistFailedEvents(e),this._onError?.(t instanceof Error?t:new Error(String(t)))}finally{this._isFlushing=!1}}_disable(){this._isDisabled||(this._isDisabled=!0,this._queue=[],this._storage.remove(q),console.warn("[Traffical] API key rejected (HTTP 401); event delivery disabled for this client"))}get droppedCount(){return this._droppedCount}get isDisabled(){return this._isDisabled}flushBeacon(){if(this._queue.length===0)return!0;if(typeof fetch>"u")return this.flush(),!1;let e=[...this._queue];return this._queue=[],fetch(this._endpoint,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._apiKey}`},body:JSON.stringify({events:e}),keepalive:!0}).catch(()=>{this._persistFailedEvents(e)}),!0}get queueSize(){return this._queue.length}destroy(){this._flushTimer&&(clearInterval(this._flushTimer),this._flushTimer=null),this._removeListeners()}async _sendEvents(e){let t=new AbortController,n=setTimeout(()=>t.abort(),this._requestTimeoutMs),i;try{i=await fetch(this._endpoint,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._apiKey}`},body:JSON.stringify({events:e}),signal:t.signal})}finally{clearTimeout(n)}if(!i.ok)return i.status;if(this._onSchemaWarnings)try{let o=await i.json();o.schemaWarnings&&o.schemaWarnings.length>0&&this._onSchemaWarnings(o.schemaWarnings)}catch{}return i.status}_persistFailedEvents(e){let n=[...this._storage.get(q)??[],...e].slice(-100);this._storage.set(q,n)}_retryFailedEvents(){let e=this._storage.get(q);!e||e.length===0||(this._storage.remove(q),this._queue.push(...e))}_startFlushTimer(){this._flushIntervalMs<=0||(this._flushTimer=setInterval(()=>{this.flush().catch(()=>{})},this._flushIntervalMs))}_setupListeners(){this._lifecycleProvider&&(this._visibilityCallback=e=>{e==="background"?this._lifecycleProvider?.isUnloading()?this.flushBeacon():this.flush().catch(()=>{}):this._retryFailedEvents()},this._lifecycleProvider.onVisibilityChange(this._visibilityCallback))}_removeListeners(){this._lifecycleProvider&&this._visibilityCallback&&(this._lifecycleProvider.removeVisibilityListener(this._visibilityCallback),this._visibilityCallback=void 0)}};var X="exposure_dedup";var J=class r{constructor(e){this._storage=e.storage,this._sessionTtlMs=e.sessionTtlMs??18e5,this._seen=new Set,this._sessionStart=Date.now(),this._restore()}static createKey(e,t,n){return`${e}:${t}:${n}`}shouldTrack(e){return this._isSessionExpired()&&this._resetSession(),this._seen.has(e)?!1:(this._seen.add(e),this._persist(),!0)}checkAndMark(e,t,n){let i=r.createKey(e,t,n);return this.shouldTrack(i)}clear(){this._seen.clear(),this._storage.remove(X)}get size(){return this._seen.size}_isSessionExpired(){return Date.now()-this._sessionStart>this._sessionTtlMs}_resetSession(){this._seen.clear(),this._sessionStart=Date.now(),this._storage.remove(X)}_persist(){let e={seen:Array.from(this._seen),sessionStart:this._sessionStart};this._storage.set(X,e,this._sessionTtlMs)}_restore(){let e=this._storage.get(X);if(!e)return;if(Date.now()-e.sessionStart>this._sessionTtlMs){this._storage.remove(X);return}this._seen=new Set(e.seen),this._sessionStart=e.sessionStart}};var Q="stable_id",on="traffical_sid";var pe=class{constructor(e){this._cachedId=null;this._storage=e.storage,this._useCookieFallback=e.useCookieFallback??!0,this._cookieName=e.cookieName??on}getId(){if(this._cachedId)return this._cachedId;let e=this._storage.get(Q);return e?(this._cachedId=e,e):this._useCookieFallback&&(e=this._getCookie(),e)?(this._storage.set(Q,e),this._cachedId=e,e):(e=this._generateId(),this._persist(e),this._cachedId=e,e)}setId(e){this._persist(e),this._cachedId=e}clear(){this._storage.remove(Q),this._useCookieFallback&&this._deleteCookie(),this._cachedId=null}hasId(){return this._storage.get(Q)!==null||this._getCookie()!==null}_persist(e){this._storage.set(Q,e),this._useCookieFallback&&this._setCookie(e)}_generateId(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}_getCookie(){if(typeof document>"u")return null;try{let e=document.cookie.split(";");for(let t of e){let[n,i]=t.trim().split("=");if(n===this._cookieName&&i)return decodeURIComponent(i)}}catch{}return null}_setCookie(e){if(!(typeof document>"u"))try{document.cookie=`${this._cookieName}=${encodeURIComponent(e)}; max-age=31536000; path=/; SameSite=Lax`}catch{}}_deleteCookie(){if(!(typeof document>"u"))try{document.cookie=`${this._cookieName}=; max-age=0; path=/`}catch{}}};var Y="traffical:",Le=class{constructor(){this._available=this._checkAvailability()}get(e){if(!this._available)return null;try{let t=localStorage.getItem(Y+e);if(!t)return null;let n=JSON.parse(t);return n.expiresAt&&Date.now()>n.expiresAt?(this.remove(e),null):n.value}catch{return null}}set(e,t,n){if(this._available)try{let i={value:t,...n&&{expiresAt:Date.now()+n}};localStorage.setItem(Y+e,JSON.stringify(i))}catch{}}remove(e){if(this._available)try{localStorage.removeItem(Y+e)}catch{}}clear(){if(this._available)try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n?.startsWith(Y)&&e.push(n)}e.forEach(t=>localStorage.removeItem(t))}catch{}}_checkAvailability(){try{let e=Y+"__test__";return localStorage.setItem(e,"test"),localStorage.removeItem(e),!0}catch{return!1}}},Me=class{constructor(){this._store=new Map}get(e){let t=this._store.get(e);return t?t.expiresAt&&Date.now()>t.expiresAt?(this.remove(e),null):t.value:null}set(e,t,n){this._store.set(e,{value:t,...n&&{expiresAt:Date.now()+n}})}remove(e){this._store.delete(e)}clear(){this._store.clear()}};function nt(){let r=new Le;return r.get("__check__")!==null||sn()?r:new Me}function sn(){try{let r="__traffical_storage_test__";return localStorage.setItem(r,"test"),localStorage.removeItem(r),!0}catch{return!1}}var L="0.17.0";var an="js-client";function Oe(r,e){let t=new M({ttlMs:r.deduplicationTtlMs});return{name:"decision-tracking",onDecision(n){if(r.disabled)return;let i=n.metadata.unitKeyValue;if(!i)return;let o=M.hashAssignments(n.assignments);if(!t.checkAndMark(i,o))return;let s={type:"decision",id:n.decisionId,orgId:e.orgId,projectId:e.projectId,env:e.env,unitKey:i,timestamp:n.metadata.timestamp,assignments:n.assignments,layers:n.metadata.layers,context:n.metadata.filteredContext,configVersion:n.metadata.configVersion??e.getConfigVersion?.()??void 0,sdkName:an,sdkVersion:L};e.log(s)},onDestroy(){t.clear()}}}var cn="traffical_rdr";function ln(r,e,t){if(!(typeof document>"u"))try{document.cookie=`${r}=${encodeURIComponent(e)}; max-age=${t}; path=/; SameSite=Lax`}catch{}}function Be(r={}){let e=r.parameterKey??"redirect.url",t=r.compareMode??"pathname",n=r.cookieName??cn;return{name:"redirect",onInitialize(i){typeof window>"u"||i.decide({context:{},defaults:{[e]:""}})},onBeforeDecision(i){return typeof window>"u"?i:{"url.pathname":window.location.pathname,...i}},onDecision(i){let o=i.assignments[e];if(typeof o!="string"||!o)return;let s=t==="href"?window.location.href:window.location.pathname;if(o===s)return;let a=i.metadata.layers.find(c=>c.policyId&&c.allocationName);a&&ln(n,JSON.stringify({l:a.layerId,p:a.policyId,a:a.allocationName,ts:Date.now()}),86400),window.location.replace(o)}}}var un="traffical_rdr";function dn(r){if(typeof document>"u")return null;try{for(let e of document.cookie.split(";")){let[t,n]=e.trim().split("=");if(t===r&&n)return decodeURIComponent(n)}}catch{}return null}function fn(r,e){let t=dn(r);if(!t)return null;try{let n=JSON.parse(t);return Date.now()-n.ts>e?null:{layerId:n.l,policyId:n.p,allocationName:n.a}}catch{return null}}function Ne(r={}){let e=r.cookieName??un,t=r.expiryMs??864e5;function n(i){let o=fn(e,t);if(!o)return;i.attribution=i.attribution??[],i.attribution.some(a=>a.layerId===o.layerId&&a.policyId===o.policyId)||i.attribution.push(o)}return{name:"redirect-attribution",onTrack(i){return n(i),!0},onExposure(i){return n(i),!0}}}var me=[],it={};function gn(){if(typeof window>"u")return{version:1,instances:it,subscribe:()=>()=>{}};if(!window.__TRAFFICAL_DEBUG__){let r={version:1,instances:it,subscribe(e){return me.push(e),()=>{me=me.filter(t=>t!==e)}}};window.__TRAFFICAL_DEBUG__=r}return window.__TRAFFICAL_DEBUG__}function rt(r){for(let e of me)try{e(r)}catch{}}var hn=0;function pn(){return`traffical_${Date.now().toString(36)}_${(++hn).toString(36)}`}function mn(){return`evt_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}var yn="traffical-debug";function Ve(r={}){let e=r.instanceId??pn(),t=r.maxEvents??500,n=null,i=null,o={},s=[],a=null,c=null,d=[],g=[],l=[];function m(){return{ready:n?.isInitialized===!0,stableId:n?.getStableId?.()??null,effectiveUnitKey:c,configVersion:n?.getConfigVersion?.()??null,assignments:{...o},layers:[...s],lastDecisionId:a,overrides:n?.getOverrides?.()??{}}}function u(){let f=m();for(let b of g)try{b(f)}catch{}}function p(f,b){let A={id:mn(),type:f,timestamp:Date.now(),data:b};d.push(A),d.length>t&&d.splice(0,d.length-t);for(let U of l)try{U(A)}catch{}}function _(){if(n)try{n.decide({context:{},defaults:{}})}catch{}}let x={id:e,meta:{orgId:"",projectId:"",env:"",sdkVersion:L},getState:m,subscribe(f){return g.push(f),()=>{g=g.filter(b=>b!==f)}},getEvents(f){return f!==void 0?d.slice(-f):[...d]},onEvent(f){return l.push(f),()=>{l=l.filter(b=>b!==f)}},getConfigBundle(){return i},setUnitKey(f){n?.identify?n.identify(f):n?.setStableId&&n.setStableId(f),u()},setOverride(f,b){n?.applyOverrides&&n.applyOverrides({[f]:b}),u(),_()},clearOverride(f){if(n?.getOverrides&&n?.applyOverrides){let b=n.getOverrides();delete b[f],n.clearOverrides?.(),n.applyOverrides(b)}u(),_()},clearAllOverrides(){n?.clearOverrides?.(),u(),_()},getOverrides(){return n?.getOverrides?.()??{}},reDecide(){_()},async refresh(){n?.refreshConfig&&await n.refreshConfig()}};return{name:yn,onInitialize(f){n=f,i&&(x.meta.orgId=i.orgId,x.meta.projectId=i.projectId,x.meta.env=i.env);let b=gn();b.instances[e]=x,rt({type:"register",instanceId:e}),u()},onConfigUpdate(f){i=f,x.meta.orgId=f.orgId,x.meta.projectId=f.projectId,x.meta.env=f.env,u()},onDecision(f){o={...f.assignments},s=f.metadata?.layers?[...f.metadata.layers]:[],a=f.decisionId,f.metadata?.unitKeyValue&&(c=f.metadata.unitKeyValue),p("decision",f),u()},onResolve(f){o={...f},u()},onExposure(f){return p("exposure",f),!0},onTrack(f){return p("track",f),!0},onDestroy(){let f=typeof window<"u"?window.__TRAFFICAL_DEBUG__:null;f&&(delete f.instances[e],rt({type:"unregister",instanceId:e})),g=[],l=[],n=null}}}var ye=class{constructor(){this._plugins=[]}register(e){let t="plugin"in e?e.plugin:e,n="priority"in e?e.priority??0:0;return this._plugins.some(i=>i.plugin.name===t.name)?(console.warn(`[Traffical] Plugin "${t.name}" already registered, skipping.`),!1):(this._plugins.push({plugin:t,priority:n}),this._plugins.sort((i,o)=>o.priority-i.priority),!0)}unregister(e){let t=this._plugins.findIndex(n=>n.plugin.name===e);return t===-1?!1:(this._plugins.splice(t,1),!0)}get(e){return this._plugins.find(t=>t.plugin.name===e)?.plugin}getAll(){return this._plugins.map(e=>e.plugin)}async runInitialize(e){for(let{plugin:t}of this._plugins)if(t.onInitialize)try{await t.onInitialize(e)}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onInitialize error:`,n)}}runConfigUpdate(e){for(let{plugin:t}of this._plugins)if(t.onConfigUpdate)try{t.onConfigUpdate(e)}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onConfigUpdate error:`,n)}}runBeforeDecision(e){let t=e;for(let{plugin:n}of this._plugins)if(n.onBeforeDecision)try{let i=n.onBeforeDecision(t);i&&(t=i)}catch(i){console.warn(`[Traffical] Plugin "${n.name}" onBeforeDecision error:`,i)}return t}runDecision(e){for(let{plugin:t}of this._plugins)if(t.onDecision)try{t.onDecision(e)}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onDecision error:`,n)}}runResolve(e){for(let{plugin:t}of this._plugins)if(t.onResolve)try{t.onResolve(e)}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onResolve error:`,n)}}runExposure(e){for(let{plugin:t}of this._plugins)if(t.onExposure)try{if(t.onExposure(e)===!1)return!1}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onExposure error:`,n)}return!0}runTrack(e){for(let{plugin:t}of this._plugins)if(t.onTrack)try{if(t.onTrack(e)===!1)return!1}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onTrack error:`,n)}return!0}runDestroy(){for(let{plugin:e}of this._plugins)if(e.onDestroy)try{e.onDestroy()}catch(t){console.warn(`[Traffical] Plugin "${e.name}" onDestroy error:`,t)}}clear(){this._plugins=[]}};function ot(){let r=[],e=!1;function t(s){for(let a of r)a(s)}let n=()=>{e=!0,t("background")},i=()=>{typeof document<"u"&&t(document.visibilityState==="hidden"?"background":"foreground")},o=()=>{e=!0,t("background")};return typeof window<"u"&&(window.addEventListener("pagehide",n),window.addEventListener("beforeunload",o)),typeof document<"u"&&document.addEventListener("visibilitychange",i),{onVisibilityChange(s){r.push(s)},removeVisibilityListener(s){let a=r.indexOf(s);a!==-1&&r.splice(a,1)},isUnloading(){return e}}}var Ue="js-client";function st(r,e){if(e!==void 0)return{context:r,defaults:e};let t=r;return{context:t.context,defaults:t.defaults}}var vn="https://sdk.traffical.io",_n=6e4,bn=1e4,xn=3e5,En=3e5,In=100,Tn=.1;function wn(r){let e=r*Tn;return r+(Math.random()*2-1)*e}var V=class{constructor(e){this._state={bundle:null,etag:null,lastFetchTime:0,lastOfflineWarning:0,lastMalformedWarning:0,refreshTimer:null,isInitialized:!1,serverResponse:null,cachedEdgeResults:null};this._decisionCache=new Map;this._cumulativeAttribution=new Map;this._identityListeners=[];this._overrideListeners=[];this._overrides={};this._lastResolveContextKey=null;this._readyPromise=new Promise(e=>{this._readyResolve=e});let t=e.evaluationMode??"bundle";this._options={orgId:e.orgId,projectId:e.projectId,env:e.env,apiKey:e.apiKey,baseUrl:e.baseUrl??vn,localConfig:e.localConfig,refreshIntervalMs:e.refreshIntervalMs??_n,attributionMode:e.attributionMode??"cumulative",evaluationMode:t},this._requestTimeoutMs=e.configTimeoutMs??e.requestTimeoutMs??bn;let n={baseUrl:this._options.baseUrl,orgId:this._options.orgId,projectId:this._options.projectId,env:this._options.env,apiKey:this._options.apiKey,defaultTimeoutMs:e.resolveTimeoutMs??e.requestTimeoutMs};if(this._decisionClient=new G(n),this._errorPolicy=new N({onResolutionError:e.onResolutionError,onError:e.onError??e.errorBoundary?.onError}),this._storage=e.storage??nt(),this._lifecycleProvider=e.lifecycleProvider??ot(),!e.onSchemaWarnings)try{typeof globalThis<"u"&&globalThis.process?.env?.NODE_ENV==="development"&&(e.onSchemaWarnings=o=>{for(let s of o)console.warn(`[Traffical] Schema warning for "${s.event}":`,s.violations.map(a=>`${a.path}: ${a.message}`).join(", "))})}catch{}if(this._eventLogger=new he({endpoint:`${this._options.baseUrl}/v1/events/batch`,apiKey:e.apiKey,storage:this._storage,lifecycleProvider:this._lifecycleProvider,batchSize:e.batchSize??e.eventBatchSize,flushIntervalMs:e.flushIntervalMs??e.eventFlushIntervalMs,maxQueueSize:e.eventMaxQueueSize,requestTimeoutMs:e.eventsTimeoutMs??e.requestTimeoutMs,onError:i=>{console.warn("[Traffical] Event logging error:",i.message)},onSchemaWarnings:e.onSchemaWarnings}),this._exposureDedup=new J({storage:this._storage,sessionTtlMs:e.exposureSessionTtlMs}),this._stableId=new pe({storage:this._storage}),this._plugins=new ye,this._assignmentLogger=e.assignmentLogger,this._byoEventLogger=e.eventLogger,this._disableCloudEvents=e.disableCloudEvents??!1,this._assignmentLoggerDedup=e.deduplicateAssignmentLogger!==!1&&e.assignmentLogger?new J({storage:this._storage,sessionTtlMs:e.exposureSessionTtlMs}):null,e.trackDecisions!==!1&&(!this._disableCloudEvents||this._byoEventLogger)&&this._plugins.register({plugin:Oe({deduplicationTtlMs:e.decisionDeduplicationTtlMs},{orgId:this._options.orgId,projectId:this._options.projectId,env:this._options.env,log:i=>this._dispatchEvent(i),getConfigVersion:()=>this.getConfigVersion()}),priority:100}),e.plugins)for(let i of e.plugins)this._plugins.register(i);if(this._options.localConfig){let i=z(this._options.localConfig);i.ok?(this._state.bundle=this._options.localConfig,this._plugins.runConfigUpdate(this._options.localConfig)):(this._errorPolicy.recordRejectedBundle("localConfig",i.path,i.reason),this._options.localConfig=void 0)}if(typeof window<"u"){let i=window;i.__TRAFFICAL_INSTANCES__??(i.__TRAFFICAL_INSTANCES__=[]),i.__TRAFFICAL_INSTANCES__.push(this)}}async initialize(){await this._errorPolicy.sideEffectAsync("initialize","other",async()=>{this._options.evaluationMode==="server"?await this._fetchServerResolve():await this._fetchConfig(),this._startBackgroundRefresh(),this._state.isInitialized=!0,await this._plugins.runInitialize(this)}),this._readyResolve()}get isInitialized(){return this._state.isInitialized}async waitForReady(){return this._readyPromise}async close(){if(this._state.refreshTimer&&(clearInterval(this._state.refreshTimer),this._state.refreshTimer=null),this._lifecycleProvider.isUnloading()?this._eventLogger.flushBeacon():await this._eventLogger.flush().catch(()=>{}),this._eventLogger.destroy(),this._plugins.runDestroy(),this._identityListeners=[],this._overrideListeners=[],this._overrides={},typeof window<"u"){let t=window.__TRAFFICAL_INSTANCES__;if(t){let n=t.indexOf(this);n!==-1&&t.splice(n,1)}}}destroy(){if(this._state.refreshTimer&&(clearInterval(this._state.refreshTimer),this._state.refreshTimer=null),this._lifecycleProvider.isUnloading()?this._eventLogger.flushBeacon():this._eventLogger.flush().catch(()=>{}),this._eventLogger.destroy(),this._plugins.runDestroy(),this._identityListeners=[],this._overrideListeners=[],this._overrides={},typeof window<"u"){let t=window.__TRAFFICAL_INSTANCES__;if(t){let n=t.indexOf(this);n!==-1&&t.splice(n,1)}}}async refreshConfig(){await this._errorPolicy.sideEffectAsync("refreshConfig","other",async()=>{this._options.evaluationMode==="server"?await this._fetchServerResolve():await this._fetchConfig()})}getConfigVersion(){return this._state.serverResponse?.stateVersion??this._state.bundle?.version??null}getUnitKeyField(){return ue(this._getEffectiveBundle())}getParameterLayerId(e){return de(this._getEffectiveBundle(),e)}getDiagnostics(){return this._errorPolicy.getDiagnostics()}getParams(e,t){let{context:n,defaults:i}=st(e,t);return this._errorPolicy.resolve("getParams",()=>{if(this._options.evaluationMode==="server"&&this._state.serverResponse){this._maybeResolveForContext(n);let c={...i};for(let[d,g]of Object.entries(this._state.serverResponse.assignments))d in c&&(c[d]=g);return this._plugins.runResolve(c),this._applyOverridesToResult(c),c}let o=this._getEffectiveBundle(),s=this._enrichContext(n),a=fe(o,s,i);return this._plugins.runResolve(a),this._applyOverridesToResult(a),a},()=>({...i}))}decide(e,t){let{context:n,defaults:i}=st(e,t),o=this._errorPolicy.resolve("decide",()=>{if(this._options.evaluationMode==="server"&&this._state.serverResponse){this._maybeResolveForContext(n);let g=this._state.serverResponse,l={...i};for(let[u,p]of Object.entries(g.assignments))u in l&&(l[u]=p);let m={decisionId:B(),assignments:l,metadata:{...g.metadata,configVersion:g.stateVersion}};return this._cacheDecision(m),this._updateCumulativeAttribution(m),this._plugins.runDecision(m),this._applyOverridesToResult(m.assignments),m.metadata.reason=g.metadata.layers?.some(u=>u.policyId)?"resolved":"default",m}let s=this._getEffectiveBundle(),a=this._enrichContext(n);a=this._plugins.runBeforeDecision(a);let c=this._state.cachedEdgeResults??void 0,d=ge(s,a,i,c);return this._cacheDecision(d),this._updateCumulativeAttribution(d),this._plugins.runDecision(d),this._applyOverridesToResult(d.assignments),d.metadata.reason=s?d.metadata.layers.some(g=>g.policyId)?"resolved":"default":"no-bundle",d},()=>({decisionId:B(),assignments:{...i},metadata:{timestamp:new Date().toISOString(),unitKeyValue:"",layers:[],reason:"error"}}));return this._emitAssignmentLogEntries(o,"decision"),o}trackExposure(e){this._emitAssignmentLogEntries(e,"exposure"),this._errorPolicy.resolve("trackExposure",()=>{let t=e.metadata.unitKeyValue;if(!t)return;let n=e.metadata.configVersion??this.getConfigVersion()??void 0,i=[];for(let s of e.metadata.layers)!s.policyId||!s.allocationName||s.attributionOnly||!this._exposureDedup.checkAndMark(t,s.policyId,s.allocationName)||i.push(s);if(i.length===0)return;let o={type:"exposure",id:ke(),decisionId:e.decisionId,orgId:this._options.orgId,projectId:this._options.projectId,env:this._options.env,unitKey:t,timestamp:new Date().toISOString(),assignments:e.assignments,layers:i,context:e.metadata.filteredContext,configVersion:n,sdkName:Ue,sdkVersion:L};this._plugins.runExposure(o)&&this._dispatchEvent(o)},()=>{})}track(e,t,n){this._errorPolicy.resolve("track",()=>{let i=n?.unitKey??this._stableId.getId(),o=typeof n?.value=="number"?n.value:typeof t?.value=="number"?t.value:void 0,s=this._buildAttribution(i,n?.decisionId),a=n?.decisionId,c={type:"track",id:De(),orgId:this._options.orgId,projectId:this._options.projectId,env:this._options.env,unitKey:i,timestamp:new Date().toISOString(),event:e,value:o,values:n?.values,properties:t,decisionId:a,attribution:s,eventTimestamp:n?.eventTimestamp,sdkName:Ue,sdkVersion:L};this._plugins.runTrack(c)&&this._dispatchEvent(c)},()=>{})}async flushEvents(){await this._errorPolicy.sideEffectAsync("flushEvents","other",async()=>{await this._eventLogger.flush()})}use(e){if(!this._plugins.register(e))return this;if(this._state.isInitialized){try{e.onInitialize?.(this)}catch(n){console.warn(`[Traffical] Plugin "${e.name}" late onInitialize error:`,n)}if(this._state.bundle)try{e.onConfigUpdate?.(this._state.bundle)}catch(n){console.warn(`[Traffical] Plugin "${e.name}" late onConfigUpdate error:`,n)}}return this}getPlugin(e){return this._plugins.get(e)}getStableId(){return this._stableId.getId()}setStableId(e){this._stableId.setId(e)}identify(e){this._stableId.setId(e);for(let t of this._identityListeners)try{t(e)}catch{}}onIdentityChange(e){return this._identityListeners.push(e),()=>{this._identityListeners=this._identityListeners.filter(t=>t!==e)}}onOverridesChange(e){return this._overrideListeners.push(e),()=>{this._overrideListeners=this._overrideListeners.filter(t=>t!==e)}}applyOverrides(e){Object.assign(this._overrides,e),this._notifyOverrideListeners()}clearOverrides(){this._overrides={},this._notifyOverrideListeners()}getOverrides(){return{...this._overrides}}_notifyOverrideListeners(){let e={...this._overrides};for(let t of this._overrideListeners)try{t(e)}catch{}}_dispatchEvent(e){if(this._byoEventLogger)try{this._byoEventLogger(e)}catch{}this._disableCloudEvents||this._eventLogger.log(e)}_emitAssignmentLogEntries(e,t){if(!this._assignmentLogger)return;let n=e.metadata.unitKeyValue;if(!n)return;let i=e.metadata.configVersion??this.getConfigVersion()??void 0;for(let o of e.metadata.layers){if(!o.policyId||!o.allocationName||this._assignmentLoggerDedup&&!this._assignmentLoggerDedup.checkAndMark(n,o.policyId,`${o.allocationName}:${t}`))continue;let s=o.policyId,a=o.allocationName;this._errorPolicy.sideEffect("assignmentLogger","assignmentLog",()=>this._assignmentLogger({unitKey:n,policyId:s,policyKey:o.policyKey,allocationName:a,allocationKey:o.allocationKey,timestamp:e.metadata.timestamp,layerId:o.layerId,allocationId:o.allocationId,orgId:this._options.orgId,projectId:this._options.projectId,env:this._options.env,sdkName:Ue,sdkVersion:L,properties:e.metadata.filteredContext,type:t,decisionId:e.decisionId,anonymousId:this._stableId.getId(),id:Pe(),bucket:o.bucket>=0?o.bucket:void 0,probability:o.probability,modelVersion:o.modelVersion,configVersion:i}))}}_applyOverridesToResult(e){let t=Object.keys(this._overrides);if(t.length!==0)for(let n of t)n in e&&(e[n]=this._overrides[n])}_getEffectiveBundle(){return this._state.bundle??this._options.localConfig??null}_enrichContext(e){let n=this._getEffectiveBundle()?.hashing?.unitKey??"userId";return e[n]?e:{...e,[n]:this._stableId.getId()}}async _fetchConfig(){let e=`${this._options.baseUrl}/v1/config/${encodeURIComponent(this._options.projectId)}?env=${encodeURIComponent(this._options.env)}`,t={"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`};this._state.etag&&(t["If-None-Match"]=this._state.etag);let n=new AbortController,i=setTimeout(()=>n.abort(),this._requestTimeoutMs);try{let o=await fetch(e,{method:"GET",headers:t,signal:n.signal});if(o.status===304){this._state.lastFetchTime=Date.now();return}if(!o.ok)throw new Error(`HTTP ${o.status}: ${o.statusText}`);let s=await o.json(),a=o.headers.get("ETag"),c=z(s);if(!c.ok){this._errorPolicy.recordRejectedBundle("fetchConfig",c.path,c.reason),this._logMalformedBundleWarning();return}if(this._state.bundle=s,this._state.etag=a,this._state.lastFetchTime=Date.now(),this._findEdgePolicies(s).length>0){let d=await this._prefetchEdgeResults(s,this._enrichContext({}));this._state.cachedEdgeResults=d}else this._state.cachedEdgeResults=null;this._plugins.runConfigUpdate(s)}catch(o){this._logOfflineWarning(o)}finally{clearTimeout(i)}}_startBackgroundRefresh(){let e=this._options.evaluationMode==="server"?this._state.serverResponse?.suggestedRefreshMs??this._options.refreshIntervalMs:this._options.refreshIntervalMs;if(e<=0)return;let t=()=>{this._state.refreshTimer=setTimeout(()=>{t(),this._options.evaluationMode==="server"?this._fetchServerResolve().catch(()=>{}):this._fetchConfig().catch(()=>{})},wn(e))};t()}_maybeResolveForContext(e){let t=this._enrichContext(e),n;try{n=JSON.stringify(t)}catch{n=""}n!==this._lastResolveContextKey&&(this._lastResolveContextKey=n,this._fetchServerResolve(t))}async _fetchServerResolve(e){if(this._decisionClient)try{let t=e??this._enrichContext({}),n=await this._decisionClient.resolve({context:t});n&&(this._state.serverResponse=n,this._state.lastFetchTime=Date.now())}catch(t){this._logOfflineWarning(t)}}_findEdgePolicies(e){let t=[];for(let n of e.layers)for(let i of n.policies)i.state==="running"&&i.entityConfig?.resolutionMode==="edge"&&t.push(i);return t}async _prefetchEdgeResults(e,t){if(!this._decisionClient)return{};let n=this._findEdgePolicies(e);if(n.length===0)return{};let i=W(e,t);if(!i)return{};let o=n.map(s=>{if(!s.entityConfig)return null;let a=s.entityConfig.dynamicAllocations?typeof t[s.entityConfig.dynamicAllocations.countKey]=="number"?Math.floor(t[s.entityConfig.dynamicAllocations.countKey]):0:s.allocations.length;return Re(s.id,s.entityConfig.entityKeys,t,i,a||void 0)}).filter(s=>s!==null);if(o.length===0)return{};try{let s=await this._decisionClient.decideEntityBatch(o),a=new Map;for(let c=0;c<o.length;c++){let d=s[c];d&&a.set(o[c].policyId,{allocationIndex:d.allocationIndex,entityId:o[c].entityId})}return a.size>0?{edgeResults:a}:{}}catch{return{}}}_logOfflineWarning(e){let t=Date.now();t-this._state.lastOfflineWarning>xn&&(console.warn(`[Traffical] Failed to fetch config: ${e instanceof Error?e.message:String(e)}. Using ${this._state.bundle?"cached":"local"} config.`),this._state.lastOfflineWarning=t)}_logMalformedBundleWarning(){let e=Date.now();e-this._state.lastMalformedWarning>En&&(console.warn(`[Traffical] Discarded malformed config bundle (invalid hashing/shape). Using ${this._state.bundle?"cached":"local"} config.`),this._state.lastMalformedWarning=e)}_cacheDecision(e){if(this._decisionCache.size>=In){let t=this._decisionCache.keys().next().value;t&&this._decisionCache.delete(t)}this._decisionCache.set(e.decisionId,e)}_updateCumulativeAttribution(e){let t=e.metadata.unitKeyValue;if(!t)return;let n=this._cumulativeAttribution.get(t);n||(n=new Map,this._cumulativeAttribution.set(t,n));for(let i of e.metadata.layers){if(!i.policyId||!i.allocationName)continue;let o=`${i.layerId}:${i.policyId}`;n.set(o,{layerId:i.layerId,policyId:i.policyId,allocationName:i.allocationName})}}_buildAttribution(e,t){if(this._options.attributionMode==="decision"){if(!t)return;let i=this._decisionCache.get(t);return i?i.metadata.layers.filter(o=>o.policyId&&o.allocationName).map(o=>({layerId:o.layerId,policyId:o.policyId,allocationName:o.allocationName})):void 0}let n=this._cumulativeAttribution.get(e);return n&&n.size>0?Array.from(n.values()):void 0}};async function at(r){let e=new V(r);return await e.initialize(),e}function ct(r){return new V(r)}function lt(r={}){let e={observeMutations:r.observeMutations??!0,debounceMs:r.debounceMs??100},t=[],n={},i=null,o=null;function s(u,p){try{return new RegExp(u).test(p)}catch{return p===u}}function a(u,p,_){if(p==="innerHTML")u.innerHTML=_;else if(p==="textContent")u.textContent=_;else if(p==="src"&&"src"in u)u.src=_;else if(p==="href"&&"href"in u)u.href=_;else if(p.startsWith("style.")){let x=p.slice(6);u.style[x]=_}else u.setAttribute(p,_)}function c(u,p){let _=String(p);try{let x=document.querySelectorAll(u.selector);for(let C of x)a(C,u.property,_)}catch(x){console.warn(`[Traffical DOM Binding] Failed to apply binding for ${u.parameterKey}:`,x)}}function d(u,p=!1){n=u;let _=typeof window<"u"?window.location.pathname:"";for(let x of t){if(!p&&!s(x.urlPattern,_))continue;let C=u[x.parameterKey];C!==void 0&&c(x,C)}}function g(){o&&clearTimeout(o),o=setTimeout(()=>{d(n)},e.debounceMs)}function l(){i||typeof MutationObserver>"u"||typeof document>"u"||(i=new MutationObserver(()=>{g()}),i.observe(document.body,{childList:!0,subtree:!0}))}function m(){i&&(i.disconnect(),i=null),o&&(clearTimeout(o),o=null)}return{name:"dom-binding",onInitialize(){e.observeMutations&&l()},onConfigUpdate(u){t=u.domBindings??[]},onResolve(u){d(u)},onDecision(u){d(u.assignments)},onDestroy(){m(),t=[],n={}},applyBindings(u){d(u||n)},getBindings(){return t}}}var T=null;async function Cn(r){return T?(console.warn("[Traffical] Client already initialized. Returning existing instance."),T):(T=await at(r),T)}function An(r){return T?(console.warn("[Traffical] Client already initialized. Returning existing instance."),T):(T=ct(r),T.initialize().catch(e=>{console.warn("[Traffical] Initialization error:",e)}),T)}function Sn(){return T}function kn(){T&&(T.destroy(),T=null)}return yt(Dn);})();
|
|
1
|
+
/* @traffical/js-client v0.19.0 */
|
|
2
|
+
"use strict";var Traffical=(()=>{var ee=Object.defineProperty;var mt=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var _t=Object.prototype.hasOwnProperty;var bt=(r,e,t)=>e in r?ee(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var vt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),xt=(r,e)=>{for(var t in e)ee(r,t,{get:e[t],enumerable:!0})},Et=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of yt(e))!_t.call(r,i)&&i!==t&&ee(r,i,{get:()=>e[i],enumerable:!(n=mt(e,i))||n.enumerable});return r};var Tt=r=>Et(ee({},"__esModule",{value:!0}),r);var y=(r,e,t)=>(bt(r,typeof e!="symbol"?e+"":e,t),t);var Qe=vt(()=>{});var Hn={};xt(Hn,{AUTO_ATTRIBUTE_KEYS:()=>Z,TrafficalClient:()=>$,autoAttributesPlugin:()=>_e,createAutoAttributesPlugin:()=>Ke,createDOMBindingPlugin:()=>pt,createDebugPlugin:()=>Fe,createRedirectAttributionPlugin:()=>Ve,createRedirectPlugin:()=>$e,destroy:()=>jn,init:()=>Vn,initSync:()=>Kn,instance:()=>Fn});function It(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in r&&r.BYTES_PER_ELEMENT===1}function xe(r,e,t=""){let n=It(r),i=r?.length,o=e!==void 0;if(!n||o&&i!==e){let s=t&&`"${t}" `,a=o?` of length ${e}`:"",c=n?`length=${i}`:`type=${typeof r}`,u=s+"expected Uint8Array"+a+", got "+c;throw n?new RangeError(u):new TypeError(u)}return r}function Ee(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function He(r,e){xe(r,void 0,"digestInto() output");let t=e.outputLen;if(r.length<t)throw new RangeError('"digestInto() output" expected to be of length >='+t)}function V(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}function te(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function C(r,e){return r<<32-e|r>>>e}function We(r,e={}){let t=(i,o)=>r(o).update(i).digest(),n=r(void 0);return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.canXOF=n.canXOF,t.create=i=>r(i),Object.assign(t,e),Object.freeze(t)}var ze=r=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,r])});function Ge(r,e,t){return r&e^~r&t}function qe(r,e,t){return r&e^r&t^e&t}var ne=class{constructor(e,t,n,i){y(this,"blockLen");y(this,"outputLen");y(this,"canXOF",!1);y(this,"padOffset");y(this,"isLE");y(this,"buffer");y(this,"view");y(this,"finished",!1);y(this,"length",0);y(this,"pos",0);y(this,"destroyed",!1);this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.buffer=new Uint8Array(e),this.view=te(this.buffer)}update(e){Ee(this),xe(e);let{view:t,buffer:n,blockLen:i}=this,o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let c=te(e);for(;i<=o-s;s+=i)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Ee(this),He(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=this,{pos:s}=this;t[s++]=128,V(this.buffer.subarray(s)),this.padOffset>i-s&&(this.process(n,0),s=0);for(let l=s;l<i;l++)t[l]=0;n.setBigUint64(i-8,BigInt(this.length*8),o),this.process(n,0);let a=te(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen must be aligned to 32bit");let u=c/4,g=this.get();if(u>g.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l<u;l++)a.setUint32(4*l,g[l],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:i,finished:o,destroyed:s,pos:a}=this;return e.destroyed=s,e.finished=o,e.length=i,e.pos=a,i%t&&e.buffer.set(n),e}clone(){return this._cloneInto()}},k=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var At=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),D=new Uint32Array(64),Te=class extends ne{constructor(e){super(64,e,8,!1)}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:c}=this;return[e,t,n,i,o,s,a,c]}set(e,t,n,i,o,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let l=0;l<16;l++,t+=4)D[l]=e.getUint32(t,!1);for(let l=16;l<64;l++){let p=D[l-15],d=D[l-2],m=C(p,7)^C(p,18)^p>>>3,x=C(d,17)^C(d,19)^d>>>10;D[l]=x+D[l-7]+m+D[l-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:c,G:u,H:g}=this;for(let l=0;l<64;l++){let p=C(a,6)^C(a,11)^C(a,25),d=g+p+Ge(a,c,u)+At[l]+D[l]|0,x=(C(n,2)^C(n,13)^C(n,22))+qe(n,i,o)|0;g=u,u=c,c=a,a=s+d|0,s=o,o=i,i=n,n=d+x|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,g=g+this.H|0,this.set(n,i,o,s,a,c,u,g)}roundClean(){V(D)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),V(this.buffer)}},Ie=class extends Te{constructor(){super(32);y(this,"A",k[0]|0);y(this,"B",k[1]|0);y(this,"C",k[2]|0);y(this,"D",k[3]|0);y(this,"E",k[4]|0);y(this,"F",k[5]|0);y(this,"G",k[6]|0);y(this,"H",k[7]|0)}};var Xe=We(()=>new Ie,ze(1));var Je=new TextEncoder,Ae="v2";function re(r){return Je.encode(r).length}function ie(r,e){let t=re(r),n=re(e);return`traffical:assignment:${Ae}|u:${t}:${r}|l:${n}:${e}`}function K(r){return Xe(Je.encode(r))}function F(r){let e=0n;for(let t=0;t<8;t++)e=e<<8n|BigInt(r[t]);return e}function oe(r){return F(K(r))}function se(r,e,t){let n=K(ie(r,e)),i=F(n);return Number(i%BigInt(t))}function we(r,e){return r>=e[0]&&r<=e[1]}function ae(r,e){for(let t of e)if(we(r,t.bucketRange))return t;return null}var wt=1n<<53n,Ct=9007199254740992;function B(r,e){if(r.length===0||r.length===1)return 0;let t=oe(e),n=Number(t%wt)/Ct,i=0;for(let o=0;o<r.length;o++)if(i+=r[o],n<i)return o;return r.length-1}function Ce(r,e){let{field:t,op:n,value:i,values:o}=r,s=le(e,t);switch(n){case"eq":return s===i;case"neq":return s!==i;case"in":return Array.isArray(o)?o.includes(s):!1;case"nin":return Array.isArray(o)?!o.includes(s):!0;case"gt":return typeof s=="number"&&s>i;case"gte":return typeof s=="number"&&s>=i;case"lt":return typeof s=="number"&&s<i;case"lte":return typeof s=="number"&&s<=i;case"contains":return typeof s=="string"&&typeof i=="string"&&s.includes(i);case"startsWith":return typeof s=="string"&&typeof i=="string"&&s.startsWith(i);case"endsWith":return typeof s=="string"&&typeof i=="string"&&s.endsWith(i);case"regex":if(typeof s!="string"||typeof i!="string")return!1;try{return new RegExp(i).test(s)}catch{return!1}case"exists":return s!=null;case"notExists":return s==null;default:return!1}}function ce(r,e){return r.length===0?!0:r.every(t=>Ce(t,e))}function le(r,e){if(r!==null&&typeof r=="object"&&Object.prototype.hasOwnProperty.call(r,e))return r[e];let t=e.split("."),n=r;for(let i of t){if(n==null)return;if(typeof n=="object")n=n[i];else return}return n}function Se(r,e){let t=r.intercept;for(let{key:n,coef:i,missing:o}of r.numeric){let s=e[n];t+=typeof s=="number"?i*s:o}for(let{key:n,values:i,missing:o}of r.categorical){let s=e[n],a=s!=null?String(s):null;t+=a!==null&&a in i?i[a]:o}return t}function ke(r,e){if(r.length===0)return[];if(r.length===1)return[1];let t=Math.max(e,1e-10),n=r.map(a=>a/t),i=Math.max(...n),o=n.map(a=>Math.exp(a-i)),s=o.reduce((a,c)=>a+c,0);return o.map(a=>a/s)}function Pe(r,e){if(r.length===0)return[];if(e<=0)return r;let t=r.length,n=1/t,i=Math.min(e,n),o=r.map(a=>Math.max(a,i)),s=o.reduce((a,c)=>a+c,0);return s===0?Array(t).fill(1/t):o.map(a=>a/s)}function ue(r,e,t){let n=r.contextualModel;if(!n||r.allocations.length===0)return null;let i=Pt(n,r.allocations,e),o=ke(i,n.gamma),s=Pe(o,n.actionProbabilityFloor),a=`ctx:${t}:${r.id}`,c=B(s,a);return{allocation:r.allocations[c],probability:s[c]}}function Pt(r,e,t){return e.map(n=>{let i=r.coefficients[n.key??n.name];return i?Se(i,t):r.defaultAllocationScore})}var Rt=r=>crypto.getRandomValues(new Uint8Array(r)),Dt=(r,e,t)=>{let n=(2<<Math.log2(r.length-1))-1,i=-~(1.6*n*e/r.length);return(o=e)=>{let s="";for(;;){let a=t(i),c=i|0;for(;c--;)if(s+=r[a[c]&n]||"",s.length>=o)return s}}},Ye=(r,e=21)=>Dt(r,e|0,Rt);function de(r){let e=new Error(r);return e.source="ulid",e}var Re="0123456789ABCDEFGHJKMNPQRSTVWXYZ",j=Re.length,Ze=Math.pow(2,48)-1,Ot=10,Lt=16;function Mt(r){let e=Math.floor(r()*j);return e===j&&(e=j-1),Re.charAt(e)}function Bt(r,e){if(isNaN(r))throw new Error(r+" must be a number");if(r>Ze)throw de("cannot encode time greater than "+Ze);if(r<0)throw de("time must be positive");if(Number.isInteger(Number(r))===!1)throw de("time must be an integer");let t,n="";for(;e>0;e--)t=r%j,n=Re.charAt(t)+n,r=(r-t)/j;return n}function Nt(r,e){let t="";for(;r>0;r--)t=Mt(e)+t;return t}function Ut(r=!1,e){e||(e=typeof window<"u"?window:null);let t=e&&(e.crypto||e.msCrypto);if(t)return()=>{let n=new Uint8Array(1);return t.getRandomValues(n),n[0]/255};try{let n=Qe();return()=>n.randomBytes(1).readUInt8()/255}catch{}if(r){try{console.error("secure crypto unusable, falling back to insecure Math.random()!")}catch{}return()=>Math.random()}throw de("secure crypto unusable, insecure Math.random not allowed")}function $t(r){return r||(r=Ut()),function(t){return isNaN(t)&&(t=Date.now()),Bt(t,Ot)+Nt(Lt,r)}}var et=$t();var Vt="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Kt=8,Er=Ye(Vt,Kt);function H(r){return`${r}_${et()}`}function N(){return H("dec")}function De(){return H("exp")}function Oe(){return H("trk")}function Le(){return H("asn")}function Ft(r,e){let t=new Set;for(let i of e)if(i.contextLogging?.allowedFields)for(let o of i.contextLogging.allowedFields)t.add(o);if(t.size===0)return;let n={};for(let i of t){let o=le(r,i);o!==void 0&&(n[i]=o)}return Object.keys(n).length>0?n:void 0}function jt(r,e){let t=[];for(let n of r){let i=e[n];if(i==null)return null;t.push(String(i))}return t.join("_")}function tt(r){if(r<=0)return[];let e=1/r;return Array(r).fill(e)}function Ht(r,e,t,n){let i=r.entityState?.[e];if(!i)return tt(n);let o=i.entities[t];if(o&&o.weights.length===n)return o.weights;let s=i._global;return s&&s.weights.length===n?s.weights:tt(n)}function Wt(r,e,t,n){let i=e.entityConfig;if(!i)return null;let o=jt(i.entityKeys,t);if(!o)return null;let s,a;if(i.dynamicAllocations){let l=i.dynamicAllocations.countKey,p=t[l];if(typeof p!="number"||p<=0)return null;a=Math.floor(p),s=Array.from({length:a},(d,m)=>({id:`${e.id}_dynamic_${m}`,name:String(m),bucketRange:[0,0],overrides:{}}))}else s=e.allocations,a=s.length;if(a===0)return null;let c=Ht(r,e.id,o,a),u=`${o}:${n}:${e.id}`,g=B(c,u);return{allocation:s[g],weight:c[g],entityId:o}}function W(r,e){let t=e[r.hashing.unitKey];return t==null?null:String(t)}function fe(r){return r?.hashing?.unitKey??null}function ge(r,e){return r?r.parameters.find(n=>n.key===e)?.layerId??null:null}function nt(r,e,t,n){let i={...t},o=[],s=[];if(!r)return{assignments:i,unitKeyValue:"",layers:o,matchedPolicies:s};let a=W(r,e)??"",c=new Set(Object.keys(t)),u=r.parameters.filter(l=>c.has(l.key));for(let l of u)l.key in i&&(i[l.key]=l.default);let g=new Map;for(let l of u){let p=g.get(l.layerId)||[];p.push(l),g.set(l.layerId,p)}for(let l of r.layers){let p=g.get(l.id),d=p&&p.length>0,m=l.unitKey,x=m!=null;if(x&&String(m).trim()===""){o.push({layerId:l.id,bucket:-1,...d?{}:{attributionOnly:!0}});continue}let b=x?String(e[m]??""):a;if(!b){o.push({layerId:l.id,bucket:-1,...x?{unitKey:m,unitKeyValue:""}:{},...d?{}:{attributionOnly:!0}});continue}let I=se(b,l.id,r.hashing.bucketCount),w,E,R,f;for(let h of l.policies)if(h.state==="running"){if(h.eligibleBucketRange){let{start:v,end:T}=h.eligibleBucketRange;if(I<v||I>T)continue}if(ce(h.conditions,e)){if(h.contextualModel){let v=ue(h,e,b);if(v){if(w=h,E=v.allocation,R=v.probability,f=h.contextualModel.generatedAt??h.contextualModel.modelVersion,s.push(h),d)for(let[T,S]of Object.entries(v.allocation.overrides))T in i&&(i[T]=S);break}}if(h.entityConfig&&h.entityConfig.resolutionMode==="bundle"){let v=Wt(r,h,e,b);if(v){if(w=h,E=v.allocation,R=v.weight,s.push(h),d&&!h.entityConfig.dynamicAllocations)for(let[T,S]of Object.entries(v.allocation.overrides))T in i&&(i[T]=S);break}}else if(h.entityConfig&&h.entityConfig.resolutionMode==="edge"){let v=n?.edgeResults?.get(h.id);if(v){if(w=h,s.push(h),h.entityConfig.dynamicAllocations)E={id:`${h.id}_dynamic_${v.allocationIndex}`,name:String(v.allocationIndex),bucketRange:[0,0],overrides:{}};else if(h.allocations[v.allocationIndex]&&(E=h.allocations[v.allocationIndex],d&&E))for(let[T,S]of Object.entries(E.overrides))T in i&&(i[T]=S);break}continue}else{let v=ae(I,h.allocations);if(v){if(w=h,E=v,h.kind==="adaptive"){let[T,S]=v.bucketRange;R=(S-T+1)/r.hashing.bucketCount}if(s.push(h),d)for(let[T,S]of Object.entries(v.overrides))T in i&&(i[T]=S);break}}}}o.push({layerId:l.id,bucket:I,policyId:w?.id,policyKey:w?.key,allocationId:E?.id,allocationName:E?.name,allocationKey:E?.key,...R!==void 0&&R>0&&R<=1?{probability:R}:{},...f!==void 0?{modelVersion:f}:{},...x?{unitKey:m,unitKeyValue:b}:{},...d?{}:{attributionOnly:!0}})}return{assignments:i,unitKeyValue:a,layers:o,matchedPolicies:s}}function he(r,e,t,n){return nt(r,e,t,n).assignments}function pe(r,e,t,n){let{assignments:i,unitKeyValue:o,layers:s,matchedPolicies:a}=nt(r,e,t,n),c=Ft(e,a);return{decisionId:N(),assignments:i,metadata:{timestamp:new Date().toISOString(),unitKeyValue:o,layers:s,filteredContext:c,...r?.version?{configVersion:r.version}:{}}}}var M=class r{constructor(e={}){y(this,"_seen",new Map);y(this,"_ttlMs");y(this,"_maxEntries");y(this,"_lastCleanup",Date.now());this._ttlMs=e.ttlMs??36e5,this._maxEntries=e.maxEntries??1e4}static hashAssignments(e){let t=Object.keys(e).sort(),n=[];for(let i of t){let o=e[i],s=typeof o=="object"?JSON.stringify(o):String(o);n.push(`${i}=${s}`)}return n.join("|")}static createKey(e,t){return`${e}:${t}`}checkAndMark(e,t){let n=r.createKey(e,t),i=Date.now(),o=this._seen.get(n);return o!==void 0&&i-o<this._ttlMs?!1:(this._seen.set(n,i),this._maybeCleanup(i),!0)}wouldBeNew(e,t){let n=r.createKey(e,t),i=Date.now(),o=this._seen.get(n);return o===void 0?!0:i-o>=this._ttlMs}clear(){this._seen.clear()}get size(){return this._seen.size}_maybeCleanup(e){(e-this._lastCleanup>this._ttlMs*.2||this._seen.size>this._maxEntries)&&(this._lastCleanup=e,this._cleanup(e))}_cleanup(e){let t=[];for(let[n,i]of this._seen.entries())e-i>=this._ttlMs&&t.push(n);for(let n of t)this._seen.delete(n);if(this._seen.size>this._maxEntries){let i=Array.from(this._seen.entries()).sort((o,s)=>o[1]-s[1]).slice(0,this._seen.size-this._maxEntries);for(let[o]of i)this._seen.delete(o)}}};var rt={resolutionErrors:0,droppedAssignmentLogs:0,droppedEventLogs:0,rejectedBundles:0,sideEffectErrors:0,lastError:null};function cn(r){return r instanceof Error?r:typeof r=="string"?new Error(r):new Error("An unknown error occurred")}var U=class{constructor(e={}){y(this,"_onResolutionError");y(this,"_onError");y(this,"_seen",new Set);y(this,"_counters",{...rt});this._onResolutionError=e.onResolutionError??"default",this._onError=e.onError}get throwsOnResolutionError(){return this._onResolutionError==="throw"}resolve(e,t,n){try{return t()}catch(i){if(this._counters.resolutionErrors++,this._report(e,i),this._onResolutionError==="throw")throw i;return n()}}async resolveAsync(e,t,n){try{return await t()}catch(i){if(this._counters.resolutionErrors++,this._report(e,i),this._onResolutionError==="throw")throw i;return n()}}sideEffect(e,t,n){try{n()}catch(i){this._countSideEffect(t),this._report(e,i)}}async sideEffectAsync(e,t,n){try{await n()}catch(i){this._countSideEffect(t),this._report(e,i)}}recordRejectedBundle(e,t,n){this._counters.rejectedBundles++,this._report(e,new Error(t?`${t}: ${n}`:n))}getDiagnostics(){return{...this._counters}}reset(){Object.assign(this._counters,rt,{lastError:null}),this._seen.clear()}_countSideEffect(e){switch(e){case"assignmentLog":this._counters.droppedAssignmentLogs++;break;case"eventLog":this._counters.droppedEventLogs++;break;case"bundleRejected":this._counters.rejectedBundles++;break;default:this._counters.sideEffectErrors++}}_report(e,t){let n=cn(t);this._counters.lastError={tag:e,name:n.name,message:n.message};let i=`${e}:${n.name}:${n.message}`;if(!this._seen.has(i)&&(this._seen.add(i),console.warn(`[Traffical] Contained error in ${e}:`,n.message),!!this._onError))try{this._onError(e,n)}catch{}}};function _(r,e){return{ok:!1,path:r,reason:e}}function O(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function P(r){return typeof r=="string"&&r.length>0}function z(r){if(!O(r))return _("","bundle is not an object");let e=r.hashing;if(!O(e))return _("hashing","missing or not an object");if(!P(e.unitKey))return _("hashing.unitKey","missing or not a non-empty string");if(typeof e.bucketCount!="number"||!Number.isInteger(e.bucketCount)||e.bucketCount<1)return _("hashing.bucketCount","not an integer >= 1");if(!Array.isArray(r.parameters))return _("parameters","not an array");for(let t=0;t<r.parameters.length;t++){let n=r.parameters[t],i=`parameters[${t}]`;if(!O(n))return _(i,"not an object");if(!P(n.key))return _(`${i}.key`,"missing or not a non-empty string");if(!P(n.layerId))return _(`${i}.layerId`,"missing or not a non-empty string");if(!("default"in n))return _(`${i}.default`,"missing")}if(!Array.isArray(r.layers))return _("layers","not an array");for(let t=0;t<r.layers.length;t++){let n=r.layers[t],i=`layers[${t}]`;if(!O(n))return _(i,"not an object");if(!P(n.id))return _(`${i}.id`,"missing or not a non-empty string");if(n.unitKey!==void 0&&typeof n.unitKey!="string")return _(`${i}.unitKey`,"present but not a string");if(!Array.isArray(n.policies))return _(`${i}.policies`,"not an array");for(let o=0;o<n.policies.length;o++){let s=n.policies[o],a=`${i}.policies[${o}]`;if(!O(s))return _(a,"not an object");if(!P(s.id))return _(`${a}.id`,"missing or not a non-empty string");if(!P(s.state))return _(`${a}.state`,"missing or not a non-empty string");if(!Array.isArray(s.allocations))return _(`${a}.allocations`,"not an array");if(!Array.isArray(s.conditions))return _(`${a}.conditions`,"not an array");for(let c=0;c<s.conditions.length;c++){let u=s.conditions[c],g=`${a}.conditions[${c}]`;if(!O(u))return _(g,"not an object");if(!P(u.field))return _(`${g}.field`,"missing or not a non-empty string");if(!P(u.op))return _(`${g}.op`,"missing or not a non-empty string")}for(let c=0;c<s.allocations.length;c++){let u=s.allocations[c],g=`${a}.allocations[${c}]`;if(!O(u))return _(g,"not an object");if(!P(u.name))return _(`${g}.name`,"missing or not a non-empty string");let l=u.bucketRange;if(!Array.isArray(l)||l.length!==2)return _(`${g}.bucketRange`,"not a 2-element array");let[p,d]=l;if(typeof p!="number"||typeof d!="number"||!Number.isInteger(p)||!Number.isInteger(d))return _(`${g}.bucketRange`,"bounds are not integers");if(p<0||d<p)return _(`${g}.bucketRange`,"bounds are negative or inverted");if(u.overrides!==void 0&&!O(u.overrides))return _(`${g}.overrides`,"present but not an object")}}}return{ok:!0}}var G=class{constructor(e){y(this,"config");y(this,"defaultTimeout");this.config=e,this.defaultTimeout=e.defaultTimeoutMs??5e3}async resolve(e){try{let t=new AbortController,n=setTimeout(()=>t.abort(),this.defaultTimeout),i=`${this.config.baseUrl}/v1/resolve`,o=await fetch(i,{method:"POST",headers:this._headers(),body:JSON.stringify({context:e.context,env:e.env??this.config.env,parameters:e.parameters}),signal:t.signal});return clearTimeout(n),o.ok?await o.json():(console.warn(`[Traffical] Resolve failed: ${o.status} ${o.statusText}`),null)}catch(t){return t instanceof Error&&t.name==="AbortError"?console.warn(`[Traffical] Resolve timed out after ${this.defaultTimeout}ms`):console.warn("[Traffical] Resolve error:",t),null}}async decideEntity(e,t){let n=t??Math.min(this.defaultTimeout,100);try{let i=new AbortController,o=setTimeout(()=>i.abort(),n),s=`${this.config.baseUrl}/v1/decide/${e.policyId}`,a=await fetch(s,{method:"POST",headers:this._headers(),body:JSON.stringify({entityId:e.entityId,unitKeyValue:e.unitKeyValue,allocationCount:e.allocationCount,context:e.context}),signal:i.signal});return clearTimeout(o),a.ok?await a.json():(console.warn(`[Traffical] Edge decide failed: ${a.status} ${a.statusText}`),null)}catch(i){return i instanceof Error&&i.name==="AbortError"?console.warn(`[Traffical] Edge decide timed out after ${n}ms`):console.warn("[Traffical] Edge decide error:",i),null}}async decideEntityBatch(e,t){if(e.length===0)return[];if(e.length===1)return[await this.decideEntity(e[0],t)];let n=t??Math.min(this.defaultTimeout,200);try{let i=new AbortController,o=setTimeout(()=>i.abort(),n),s=`${this.config.baseUrl}/v1/decide/batch`,a=await fetch(s,{method:"POST",headers:this._headers(),body:JSON.stringify({requests:e}),signal:i.signal});return clearTimeout(o),a.ok?(await a.json()).responses:(console.warn(`[Traffical] Edge batch decide failed: ${a.status} ${a.statusText}`),e.map(()=>null))}catch(i){return i instanceof Error&&i.name==="AbortError"?console.warn(`[Traffical] Edge batch decide timed out after ${n}ms`):console.warn("[Traffical] Edge batch decide error:",i),e.map(()=>null)}}_headers(){return{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"X-Org-Id":this.config.orgId,"X-Project-Id":this.config.projectId,"X-Env":this.config.env}}};function Me(r,e,t,n,i){let o=[];for(let a of e){let c=t[a];if(c==null)return null;o.push(String(c))}let s=o.join("_");return{policyId:r,entityId:s,unitKeyValue:n,allocationCount:i,context:t}}var q="failed_events";var me=class{constructor(e){this._queue=[];this._flushTimer=null;this._isFlushing=!1;this._isDisabled=!1;this._droppedCount=0;this._endpoint=e.endpoint,this._apiKey=e.apiKey,this._storage=e.storage,this._batchSize=e.batchSize??10,this._flushIntervalMs=e.flushIntervalMs??3e4,this._requestTimeoutMs=e.requestTimeoutMs??1e4,this._maxQueueSize=e.maxQueueSize??1e3,this._onError=e.onError,this._onSchemaWarnings=e.onSchemaWarnings,this._lifecycleProvider=e.lifecycleProvider,this._setupListeners(),this._retryFailedEvents(),this._startFlushTimer()}log(e){this._isDisabled||(this._queue.length>=this._maxQueueSize&&(this._queue.shift(),this._droppedCount++),this._queue.push(e),this._queue.length>=this._batchSize&&this.flush())}async flush(){if(this._isFlushing||this._isDisabled||this._queue.length===0)return;this._isFlushing=!0;let e=[...this._queue];this._queue=[];try{let t=await this._sendEvents(e);if(t>=200&&t<300)return;if(t===401){this._disable();return}if(t===429||t>=500){this._persistFailedEvents(e),this._onError?.(new Error(`HTTP ${t}: event delivery failed, will retry`));return}this._onError?.(new Error(`HTTP ${t}: batch rejected, dropping ${e.length} events`))}catch(t){this._persistFailedEvents(e),this._onError?.(t instanceof Error?t:new Error(String(t)))}finally{this._isFlushing=!1}}_disable(){this._isDisabled||(this._isDisabled=!0,this._queue=[],this._storage.remove(q),console.warn("[Traffical] API key rejected (HTTP 401); event delivery disabled for this client"))}get droppedCount(){return this._droppedCount}get isDisabled(){return this._isDisabled}flushBeacon(){if(this._queue.length===0)return!0;if(typeof fetch>"u")return this.flush(),!1;let e=[...this._queue];return this._queue=[],fetch(this._endpoint,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._apiKey}`},body:JSON.stringify({events:e}),keepalive:!0}).catch(()=>{this._persistFailedEvents(e)}),!0}get queueSize(){return this._queue.length}destroy(){this._flushTimer&&(clearInterval(this._flushTimer),this._flushTimer=null),this._removeListeners()}async _sendEvents(e){let t=new AbortController,n=setTimeout(()=>t.abort(),this._requestTimeoutMs),i;try{i=await fetch(this._endpoint,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._apiKey}`},body:JSON.stringify({events:e}),signal:t.signal})}finally{clearTimeout(n)}if(!i.ok)return i.status;if(this._onSchemaWarnings)try{let o=await i.json();o.schemaWarnings&&o.schemaWarnings.length>0&&this._onSchemaWarnings(o.schemaWarnings)}catch{}return i.status}_persistFailedEvents(e){let n=[...this._storage.get(q)??[],...e].slice(-100);this._storage.set(q,n)}_retryFailedEvents(){let e=this._storage.get(q);!e||e.length===0||(this._storage.remove(q),this._queue.push(...e))}_startFlushTimer(){this._flushIntervalMs<=0||(this._flushTimer=setInterval(()=>{this.flush().catch(()=>{})},this._flushIntervalMs))}_setupListeners(){this._lifecycleProvider&&(this._visibilityCallback=e=>{e==="background"?this._lifecycleProvider?.isUnloading()?this.flushBeacon():this.flush().catch(()=>{}):this._retryFailedEvents()},this._lifecycleProvider.onVisibilityChange(this._visibilityCallback))}_removeListeners(){this._lifecycleProvider&&this._visibilityCallback&&(this._lifecycleProvider.removeVisibilityListener(this._visibilityCallback),this._visibilityCallback=void 0)}};var X="exposure_dedup";var J=class r{constructor(e){this._storage=e.storage,this._sessionTtlMs=e.sessionTtlMs??18e5,this._seen=new Set,this._sessionStart=Date.now(),this._restore()}static createKey(e,t,n){return`${e}:${t}:${n}`}shouldTrack(e){return this._isSessionExpired()&&this._resetSession(),this._seen.has(e)?!1:(this._seen.add(e),this._persist(),!0)}checkAndMark(e,t,n){let i=r.createKey(e,t,n);return this.shouldTrack(i)}clear(){this._seen.clear(),this._storage.remove(X)}get size(){return this._seen.size}_isSessionExpired(){return Date.now()-this._sessionStart>this._sessionTtlMs}_resetSession(){this._seen.clear(),this._sessionStart=Date.now(),this._storage.remove(X)}_persist(){let e={seen:Array.from(this._seen),sessionStart:this._sessionStart};this._storage.set(X,e,this._sessionTtlMs)}_restore(){let e=this._storage.get(X);if(!e)return;if(Date.now()-e.sessionStart>this._sessionTtlMs){this._storage.remove(X);return}this._seen=new Set(e.seen),this._sessionStart=e.sessionStart}};var Y="stable_id",un="traffical_sid";var ye=class{constructor(e){this._cachedId=null;this._storage=e.storage,this._useCookieFallback=e.useCookieFallback??!0,this._cookieName=e.cookieName??un}getId(){if(this._cachedId)return this._cachedId;let e=this._storage.get(Y);return e?(this._cachedId=e,e):this._useCookieFallback&&(e=this._getCookie(),e)?(this._storage.set(Y,e),this._cachedId=e,e):(e=this._generateId(),this._persist(e),this._cachedId=e,e)}setId(e){this._persist(e),this._cachedId=e}clear(){this._storage.remove(Y),this._useCookieFallback&&this._deleteCookie(),this._cachedId=null}hasId(){return this._storage.get(Y)!==null||this._getCookie()!==null}_persist(e){this._storage.set(Y,e),this._useCookieFallback&&this._setCookie(e)}_generateId(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}_getCookie(){if(typeof document>"u")return null;try{let e=document.cookie.split(";");for(let t of e){let[n,i]=t.trim().split("=");if(n===this._cookieName&&i)return decodeURIComponent(i)}}catch{}return null}_setCookie(e){if(!(typeof document>"u"))try{document.cookie=`${this._cookieName}=${encodeURIComponent(e)}; max-age=31536000; path=/; SameSite=Lax`}catch{}}_deleteCookie(){if(!(typeof document>"u"))try{document.cookie=`${this._cookieName}=; max-age=0; path=/`}catch{}}};var Q="traffical:",Be=class{constructor(){this._available=this._checkAvailability()}get(e){if(!this._available)return null;try{let t=localStorage.getItem(Q+e);if(!t)return null;let n=JSON.parse(t);return n.expiresAt&&Date.now()>n.expiresAt?(this.remove(e),null):n.value}catch{return null}}set(e,t,n){if(this._available)try{let i={value:t,...n&&{expiresAt:Date.now()+n}};localStorage.setItem(Q+e,JSON.stringify(i))}catch{}}remove(e){if(this._available)try{localStorage.removeItem(Q+e)}catch{}}clear(){if(this._available)try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n?.startsWith(Q)&&e.push(n)}e.forEach(t=>localStorage.removeItem(t))}catch{}}_checkAvailability(){try{let e=Q+"__test__";return localStorage.setItem(e,"test"),localStorage.removeItem(e),!0}catch{return!1}}},Ne=class{constructor(){this._store=new Map}get(e){let t=this._store.get(e);return t?t.expiresAt&&Date.now()>t.expiresAt?(this.remove(e),null):t.value:null}set(e,t,n){this._store.set(e,{value:t,...n&&{expiresAt:Date.now()+n}})}remove(e){this._store.delete(e)}clear(){this._store.clear()}};function st(){let r=new Be;return r.get("__check__")!==null||dn()?r:new Ne}function dn(){try{let r="__traffical_storage_test__";return localStorage.setItem(r,"test"),localStorage.removeItem(r),!0}catch{return!1}}var L="0.19.0";var fn="js-client";function Ue(r,e){let t=new M({ttlMs:r.deduplicationTtlMs});return{name:"decision-tracking",onDecision(n){if(r.disabled)return;let i=n.metadata.unitKeyValue;if(!i)return;let o=M.hashAssignments(n.assignments);if(!t.checkAndMark(i,o))return;let s={type:"decision",id:n.decisionId,orgId:e.orgId,projectId:e.projectId,env:e.env,unitKey:i,timestamp:n.metadata.timestamp,assignments:n.assignments,layers:n.metadata.layers,context:n.metadata.filteredContext,configVersion:n.metadata.configVersion??e.getConfigVersion?.()??void 0,sdkName:fn,sdkVersion:L};e.log(s)},onDestroy(){t.clear()}}}var gn="traffical_rdr";function hn(r,e,t){if(!(typeof document>"u"))try{document.cookie=`${r}=${encodeURIComponent(e)}; max-age=${t}; path=/; SameSite=Lax`}catch{}}function $e(r={}){let e=r.parameterKey??"redirect.url",t=r.compareMode??"pathname",n=r.cookieName??gn;return{name:"redirect",onInitialize(i){typeof window>"u"||i.decide({context:{},defaults:{[e]:""}})},onBeforeDecision(i){return typeof window>"u"?i:{"url.pathname":window.location.pathname,...i}},onDecision(i){let o=i.assignments[e];if(typeof o!="string"||!o)return;let s=t==="href"?window.location.href:window.location.pathname;if(o===s)return;let a=i.metadata.layers.find(c=>c.policyId&&c.allocationName);a&&hn(n,JSON.stringify({l:a.layerId,p:a.policyId,a:a.allocationName,ts:Date.now()}),86400),window.location.replace(o)}}}var pn="traffical_rdr";function mn(r){if(typeof document>"u")return null;try{for(let e of document.cookie.split(";")){let[t,n]=e.trim().split("=");if(t===r&&n)return decodeURIComponent(n)}}catch{}return null}function yn(r,e){let t=mn(r);if(!t)return null;try{let n=JSON.parse(t);return Date.now()-n.ts>e?null:{layerId:n.l,policyId:n.p,allocationName:n.a}}catch{return null}}function Ve(r={}){let e=r.cookieName??pn,t=r.expiryMs??864e5;function n(i){let o=yn(e,t);if(!o)return;i.attribution=i.attribution??[],i.attribution.some(a=>a.layerId===o.layerId&&a.policyId===o.policyId)||i.attribution.push(o)}return{name:"redirect-attribution",onTrack(i){return n(i),!0},onExposure(i){return n(i),!0}}}var Z=["$browser","$os","$device_type","$url","$host","$path","$query","$referrer","$page_title","$utm_source","$utm_medium","$utm_campaign","$utm_term","$utm_content","$locale","$timezone"],at="traffical:utm",ct=["$utm_source","$utm_medium","$utm_campaign","$utm_term","$utm_content"];function _n(r){return/\bEdg(?:e|A|iOS)?\//.test(r)?"edge":/\bOPR\/|\bOpera\b/.test(r)?"other":/\bFirefox\/|\bFxiOS\//.test(r)?"firefox":/\bChrome\/|\bCriOS\/|\bChromium\//.test(r)?"chrome":/\bSafari\//.test(r)&&/\bVersion\/|\bMobile\//.test(r)?"safari":"other"}function bn(r,e=0){return/\b(?:iPhone|iPad|iPod)\b/.test(r)||/\bMacintosh\b/.test(r)&&e>1?"ios":/\bAndroid\b/.test(r)?"android":/\bWindows\b/.test(r)?"windows":/\bMac OS X\b|\bMacintosh\b/.test(r)?"macos":/\bCrOS\b|\bLinux\b|\bX11\b/.test(r)?"linux":"other"}function vn(r,e){if(/\biPad\b/.test(r)||/\bMacintosh\b/.test(r)&&(e.maxTouchPoints??0)>1)return"tablet";if(/\biPhone\b|\biPod\b/.test(r))return"mobile";if(/\bAndroid\b/.test(r))return/\bMobile\b/.test(r)?"mobile":"tablet";if(/\bMobi\b/.test(r))return"mobile";if(e.coarsePointer){if(e.width<768)return"mobile";if(e.width<1024)return"tablet"}return"desktop"}function xn(r){try{let e=r.sessionStorage?.getItem(at);if(!e)return null;let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n={};for(let i of ct){let o=t[i];typeof o=="string"&&o&&(n[i]=o)}return Object.keys(n).length?n:null}catch{return null}}function En(r,e){try{r.sessionStorage?.setItem(at,JSON.stringify(e))}catch{}}function Tn(r){let e={},t;try{t=new URLSearchParams(r)}catch{return e}for(let n of ct){let i=t.get(n.slice(1));i&&(e[n]=i)}return e}function In(r,e){let t=r.navigator,n=r.location,i=r.document,o=t?.userAgent??"",s=typeof t?.maxTouchPoints=="number"?t.maxTouchPoints:0,a=!1;try{a=typeof r.matchMedia=="function"&&r.matchMedia("(pointer: coarse)").matches}catch{}let c=typeof r.innerWidth=="number"&&r.innerWidth>0?r.innerWidth:1024,u=n?.search??"",g=Tn(u);e&&(Object.keys(g).length?En(r,g):g=xn(r)??{});let l=t?.language||void 0,p;try{p=Intl.DateTimeFormat().resolvedOptions().timeZone||void 0}catch{p=void 0}if(l===void 0)try{l=Intl.DateTimeFormat().resolvedOptions().locale||void 0}catch{l=void 0}let d=u.startsWith("?")?u.slice(1):u;return{$browser:_n(o),$os:bn(o,s),$device_type:vn(o,{coarsePointer:a,width:c,maxTouchPoints:s}),$url:n?.href||void 0,$host:n?.host||void 0,$path:n?.pathname||void 0,$query:d||void 0,$referrer:i?.referrer||void 0,$page_title:i?.title||void 0,$utm_source:g.$utm_source,$utm_medium:g.$utm_medium,$utm_campaign:g.$utm_campaign,$utm_term:g.$utm_term,$utm_content:g.$utm_content,$locale:l,$timezone:p}}function _e(r={}){let e=r.persistUtm??!0,t=new Set(r.include?r.include.filter(n=>Z.includes(n)):Z);for(let n of r.exclude??[])t.delete(n);return{name:"auto-attributes",onBeforeDecision(n){if(typeof window>"u")return n;let i;try{i=In(window,e)}catch{return n}let o={};for(let s of t){let a=i[s];a!==void 0&&(o[s]=a)}return{...o,...n}}}}var Ke=_e;var be=[],lt={};function An(){if(typeof window>"u")return{version:1,instances:lt,subscribe:()=>()=>{}};if(!window.__TRAFFICAL_DEBUG__){let r={version:1,instances:lt,subscribe(e){return be.push(e),()=>{be=be.filter(t=>t!==e)}}};window.__TRAFFICAL_DEBUG__=r}return window.__TRAFFICAL_DEBUG__}function ut(r){for(let e of be)try{e(r)}catch{}}var wn=0,Cn=Symbol.for("@openfeature/web-sdk/api");function Sn(){let r=globalThis[Cn];return r&&typeof r.getContext=="function"&&typeof r.setContext=="function"?r:null}function kn(){return`traffical_${Date.now().toString(36)}_${(++wn).toString(36)}`}function Pn(){return`evt_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}var Rn="traffical-debug";function Fe(r={}){let e=r.instanceId??kn(),t=r.maxEvents??500,n=null,i=null,o={},s=[],a=null,c=null,u={},g=null,l=null,p=[],d=[],m=[];function x(){return{ready:n?.isInitialized===!0,stableId:n?.getStableId?.()??null,effectiveUnitKey:c,configVersion:n?.getConfigVersion?.()??null,assignments:{...o},layers:[...s],lastDecisionId:a,overrides:n?.getOverrides?.()??{},contextOverrides:{...u},lastContext:g?{...g}:null}}function b(){let f=x();for(let h of d)try{h(f)}catch{}}function I(f,h){let v={id:Pn(),type:f,timestamp:Date.now(),data:h};p.push(v),p.length>t&&p.splice(0,p.length-t);for(let T of m)try{T(v)}catch{}}function w(){if(!n)return;try{n.decide({context:g?{...g}:{},defaults:l?{...l}:{}})}catch{}let f=Sn();if(f)try{f.setContext({...f.getContext()}).catch(()=>{})}catch{}}let E={id:e,meta:{orgId:"",projectId:"",env:"",sdkVersion:L},getState:x,subscribe(f){return d.push(f),()=>{d=d.filter(h=>h!==f)}},getEvents(f){return f!==void 0?p.slice(-f):[...p]},onEvent(f){return m.push(f),()=>{m=m.filter(h=>h!==f)}},getConfigBundle(){return i},setUnitKey(f){n?.identify?n.identify(f):n?.setStableId&&n.setStableId(f),b()},setOverride(f,h){n?.applyOverrides&&n.applyOverrides({[f]:h}),b(),w()},clearOverride(f){if(n?.getOverrides&&n?.applyOverrides){let h=n.getOverrides();delete h[f],n.clearOverrides?.(),n.applyOverrides(h)}b(),w()},clearAllOverrides(){n?.clearOverrides?.(),b(),w()},getOverrides(){return n?.getOverrides?.()??{}},setContextOverrides(f){u={...f},b(),w()},getContextOverrides(){return{...u}},reDecide(){w()},async refresh(){n?.refreshConfig&&await n.refreshConfig()}};return{name:Rn,onInitialize(f){n=f,i&&(E.meta.orgId=i.orgId,E.meta.projectId=i.projectId,E.meta.env=i.env);let h=An();h.instances[e]=E,ut({type:"register",instanceId:e}),b()},onConfigUpdate(f){i=f,E.meta.orgId=f.orgId,E.meta.projectId=f.projectId,E.meta.env=f.env,b()},onBeforeDecision(f){if(g={...f},Object.keys(u).length!==0)return{...f,...u}},onDecision(f){l={...f.assignments},o={...f.assignments},s=f.metadata?.layers?[...f.metadata.layers]:[],a=f.decisionId,f.metadata?.unitKeyValue&&(c=f.metadata.unitKeyValue),I("decision",f),b()},onResolve(f){o={...f},b()},onExposure(f){return I("exposure",f),!0},onTrack(f){return I("track",f),!0},onDestroy(){let f=typeof window<"u"?window.__TRAFFICAL_DEBUG__:null;f&&(delete f.instances[e],ut({type:"unregister",instanceId:e})),d=[],m=[],u={},g=null,l=null,n=null}}}var ve=class{constructor(){this._plugins=[]}register(e){let t="plugin"in e?e.plugin:e,n="priority"in e?e.priority??0:0;return this._plugins.some(i=>i.plugin.name===t.name)?(console.warn(`[Traffical] Plugin "${t.name}" already registered, skipping.`),!1):(this._plugins.push({plugin:t,priority:n}),this._plugins.sort((i,o)=>o.priority-i.priority),!0)}unregister(e){let t=this._plugins.findIndex(n=>n.plugin.name===e);return t===-1?!1:(this._plugins.splice(t,1),!0)}get(e){return this._plugins.find(t=>t.plugin.name===e)?.plugin}getAll(){return this._plugins.map(e=>e.plugin)}async runInitialize(e){for(let{plugin:t}of this._plugins)if(t.onInitialize)try{await t.onInitialize(e)}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onInitialize error:`,n)}}runConfigUpdate(e){for(let{plugin:t}of this._plugins)if(t.onConfigUpdate)try{t.onConfigUpdate(e)}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onConfigUpdate error:`,n)}}runBeforeDecision(e){let t=e;for(let{plugin:n}of this._plugins)if(n.onBeforeDecision)try{let i=n.onBeforeDecision(t);i&&(t=i)}catch(i){console.warn(`[Traffical] Plugin "${n.name}" onBeforeDecision error:`,i)}return t}runDecision(e){for(let{plugin:t}of this._plugins)if(t.onDecision)try{t.onDecision(e)}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onDecision error:`,n)}}runResolve(e){for(let{plugin:t}of this._plugins)if(t.onResolve)try{t.onResolve(e)}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onResolve error:`,n)}}runExposure(e){for(let{plugin:t}of this._plugins)if(t.onExposure)try{if(t.onExposure(e)===!1)return!1}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onExposure error:`,n)}return!0}runTrack(e){for(let{plugin:t}of this._plugins)if(t.onTrack)try{if(t.onTrack(e)===!1)return!1}catch(n){console.warn(`[Traffical] Plugin "${t.name}" onTrack error:`,n)}return!0}runDestroy(){for(let{plugin:e}of this._plugins)if(e.onDestroy)try{e.onDestroy()}catch(t){console.warn(`[Traffical] Plugin "${e.name}" onDestroy error:`,t)}}clear(){this._plugins=[]}};function dt(){let r=[],e=!1;function t(s){for(let a of r)a(s)}let n=()=>{e=!0,t("background")},i=()=>{typeof document<"u"&&t(document.visibilityState==="hidden"?"background":"foreground")},o=()=>{e=!0,t("background")};return typeof window<"u"&&(window.addEventListener("pagehide",n),window.addEventListener("beforeunload",o)),typeof document<"u"&&document.addEventListener("visibilitychange",i),{onVisibilityChange(s){r.push(s)},removeVisibilityListener(s){let a=r.indexOf(s);a!==-1&&r.splice(a,1)},isUnloading(){return e}}}var je="js-client";function ft(r,e){if(e!==void 0)return{context:r,defaults:e};let t=r;return{context:t.context,defaults:t.defaults}}var Dn="https://sdk.traffical.io",On=6e4,Ln=1e4,Mn=3e5,Bn=3e5,Nn=100,Un=.1;function $n(r){let e=r*Un;return r+(Math.random()*2-1)*e}var $=class{constructor(e){this._state={bundle:null,etag:null,lastFetchTime:0,lastOfflineWarning:0,lastMalformedWarning:0,refreshTimer:null,isInitialized:!1,serverResponse:null,cachedEdgeResults:null};this._decisionCache=new Map;this._cumulativeAttribution=new Map;this._identityListeners=[];this._overrideListeners=[];this._overrides={};this._lastResolveContextKey=null;this._readyPromise=new Promise(e=>{this._readyResolve=e});let t=e.evaluationMode??"bundle";this._options={orgId:e.orgId,projectId:e.projectId,env:e.env,apiKey:e.apiKey,baseUrl:e.baseUrl??Dn,localConfig:e.localConfig,refreshIntervalMs:e.refreshIntervalMs??On,attributionMode:e.attributionMode??"cumulative",evaluationMode:t},this._requestTimeoutMs=e.configTimeoutMs??e.requestTimeoutMs??Ln;let n={baseUrl:this._options.baseUrl,orgId:this._options.orgId,projectId:this._options.projectId,env:this._options.env,apiKey:this._options.apiKey,defaultTimeoutMs:e.resolveTimeoutMs??e.requestTimeoutMs};if(this._decisionClient=new G(n),this._errorPolicy=new U({onResolutionError:e.onResolutionError,onError:e.onError??e.errorBoundary?.onError}),this._storage=e.storage??st(),this._lifecycleProvider=e.lifecycleProvider??dt(),!e.onSchemaWarnings)try{typeof globalThis<"u"&&globalThis.process?.env?.NODE_ENV==="development"&&(e.onSchemaWarnings=o=>{for(let s of o)console.warn(`[Traffical] Schema warning for "${s.event}":`,s.violations.map(a=>`${a.path}: ${a.message}`).join(", "))})}catch{}if(this._eventLogger=new me({endpoint:`${this._options.baseUrl}/v1/events/batch`,apiKey:e.apiKey,storage:this._storage,lifecycleProvider:this._lifecycleProvider,batchSize:e.batchSize??e.eventBatchSize,flushIntervalMs:e.flushIntervalMs??e.eventFlushIntervalMs,maxQueueSize:e.eventMaxQueueSize,requestTimeoutMs:e.eventsTimeoutMs??e.requestTimeoutMs,onError:i=>{console.warn("[Traffical] Event logging error:",i.message)},onSchemaWarnings:e.onSchemaWarnings}),this._exposureDedup=new J({storage:this._storage,sessionTtlMs:e.exposureSessionTtlMs}),this._stableId=new ye({storage:this._storage}),this._plugins=new ve,this._assignmentLogger=e.assignmentLogger,this._byoEventLogger=e.eventLogger,this._disableCloudEvents=e.disableCloudEvents??!1,this._assignmentLoggerDedup=e.deduplicateAssignmentLogger!==!1&&e.assignmentLogger?new J({storage:this._storage,sessionTtlMs:e.exposureSessionTtlMs}):null,e.trackDecisions!==!1&&(!this._disableCloudEvents||this._byoEventLogger)&&this._plugins.register({plugin:Ue({deduplicationTtlMs:e.decisionDeduplicationTtlMs},{orgId:this._options.orgId,projectId:this._options.projectId,env:this._options.env,log:i=>this._dispatchEvent(i),getConfigVersion:()=>this.getConfigVersion()}),priority:100}),e.plugins)for(let i of e.plugins)this._plugins.register(i);if(this._options.localConfig){let i=z(this._options.localConfig);i.ok?(this._state.bundle=this._options.localConfig,this._plugins.runConfigUpdate(this._options.localConfig)):(this._errorPolicy.recordRejectedBundle("localConfig",i.path,i.reason),this._options.localConfig=void 0)}if(typeof window<"u"){let i=window;i.__TRAFFICAL_INSTANCES__??(i.__TRAFFICAL_INSTANCES__=[]),i.__TRAFFICAL_INSTANCES__.push(this)}}async initialize(){await this._errorPolicy.sideEffectAsync("initialize","other",async()=>{this._options.evaluationMode==="server"?await this._fetchServerResolve():await this._fetchConfig(),this._startBackgroundRefresh(),this._state.isInitialized=!0,await this._plugins.runInitialize(this)}),this._readyResolve()}get isInitialized(){return this._state.isInitialized}async waitForReady(){return this._readyPromise}async close(){if(this._state.refreshTimer&&(clearInterval(this._state.refreshTimer),this._state.refreshTimer=null),this._lifecycleProvider.isUnloading()?this._eventLogger.flushBeacon():await this._eventLogger.flush().catch(()=>{}),this._eventLogger.destroy(),this._plugins.runDestroy(),this._identityListeners=[],this._overrideListeners=[],this._overrides={},typeof window<"u"){let t=window.__TRAFFICAL_INSTANCES__;if(t){let n=t.indexOf(this);n!==-1&&t.splice(n,1)}}}destroy(){if(this._state.refreshTimer&&(clearInterval(this._state.refreshTimer),this._state.refreshTimer=null),this._lifecycleProvider.isUnloading()?this._eventLogger.flushBeacon():this._eventLogger.flush().catch(()=>{}),this._eventLogger.destroy(),this._plugins.runDestroy(),this._identityListeners=[],this._overrideListeners=[],this._overrides={},typeof window<"u"){let t=window.__TRAFFICAL_INSTANCES__;if(t){let n=t.indexOf(this);n!==-1&&t.splice(n,1)}}}async refreshConfig(){await this._errorPolicy.sideEffectAsync("refreshConfig","other",async()=>{this._options.evaluationMode==="server"?await this._fetchServerResolve():await this._fetchConfig()})}getConfigVersion(){return this._state.serverResponse?.stateVersion??this._state.bundle?.version??null}getUnitKeyField(){return fe(this._getEffectiveBundle())}getParameterLayerId(e){return ge(this._getEffectiveBundle(),e)}getDiagnostics(){return this._errorPolicy.getDiagnostics()}getParams(e,t){let{context:n,defaults:i}=ft(e,t);return this._errorPolicy.resolve("getParams",()=>{if(this._options.evaluationMode==="server"&&this._state.serverResponse){this._maybeResolveForContext(n);let c={...i};for(let[u,g]of Object.entries(this._state.serverResponse.assignments))u in c&&(c[u]=g);return this._plugins.runResolve(c),this._applyOverridesToResult(c),c}let o=this._getEffectiveBundle(),s=this._enrichContext(n),a=he(o,s,i);return this._plugins.runResolve(a),this._applyOverridesToResult(a),a},()=>({...i}))}decide(e,t){let{context:n,defaults:i}=ft(e,t),o=this._errorPolicy.resolve("decide",()=>{if(this._options.evaluationMode==="server"&&this._state.serverResponse){this._maybeResolveForContext(n);let g=this._state.serverResponse,l={...i};for(let[d,m]of Object.entries(g.assignments))d in l&&(l[d]=m);let p={decisionId:N(),assignments:l,metadata:{...g.metadata,configVersion:g.stateVersion}};return this._cacheDecision(p),this._updateCumulativeAttribution(p),this._plugins.runDecision(p),this._applyOverridesToResult(p.assignments),p.metadata.reason=g.metadata.layers?.some(d=>d.policyId)?"resolved":"default",p}let s=this._getEffectiveBundle(),a=this._enrichContext(n);a=this._plugins.runBeforeDecision(a);let c=this._state.cachedEdgeResults??void 0,u=pe(s,a,i,c);return this._cacheDecision(u),this._updateCumulativeAttribution(u),this._plugins.runDecision(u),this._applyOverridesToResult(u.assignments),u.metadata.reason=s?u.metadata.layers.some(g=>g.policyId)?"resolved":"default":"no-bundle",u},()=>({decisionId:N(),assignments:{...i},metadata:{timestamp:new Date().toISOString(),unitKeyValue:"",layers:[],reason:"error"}}));return this._emitAssignmentLogEntries(o,"decision"),o}trackExposure(e){this._emitAssignmentLogEntries(e,"exposure"),this._errorPolicy.resolve("trackExposure",()=>{let t=e.metadata.unitKeyValue;if(!t)return;let n=e.metadata.configVersion??this.getConfigVersion()??void 0,i=[];for(let s of e.metadata.layers)!s.policyId||!s.allocationName||s.attributionOnly||!this._exposureDedup.checkAndMark(t,s.policyId,s.allocationName)||i.push(s);if(i.length===0)return;let o={type:"exposure",id:De(),decisionId:e.decisionId,orgId:this._options.orgId,projectId:this._options.projectId,env:this._options.env,unitKey:t,timestamp:new Date().toISOString(),assignments:e.assignments,layers:i,context:e.metadata.filteredContext,configVersion:n,sdkName:je,sdkVersion:L};this._plugins.runExposure(o)&&this._dispatchEvent(o)},()=>{})}track(e,t,n){this._errorPolicy.resolve("track",()=>{let i=n?.unitKey??this._stableId.getId(),o=typeof n?.value=="number"?n.value:typeof t?.value=="number"?t.value:void 0,s=this._buildAttribution(i,n?.decisionId),a=n?.decisionId,c={type:"track",id:Oe(),orgId:this._options.orgId,projectId:this._options.projectId,env:this._options.env,unitKey:i,timestamp:new Date().toISOString(),event:e,value:o,values:n?.values,properties:t,decisionId:a,attribution:s,eventTimestamp:n?.eventTimestamp,sdkName:je,sdkVersion:L};this._plugins.runTrack(c)&&this._dispatchEvent(c)},()=>{})}async flushEvents(){await this._errorPolicy.sideEffectAsync("flushEvents","other",async()=>{await this._eventLogger.flush()})}use(e){if(!this._plugins.register(e))return this;if(this._state.isInitialized){try{e.onInitialize?.(this)}catch(n){console.warn(`[Traffical] Plugin "${e.name}" late onInitialize error:`,n)}if(this._state.bundle)try{e.onConfigUpdate?.(this._state.bundle)}catch(n){console.warn(`[Traffical] Plugin "${e.name}" late onConfigUpdate error:`,n)}}return this}getPlugin(e){return this._plugins.get(e)}getStableId(){return this._stableId.getId()}setStableId(e){this._stableId.setId(e)}identify(e){this._stableId.setId(e);for(let t of this._identityListeners)try{t(e)}catch{}}onIdentityChange(e){return this._identityListeners.push(e),()=>{this._identityListeners=this._identityListeners.filter(t=>t!==e)}}onOverridesChange(e){return this._overrideListeners.push(e),()=>{this._overrideListeners=this._overrideListeners.filter(t=>t!==e)}}applyOverrides(e){Object.assign(this._overrides,e),this._notifyOverrideListeners()}clearOverrides(){this._overrides={},this._notifyOverrideListeners()}getOverrides(){return{...this._overrides}}_notifyOverrideListeners(){let e={...this._overrides};for(let t of this._overrideListeners)try{t(e)}catch{}}_dispatchEvent(e){if(this._byoEventLogger)try{this._byoEventLogger(e)}catch{}this._disableCloudEvents||this._eventLogger.log(e)}_emitAssignmentLogEntries(e,t){if(!this._assignmentLogger)return;let n=e.metadata.unitKeyValue;if(!n)return;let i=e.metadata.configVersion??this.getConfigVersion()??void 0;for(let o of e.metadata.layers){if(!o.policyId||!o.allocationName||this._assignmentLoggerDedup&&!this._assignmentLoggerDedup.checkAndMark(n,o.policyId,`${o.allocationName}:${t}`))continue;let s=o.policyId,a=o.allocationName;this._errorPolicy.sideEffect("assignmentLogger","assignmentLog",()=>this._assignmentLogger({unitKey:n,policyId:s,policyKey:o.policyKey,allocationName:a,allocationKey:o.allocationKey,timestamp:e.metadata.timestamp,layerId:o.layerId,allocationId:o.allocationId,orgId:this._options.orgId,projectId:this._options.projectId,env:this._options.env,sdkName:je,sdkVersion:L,properties:e.metadata.filteredContext,type:t,decisionId:e.decisionId,anonymousId:this._stableId.getId(),id:Le(),bucket:o.bucket>=0?o.bucket:void 0,probability:o.probability,modelVersion:o.modelVersion,configVersion:i}))}}_applyOverridesToResult(e){let t=Object.keys(this._overrides);if(t.length!==0)for(let n of t)n in e&&(e[n]=this._overrides[n])}_getEffectiveBundle(){return this._state.bundle??this._options.localConfig??null}_enrichContext(e){let n=this._getEffectiveBundle()?.hashing?.unitKey??"userId";return e[n]?e:{...e,[n]:this._stableId.getId()}}async _fetchConfig(){let e=`${this._options.baseUrl}/v1/config/${encodeURIComponent(this._options.projectId)}?env=${encodeURIComponent(this._options.env)}`,t={"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`};this._state.etag&&(t["If-None-Match"]=this._state.etag);let n=new AbortController,i=setTimeout(()=>n.abort(),this._requestTimeoutMs);try{let o=await fetch(e,{method:"GET",headers:t,signal:n.signal});if(o.status===304){this._state.lastFetchTime=Date.now();return}if(!o.ok)throw new Error(`HTTP ${o.status}: ${o.statusText}`);let s=await o.json(),a=o.headers.get("ETag"),c=z(s);if(!c.ok){this._errorPolicy.recordRejectedBundle("fetchConfig",c.path,c.reason),this._logMalformedBundleWarning();return}if(this._state.bundle=s,this._state.etag=a,this._state.lastFetchTime=Date.now(),this._findEdgePolicies(s).length>0){let u=await this._prefetchEdgeResults(s,this._enrichContext({}));this._state.cachedEdgeResults=u}else this._state.cachedEdgeResults=null;this._plugins.runConfigUpdate(s)}catch(o){this._logOfflineWarning(o)}finally{clearTimeout(i)}}_startBackgroundRefresh(){let e=this._options.evaluationMode==="server"?this._state.serverResponse?.suggestedRefreshMs??this._options.refreshIntervalMs:this._options.refreshIntervalMs;if(e<=0)return;let t=()=>{this._state.refreshTimer=setTimeout(()=>{t(),this._options.evaluationMode==="server"?this._fetchServerResolve().catch(()=>{}):this._fetchConfig().catch(()=>{})},$n(e))};t()}_maybeResolveForContext(e){let t=this._enrichContext(e),n;try{n=JSON.stringify(t)}catch{n=""}n!==this._lastResolveContextKey&&(this._lastResolveContextKey=n,this._fetchServerResolve(t))}async _fetchServerResolve(e){if(this._decisionClient)try{let t=e??this._enrichContext({}),n=await this._decisionClient.resolve({context:t});n&&(this._state.serverResponse=n,this._state.lastFetchTime=Date.now())}catch(t){this._logOfflineWarning(t)}}_findEdgePolicies(e){let t=[];for(let n of e.layers)for(let i of n.policies)i.state==="running"&&i.entityConfig?.resolutionMode==="edge"&&t.push(i);return t}async _prefetchEdgeResults(e,t){if(!this._decisionClient)return{};let n=this._findEdgePolicies(e);if(n.length===0)return{};let i=W(e,t);if(!i)return{};let o=n.map(s=>{if(!s.entityConfig)return null;let a=s.entityConfig.dynamicAllocations?typeof t[s.entityConfig.dynamicAllocations.countKey]=="number"?Math.floor(t[s.entityConfig.dynamicAllocations.countKey]):0:s.allocations.length;return Me(s.id,s.entityConfig.entityKeys,t,i,a||void 0)}).filter(s=>s!==null);if(o.length===0)return{};try{let s=await this._decisionClient.decideEntityBatch(o),a=new Map;for(let c=0;c<o.length;c++){let u=s[c];u&&a.set(o[c].policyId,{allocationIndex:u.allocationIndex,entityId:o[c].entityId})}return a.size>0?{edgeResults:a}:{}}catch{return{}}}_logOfflineWarning(e){let t=Date.now();t-this._state.lastOfflineWarning>Mn&&(console.warn(`[Traffical] Failed to fetch config: ${e instanceof Error?e.message:String(e)}. Using ${this._state.bundle?"cached":"local"} config.`),this._state.lastOfflineWarning=t)}_logMalformedBundleWarning(){let e=Date.now();e-this._state.lastMalformedWarning>Bn&&(console.warn(`[Traffical] Discarded malformed config bundle (invalid hashing/shape). Using ${this._state.bundle?"cached":"local"} config.`),this._state.lastMalformedWarning=e)}_cacheDecision(e){if(this._decisionCache.size>=Nn){let t=this._decisionCache.keys().next().value;t&&this._decisionCache.delete(t)}this._decisionCache.set(e.decisionId,e)}_updateCumulativeAttribution(e){let t=e.metadata.unitKeyValue;if(!t)return;let n=this._cumulativeAttribution.get(t);n||(n=new Map,this._cumulativeAttribution.set(t,n));for(let i of e.metadata.layers){if(!i.policyId||!i.allocationName)continue;let o=`${i.layerId}:${i.policyId}`;n.set(o,{layerId:i.layerId,policyId:i.policyId,allocationName:i.allocationName})}}_buildAttribution(e,t){if(this._options.attributionMode==="decision"){if(!t)return;let i=this._decisionCache.get(t);return i?i.metadata.layers.filter(o=>o.policyId&&o.allocationName).map(o=>({layerId:o.layerId,policyId:o.policyId,allocationName:o.allocationName})):void 0}let n=this._cumulativeAttribution.get(e);return n&&n.size>0?Array.from(n.values()):void 0}};async function gt(r){let e=new $(r);return await e.initialize(),e}function ht(r){return new $(r)}function pt(r={}){let e={observeMutations:r.observeMutations??!0,debounceMs:r.debounceMs??100},t=[],n={},i=null,o=null;function s(d,m){try{return new RegExp(d).test(m)}catch{return m===d}}function a(d,m,x){if(m==="innerHTML")d.innerHTML=x;else if(m==="textContent")d.textContent=x;else if(m==="src"&&"src"in d)d.src=x;else if(m==="href"&&"href"in d)d.href=x;else if(m.startsWith("style.")){let b=m.slice(6);d.style[b]=x}else d.setAttribute(m,x)}function c(d,m){let x=String(m);try{let b=document.querySelectorAll(d.selector);for(let I of b)a(I,d.property,x)}catch(b){console.warn(`[Traffical DOM Binding] Failed to apply binding for ${d.parameterKey}:`,b)}}function u(d,m=!1){n=d;let x=typeof window<"u"?window.location.pathname:"";for(let b of t){if(!m&&!s(b.urlPattern,x))continue;let I=d[b.parameterKey];I!==void 0&&c(b,I)}}function g(){o&&clearTimeout(o),o=setTimeout(()=>{u(n)},e.debounceMs)}function l(){i||typeof MutationObserver>"u"||typeof document>"u"||(i=new MutationObserver(()=>{g()}),i.observe(document.body,{childList:!0,subtree:!0}))}function p(){i&&(i.disconnect(),i=null),o&&(clearTimeout(o),o=null)}return{name:"dom-binding",onInitialize(){e.observeMutations&&l()},onConfigUpdate(d){t=d.domBindings??[]},onResolve(d){u(d)},onDecision(d){u(d.assignments)},onDestroy(){p(),t=[],n={}},applyBindings(d){u(d||n)},getBindings(){return t}}}var A=null;async function Vn(r){return A?(console.warn("[Traffical] Client already initialized. Returning existing instance."),A):(A=await gt(r),A)}function Kn(r){return A?(console.warn("[Traffical] Client already initialized. Returning existing instance."),A):(A=ht(r),A.initialize().catch(e=>{console.warn("[Traffical] Initialization error:",e)}),A)}function Fn(){return A}function jn(){A&&(A.destroy(),A=null)}return Tt(Hn);})();
|
|
3
3
|
//# sourceMappingURL=traffical.min.js.map
|