@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.
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/plugins/debug.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/plugins/debug.ts"],"names":[],"mappings":"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"}
@@ -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
- _client.decide({ context: {}, defaults: {} });
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":"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"}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/plugins/debug.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -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,CAuDjB"}
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"}
@@ -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"}
@@ -1,3 +1,3 @@
1
- /* @traffical/js-client v0.17.0 */
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