@macroui/event-tracker 1.3.0 → 1.3.1

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.
Files changed (69) hide show
  1. package/dist/event-tracker.cjs +4252 -879
  2. package/dist/event-tracker.cjs.map +1 -0
  3. package/dist/event-tracker.js +4252 -879
  4. package/dist/event-tracker.js.map +1 -0
  5. package/dist/event-tracker.min.js +2 -1
  6. package/dist/event-tracker.min.js.map +1 -0
  7. package/dist/event-tracker.mjs +4212 -880
  8. package/dist/event-tracker.mjs.map +1 -0
  9. package/dist/plugin/debug-sender.cjs +53 -2
  10. package/dist/plugin/debug-sender.mjs +53 -2
  11. package/dist/plugin/experiment.cjs +181 -0
  12. package/dist/plugin/experiment.cjs.map +1 -0
  13. package/dist/plugin/experiment.mjs +178 -0
  14. package/dist/plugin/experiment.mjs.map +1 -0
  15. package/dist/plugin/indexeddb-sender.cjs +51 -2
  16. package/dist/plugin/indexeddb-sender.mjs +51 -2
  17. package/dist/plugin/otel-bridge.cjs +164 -0
  18. package/dist/plugin/otel-bridge.cjs.map +1 -0
  19. package/dist/plugin/otel-bridge.mjs +162 -0
  20. package/dist/plugin/otel-bridge.mjs.map +1 -0
  21. package/dist/plugin/predictive-batcher.cjs +61 -0
  22. package/dist/plugin/predictive-batcher.cjs.map +1 -0
  23. package/dist/plugin/predictive-batcher.mjs +58 -0
  24. package/dist/plugin/predictive-batcher.mjs.map +1 -0
  25. package/dist/plugin/webview-bridge.cjs +83 -31
  26. package/dist/plugin/webview-bridge.mjs +83 -31
  27. package/dist/stats.cjs +148 -0
  28. package/dist/stats.cjs.map +1 -0
  29. package/dist/stats.mjs +145 -0
  30. package/dist/stats.mjs.map +1 -0
  31. package/dist/types/core/env.d.ts +2 -0
  32. package/dist/types/core/failed-queue.d.ts +19 -2
  33. package/dist/types/core/idle.d.ts +23 -0
  34. package/dist/types/core/payload-signer.d.ts +31 -0
  35. package/dist/types/core/pii.d.ts +46 -0
  36. package/dist/types/core/platform.d.ts +23 -0
  37. package/dist/types/core/privacy.d.ts +42 -0
  38. package/dist/types/core/replay.d.ts +41 -0
  39. package/dist/types/core/retry-policy.d.ts +11 -8
  40. package/dist/types/core/send-pipeline.d.ts +5 -1
  41. package/dist/types/core/stats.d.ts +77 -0
  42. package/dist/types/core/tracker.d.ts +7 -1
  43. package/dist/types/core/wasm-crypto.d.ts +28 -0
  44. package/dist/types/edge/index.d.ts +41 -0
  45. package/dist/types/federation.d.ts +34 -0
  46. package/dist/types/index.d.ts +42 -1
  47. package/dist/types/plugins/audience-sync/index.d.ts +67 -0
  48. package/dist/types/plugins/cross-domain/index.d.ts +20 -0
  49. package/dist/types/plugins/csp-compliant/index.d.ts +17 -0
  50. package/dist/types/plugins/experiment/index.d.ts +43 -0
  51. package/dist/types/plugins/otel-bridge/index.d.ts +22 -0
  52. package/dist/types/plugins/otel-exporter/index.d.ts +50 -0
  53. package/dist/types/plugins/pii-detector/index.d.ts +8 -0
  54. package/dist/types/plugins/predictive-batcher/index.d.ts +29 -0
  55. package/dist/types/plugins/privacy/index.d.ts +19 -0
  56. package/dist/types/plugins/rate-limiter/index.d.ts +41 -0
  57. package/dist/types/plugins/schema-registry/index.d.ts +41 -0
  58. package/dist/types/plugins/webview-bridge/index.d.ts +33 -9
  59. package/dist/types/send/ajax-sender.d.ts +6 -1
  60. package/dist/types/send/batch-sender.d.ts +12 -1
  61. package/dist/types/send/encode.d.ts +13 -1
  62. package/dist/types/send/offscreen-sender.d.ts +25 -0
  63. package/dist/types/send/sender.d.ts +20 -3
  64. package/dist/types/send/ws-sender.d.ts +38 -0
  65. package/dist/types/types/config.d.ts +17 -1
  66. package/dist/types/types/index.d.ts +1 -1
  67. package/package.json +1 -1
  68. package/dist/types/types.test-d.d.ts +0 -5
  69. package/dist/types.test-d.ts +0 -103
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-tracker.js","sources":["../node_modules/tslib/tslib.es6.js","../src/core/env.ts","../src/core/uuid.ts","../src/core/logger.ts","../src/core/identity.ts","../src/types/constants.ts","../src/presets/preset-properties.ts","../src/storage/store.ts","../src/send/encode.ts","../src/send/image-sender.ts","../src/send/beacon-sender.ts","../src/core/payload-signer.ts","../src/send/ajax-sender.ts","../src/send/batch-sender.ts","../src/core/stage.ts","../src/core/lifecycle.ts","../src/core/plugin.ts","../src/core/instance-channel.ts","../src/core/retry-policy.ts","../src/core/failed-queue.ts","../src/core/errors.ts","../src/core/signed-identity.ts","../src/core/register-api.ts","../src/core/identity-api.ts","../src/core/profile-api.ts","../src/core/track-api.ts","../src/send/sender.ts","../src/core/send-pipeline.ts","../src/core/stats.ts","../src/core/tracker.ts","../src/core/platform.ts","../src/core/wasm-crypto.ts","../src/core/pii.ts","../src/core/privacy.ts","../src/core/replay.ts","../src/core/idle.ts","../src/send/offscreen-sender.ts","../src/send/ws-sender.ts","../src/edge/index.ts","../src/plugins/auto-track/index.ts","../src/plugins/pageload/index.ts","../src/plugins/pageleave/index.ts","../src/plugins/exposure/index.ts","../src/plugins/session-event/index.ts","../src/plugins/debug-sender/index.ts","../src/plugins/indexeddb-sender/index.ts","../src/plugins/webview-bridge/index.ts","../src/plugins/encrypt/index.ts","../src/plugins/otel-bridge/index.ts","../src/plugins/otel-exporter/index.ts","../src/plugins/experiment/index.ts","../src/plugins/predictive-batcher/index.ts","../src/plugins/pii-detector/index.ts","../src/plugins/privacy/index.ts","../src/plugins/cross-domain/index.ts","../src/plugins/schema-registry/index.ts","../src/plugins/rate-limiter/index.ts","../src/plugins/csp-compliant/index.ts","../src/plugins/audience-sync/index.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * 浏览器端辅助方法\n */\n\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof window.document !== 'undefined';\n}\n\nexport function hasLocalStorage(): boolean {\n try {\n if (!isBrowser() || !window.localStorage) return false;\n const k = '__et_test__';\n window.localStorage.setItem(k, '1');\n window.localStorage.removeItem(k);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function hasSessionStorage(): boolean {\n try {\n if (!isBrowser() || !window.sessionStorage) return false;\n const k = '__et_test__';\n window.sessionStorage.setItem(k, '1');\n window.sessionStorage.removeItem(k);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function hasCookie(): boolean {\n if (!isBrowser() || !document.cookie) return false;\n document.cookie = '__et_test__=1';\n const ok = document.cookie.indexOf('__et_test__') !== -1;\n document.cookie = '__et_test__=; expires=Thu, 01 Jan 1970 00:00:00 GMT';\n return ok;\n}\n\nexport function hasBeacon(): boolean {\n return isBrowser() && typeof navigator !== 'undefined' && typeof navigator.sendBeacon === 'function';\n}\n\nexport function hasFetch(): boolean {\n return isBrowser() && typeof fetch === 'function';\n}\n\nexport function hasImage(): boolean {\n return isBrowser() && typeof Image === 'function';\n}\n\nexport function hasCompressionStream(): boolean {\n return typeof (globalThis as { CompressionStream?: unknown }).CompressionStream === 'function';\n}\n\nexport function hasBroadcastChannel(): boolean {\n return typeof (globalThis as { BroadcastChannel?: unknown }).BroadcastChannel === 'function';\n}\n","/**\n * UUID v4 生成(无依赖,使用 crypto.getRandomValues)\n */\n\nexport function uuidv4(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.getRandomValues === 'function') {\n const arr = new Uint8Array(16);\n crypto.getRandomValues(arr);\n // RFC 4122 v4\n arr[6] = (arr[6] & 0x0f) | 0x40;\n arr[8] = (arr[8] & 0x3f) | 0x80;\n const hex = Array.from(arr, b => b.toString(16).padStart(2, '0'));\n return (\n hex.slice(0, 4).join('') +\n '-' +\n hex.slice(4, 6).join('') +\n '-' +\n hex.slice(6, 8).join('') +\n '-' +\n hex.slice(8, 10).join('') +\n '-' +\n hex.slice(10, 16).join('')\n );\n }\n // 退化实现\n let d = Date.now();\n let d2 = (typeof performance !== 'undefined' && performance.now && performance.now() * 1000) || 0;\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n let r = Math.random() * 16;\n if (d > 0) {\n r = (d + r) % 16 | 0;\n d = Math.floor(d / 16);\n } else {\n r = (d2 + r) % 16 | 0;\n d2 = Math.floor(d2 / 16);\n }\n return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n}\n","/**\n * 简易 logger\n */\n\nimport type { LogLevel, TrackerConfig } from '../types/index.js';\n\nconst PREFIX = '[EventTracker]';\n\nexport class Logger {\n constructor(private config: Pick<TrackerConfig, 'debug' | 'show_log'>) {}\n\n log(...args: unknown[]): void {\n if (this.shouldLog('log', args)) this.out('log', args);\n }\n warn(...args: unknown[]): void {\n if (this.shouldLog('warn', args)) this.out('warn', args);\n }\n error(...args: unknown[]): void {\n if (this.shouldLog('error', args)) this.out('error', args);\n }\n\n private shouldLog(level: LogLevel, args: unknown[]): boolean {\n if (this.config.debug === 2) {\n if (level === 'error') throw args[0] instanceof Error ? args[0] : new Error(String(args[0]));\n return true;\n }\n if (this.config.debug === 1) {\n if (level === 'warn' || level === 'error') return true;\n }\n if (this.config.show_log && level === 'log') return true;\n return false;\n }\n\n private out(level: LogLevel, args: unknown[]): void {\n const fn = typeof console !== 'undefined' && console[level] ? console[level] : console.log;\n try {\n fn.call(console, PREFIX, ...args);\n } catch {\n /* ignore */\n }\n }\n}\n","/**\n * 用户身份管理\n * - distinct_id 业务用户 ID\n * - anonymous_id 匿名 ID(首次访问生成,永不重置)\n * - first_id 首次访问 ID\n */\n\nimport type { KVStore } from '../storage/store.js';\nimport { uuidv4 } from './uuid.js';\n\nconst KEY_DISTINCT = 'et_distinct_id';\nconst KEY_ANONYMOUS = 'et_anonymous_id';\nconst KEY_FIRST = 'et_first_id';\nconst KEY_LOGIN = 'et_login_id';\nconst KEY_ORIGINAL = 'et_original_id';\n\nexport class IdentityManager {\n private distinctId: string;\n private anonymousId: string;\n private firstId: string;\n private loginId = '';\n private originalId = '';\n\n constructor(\n private store: KVStore,\n private opts: {\n getDistinctId?: () => string;\n setDistinctId?: (id: string) => void;\n getAnonymousId?: () => string;\n setAnonymousId?: (id: string) => void;\n getFirstId?: () => string;\n setFirstId?: (id: string) => void;\n } = {},\n ) {\n this.anonymousId = this.readOrCreate(KEY_ANONYMOUS, () => uuidv4(), this.opts.getAnonymousId, this.opts.setAnonymousId);\n this.firstId = this.readOrCreate(KEY_FIRST, () => uuidv4(), this.opts.getFirstId, this.opts.setFirstId);\n this.distinctId = this.readOrCreate(KEY_DISTINCT, () => this.anonymousId, this.opts.getDistinctId, this.opts.setDistinctId);\n }\n\n private readOrCreate(\n key: string,\n factory: () => string,\n reader?: () => string,\n writer?: (id: string) => void,\n ): string {\n if (reader) {\n try {\n const v = reader();\n if (v) return v;\n } catch {\n /* fall through */\n }\n }\n const stored = this.store.get(key);\n if (stored) return stored;\n const fresh = factory();\n this.persist(key, fresh, writer);\n return fresh;\n }\n\n private persist(key: string, value: string, writer?: (id: string) => void) {\n if (writer) {\n try {\n writer(value);\n return;\n } catch {\n /* fall through */\n }\n }\n this.store.set(key, value);\n }\n\n getDistinctId(): string {\n return this.distinctId;\n }\n\n getAnonymousId(): string {\n return this.anonymousId;\n }\n\n getFirstId(): string {\n return this.firstId;\n }\n\n getLoginId(): string {\n return this.loginId;\n }\n\n getOriginalId(): string {\n return this.originalId;\n }\n\n /** 设置业务用户 ID(保留 anonymous/first 关系) */\n identify(distinctId: string, isSave = true): void {\n if (distinctId === this.loginId) return;\n const prevDistinct = this.distinctId;\n this.distinctId = distinctId;\n this.loginId = distinctId;\n this.originalId = prevDistinct;\n this.persist(KEY_DISTINCT, distinctId, this.opts.setDistinctId);\n if (isSave) {\n this.persist(KEY_LOGIN, distinctId);\n } else {\n this.store.remove(KEY_LOGIN);\n }\n this.persist(KEY_ORIGINAL, prevDistinct);\n }\n\n /** 重置:业务用户登出,回到匿名 */\n resetAnonymousIdentity(newAnonymousId?: string): void {\n this.distinctId = newAnonymousId || this.anonymousId;\n this.loginId = '';\n this.originalId = '';\n this.persist(KEY_DISTINCT, this.distinctId, this.opts.setDistinctId);\n this.store.remove(KEY_LOGIN);\n this.store.remove(KEY_ORIGINAL);\n if (newAnonymousId) {\n this.anonymousId = newAnonymousId;\n this.persist(KEY_ANONYMOUS, newAnonymousId, this.opts.setAnonymousId);\n }\n }\n\n /** 登入:等价 identify */\n login(loginId: string): void {\n this.identify(loginId, true);\n }\n\n /** 登出:保留 anonymous,重置 distinct */\n logout(): void {\n this.resetAnonymousIdentity();\n }\n}\n","/**\n * SDK 预置事件名与预置属性 key(v1.1:完整对齐神策)\n * 命名风格对齐神策,方便跨平台对接\n */\n\n/** 预置事件名 */\nexport const PresetEvent = {\n PageView: '$pageview',\n WebPageLoad: '$WebPageLoad',\n WebPageLeave: '$WebPageLeave',\n WebClick: '$WebClick',\n WebStay: '$WebStay',\n SignUp: '$SignUp',\n BindID: '$BindID',\n UnbindID: '$UnbindID',\n ABTestTrigger: '$ABTestTrigger',\n PlanPopupClick: '$PlanPopupClick',\n PlanPopupDisplay: '$PlanPopupDisplay',\n ChannelLinkReaching: '$ChannelLinkReaching',\n ElementExposure: '$element_exposure',\n ScrollDepth: '$scrolldepth',\n ExitClick: '$exit_click',\n PageLeave: '$page_leave',\n HeatmapEvent: '$heatmap_event',\n} as const;\n\nexport type PresetEventName = (typeof PresetEvent)[keyof typeof PresetEvent];\n\n/** 预置属性 key */\nexport const PresetProperty = {\n // 设备 / 环境\n AppId: '$app_id',\n AppVersion: '$app_version',\n Lib: '$lib',\n LibMethod: '$lib_method',\n LibDetail: '$lib_detail',\n LibVersion: '$lib_version',\n ScreenWidth: '$screen_width',\n ScreenHeight: '$screen_height',\n ViewportWidth: '$viewport_width',\n ViewportHeight: '$viewport_height',\n TimezoneOffset: '$timezone_offset',\n UserAgent: '$user_agent',\n Language: '$language',\n FirstBrowserCharset: '$first_browser_charset',\n FirstBrowserLanguage: '$first_browser_language',\n\n // 位置 / 流量来源\n URL: '$url',\n URLPath: '$url_path',\n Title: '$title',\n Referrer: '$referrer',\n ReferrerHost: '$referrer_host',\n LatestReferrer: '$latest_referrer',\n LatestReferrerHost: '$latest_referrer_host',\n LatestLandingPage: '$latest_landing_page',\n LatestSearchKeyword: '$latest_search_keyword',\n LatestTrafficSourceType: '$latest_traffic_source_type',\n FirstReferrer: '$first_referrer',\n FirstReferrerHost: '$first_referrer_host',\n FirstSearchKeyword: '$first_search_keyword',\n FirstTrafficSourceType: '$first_traffic_source_type',\n FirstVisitTime: '$first_visit_time',\n SearchKeywordId: '$search_keyword_id',\n SearchKeywordIdHash: '$search_keyword_id_hash',\n SearchKeywordIdType: '$search_keyword_id_type',\n IsFirstDay: '$is_first_day',\n IsFirstTime: '$is_first_time',\n\n // UTM\n LatestUtmSource: '$latest_utm_source',\n LatestUtmMedium: '$latest_utm_medium',\n LatestUtmCampaign: '$latest_utm_campaign',\n LatestUtmContent: '$latest_utm_content',\n LatestUtmTerm: '$latest_utm_term',\n Utms: '$utms',\n\n // 身份\n DistinctId: '$distinct_id',\n AnonymousId: '$anonymous_id',\n FirstId: '$first_id',\n OriginalId: '$original_id',\n LoginId: '$login_id',\n IsLoginId: '$is_login_id',\n IdentityLoginId: '$identity_login_id',\n IdentityAnonymousId: '$identity_anonymous_id',\n IdentityCookieId: '$identity_cookie_id',\n IdentityEmail: '$identity_email',\n IdentityMobile: '$identity_mobile',\n\n // 全埋点元素属性\n ElementSelector: '$element_selector',\n ElementPath: '$element_path',\n ElementType: '$element_type',\n ElementId: '$element_id',\n ElementClassName: '$element_class_name',\n ElementName: '$element_name',\n ElementContent: '$element_content',\n ElementTargetUrl: '$element_target_url',\n ElementPosition: '$element_position',\n PageX: '$page_x',\n PageY: '$page_y',\n\n // 性能\n PageHeight: '$page_height',\n PageResourceSize: '$page_resource_size',\n EventDuration: '$event_duration',\n ViewportPosition: '$viewport_position',\n\n // 渠道\n LatestWxAdClickId: '$latest_wx_ad_click_id',\n LatestWxAdCallbacks: '$latest_wx_ad_callbacks',\n LatestWxAdHashKey: '$latest_wx_ad_hash_key',\n IsChannelCallbackEvent: '$is_channel_callback_event',\n\n // 会话\n EventSessionId: '$event_session_id',\n\n // 元信息\n Time: '$time',\n Event: '$event',\n Option: '$option',\n Project: '$project',\n Token: '$token',\n\n // 特殊\n SignupMethod: '$signup_method',\n} as const;\n\nexport type PresetPropertyKey = (typeof PresetProperty)[keyof typeof PresetProperty];\n\n/** 库自身信息 */\nexport const LIB_NAME = 'event-tracker';\nexport const LIB_VERSION = '1.1.0';\n","/**\n * 公共属性 / 预置事件属性\n * - 每次事件都会附加的属性\n * - 包括 $lib / $lib_version / $app_id / $screen_width / $viewport_width / $url / $referrer / $latest_utm_* / ...\n *\n * 泛型 TRegisterProps:让用户能约束 register() / preset 的字段类型\n */\n\nimport { isBrowser } from '../core/env.js';\nimport { PresetProperty } from '../types/constants.js';\nimport type { TrackerConfig } from '../types/index.js';\n\n/** 默认 register 类型 */\nexport type DefaultRegisterProps = Record<string, unknown>;\n\nexport class PresetPropertyBuilder<TRegister extends DefaultRegisterProps = DefaultRegisterProps> {\n /** 当前会话级用户预设属性(来自 config.preset_properties) */\n private preset: Partial<TRegister> = {} as Partial<TRegister>;\n\n setPreset(props: Partial<TRegister>): void {\n this.preset = { ...props };\n }\n\n /** 一次性写入:每条事件都带 */\n register(props: Partial<TRegister>): void {\n Object.assign(this.preset, props);\n }\n\n /** 一次性写入:只在同会话内首次写入生效 */\n registerOnce(props: Partial<TRegister>): void {\n for (const k of Object.keys(props) as (keyof TRegister)[]) {\n if (!(k in this.preset)) {\n this.preset[k] = props[k];\n }\n }\n }\n\n clearRegister(): void {\n this.preset = {};\n }\n\n unsetRegister<K extends keyof TRegister>(key: K): void {\n if (Object.prototype.hasOwnProperty.call(this.preset, key)) {\n delete this.preset[key];\n }\n }\n\n getPreset(): Partial<TRegister> {\n return { ...this.preset };\n }\n\n /** 计算一次最终合并的属性(含 lib 自身信息、UA、URL 等) */\n build(config: TrackerConfig, baseProps: Record<string, unknown> = {}): Record<string, unknown> {\n const out: Record<string, unknown> = {\n ...this.preset,\n ...baseProps,\n };\n\n out[PresetProperty.Lib] = config.lib_name || 'event-tracker';\n out[PresetProperty.LibVersion] = config.lib_version || '0.1.0';\n if (config.app_id) out[PresetProperty.AppId] = config.app_id;\n if (config.app_version) out[PresetProperty.AppVersion] = config.app_version;\n\n if (isBrowser()) {\n try {\n out[PresetProperty.URL] = location.href;\n out[PresetProperty.URLPath] = location.pathname;\n out[PresetProperty.Title] = document.title;\n if (document.referrer) {\n out[PresetProperty.Referrer] = document.referrer;\n }\n const sw = (window.screen && (window.screen as Screen).width) || 0;\n const sh = (window.screen && (window.screen as Screen).height) || 0;\n if (sw) out[PresetProperty.ScreenWidth] = sw;\n if (sh) out[PresetProperty.ScreenHeight] = sh;\n const vw = window.innerWidth || (document.documentElement && document.documentElement.clientWidth) || 0;\n const vh = window.innerHeight || (document.documentElement && document.documentElement.clientHeight) || 0;\n if (vw) out[PresetProperty.ViewportWidth] = vw;\n if (vh) out[PresetProperty.ViewportHeight] = vh;\n if (navigator) {\n out[PresetProperty.Language] = (navigator as Navigator).language || '';\n out[PresetProperty.UserAgent] = config.user_agent || (navigator as Navigator).userAgent || '';\n out[PresetProperty.TimezoneOffset] = new Date().getTimezoneOffset();\n }\n } catch {\n /* ignore in non-browser */\n }\n }\n\n // utm 参数\n if (isBrowser() && config.is_collect_utm !== false) {\n const utm = parseUtm(location.search);\n for (const [k, v] of Object.entries(utm)) {\n const propKey = PresetProperty.LatestUtmSource.replace('Source', capitalize(k.replace('utm_', '')));\n out[propKey] = v;\n }\n out[PresetProperty.LatestTrafficSourceType] = out[PresetProperty.LatestUtmSource] ? '付费广告流量' : '直接流量';\n }\n\n return out;\n }\n}\n\nfunction capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function parseUtm(query: string): Record<string, string> {\n const out: Record<string, string> = {};\n if (!query) return out;\n const s = query.startsWith('?') ? query.substring(1) : query;\n const parts = s.split('&');\n for (const p of parts) {\n const eq = p.indexOf('=');\n if (eq === -1) continue;\n const k = decodeURIComponent(p.substring(0, eq));\n const v = decodeURIComponent(p.substring(eq + 1));\n if (k.startsWith('utm_')) out[k] = v;\n }\n return out;\n}\n","/**\n * 统一 KV 存储抽象\n * - CookieStore\n * - LocalStorageStore\n * - SessionStorageStore\n * - MemoryStore\n */\n\nimport { hasCookie, hasLocalStorage, hasSessionStorage } from '../core/env.js';\nimport type { StorageType } from '../types/index.js';\n\nexport interface KVStore {\n get(key: string): string | null;\n set(key: string, value: string, expiresDays?: number): void;\n remove(key: string): void;\n /** 当前所有 key(用于清除命名空间) */\n keys(prefix?: string): string[];\n}\n\nexport class MemoryStore implements KVStore {\n private backing: Map<string, string> = new Map();\n get(key: string): string | null {\n return this.backing.has(key) ? this.backing.get(key)! : null;\n }\n set(key: string, value: string): void {\n this.backing.set(key, value);\n }\n remove(key: string): void {\n this.backing.delete(key);\n }\n keys(prefix = ''): string[] {\n return Array.from(this.backing.keys()).filter(k => k.startsWith(prefix));\n }\n}\n\nclass CookieStore implements KVStore {\n constructor(\n private domain?: string,\n private crossSubdomain = true,\n private secure = false,\n ) {}\n get(key: string): string | null {\n const name = encodeURIComponent(key) + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1);\n if (c.indexOf(name) === 0) {\n return decodeURIComponent(c.substring(name.length, c.length));\n }\n }\n return null;\n }\n set(key: string, value: string, expiresDays = 365): void {\n let expires = '';\n if (expiresDays) {\n const date = new Date();\n date.setTime(date.getTime() + expiresDays * 24 * 60 * 60 * 1000);\n expires = '; expires=' + date.toUTCString();\n }\n let cookie = encodeURIComponent(key) + '=' + encodeURIComponent(value) + expires + '; path=/';\n if (this.domain && this.crossSubdomain) {\n cookie += '; domain=' + this.domain;\n }\n if (this.secure) cookie += '; Secure';\n document.cookie = cookie;\n }\n remove(key: string): void {\n this.set(key, '', -1);\n }\n keys(prefix = ''): string[] {\n return document.cookie.split(';').map(c => {\n const eq = c.indexOf('=');\n return decodeURIComponent((eq > -1 ? c.substring(0, eq) : c).trim());\n }).filter(k => k.startsWith(prefix));\n }\n}\n\nclass LocalStorageStore implements KVStore {\n get(key: string): string | null {\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n }\n set(key: string, value: string): void {\n try {\n window.localStorage.setItem(key, value);\n } catch {\n /* quota exceeded, ignore */\n }\n }\n remove(key: string): void {\n try {\n window.localStorage.removeItem(key);\n } catch {\n /* ignore */\n }\n }\n keys(prefix = ''): string[] {\n const out: string[] = [];\n try {\n for (let i = 0; i < window.localStorage.length; i++) {\n const k = window.localStorage.key(i);\n if (k && k.startsWith(prefix)) out.push(k);\n }\n } catch {\n /* ignore */\n }\n return out;\n }\n}\n\nclass SessionStorageStore implements KVStore {\n get(key: string): string | null {\n try {\n return window.sessionStorage.getItem(key);\n } catch {\n return null;\n }\n }\n set(key: string, value: string): void {\n try {\n window.sessionStorage.setItem(key, value);\n } catch {\n /* ignore */\n }\n }\n remove(key: string): void {\n try {\n window.sessionStorage.removeItem(key);\n } catch {\n /* ignore */\n }\n }\n keys(prefix = ''): string[] {\n const out: string[] = [];\n try {\n for (let i = 0; i < window.sessionStorage.length; i++) {\n const k = window.sessionStorage.key(i);\n if (k && k.startsWith(prefix)) out.push(k);\n }\n } catch {\n /* ignore */\n }\n return out;\n }\n}\n\nexport function createStore(\n type: StorageType,\n opts?: { cookieDomain?: string; cookieCrossSubdomain?: boolean; secureCookie?: boolean },\n): KVStore {\n switch (type) {\n case 'cookie':\n return new CookieStore(opts?.cookieDomain, opts?.cookieCrossSubdomain, opts?.secureCookie);\n case 'localStorage':\n return hasLocalStorage() ? new LocalStorageStore() : new MemoryStore();\n case 'sessionStorage':\n return hasSessionStorage() ? new SessionStorageStore() : new MemoryStore();\n case 'memory':\n default:\n return new MemoryStore();\n }\n}\n\n/** 自动选最合适的存储(cookie 不可用 → localStorage → memory) */\nexport function autoStore(opts?: {\n cookieDomain?: string;\n cookieCrossSubdomain?: boolean;\n secureCookie?: boolean;\n}): KVStore {\n if (hasCookie()) return new CookieStore(opts?.cookieDomain, opts?.cookieCrossSubdomain, opts?.secureCookie);\n if (hasLocalStorage()) return new LocalStorageStore();\n return new MemoryStore();\n}\n\nexport { CookieStore, LocalStorageStore, SessionStorageStore };\n","/**\n * 序列化 & 编码(v1.2.0 性能优化)\n *\n * - TextEncoder / URLSearchParams 单例\n * - payload cache(同一 event 短时间内不重复编码)\n * - 提供 base64url safe encode\n */\n\nimport type { EventData } from '../types/index.js';\n\nexport type EncryptFn = (data: string) => string | Promise<string>;\n\n// ============================================================\n// 单例 TextEncoder / TextDecoder\n// ============================================================\nlet _encoder: TextEncoder | null = null;\nlet _decoder: TextDecoder | null = null;\nexport function getTextEncoder(): TextEncoder {\n if (!_encoder) _encoder = new TextEncoder();\n return _encoder;\n}\nexport function getTextDecoder(): TextDecoder {\n if (!_decoder) _decoder = new TextDecoder();\n return _decoder;\n}\n\n// ============================================================\n// Payload 短缓存:相同 event 在 TTL 期内复用编码结果\n// ============================================================\nconst PAYLOAD_CACHE_TTL = 500; // ms\nconst PAYLOAD_CACHE_MAX = 64;\ninterface CacheEntry {\n ts: number;\n data: string;\n}\nconst payloadCache = new Map<string, CacheEntry>();\n\nfunction cacheKey(json: string): string {\n // 简单 hash:长度 + 前 64 字符 + 末 64 字符\n const n = json.length;\n if (n <= 128) return json;\n return `${n}|${json.slice(0, 64)}|${json.slice(-64)}`;\n}\n\nfunction cacheGet(key: string): string | undefined {\n const e = payloadCache.get(key);\n if (!e) return undefined;\n if (Date.now() - e.ts > PAYLOAD_CACHE_TTL) {\n payloadCache.delete(key);\n return undefined;\n }\n // LRU bump\n payloadCache.delete(key);\n payloadCache.set(key, e);\n return e.data;\n}\n\nfunction cacheSet(key: string, data: string): void {\n if (payloadCache.size >= PAYLOAD_CACHE_MAX) {\n // 删最旧\n const first = payloadCache.keys().next().value;\n if (first !== undefined) payloadCache.delete(first);\n }\n payloadCache.set(key, { ts: Date.now(), data });\n}\n\nexport function encodeEvent(event: EventData, encryptor?: EncryptFn): string | Promise<string> {\n const json = JSON.stringify(event);\n const k = cacheKey(json);\n if (!encryptor) {\n const cached = cacheGet(k);\n if (cached !== undefined) return cached;\n cacheSet(k, json);\n return json;\n }\n // 加密时直接返回(不可缓存)\n return encryptor(json);\n}\n\nexport function encodeBatch(events: EventData[], encryptor?: EncryptFn): string | Promise<string> {\n const json = JSON.stringify(events);\n const k = cacheKey(json);\n if (!encryptor) {\n const cached = cacheGet(k);\n if (cached !== undefined) return cached;\n cacheSet(k, json);\n return json;\n }\n return encryptor(json);\n}\n\nexport function buildUrl(serverUrl: string | string[], payload: string, contentType: 'json' | 'form' = 'form'): string {\n const base = Array.isArray(serverUrl) ? serverUrl[0] || '' : serverUrl;\n const has = base.indexOf('?') >= 0;\n if (contentType === 'form') {\n return `${base}${has ? '&' : '?'}data=${encodeURIComponent(payload)}`;\n }\n return `${base}${has ? '&' : '?'}data=${encodeURIComponent(payload)}`;\n}\n\n// ============================================================\n// 工具:bytes ↔ string(用单例 TextEncoder)\n// ============================================================\nexport function strToBytes(s: string): Uint8Array {\n return getTextEncoder().encode(s);\n}\n\nexport function bytesToStr(b: Uint8Array): string {\n return getTextDecoder().decode(b);\n}\n\n// ============================================================\n// 工具:base64url(用于 sendBeacon/POST 二进制)\n// ============================================================\nexport function toBase64Url(bytes: Uint8Array): string {\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '');\n}\n\n// ============================================================\n// 工具:清空 payload 缓存(debug / 测试用)\n// ============================================================\nexport function _clearPayloadCache(): void {\n payloadCache.clear();\n}\n\n// ============================================================\n// decodeEvent 缓存:相同 JSON 短时间内不重复 JSON.parse\n// ============================================================\nconst DECODE_CACHE_TTL = 500;\nconst DECODE_CACHE_MAX = 64;\nconst decodeCache = new Map<string, { ts: number; data: unknown }>();\n\nfunction decodeGet(key: string): unknown | undefined {\n const e = decodeCache.get(key);\n if (!e) return undefined;\n if (Date.now() - e.ts > DECODE_CACHE_TTL) {\n decodeCache.delete(key);\n return undefined;\n }\n decodeCache.delete(key);\n decodeCache.set(key, e);\n return e.data;\n}\n\nfunction decodeSet(key: string, data: unknown): void {\n if (decodeCache.size >= DECODE_CACHE_MAX) {\n const first = decodeCache.keys().next().value;\n if (first !== undefined) decodeCache.delete(first);\n }\n decodeCache.set(key, { ts: Date.now(), data });\n}\n\n/** 反序列化(带缓存) */\nexport function decodeEvent<T = unknown>(json: string): T {\n const k = cacheKey(json);\n const cached = decodeGet(k);\n if (cached !== undefined) return cached as T;\n try {\n const data = JSON.parse(json) as T;\n decodeSet(k, data);\n return data;\n } catch {\n // 缓存负缓存\n decodeSet(k, null);\n return null as T;\n }\n}","/**\n * Image 发送器(1x1 gif 兜底,兼容性最好)\n */\n\nimport { hasImage } from '../core/env.js';\nimport { encodeEvent, buildUrl } from './encode.js';\nimport type { SendContext, Sender } from './sender.js';\nimport type { EventData } from '../types/index.js';\n\n/**\n * 间接构造 Image(避免编译期绑定到 module-local Image)\n * 测试可以通过覆盖 globalThis.Image 来 spy\n */\nfunction makeImage(): HTMLImageElement | { src: string; onload?: () => void; onerror?: () => void; onabort?: () => void } {\n // 用 eval 避免编译器静态解析 Image 标识符\n // eslint-disable-next-line no-eval\n const g: { Image?: new () => HTMLImageElement } = (0, eval)('this') || globalThis;\n const Ctor = g.Image;\n if (typeof Ctor === 'function') return new Ctor();\n return { src: '', onload: undefined, onerror: undefined, onabort: undefined };\n}\n\nexport class ImageSender implements Sender {\n name = 'image' as const;\n\n canUse(): boolean {\n return hasImage();\n }\n\n async send(event: EventData, ctx: SendContext): Promise<void> {\n try {\n const payload = await Promise.resolve(encodeEvent(event, ctx.config.encryptor));\n const url = buildUrl(ctx.config.server_url || '', payload, 'form');\n await new Promise<void>((resolve) => {\n const img = makeImage() as {\n src: string;\n onload?: () => void;\n onerror?: () => void;\n onabort?: () => void;\n };\n const done = () => resolve();\n img.onload = done;\n img.onerror = done;\n img.onabort = done;\n img.src = url;\n setTimeout(done, 3000);\n });\n } catch (e) {\n ctx.logger.error('ImageSender failed:', e);\n }\n }\n}","/**\n * Beacon 发送器(navigator.sendBeacon)\n */\n\nimport { hasBeacon } from '../core/env.js';\nimport { encodeEvent, buildUrl } from './encode.js';\nimport type { SendContext, Sender } from './sender.js';\nimport type { EventData } from '../types/index.js';\n\nexport class BeaconSender implements Sender {\n name = 'beacon' as const;\n\n canUse(): boolean {\n return hasBeacon();\n }\n\n async send(event: EventData, ctx: SendContext): Promise<void> {\n try {\n const payload = await Promise.resolve(encodeEvent(event, ctx.config.encryptor));\n const url = buildUrl(ctx.config.server_url || '', payload, 'form');\n const blob = new Blob([payload], { type: 'application/x-www-form-urlencoded' });\n const ok = navigator.sendBeacon(url, blob);\n if (!ok) {\n ctx.logger.warn('BeaconSender returned false, URL:', url.slice(0, 80));\n }\n } catch (e) {\n ctx.logger.error('BeaconSender failed:', e);\n }\n }\n}","/**\n * Payload 完整性签名(v1.3.0)\n *\n * - 用 identity_secret 对 payload 做 HMAC-SHA256\n * - 通过 X-Payload-Sig 头传到服务端\n * - 服务端用同一 secret 校验\n * - 支持异步签名(Web Crypto)\n */\n\nexport interface SignOptions {\n secret: string;\n /** salt(可选,时间戳 / distinct_id 拼接) */\n salt?: string;\n}\n\nconst encoder = new TextEncoder();\n\n/** 把字符串 secret 转 Uint8Array */\nfunction secretToKey(secret: string): Uint8Array {\n // 简单:UTF-8 编码;也可以 HKDF,但 secret 通常够长\n return encoder.encode(secret);\n}\n\n/** 异步 HMAC-SHA256 */\nexport async function hmacSign(payload: string, opts: SignOptions): Promise<string> {\n const keyData = secretToKey(opts.salt ? `${opts.secret}:${opts.salt}` : opts.secret);\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData as BufferSource,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n );\n const sig = await crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(payload) as BufferSource);\n // 转 base64url\n const bytes = new Uint8Array(sig);\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '');\n}\n\n/** 同步 fallback(仅 Node crypto 环境) */\nexport function hmacSignSync(payload: string, opts: SignOptions): string {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const nodeCrypto = (globalThis as { process?: { versions?: { node?: string } } }).process?.versions?.node\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n ? require('crypto')\n : null;\n if (!nodeCrypto) {\n throw new Error('hmacSignSync only available in Node');\n }\n const hmac = nodeCrypto.createHmac('sha256', opts.salt ? `${opts.secret}:${opts.salt}` : opts.secret);\n hmac.update(payload);\n return hmac.digest('base64url');\n}\n\n/** 验证签名 */\nexport async function hmacVerify(\n payload: string,\n signature: string,\n opts: SignOptions,\n): Promise<boolean> {\n const expected = await hmacSign(payload, opts);\n return constantTimeEqual(expected, signature);\n}\n\nfunction constantTimeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let r = 0;\n for (let i = 0; i < a.length; i++) r |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return r === 0;\n}\n\n/**\n * 在 SendContext 上挂载签名 + 自动给 AJAX 请求加 X-Payload-Sig\n */\nexport interface SignedContext {\n config: { identity_secret?: string };\n logger?: { warn: (msg: string, e?: unknown) => void };\n}\n\nexport async function signPayload(\n payload: string,\n ctx: SignedContext,\n distinctId?: string,\n): Promise<string | null> {\n const secret = ctx.config.identity_secret;\n if (!secret) return null;\n try {\n return await hmacSign(payload, { secret, salt: distinctId });\n } catch (e) {\n ctx.logger?.warn?.('signPayload failed:', e);\n return null;\n }\n}","/**\n * Ajax 发送器(fetch + keepalive + gzip)\n *\n * - 支持 gzip(v1.2.0 #6):通过 CompressionStream('gzip')\n * - keepalive: true 支持 unload 后继续发送\n * - Content-Encoding: gzip 用于告诉服务端解码\n */\n\nimport { hasFetch, hasCompressionStream } from '../core/env.js';\nimport { encodeEvent, encodeBatch, strToBytes, toBase64Url } from './encode.js';\nimport type { SendContext, Sender } from './sender.js';\nimport type { EventData } from '../types/index.js';\nimport { signPayload } from '../core/payload-signer.js';\n\ninterface SendConfigBatchExt {\n gzip?: boolean;\n}\n\n/**\n * 可选:把字符串压缩为 gzip Uint8Array\n * 不支持时返回 null(fallback 到原始字符串)\n */\nasync function maybeGzip(\n text: string,\n enabled: boolean,\n): Promise<{ body: BodyInit; headers: Record<string, string> } | null> {\n if (!enabled || !hasCompressionStream()) return null;\n try {\n const stream = new (globalThis as { CompressionStream?: typeof CompressionStream }).CompressionStream('gzip');\n const writer = stream.writable.getWriter();\n await writer.write(strToBytes(text) as unknown as BufferSource);\n await writer.close();\n const reader = stream.readable.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n // 循环读\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n if (value) {\n chunks.push(value);\n total += value.byteLength;\n }\n }\n const merged = new Uint8Array(total);\n let off = 0;\n for (const c of chunks) {\n merged.set(c, off);\n off += c.byteLength;\n }\n // 用 base64url 作为 binary safe 形式(服务端需配套解码)\n return {\n body: toBase64Url(merged),\n headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Content-Encoding': 'gzip' },\n };\n } catch {\n return null;\n }\n}\n\nexport class AjaxSender implements Sender {\n name = 'ajax' as const;\n\n canUse(): boolean {\n return hasFetch();\n }\n\n private getGzipEnabled(ctx: SendContext): boolean {\n return Boolean((ctx.config.batch_send as SendConfigBatchExt | undefined)?.gzip);\n }\n\n async send(event: EventData, ctx: SendContext): Promise<void> {\n try {\n const payload = await Promise.resolve(encodeEvent(event, ctx.config.encryptor));\n const url = Array.isArray(ctx.config.server_url) ? ctx.config.server_url[0] : ctx.config.server_url;\n const gz = await maybeGzip(payload, this.getGzipEnabled(ctx));\n let body: BodyInit;\n let headers: Record<string, string>;\n if (gz) {\n body = `data=${gz.body}`;\n headers = gz.headers;\n } else {\n body = `data=${encodeURIComponent(payload)}`;\n headers = { 'Content-Type': 'application/x-www-form-urlencoded' };\n }\n // 签名\n const sig = await signPayload(payload, ctx, event.distinct_id);\n if (sig) headers['X-Payload-Sig'] = sig;\n const res = await fetch(url, {\n method: 'POST',\n mode: 'cors',\n credentials: 'omit',\n headers,\n body,\n keepalive: true,\n });\n if (!res.ok) {\n ctx.logger.warn('AjaxSender non-2xx:', res.status);\n ctx.config.on_error?.(new Error(`HTTP ${res.status}`), event);\n } else {\n ctx.config.callback?.(event);\n }\n } catch (e) {\n ctx.logger.error('AjaxSender failed:', e);\n ctx.config.on_error?.(e as Error, event);\n }\n }\n\n async sendBatch(events: EventData[], ctx: SendContext): Promise<void> {\n try {\n const payload = await Promise.resolve(encodeBatch(events, ctx.config.encryptor));\n const url = Array.isArray(ctx.config.server_url) ? ctx.config.server_url[0] : ctx.config.server_url;\n const gz = await maybeGzip(payload, this.getGzipEnabled(ctx));\n let body: BodyInit;\n let headers: Record<string, string>;\n if (gz) {\n body = `data=${gz.body}&batch=1`;\n headers = gz.headers;\n } else {\n body = `data=${encodeURIComponent(payload)}&batch=1`;\n headers = { 'Content-Type': 'application/x-www-form-urlencoded' };\n }\n const sig = await signPayload(payload, ctx, events[0]?.distinct_id);\n if (sig) headers['X-Payload-Sig'] = sig;\n await fetch(url, {\n method: 'POST',\n mode: 'cors',\n credentials: 'omit',\n headers,\n body,\n keepalive: true,\n });\n } catch (e) {\n ctx.logger.error('AjaxSender.sendBatch failed:', e);\n }\n }\n}","/**\n * Batch 发送器:事件先入队到 localStorage,链式 setTimeout 调度\n *\n * - 不使用 setInterval,改为每次 flush 完后再排下一次(chain)\n * - 队列满 / 显式 flush 时立即发送\n * - 支持 gzip(v1.2.0 #6)+ CompressionStream\n * - 链式调度避免 setInterval 在页面隐藏时仍在跑\n */\n\nimport { encodeBatch } from './encode.js';\nimport type { SendContext, Sender } from './sender.js';\nimport type { EventData, TrackerConfig } from '../types/index.js';\nimport { BeaconSender } from './beacon-sender.js';\n\nconst QUEUE_KEY = 'et_batch_queue';\nconst DEFAULT_MAX = 50;\nconst DEFAULT_INTERVAL = 6000;\n\nexport class BatchSender implements Sender {\n name = 'batch' as const;\n private timer: ReturnType<typeof setTimeout> | null = null;\n private running = false;\n private ctx?: SendContext;\n\n canUse(): boolean {\n return typeof window !== 'undefined' && !!window.localStorage;\n }\n\n start(ctx: SendContext): void {\n if (!this.canUse()) return;\n this.ctx = ctx;\n this.scheduleNext();\n }\n\n stop(): void {\n if (this.timer) clearTimeout(this.timer);\n this.timer = null;\n this.ctx = undefined;\n }\n\n async send(event: EventData, ctx: SendContext): Promise<void> {\n this.enqueue(event, ctx.config);\n const max = (typeof ctx.config.batch_send === 'object' && ctx.config.batch_send?.max_length) || DEFAULT_MAX;\n const queue = this.read(ctx.config);\n if (queue.length >= max) {\n await this.flush(ctx);\n } else {\n // 入队后顺便排个调度\n this.scheduleNext();\n }\n }\n\n /** 链式调度:flush 完后再排下一次 */\n private scheduleNext(): void {\n if (this.timer || !this.ctx) return;\n const bs = this.ctx.config.batch_send;\n const predict = (this.ctx.config as unknown as { batch_send_predict?: () => number }).batch_send_predict;\n const interval = predict\n ? predict()\n : (typeof bs === 'object' && bs?.send_interval) || this.ctx.config.datasend_timeout || DEFAULT_INTERVAL;\n this.timer = setTimeout(() => {\n this.timer = null;\n void this.flush(this.ctx!).then(() => this.scheduleNext());\n }, interval);\n }\n\n /** 窥探当前队列长度(pipeline.flush 用于 onFlush 计数) */\n peekQueueSize(): number {\n if (!this.ctx) return 0;\n return this.read(this.ctx.config).length;\n }\n\n private enqueue(event: EventData, config: TrackerConfig): void {\n const q = this.read(config);\n q.push(event);\n this.write(q, config);\n }\n\n private read(config: TrackerConfig): EventData[] {\n try {\n const raw = window.localStorage.getItem(QUEUE_KEY);\n if (!raw) return [];\n const arr = JSON.parse(raw);\n return Array.isArray(arr) ? arr : [];\n } catch {\n return [];\n }\n }\n\n private write(queue: EventData[], config: TrackerConfig): void {\n try {\n const payload = encodeBatch(queue, config.encryptor);\n // 异步时(Promise<string>)暂存 JSON 原文\n const str = typeof payload === 'string' ? payload : JSON.stringify(queue);\n window.localStorage.setItem(QUEUE_KEY, str);\n } catch {\n // quota exceed, drop oldest half\n const half = queue.slice(Math.floor(queue.length / 2));\n try {\n const payload2 = encodeBatch(half, config.encryptor);\n const str2 = typeof payload2 === 'string' ? payload2 : JSON.stringify(half);\n window.localStorage.setItem(QUEUE_KEY, str2);\n } catch {\n /* ignore */\n }\n }\n }\n\n async flush(ctx: SendContext): Promise<void> {\n if (this.running) return;\n this.running = true;\n try {\n const queue = this.read(ctx.config);\n if (!queue.length) return;\n // 清空队列\n try {\n window.localStorage.removeItem(QUEUE_KEY);\n } catch {\n /* ignore */\n }\n // 走 ajax 批量(gzip 支持)\n const ajax = new (await import('./ajax-sender.js')).AjaxSender();\n if (ajax.canUse()) {\n await ajax.sendBatch!(queue, ctx);\n } else {\n // 降级为逐条 beacon\n const beacon = new BeaconSender();\n for (const ev of queue) {\n await beacon.send(ev, ctx);\n }\n }\n } finally {\n this.running = false;\n }\n }\n}","/**\n * 事件数据拦截 Stage\n * - 3 个 Stage: buildDataStage / businessStage / sendDataStage\n * - 按 priority 升序执行\n * - cancellationToken 可中断后续\n *\n * 灵感来自神策 sa-sdk-javascript 内部实现\n */\n\nexport type StageName = 'buildDataStage' | 'businessStage' | 'sendDataStage';\n\nexport interface StageContext<T> {\n data: T;\n /** 阶段元信息 */\n meta: {\n stage: StageName;\n [key: string]: unknown;\n };\n /** 取消令牌:调 stop() 后后续 interceptor 跳过 */\n cancellationToken: { stop: () => void };\n /** SDK 引用,供 interceptor 使用 */\n owner?: unknown;\n}\n\nexport interface StageInterceptor<T> {\n /** 唯一名(同名注册会覆盖) */\n name: string;\n /** 数字越小越先执行,默认 100 */\n priority?: number;\n /** 拦截处理,返回新数据或直接改 ctx.data */\n entry: (ctx: StageContext<T>) => T | void;\n}\n\nexport class StageChain<T = unknown> {\n private list: Array<{ priority: number; spec: StageInterceptor<T> }> = [];\n private stopped = false;\n private stopFlag = false;\n\n constructor(private stage: StageName) {}\n\n /** 注册一个拦截器(同名覆盖) */\n register(spec: StageInterceptor<T>): void {\n this.unregister(spec.name);\n this.list.push({ priority: spec.priority ?? 100, spec });\n this.list.sort((a, b) => a.priority - b.priority);\n }\n\n /** 移除一个拦截器 */\n unregister(name: string): void {\n this.list = this.list.filter(item => item.spec.name !== name);\n }\n\n /** 获取所有拦截器名(调试用) */\n list2(): string[] {\n return this.list.map(i => `${i.spec.name}@${i.priority}`);\n }\n\n /** 重置 stage(含清除停止标志) */\n reset(): void {\n this.stopFlag = false;\n }\n\n /** 主入口:顺序执行 */\n run(input: T, owner?: unknown): T {\n this.stopFlag = false;\n const ctx: StageContext<T> = {\n data: input,\n meta: { stage: this.stage },\n cancellationToken: {\n stop: () => { this.stopFlag = true; },\n },\n owner,\n };\n for (const { spec } of this.list) {\n if (this.stopFlag) break;\n const out = spec.entry(ctx);\n if (out !== undefined) {\n ctx.data = out as T;\n }\n }\n return ctx.data;\n }\n}\n","/**\n * 7 个生命周期钩子\n * - sdkReady SDK 加载完成,init 之前\n * - sdkInitPara init 处理参数时(合并前)\n * - sdkAfterInitPara init 处理参数后\n * - sdkInitAPI API 挂到 window 之前\n * - sdkAfterInitAPI API 挂到 window 之后\n * - changeDistinctId distinct 变化时\n * - switch 配置切换(多实例)\n */\n\nexport type HookName =\n | 'sdkReady'\n | 'sdkInitPara'\n | 'sdkAfterInitPara'\n | 'sdkInitAPI'\n | 'sdkAfterInitAPI'\n | 'changeDistinctId'\n | 'switch';\n\nexport const ALL_HOOKS: readonly HookName[] = [\n 'sdkReady',\n 'sdkInitPara',\n 'sdkAfterInitPara',\n 'sdkInitAPI',\n 'sdkAfterInitAPI',\n 'changeDistinctId',\n 'switch',\n] as const;\n\nexport type HookFn = (...args: unknown[]) => void | Promise<void>;\n\nexport class Lifecycle {\n private hooks: Record<HookName, Set<HookFn>> = {\n sdkReady: new Set(),\n sdkInitPara: new Set(),\n sdkAfterInitPara: new Set(),\n sdkInitAPI: new Set(),\n sdkAfterInitAPI: new Set(),\n changeDistinctId: new Set(),\n switch: new Set(),\n };\n\n /** 注册钩子,返回取消函数 */\n on(name: HookName, fn: HookFn): () => void {\n if (!this.hooks[name]) {\n throw new Error(`[Lifecycle] unknown hook: ${name}`);\n }\n this.hooks[name].add(fn);\n return () => this.off(name, fn);\n }\n\n /** 取消钩子 */\n off(name: HookName, fn: HookFn): void {\n this.hooks[name]?.delete(fn);\n }\n\n /** 同步触发钩子(catch 内部错误,不向外抛) */\n emit(name: HookName, ...args: unknown[]): void {\n const set = this.hooks[name];\n if (!set) return;\n // 拷贝一份以容忍 off() 出现在回调中\n for (const fn of Array.from(set)) {\n try {\n fn(...args);\n } catch (e) {\n // 钩子内错误吞掉,避免影响主流程\n if (typeof console !== 'undefined' && console.error) {\n console.error(`[EventTracker] hook ${name} error:`, e);\n }\n }\n }\n }\n\n /** 移除全部钩子 */\n clear(): void {\n for (const k of Object.keys(this.hooks) as HookName[]) {\n this.hooks[k].clear();\n }\n }\n\n /** 调试用 */\n inspect(): Record<HookName, number> {\n const out = {} as Record<HookName, number>;\n for (const k of Object.keys(this.hooks) as HookName[]) {\n out[k] = this.hooks[k].size;\n }\n return out;\n }\n}\n","import { StageChain, type StageInterceptor, type StageName } from './stage.js';\nimport { Lifecycle, type HookName, type HookFn } from './lifecycle.js';\nimport type { TrackerConfig } from '../types/index.js';\n\nexport interface InstallContext {\n /** 当前配置(reference,mutate 会影响 SDK) */\n config: TrackerConfig;\n /** 钩子系统 */\n registry: PluginRegistry;\n /** 3 个 stage 注入点 */\n stages: {\n buildDataStage: StageChain<unknown>;\n businessStage: StageChain<unknown>;\n sendDataStage: StageChain<unknown>;\n };\n /** SDK 自身引用(提供 track / identify / use / quick 等 API) */\n sdk: import('./tracker.js').EventTracker;\n /** 给插件使用的命名空间(每个 plugin 可写入自己的子对象) */\n kit: Record<string, unknown>;\n /** 跨实例 channel */\n channel: import('./instance-channel.js').InstanceChannel;\n /** 持久化 store */\n store: import('../storage/store.js').KVStore;\n /** 卸载 */\n uninstall: () => void;\n}\n\nexport interface Plugin {\n /** 唯一名(同名重复 install 会先卸载旧的) */\n name: string;\n install?(ctx: InstallContext): void;\n uninstall?(ctx?: InstallContext): void;\n}\n\nexport class PluginRegistry {\n /** 3 个 stage */\n readonly stages: {\n buildDataStage: StageChain<unknown>;\n businessStage: StageChain<unknown>;\n sendDataStage: StageChain<unknown>;\n };\n\n /** 7 个生命周期钩子 */\n readonly lifecycle = new Lifecycle();\n\n /** 已安装的 plugin 列表 */\n private plugins: Plugin[] = [];\n\n /** commonWays:quick() 调用入口 */\n readonly commonWays: Record<string, (...args: unknown[]) => unknown> = {};\n\n /** hook 注册快捷方法(向后兼容 + 简化插件作者) */\n on(name: HookName, fn: HookFn): () => void {\n return this.lifecycle.on(name, fn);\n }\n off(name: HookName, fn: HookFn): void {\n this.lifecycle.off(name, fn);\n }\n emit(name: HookName, ...args: unknown[]): void {\n this.lifecycle.emit(name, ...args);\n }\n\n /** stage 注册拦截器 */\n intercept<T = unknown>(stage: StageName, spec: StageInterceptor<T>): void {\n this.stages[stage].register(spec as StageInterceptor<unknown>);\n }\n\n /** 兼容旧 API:invoke(name, ...args) = emit(name, ...args) */\n invoke(name: HookName, ...args: unknown[]): void {\n this.lifecycle.emit(name, ...args);\n }\n\n constructor() {\n this.stages = {\n buildDataStage: new StageChain('buildDataStage'),\n businessStage: new StageChain('businessStage'),\n sendDataStage: new StageChain('sendDataStage'),\n };\n }\n\n /** 安装 plugin */\n install(\n plugin: Plugin,\n ctx: Omit<InstallContext, 'registry' | 'stages'>,\n ): void {\n // 同名先卸载\n const idx = this.plugins.findIndex(p => p.name === plugin.name);\n if (idx >= 0) {\n this.uninstall(this.plugins[idx]);\n this.plugins.splice(idx, 1);\n }\n this.plugins.push(plugin);\n if (plugin.install) {\n const full: InstallContext = {\n ...ctx,\n registry: this,\n stages: this.stages,\n };\n try {\n plugin.install(full);\n } catch (e) {\n if (typeof console !== 'undefined' && console.error) {\n console.error(`[EventTracker] plugin ${plugin.name} install failed:`, e);\n }\n }\n }\n }\n\n /** 卸载 plugin */\n uninstall(plugin: Plugin, ctx?: InstallContext): void {\n try {\n plugin.uninstall?.(ctx);\n } catch (e) {\n if (typeof console !== 'undefined' && console.error) {\n console.error(`[EventTracker] plugin ${plugin.name} uninstall failed:`, e);\n }\n }\n }\n\n /** 列出已安装 */\n list(): string[] {\n return this.plugins.map(p => p.name);\n }\n}\n","/**\n * 跨实例 channel\n * - 用 BroadcastChannel 实现,浏览器跨 tab 通信\n * - 降级到 localStorage(无 BroadcastChannel 时)\n * - 主要用于:\n * - 共享 disabled 状态\n * - 共享 changeDistinctId\n * - 共享 session_id\n */\n\nexport interface ChannelMessage {\n type: 'state' | 'distinct' | 'session' | 'custom';\n source: string; // 实例 id,避开自己发出的回声\n payload: unknown;\n}\n\ntype Listener = (msg: ChannelMessage) => void;\n\nconst CHANNEL_NAME = 'event-tracker';\n\nexport class InstanceChannel {\n private bc: BroadcastChannel | null = null;\n private listeners = new Set<Listener>();\n private sourceId = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n private localStorageKey = `et_channel_${CHANNEL_NAME}`;\n private pollTimer: ReturnType<typeof setInterval> | null = null;\n\n constructor() {\n this.initBroadcastChannel();\n if (!this.bc) this.initLocalStoragePolling();\n }\n\n private initBroadcastChannel(): void {\n if (typeof BroadcastChannel === 'undefined') return;\n try {\n this.bc = new BroadcastChannel(CHANNEL_NAME);\n this.bc.onmessage = (ev: MessageEvent<ChannelMessage>) => {\n if (ev.data?.source === this.sourceId) return;\n this.listeners.forEach(fn => fn(ev.data));\n };\n } catch {\n this.bc = null;\n }\n }\n\n private initLocalStoragePolling(): void {\n // storage event 兼容性\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', (ev: StorageEvent) => {\n if (ev.key !== this.localStorageKey || !ev.newValue) return;\n try {\n const msg = JSON.parse(ev.newValue) as ChannelMessage;\n if (msg.source === this.sourceId) return;\n this.listeners.forEach(fn => fn(msg));\n } catch {\n /* ignore */\n }\n });\n }\n }\n\n /** 发送消息 */\n post(type: ChannelMessage['type'], payload: unknown): void {\n const msg: ChannelMessage = { type, source: this.sourceId, payload };\n if (this.bc) {\n try { this.bc.postMessage(msg); } catch { /* ignore */ }\n } else {\n // localStorage 降级\n try {\n localStorage.setItem(this.localStorageKey, JSON.stringify(msg));\n } catch { /* ignore quota */ }\n }\n }\n\n /** 监听消息,返回取消函数 */\n on(fn: Listener): () => void {\n this.listeners.add(fn);\n return () => this.listeners.delete(fn);\n }\n\n /** 关闭 */\n close(): void {\n if (this.bc) {\n try { this.bc.close(); } catch { /* ignore */ }\n this.bc = null;\n }\n this.listeners.clear();\n if (this.pollTimer) {\n clearInterval(this.pollTimer);\n this.pollTimer = null;\n }\n }\n\n /** 实例 id(用于调试 / 验证) */\n getSourceId(): string {\n return this.sourceId;\n }\n}\n","/**\n * 失败重试 + 退避(v1.2.0)\n *\n * - 指数退避(base 1s, cap 30s)\n * - 全抖动(full jitter):sleep = random(0, base * 2^attempt)\n * - 可配置 retry jitter type(off / equal / full / decorrelated)\n * - 超过 max_retry_count / max_retry_duration 放弃\n */\n\nimport type { TrackerConfig } from '../types/index.js';\nimport type { Logger } from './logger.js';\n\nexport interface RetryConfig {\n max_retry_count: number;\n max_retry_duration: number;\n}\n\nexport type JitterType = 'off' | 'equal' | 'full' | 'decorrelated';\n\n/** 重试执行结果 */\nexport interface RetryResult {\n ok: boolean;\n attempts: number;\n finalErr: Error | null;\n}\n\nexport class RetryPolicy {\n private jitter: JitterType;\n\n constructor(\n private config: TrackerConfig,\n private logger: Logger,\n jitter: JitterType = 'full',\n ) {\n this.jitter = jitter;\n }\n\n /** 计算本次重试要 sleep 多久(指数退避 + 抖动) */\n backoff(attempt: number, baseMs = 1000, capMs = 30000): number {\n const exp = Math.min(baseMs * 2 ** attempt, capMs);\n switch (this.jitter) {\n case 'off':\n return exp;\n case 'equal':\n // half deterministic + half random\n return exp / 2 + Math.random() * (exp / 2);\n case 'full':\n return Math.random() * exp;\n case 'decorrelated':\n // decorrelated jitter:sleep = uniform(base, prev*3),cap\n // 这里没有 prev 状态,用 attempt - 1 的 base*2^(attempt-1)*3\n const prev = Math.min(baseMs * 2 ** Math.max(0, attempt - 1) * 3, capMs);\n return baseMs + Math.random() * (prev - baseMs);\n default:\n return exp;\n }\n }\n\n /**\n * 带重试执行 send 函数\n * @param send 单次发送\n * @param shouldRetry 判断失败是否重试\n */\n async execute(\n send: () => Promise<void> | void,\n shouldRetry: (err: Error | null) => boolean = () => true,\n onFailed?: (err: Error, attempt: number) => void,\n ): Promise<RetryResult> {\n const maxCount = this.config.max_retry_count ?? 3;\n const maxDur = this.config.max_retry_duration ?? 60000;\n const start = Date.now();\n let lastErr: Error | null = null;\n let sleepAcc = 0;\n\n for (let attempt = 0; attempt <= maxCount; attempt++) {\n try {\n await send();\n return { ok: true, attempts: attempt + 1, finalErr: null };\n } catch (e) {\n lastErr = e as Error;\n if (!shouldRetry(lastErr)) {\n return { ok: false, attempts: attempt + 1, finalErr: lastErr };\n }\n const nextSleep = this.backoff(attempt);\n if (Date.now() - start + sleepAcc + nextSleep > maxDur) {\n this.logger.warn(`[EventTracker] max_retry_duration reached, give up`);\n onFailed?.(lastErr, attempt + 1);\n return { ok: false, attempts: attempt + 1, finalErr: lastErr };\n }\n if (attempt < maxCount) {\n sleepAcc += nextSleep;\n await this.sleep(nextSleep);\n }\n }\n }\n onFailed?.(lastErr as Error, maxCount + 1);\n return { ok: false, attempts: maxCount + 1, finalErr: lastErr };\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n}","/**\n * 失败队列(v1.2.0)\n *\n * - 失败事件写入 localStorage(et_failed_queue)\n * - 下次启动时优先 flush(drain)\n * - 上限 50 条\n * - 单飞锁:同一时刻只有一个 drain 在跑\n * - AbortSignal 支持:drain 中断后保留队列\n */\n\nimport type { EventData } from '../types/index.js';\nimport { encodeBatch } from '../send/encode.js';\nimport { isBrowser, hasLocalStorage } from '../core/env.js';\n\nconst QUEUE_KEY = 'et_failed_queue';\nconst DEFAULT_MAX = 50;\n\nexport class FailedQueue {\n private config: { max: number; encryptor?: (s: string) => string | Promise<string> };\n private draining = false;\n private drainPromise: Promise<void> | null = null;\n private drainAbort: AbortController | null = null;\n\n constructor(config: { max?: number; encryptor?: (s: string) => string | Promise<string> } = {}) {\n this.config = { max: config.max ?? DEFAULT_MAX, encryptor: config.encryptor };\n }\n\n /** 读队列 */\n read(): EventData[] {\n if (!isBrowser() || !hasLocalStorage()) return [];\n try {\n const raw = localStorage.getItem(QUEUE_KEY);\n if (!raw) return [];\n const arr = JSON.parse(raw);\n return Array.isArray(arr) ? arr : [];\n } catch {\n return [];\n }\n }\n\n /** 写一条 */\n enqueue(event: EventData): void {\n if (!isBrowser() || !hasLocalStorage()) return;\n const q = this.read();\n q.push(event);\n if (q.length > this.config.max) q.splice(0, q.length - this.config.max);\n try {\n // encryptor 可能是异步(Promise<string>),这里只用 JSON 原文入队\n const enc = this.config.encryptor;\n const str = enc ? JSON.stringify(q) : JSON.stringify(q);\n localStorage.setItem(QUEUE_KEY, str);\n } catch {\n // quota 满,丢弃一半\n const half = q.slice(Math.floor(q.length / 2));\n try {\n localStorage.setItem(QUEUE_KEY, JSON.stringify(half));\n } catch { /* ignore */ }\n }\n }\n\n /** 清空 */\n clear(): void {\n if (!isBrowser() || !hasLocalStorage()) return;\n try { localStorage.removeItem(QUEUE_KEY); } catch { /* ignore */ }\n }\n\n /** 取走全部(同时清空) */\n takeAll(): EventData[] {\n const q = this.read();\n this.clear();\n return q;\n }\n\n /** 队列大小 */\n size(): number {\n return this.read().length;\n }\n\n /**\n * 单飞 drain:同一时刻只有一个 drain 在跑,后续 drain 直接复用 promise\n * @param sender 实际发送函数\n * @returns Promise<number> 实际发送成功条数\n */\n async drain(sender: (events: EventData[]) => Promise<number>): Promise<number> {\n if (this.draining && this.drainPromise) {\n await this.drainPromise.catch(() => { /* ignore */ });\n return 0;\n }\n this.draining = true;\n this.drainAbort = new AbortController();\n this.drainPromise = this._drain(sender);\n try {\n await this.drainPromise;\n return 0; // 由 _drain 内部统计\n } finally {\n this.draining = false;\n this.drainPromise = null;\n this.drainAbort = null;\n }\n }\n\n /** 取消正在跑的 drain(保留队列) */\n abortDrain(reason?: string): void {\n this.drainAbort?.abort(reason);\n }\n\n private async _drain(sender: (events: EventData[]) => Promise<number>): Promise<void> {\n const signal = this.drainAbort!.signal;\n while (!signal.aborted) {\n const q = this.takeAll();\n if (!q.length) return;\n try {\n const ok = await sender(q);\n if (ok < q.length) {\n // 部分失败,把剩余塞回去\n const remain = q.slice(ok);\n for (const e of remain) this.enqueue(e);\n return;\n }\n } catch {\n // 全部失败,回滚\n for (const e of q) this.enqueue(e);\n return;\n }\n }\n }\n}\n\n// 重新导出避免循环引用\nexport { encodeBatch };","/**\n * SDK 统一错误类型(v1.1)\n *\n * 所有内部 / 暴露给用户的错误都继承 SDKError,带 code 字段方便用户处理:\n * - SDKError\n * ├── InitError 配置错误(缺 server_url 等)\n * ├── SendError 发送失败\n * ├── EncryptError 加密 / 解密失败\n * ├── IdentityError 身份 / ID 操作失败\n * ├── StorageError 存储读写失败\n * ├── PluginError 插件 install / uninstall 失败\n * └── ConfigError 配置校验失败\n */\n\n/** 基类 */\nexport class SDKError extends Error {\n /** 错误码 */\n readonly code: string;\n /** 原始错误 */\n readonly cause?: unknown;\n /** 出错时间戳 */\n readonly timestamp: number;\n /** 上下文(带最少 1KB 容量) */\n readonly context?: Record<string, unknown>;\n\n constructor(\n code: string,\n message: string,\n options: { cause?: unknown; context?: Record<string, unknown> } = {},\n ) {\n super(message);\n this.name = this.constructor.name;\n this.code = code;\n this.cause = options.cause;\n this.context = options.context;\n this.timestamp = Date.now();\n // 保留下调用栈\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n /** 序列化为对象(方便日志) */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n timestamp: this.timestamp,\n context: this.context,\n stack: this.stack,\n };\n }\n}\n\nexport class InitError extends SDKError {\n constructor(message: string, options?: { cause?: unknown; context?: Record<string, unknown> }) {\n super('INIT', message, options);\n }\n}\n\nexport class SendError extends SDKError {\n readonly attempts: number;\n constructor(message: string, attempts: number, options?: { cause?: unknown; context?: Record<string, unknown> }) {\n super('SEND', message, options);\n this.attempts = attempts;\n }\n}\n\nexport class EncryptError extends SDKError {\n constructor(message: string, options?: { cause?: unknown; context?: Record<string, unknown> }) {\n super('ENCRYPT', message, options);\n }\n}\n\nexport class IdentityError extends SDKError {\n constructor(message: string, options?: { cause?: unknown; context?: Record<string, unknown> }) {\n super('IDENTITY', message, options);\n }\n}\n\nexport class StorageError extends SDKError {\n constructor(message: string, options?: { cause?: unknown; context?: Record<string, unknown> }) {\n super('STORAGE', message, options);\n }\n}\n\nexport class PluginError extends SDKError {\n readonly plugin: string;\n constructor(plugin: string, message: string, options?: { cause?: unknown; context?: Record<string, unknown> }) {\n super('PLUGIN', message, options);\n this.plugin = plugin;\n }\n}\n\nexport class ConfigError extends SDKError {\n constructor(message: string, options?: { cause?: unknown; context?: Record<string, unknown> }) {\n super('CONFIG', message, options);\n }\n}\n\n/** 判断是否是 SDKError */\nexport function isSDKError(e: unknown): e is SDKError {\n return e instanceof SDKError;\n}","/**\n * 签名 Identity(HMAC-SHA256)\n * - 把 cookie / localStorage 中的 distinct_id / first_id 加密 + 签名\n * - 防止用户篡改身份\n * - 基于 Web Crypto API(jsdom + Node 18+)\n */\n\nimport { SDKError } from './errors.js';\n\nfunction getSubtle(): SubtleCrypto {\n if (typeof globalThis !== 'undefined' && (globalThis as { crypto?: Crypto }).crypto?.subtle) {\n return (globalThis as { crypto: Crypto }).crypto.subtle;\n }\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { webcrypto } = require('crypto');\n (globalThis as { crypto: typeof webcrypto }).crypto = webcrypto;\n return webcrypto.subtle;\n}\n\nconst ENC = (() => {\n if (typeof globalThis !== 'undefined' && (globalThis as { TextEncoder?: typeof TextEncoder }).TextEncoder) {\n return new (globalThis as { TextEncoder: typeof TextEncoder }).TextEncoder();\n }\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { TextEncoder } = require('util');\n (globalThis as { TextEncoder: typeof TextEncoder }).TextEncoder = TextEncoder;\n return new TextEncoder();\n})();\n\n/** 把字符串编码到 base64 */\nfunction bytesToB64(bytes: Uint8Array): string {\n if (typeof btoa !== 'undefined') {\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s);\n }\n return Buffer.from(bytes).toString('base64');\n}\n\nfunction b64ToBytes(b64: string): Uint8Array {\n if (typeof atob !== 'undefined') {\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n }\n return new Uint8Array(Buffer.from(b64, 'base64'));\n}\n\n/** 同步签名(基于 simple hash,与 HMAC 不同;但不依赖 Web Crypto) */\nfunction syncSign(data: string, secret: string): string {\n // FNV-1a 64-bit 模拟:base64(rotate-xor(secret, data))\n let h1 = 0x811c9dc5;\n let h2 = 0xcbf29ce4;\n for (let i = 0; i < data.length; i++) {\n h1 ^= data.charCodeAt(i);\n h1 = Math.imul(h1, 0x01000193) >>> 0;\n h2 ^= secret.charCodeAt(i % secret.length);\n h2 = Math.imul(h2, 0x100000001b3) >>> 0;\n }\n const combined = (BigInt(h1) << 32n) | BigInt(h2);\n return combined.toString(36);\n}\n\n/** 异步 HMAC-SHA256(推荐使用) */\nexport async function hmacSignAsync(data: string, secret: string): Promise<string> {\n const subtle = getSubtle();\n const key = await subtle.importKey(\n 'raw',\n ENC.encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n );\n const sig = new Uint8Array(await subtle.sign('HMAC', key, ENC.encode(data)));\n return bytesToB64(sig);\n}\n\n/** 异步验证签名 */\nexport async function hmacVerifyAsync(data: string, secret: string, signature: string): Promise<boolean> {\n const expected = await hmacSignAsync(data, secret);\n // 常数时间比较\n if (expected.length !== signature.length) return false;\n let diff = 0;\n for (let i = 0; i < expected.length; i++) {\n diff |= expected.charCodeAt(i) ^ signature.charCodeAt(i);\n }\n return diff === 0;\n}\n\n// ============================================================\n// SignedIdentity 工厂\n// ============================================================\n\nexport interface SignedIdentity {\n /** 同步签名 */\n sign(value: string): string;\n /** 异步签名(HMAC-SHA256) */\n signAsync(value: string): Promise<string>;\n /** 同步校验 */\n verify(value: string, signed: string): boolean;\n /** 异步校验 */\n verifyAsync(value: string, signed: string): Promise<boolean>;\n /** 给 KV 写入用的编码(`${value}|${sig}`) */\n encode(value: string): string;\n /** 从 KV 读取后还原(失败返回 null) */\n decode(raw: string): string | null;\n /** 异步版本 */\n encodeAsync(value: string): Promise<string>;\n decodeAsync(raw: string): Promise<string | null>;\n}\n\n/** 创建签名器 */\nexport function createSignedIdentity(secret: string): SignedIdentity {\n if (!secret) {\n throw new SDKError('IDENTITY', 'createSignedIdentity: secret is required', {\n context: { hint: 'set config.identity_secret to enable signed identity' },\n });\n }\n return {\n sign: (v) => syncSign(v, secret),\n signAsync: (v) => hmacSignAsync(v, secret),\n verify: (v, sig) => syncSign(v, secret) === sig,\n verifyAsync: (v, sig) => hmacVerifyAsync(v, secret, sig),\n encode: (v) => `${v}|${syncSign(v, secret)}`,\n decode: (raw) => {\n const idx = raw.lastIndexOf('|');\n if (idx <= 0) return null;\n const v = raw.slice(0, idx);\n const sig = raw.slice(idx + 1);\n if (syncSign(v, secret) !== sig) return null;\n return v;\n },\n encodeAsync: async (v) => `${v}|${await hmacSignAsync(v, secret)}`,\n decodeAsync: async (raw) => {\n const idx = raw.lastIndexOf('|');\n if (idx <= 0) return null;\n const v = raw.slice(0, idx);\n const sig = raw.slice(idx + 1);\n if (!(await hmacVerifyAsync(v, secret, sig))) return null;\n return v;\n },\n };\n}","/**\n * 公共属性注册 API(v1.1.1)\n */\n\nimport type { EventTracker } from '../core/tracker.js';\nimport type { PresetPropertyBuilder } from '../presets/preset-properties.js';\n\nexport interface RegisterApi {\n /** 注册永久属性(每次事件附带) */\n register(props: Record<string, unknown>): this;\n /** 注册一次性属性(首次读取后清除) */\n registerOnce(props: Record<string, unknown>): this;\n /** 清空所有永久属性 */\n clearAllRegister(): this;\n /** 移除单个属性 */\n unsetRegister(key: string): this;\n /** 注册一次性属性(神策 registerPage 别名) */\n registerPage(props: Record<string, unknown>): this;\n /** 注册会话属性(每次会话唯一;等同 registerOnce) */\n registerSession(props: Record<string, unknown>): this;\n /** 注册会话一次性属性 */\n registerSessionOnce(props: Record<string, unknown>): this;\n}\n\nexport function attachRegisterApi(sdk: EventTracker, builder: PresetPropertyBuilder): void {\n const proto = Object.getPrototypeOf(sdk) as object;\n const init = (sdk as unknown as { _registerAttached?: boolean })._registerAttached;\n if (init) return;\n (sdk as unknown as { _registerAttached?: boolean })._registerAttached = true;\n\n sdk.register = function (this: EventTracker, p: Record<string, unknown>) {\n builder.register(p);\n return this;\n };\n sdk.registerOnce = function (this: EventTracker, p: Record<string, unknown>) {\n builder.registerOnce(p);\n return this;\n };\n sdk.clearAllRegister = function (this: EventTracker) {\n builder.clearRegister();\n return this;\n };\n sdk.unsetRegister = function (this: EventTracker, k: string) {\n builder.unsetRegister(k);\n return this;\n };\n sdk.registerPage = function (this: EventTracker, p: Record<string, unknown>) {\n builder.registerOnce(p);\n return this;\n };\n sdk.registerSession = function (this: EventTracker, p: Record<string, unknown>) {\n builder.register(p);\n return this;\n };\n sdk.registerSessionOnce = function (this: EventTracker, p: Record<string, unknown>) {\n builder.registerOnce(p);\n return this;\n };\n\n // 防 TS 报 unused\n void proto;\n}","/**\n * 身份 API(v1.1.1)\n */\n\nimport type { EventTracker } from '../core/tracker.js';\nimport type { IdentityManager } from '../core/identity.js';\n\nexport function attachIdentityApi(sdk: EventTracker, identity: IdentityManager): void {\n const flag = (sdk as unknown as { _identityAttached?: boolean })._identityAttached;\n if (flag) return;\n (sdk as unknown as { _identityAttached?: boolean })._identityAttached = true;\n\n sdk.identify = function (this: EventTracker, id: string, save = true) {\n identity.identify(id, save);\n sdk.getRegistry().invoke('changeDistinctId', id);\n return this;\n };\n\n sdk.login = function (this: EventTracker, id: string) {\n identity.login(id);\n sdk.getRegistry().invoke('changeDistinctId', id);\n return this;\n };\n\n sdk.logout = function (this: EventTracker, newAnon?: string) {\n identity.resetAnonymousIdentity(newAnon);\n sdk.getRegistry().invoke('changeDistinctId', identity.getDistinctId());\n return this;\n };\n\n sdk.resetAnonymousIdentity = sdk.logout;\n\n sdk.alias = function (this: EventTracker, newId: string, originalId?: string) {\n const srcId = originalId || identity.getDistinctId();\n if (srcId === newId) return;\n identity.identify(newId, true);\n sdk.track('$SignUp', { $signup_method: 'alias' });\n sdk.getRegistry().invoke('changeDistinctId', newId);\n };\n\n sdk.getDistinctId = () => identity.getDistinctId();\n sdk.getAnonymousId = () => identity.getAnonymousId();\n sdk.getFirstId = () => identity.getFirstId();\n sdk.getLoginId = () => identity.getLoginId();\n sdk.getOriginalId = () => identity.getOriginalId();\n}","/**\n * Profile API(v1.1.1)\n */\n\nimport type { EventTracker } from '../core/tracker.js';\nimport type { SendPipeline } from './send-pipeline.js';\nimport type { Callback, EventData } from '../types/index.js';\n\nexport function attachProfileApi(sdk: EventTracker, pipeline: SendPipeline): void {\n const flag = (sdk as unknown as { _profileAttached?: boolean })._profileAttached;\n if (flag) return;\n (sdk as unknown as { _profileAttached?: boolean })._profileAttached = true;\n\n const profileSend = (type: EventData['type'], props: Record<string, unknown>, callback?: Callback): void => {\n const data = pipeline.buildEvent(type, { properties: props });\n pipeline.send(data, callback);\n };\n\n sdk.setProfile = (p, cb) => profileSend('profile_set', p, cb);\n sdk.setOnceProfile = (p, cb) => profileSend('profile_set_once', p, cb);\n sdk.incrementProfile = (p, cb) => profileSend('profile_increment', p, cb);\n sdk.appendProfile = (p, cb) => profileSend('profile_append', p, cb);\n sdk.unsetProfile = (prop, cb) => profileSend('profile_unset', { [prop]: true }, cb);\n sdk.deleteProfile = (cb) => profileSend('profile_delete', {}, cb);\n}","/**\n * Track API(v1.1.1)\n */\n\nimport type { EventTracker } from '../core/tracker.js';\nimport type { SendPipeline } from './send-pipeline.js';\nimport { isBrowser } from './env.js';\nimport { PresetEvent } from '../types/constants.js';\nimport type { Callback } from '../types/index.js';\n\nexport function attachTrackApi(sdk: EventTracker, pipeline: SendPipeline): void {\n const flag = (sdk as unknown as { _trackAttached?: boolean })._trackAttached;\n if (flag) return;\n (sdk as unknown as { _trackAttached?: boolean })._trackAttached = true;\n\n sdk.track = function (this: EventTracker, event: string, props: Record<string, unknown> = {}, cb?: Callback) {\n const data = pipeline.buildEvent('track', { event, properties: props });\n pipeline.send(data, cb);\n };\n\n sdk.trackSignup = function (this: EventTracker, userId: string, props: Record<string, unknown> = {}, cb?: Callback) {\n const data = pipeline.buildEvent('track_signup', {\n event: '$SignUp',\n properties: { ...props, $signup_method: props.$signup_method || '' },\n });\n data.original_id = sdk.getOriginalId();\n sdk.identify(userId, true);\n data.distinct_id = userId;\n data.login_id = userId;\n pipeline.send(data, cb);\n };\n\n sdk.trackLinkage = function (this: EventTracker, p: Record<string, unknown>, cb?: Callback) {\n sdk.track('$Linkage', p, cb);\n };\n\n sdk.trackLink = function (this: EventTracker, element: HTMLElement | string, props: Record<string, unknown> = {}, cb?: Callback) {\n if (!isBrowser()) return;\n const el = typeof element === 'string' ? document.querySelector(element) as HTMLElement | null : element;\n if (!el) return;\n const handler = () => {\n sdk.track('$WebClick', {\n ...props,\n $element_selector: el.id ? `#${el.id}` : el.tagName.toLowerCase(),\n $element_target_url: el instanceof HTMLAnchorElement ? el.href : undefined,\n }, cb);\n };\n el.addEventListener('click', handler, { once: true });\n };\n\n sdk.trackLinks = function (this: EventTracker, elements: any, props: Record<string, unknown> = {}, cb?: Callback) {\n if (!isBrowser()) return;\n let list: HTMLElement[];\n if (typeof elements === 'string') {\n list = Array.from(document.querySelectorAll(elements)) as HTMLElement[];\n } else if (elements && 'length' in elements && !('click' in elements)) {\n list = Array.from(elements) as HTMLElement[];\n } else {\n list = elements as HTMLElement[];\n }\n for (const el of list) sdk.trackLink(el, props, cb);\n };\n\n sdk.trackHeatMap = (p: Record<string, unknown>, cb?: Callback) => sdk.track('$heatmap_event', p, cb);\n sdk.trackWebClick = (p: Record<string, unknown>, cb?: Callback) => sdk.track(PresetEvent.WebStay === '$WebStay' ? '$WebClick' : '$WebClick', p, cb);\n sdk.trackWebStay = (p: Record<string, unknown>, cb?: Callback) => sdk.track('$WebStay', p, cb);\n}","/**\n * 发送器基类\n */\n\nimport type { EventData, TrackerConfig, SendType } from '../types/index.js';\nimport type { Logger } from '../core/logger.js';\nimport type { StatsCollector } from '../core/stats.js';\n\nexport interface SendContext {\n config: TrackerConfig;\n logger: Logger;\n /** 可选的 stats 收集器,未提供时退化为无统计模式 */\n stats?: StatsCollector;\n}\n\nexport interface Sender {\n /** 此发送器是否适用于当前上下文 */\n canUse(): boolean;\n /** 发送器名称,用于 pickSender/stats 聚合 */\n name: SendType | string;\n /** 发送单条事件 */\n send(event: EventData, ctx: SendContext): Promise<void> | void;\n}\n\n/**\n * 带 stats 计时 + onSendSuccess / onSendError 钩子的发送包装。\n * 由 SendPipeline 调用,统一埋点失败统计与可观测性。\n *\n * 不作为 Sender 接口成员,由 SendPipeline 显式调用本函数包一层,\n * 这样所有 Sender 子类都不必各自实现。\n * @internal\n */\nexport async function sendWithStats(\n sender: Sender,\n event: EventData,\n ctx: SendContext,\n): Promise<void> {\n const stats = ctx.stats;\n const senderName = sender.name;\n const start = stats ? stats.recordStart(senderName) : Date.now();\n\n try {\n await sender.send(event, ctx);\n stats?.recordSuccess(senderName, start);\n if (ctx.config.onSendSuccess) {\n try {\n ctx.config.onSendSuccess(\n event as unknown as Record<string, unknown>,\n Date.now() - start,\n );\n } catch {\n /* 用户回调异常不影响主流程 */\n }\n }\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n stats?.recordFailure(senderName, start, e);\n if (ctx.config.onSendError) {\n try {\n ctx.config.onSendError(e, event as unknown as Record<string, unknown>);\n } catch {\n /* ignore */\n }\n }\n throw e;\n }\n}\n\n/**\n * 支持批量发送的发送器(image/beacon 不支持,ajax/batch 支持)\n */\nexport interface BatchCapableSender extends Sender {\n /** 批量发送 */\n sendBatch?(events: EventData[], ctx: SendContext): Promise<void> | void;\n}\n\nexport function pickSender(type: SendType | undefined, candidates: Sender[]): Sender {\n if (type) {\n const match = candidates.find(s => s.name === type && s.canUse());\n if (match) return match;\n }\n // 降级链:beacon → ajax → image\n return (\n candidates.find(s => s.name === 'beacon' && s.canUse()) ||\n candidates.find(s => s.name === 'ajax' && s.canUse()) ||\n candidates.find(s => s.name === 'image' && s.canUse()) ||\n candidates[0]\n );\n}","/**\n * 发送管线(v1.1.1)\n * - 集中管理 build / encrypt / send / failed-queue / batch flush\n * - flush() / waitUntilIdle() 让上层能主动等待\n */\n\nimport type { TrackerConfig, EventData, Callback, PropertyMap } from '../types/index.js';\nimport type { PluginRegistry } from './plugin.js';\nimport type { IdentityManager } from './identity.js';\nimport type { PresetPropertyBuilder } from '../presets/preset-properties.js';\nimport type { RetryPolicy, RetryResult } from './retry-policy.js';\nimport type { FailedQueue } from './failed-queue.js';\nimport type { BatchSender } from '../send/batch-sender.js';\nimport type { Sender, SendContext } from '../send/sender.js';\nimport { sendWithStats } from '../send/sender.js';\nimport { Logger } from './logger.js';\nimport { EncryptError } from './errors.js';\nimport { LIB_NAME, LIB_VERSION } from '../types/constants.js';\nimport { isBrowser } from './env.js';\nimport type { StatsCollector } from './stats.js';\n\n/** 异步任务信号 */\ninterface PendingTask {\n promise: Promise<unknown>;\n resolve: () => void;\n reject: (e: unknown) => void;\n}\n\nexport class SendPipeline {\n private pending: PendingTask[] = [];\n private senders: Sender[] = [];\n private batchSender?: BatchSender;\n private abortControllers = new Map<Symbol, AbortController>();\n\n constructor(\n private config: TrackerConfig,\n private registry: PluginRegistry,\n private identity: IdentityManager,\n private presetProps: PresetPropertyBuilder,\n private retryPolicy: RetryPolicy,\n private failedQueue: FailedQueue,\n private logger: Logger,\n private stats?: StatsCollector,\n ) {}\n\n setSenders(senders: Sender[]): void {\n this.senders = senders;\n }\n setBatchSender(b: BatchSender): void {\n this.batchSender = b;\n }\n\n /** 构造共享的 SendContext(含 stats + logger + config) */\n private makeCtx(): SendContext {\n const ctx: SendContext = { config: this.config, logger: this.logger };\n if (this.stats) ctx.stats = this.stats;\n return ctx;\n }\n\n /** 构造事件对象 */\n buildEvent(\n type: EventData['type'],\n opts: { event?: string; properties?: Record<string, unknown> } = {},\n ): EventData {\n const time = this.config.get_client_timestamp?.() || Date.now();\n const merged = this.presetProps.build(this.config, opts.properties || {});\n const data: EventData = {\n type,\n time,\n distinct_id: this.identity.getDistinctId(),\n anonymous_id: this.identity.getAnonymousId(),\n first_id: this.identity.getFirstId(),\n login_id: this.identity.getLoginId() || undefined,\n original_id: this.identity.getOriginalId() || undefined,\n properties: merged,\n lib: { $lib: this.config.lib_name || LIB_NAME, $lib_version: this.config.lib_version || LIB_VERSION },\n token: this.config.app_id,\n project: this.config.app_id,\n };\n if (opts.event) data.event = opts.event;\n return data;\n }\n\n /** 异步发送 */\n send(data: EventData, callback?: Callback): void {\n if (this.config.disabled) {\n callback?.(null);\n return;\n }\n\n // 1. 插件 beforeTrack\n this.registry.invoke('sdkInitAPI', data);\n\n // 2. encryptEvent 钩子\n const hook = this.config.encryptEvent;\n if (hook) {\n try {\n const t = hook(data as unknown as Record<string, unknown>);\n if (t && typeof t === 'object') data = t as EventData;\n } catch (e) {\n this.logger.error('encryptEvent hook failed:', e);\n }\n }\n\n // 3. encrypt\n if (this.config.encryptor) {\n try {\n const out = this.config.encryptor(JSON.stringify(data));\n if (typeof out === 'string') {\n data._encrypted = out;\n this.dispatchAfterEncrypt(data, callback);\n } else {\n // 异步:等密文完成后再 dispatch\n out.then(\n (enc) => {\n data._encrypted = enc;\n this.dispatchAfterEncrypt(data, callback);\n },\n (err) => {\n this.logger.error(new EncryptError('async encryptor failed', { cause: err }));\n this.dispatchAfterEncrypt(data, callback);\n },\n );\n }\n } catch (e) {\n this.logger.error(new EncryptError('encryptor threw', { cause: e }));\n this.dispatchAfterEncrypt(data, callback);\n }\n } else {\n this.dispatchAfterEncrypt(data, callback);\n }\n }\n\n /** 加密后真正下发 */\n private dispatchAfterEncrypt(data: EventData, callback?: Callback): void {\n data.properties = this.registry.stages.sendDataStage.run(\n data.properties,\n this,\n ) as PropertyMap;\n\n const ctx = this.makeCtx();\n\n if (this.config.send_type === 'batch' && this.batchSender) {\n const p = Promise.resolve(this.batchSender.send(data, ctx))\n .then(() => callback?.(null))\n .catch((err) => callback?.(err as Error));\n this.trackPending(p);\n return;\n }\n\n const sender = this.pickSender();\n const task = this.retryPolicy.execute(\n () => {\n // 重试时回调钩子\n return sendWithStats(sender, data, ctx);\n },\n () => true,\n (err, attempt) => {\n this.failedQueue.enqueue(data);\n this.logger.warn('event send failed, queued:', err.message);\n // 失败入队回调\n try {\n this.config.onFailedEnqueue?.(\n data as unknown as Record<string, unknown>,\n err.message,\n );\n } catch { /* ignore */ }\n // 重试钩子\n try {\n this.config.onRetry?.(\n data as unknown as Record<string, unknown>,\n attempt,\n );\n } catch { /* ignore */ }\n this.stats?.recordRetry();\n },\n );\n const wrap = task.then((r: RetryResult) => {\n callback?.(r.ok ? null : r.finalErr);\n });\n this.trackPending(wrap);\n }\n\n private pickSender(): Sender {\n const req = this.config.send_type;\n if (req && req !== 'batch') {\n const match = this.senders.find(s => s.name === req && s.canUse());\n if (match) return match;\n }\n return (\n this.senders.find(s => s.name === 'beacon' && s.canUse()) ||\n this.senders.find(s => s.name === 'ajax' && s.canUse()) ||\n this.senders.find(s => s.name === 'image' && s.canUse()) ||\n this.senders[0]\n );\n }\n\n private trackPending(p: Promise<unknown>): void {\n const task: PendingTask = {\n promise: p,\n resolve: () => { /* noop */ },\n reject: () => { /* noop */ },\n };\n const wrapped = new Promise<void>((res, rej) => {\n task.resolve = res;\n task.reject = rej;\n });\n p.then(\n () => task.resolve(),\n (e) => task.reject(e),\n );\n this.pending.push(task);\n void wrapped; // 保留 reference\n }\n\n /**\n * 强制 flush:\n * - batch 模式:立即触发 batch sender 的 flush\n * - failed queue:把残留队列重发\n * - 所有 pending:等完成\n */\n async flush(): Promise<void> {\n const start = Date.now();\n let count = 0;\n if (this.batchSender) {\n try {\n const queued = (this.batchSender as unknown as { peekQueueSize?: () => number }).peekQueueSize?.() ?? 0;\n await this.batchSender.flush({ config: this.config, logger: this.logger });\n count += queued;\n } catch (e) {\n this.logger.warn('batch flush failed:', e);\n }\n }\n await this.waitUntilIdle();\n this.stats?.recordFlush();\n try {\n this.config.onFlush?.(count, Date.now() - start);\n } catch { /* ignore */ }\n }\n\n /** 等待所有 in-flight 任务结束 */\n async waitUntilIdle(): Promise<void> {\n while (this.pending.length) {\n const snapshot = this.pending.splice(0);\n await Promise.allSettled(snapshot.map(t => t.promise));\n }\n }\n\n /** Abort 所有挂起 / in-flight 任务 */\n abortAll(reason?: string): void {\n for (const [, ctrl] of this.abortControllers) {\n ctrl.abort(reason);\n }\n this.abortControllers.clear();\n this.pending = [];\n }\n\n /** 给 sender 用:申请一个 AbortSignal,发送完成 / abort 时自动释放 */\n takeAbortController(key: Symbol): AbortController {\n const ctrl = new AbortController();\n this.abortControllers.set(key, ctrl);\n return ctrl;\n }\n releaseAbortController(key: Symbol): void {\n this.abortControllers.delete(key);\n }\n}","/**\n * Sender 失败统计(v1.2.0)\n *\n * - 每个 sender 维护 attempts / success / failure / total_duration\n * - SDK 全局汇总\n * - 用户可 sdk.getStats() 查\n * - 自动每 60s 输出到 console(debug 模式)\n */\n\nimport type { SendType } from '../types/index.js';\n\nexport interface SenderStat {\n /** sender 名称(image / beacon / ajax / batch) */\n name: string;\n /** 尝试次数 */\n attempts: number;\n /** 成功次数 */\n success: number;\n /** 失败次数 */\n failure: number;\n /** 累计耗时(ms) */\n total_duration: number;\n /** 平均耗时(ms) */\n avg_duration: number;\n /** 最大单次耗时(ms) */\n max_duration: number;\n /** 最近一次失败原因 */\n last_error?: string;\n /** 最近一次失败时间戳 */\n last_error_at?: number;\n}\n\nexport interface StatsSnapshot {\n /** SDK 启动后累计发送次数 */\n total: number;\n /** 成功累计 */\n success: number;\n /** 失败累计 */\n failure: number;\n /** 重试累计 */\n retry: number;\n /** in-flight(当前未完成) */\n in_flight: number;\n /** flush 累计 */\n flush_count: number;\n /** 上次 flush 时间 */\n last_flush_at?: number;\n /** 每个 sender 统计 */\n by_sender: Record<string, SenderStat>;\n /** 时间戳 */\n taken_at: number;\n}\n\nexport class StatsCollector {\n private total = 0;\n private success = 0;\n private failure = 0;\n private retry = 0;\n private in_flight = 0;\n private flushCount = 0;\n private lastFlushAt?: number;\n private bySender: Map<string, SenderStat> = new Map();\n\n /** 记录一次发送开始 */\n recordStart(senderName: string): number {\n this.total++;\n this.in_flight++;\n const s = this.getOrCreate(senderName);\n s.attempts++;\n return Date.now();\n }\n\n /** 记录一次发送成功 */\n recordSuccess(senderName: string, startTs: number): void {\n this.success++;\n this.in_flight = Math.max(0, this.in_flight - 1);\n const s = this.getOrCreate(senderName);\n const dur = Date.now() - startTs;\n s.total_duration += dur;\n s.avg_duration = s.total_duration / s.attempts;\n if (dur > s.max_duration) s.max_duration = dur;\n }\n\n /** 记录一次发送失败 */\n recordFailure(senderName: string, startTs: number, err: Error): void {\n this.failure++;\n this.in_flight = Math.max(0, this.in_flight - 1);\n const s = this.getOrCreate(senderName);\n s.failure++;\n s.last_error = err.message;\n s.last_error_at = Date.now();\n }\n\n /** 记录一次重试 */\n recordRetry(): void {\n this.retry++;\n }\n\n /** 记录一次 flush */\n recordFlush(): void {\n this.flushCount++;\n this.lastFlushAt = Date.now();\n }\n\n /** 拍快照 */\n snapshot(): StatsSnapshot {\n const by_sender: Record<string, SenderStat> = {};\n for (const [k, v] of this.bySender) {\n by_sender[k] = { ...v };\n }\n return {\n total: this.total,\n success: this.success,\n failure: this.failure,\n retry: this.retry,\n in_flight: this.in_flight,\n flush_count: this.flushCount,\n last_flush_at: this.lastFlushAt,\n by_sender,\n taken_at: Date.now(),\n };\n }\n\n /** 重置 */\n reset(): void {\n this.total = 0;\n this.success = 0;\n this.failure = 0;\n this.retry = 0;\n this.in_flight = 0;\n this.flushCount = 0;\n this.lastFlushAt = undefined;\n this.bySender.clear();\n }\n\n /** 列出所有 sender 名 */\n listSenders(): string[] {\n return Array.from(this.bySender.keys());\n }\n\n private getOrCreate(name: string): SenderStat {\n let s = this.bySender.get(name);\n if (!s) {\n s = {\n name,\n attempts: 0,\n success: 0,\n failure: 0,\n total_duration: 0,\n avg_duration: 0,\n max_duration: 0,\n };\n this.bySender.set(name, s);\n }\n return s;\n }\n}\n\n/** 全局单例 */\nexport const GLOBAL_STATS = new StatsCollector();","/**\n * SDK 主类(v1.1.1)\n *\n * 通过 attachXxxApi 模块化挂载所有方法,主类只负责:\n * - 初始化(init)\n * - 装配管线(Pipeline)\n * - 提供公共 getter / setter\n * - 提供 flush / waitUntilIdle / abort / close\n */\n\nimport { isBrowser } from './env.js';\nimport { uuidv4 } from './uuid.js';\nimport { Logger } from './logger.js';\nimport { IdentityManager } from './identity.js';\nimport { PresetPropertyBuilder } from '../presets/preset-properties.js';\nimport { autoStore } from '../storage/store.js';\nimport type { KVStore } from '../storage/store.js';\nimport { ImageSender } from '../send/image-sender.js';\nimport { BeaconSender } from '../send/beacon-sender.js';\nimport { AjaxSender } from '../send/ajax-sender.js';\nimport { BatchSender } from '../send/batch-sender.js';\nimport type { Sender } from '../send/sender.js';\nimport { PluginRegistry, type Plugin, type InstallContext } from './plugin.js';\nimport { InstanceChannel } from './instance-channel.js';\nimport { RetryPolicy } from './retry-policy.js';\nimport { FailedQueue } from './failed-queue.js';\nimport { SignedIdentity, createSignedIdentity } from './signed-identity.js';\nimport { InitError } from './errors.js';\nimport { attachRegisterApi } from './register-api.js';\nimport { attachIdentityApi } from './identity-api.js';\nimport { attachProfileApi } from './profile-api.js';\nimport { attachTrackApi } from './track-api.js';\nimport { SendPipeline } from './send-pipeline.js';\nimport { StatsCollector } from './stats.js';\nimport { LIB_NAME, LIB_VERSION } from '../types/constants.js';\nimport type {\n EventData,\n TrackerConfig,\n Callback,\n SendType,\n StorageType,\n ServerURL,\n} from '../types/index.js';\n\nconst DEFAULT_CONFIG: Required<Pick<TrackerConfig, 'send_type' | 'max_retry_count' | 'debug' | 'storage_type' | 'is_collect_utm' | 'send_timeout' | 'max_retry_duration'>> = {\n send_type: 'image',\n max_retry_count: 3,\n debug: 0,\n storage_type: 'memory',\n is_collect_utm: true,\n send_timeout: 5000,\n max_retry_duration: 30_000,\n};\n\nexport class EventTracker {\n readonly lib_name = LIB_NAME;\n readonly lib_version = LIB_VERSION;\n readonly DEFAULT_SEND_TYPE: SendType = 'image';\n\n private _config!: TrackerConfig;\n private _store!: KVStore;\n private _identity!: IdentityManager;\n private _presetProps!: PresetPropertyBuilder;\n private _logger!: Logger;\n private _registry!: PluginRegistry;\n private _senders: Sender[] = [];\n private _batchSender?: BatchSender;\n private _retryPolicy!: RetryPolicy;\n private _failedQueue!: FailedQueue;\n private _channel!: InstanceChannel;\n private _pipeline!: SendPipeline;\n private _signedIdentity?: SignedIdentity;\n private _stats!: StatsCollector;\n private _statsTimer: ReturnType<typeof setInterval> | null = null;\n private _inited = false;\n\n readonly instanceId: string;\n\n constructor() {\n this.instanceId = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n }\n\n // ============================================================\n // 初始化\n // ============================================================\n\n /**\n * 初始化 SDK(只可调用一次;重复调用会被忽略)\n * @param config 完整配置项;详见 TrackerConfig\n * @throws InitError 当 server_url / app_id 缺失时\n * @example\n * ```ts\n * sdk.init({\n * app_id: 'demo',\n * server_url: 'https://api.example.com/sa',\n * send_type: 'beacon',\n * debug: 1,\n * });\n * ```\n */\n init(config: TrackerConfig): void {\n if (this._inited) {\n this._logger?.warn('EventTracker already initialized, re-init ignored');\n return;\n }\n this._config = { ...DEFAULT_CONFIG, ...config };\n this._config.lib_name = this._config.lib_name || LIB_NAME;\n this._config.lib_version = this._config.lib_version || LIB_VERSION;\n if (!this._config.server_url) {\n throw new InitError('server_url is required');\n }\n if (!this._config.app_id) {\n throw new InitError('app_id is required');\n }\n\n this._logger = new Logger({ debug: this._config.debug, show_log: this._config.show_log });\n this._store = autoStore({\n cookieDomain: this._config.cookie_domain,\n cookieCrossSubdomain: this._config.cookie_cross_subdomain,\n secureCookie: this._config.secure_cookie,\n });\n if (this._config.identity_secret) {\n this._signedIdentity = createSignedIdentity(this._config.identity_secret);\n }\n this._identity = new IdentityManager(this._store, {\n getDistinctId: this._config.get_distinct_id,\n setDistinctId: this._config.set_distinct_id,\n getAnonymousId: this._config.get_anonymous_id,\n setAnonymousId: this._config.set_anonymous_id,\n getFirstId: this._config.get_first_id,\n setFirstId: this._config.set_first_id,\n });\n this._presetProps = new PresetPropertyBuilder();\n if (this._config.preset_properties) {\n this._presetProps.setPreset(this._config.preset_properties);\n }\n this._registry = new PluginRegistry();\n this._channel = new InstanceChannel();\n this._retryPolicy = new RetryPolicy(this._config, this._logger);\n this._failedQueue = new FailedQueue({ max: 200, encryptor: this._config.encryptor });\n\n this._senders = [new ImageSender(), new BeaconSender(), new AjaxSender()];\n this._batchSender = new BatchSender();\n this._stats = new StatsCollector();\n\n this._pipeline = new SendPipeline(\n this._config,\n this._registry,\n this._identity,\n this._presetProps,\n this._retryPolicy,\n this._failedQueue,\n this._logger,\n this._stats,\n );\n this._pipeline.setSenders(this._senders);\n this._pipeline.setBatchSender(this._batchSender);\n\n // 启动 stats 周期性打印(debug 模式下默认开启)\n const showStats = this._config.show_stats ?? (this._config.debug ?? 0) >= 1;\n if (showStats && typeof window !== 'undefined') {\n const interval = this._config.stats_interval ?? 60_000;\n this._statsTimer = setInterval(() => {\n const snap = this._stats.snapshot();\n // eslint-disable-next-line no-console\n console.log('[EventTracker stats]', snap);\n }, interval);\n }\n\n // 启动 batch(如果是 batch 模式)\n if (this._config.send_type === 'batch') {\n this._batchSender.start({ config: this._config, logger: this._logger });\n }\n\n // 挂载 API\n attachRegisterApi(this, this._presetProps);\n attachIdentityApi(this, this._identity);\n attachProfileApi(this, this._pipeline);\n attachTrackApi(this, this._pipeline);\n\n this._registry.invoke('sdkReady', this._config);\n this._registry.invoke('sdkInitPara', this._config);\n this._inited = true;\n this._logger.log('EventTracker initialized:', {\n app_id: this._config.app_id,\n send_type: this._config.send_type,\n });\n this._registry.invoke('sdkAfterInitPara', this._config);\n this._registry.invoke('sdkInitAPI', this);\n this._registry.invoke('sdkAfterInitAPI', this);\n }\n\n // ============================================================\n // 插件\n // ============================================================\n use(plugin: Plugin): this {\n if (!this._inited) {\n setTimeout(() => this.use(plugin), 0);\n return this;\n }\n const ctx: InstallContext = {\n config: this._config,\n registry: this._registry,\n stages: this._registry.stages,\n sdk: this,\n kit: {},\n channel: this._channel,\n store: this._store,\n uninstall: () => this._registry.uninstall(plugin, ctx),\n };\n this._registry.install(plugin, ctx);\n return this;\n }\n\n // ============================================================\n // 公共 API(type stubs;实现在 attachXxxApi)\n // - 初始化为 noop,避免 uninit 时调用报错\n // - init() 时被 attachXxxApi 替换为真实实现\n // ============================================================\n /** @internal */\n __noop = (): void => { /* replaced by attachXxxApi */ };\n\n track(event: string, properties?: Record<string, unknown>, _callback?: Callback): void {\n void event; void properties; void _callback;\n }\n trackSignup(userId: string, properties?: Record<string, unknown>, _callback?: Callback): void {\n void userId; void properties; void _callback;\n }\n trackLinkage(properties: Record<string, unknown>, _callback?: Callback): void {\n void properties; void _callback;\n }\n trackLink(element: HTMLElement | string, properties?: Record<string, unknown>, _callback?: Callback): void {\n void element; void properties; void _callback;\n }\n trackLinks(\n elements: HTMLElement[] | NodeListOf<Element> | string,\n properties?: Record<string, unknown>,\n _callback?: Callback,\n ): void {\n void elements; void properties; void _callback;\n }\n trackHeatMap(properties: Record<string, unknown>, _callback?: Callback): void {\n void properties; void _callback;\n }\n trackWebClick(properties: Record<string, unknown>, _callback?: Callback): void {\n void properties; void _callback;\n }\n trackWebStay(properties: Record<string, unknown>, _callback?: Callback): void {\n void properties; void _callback;\n }\n\n identify(_distinctId: string, _isSave?: boolean): this { return this; }\n login(_loginId: string): this { return this; }\n logout(_resetAnonymousId?: string): this { return this; }\n resetAnonymousIdentity(_newAnonymousId?: string): this { return this; }\n alias(_newId: string, _originalId?: string): void { /* noop */ }\n\n getDistinctId(): string { return ''; }\n getAnonymousId(): string { return ''; }\n getFirstId(): string { return ''; }\n getLoginId(): string { return ''; }\n getOriginalId(): string { return ''; }\n\n register(_props: Record<string, unknown>): this { return this; }\n registerOnce(_props: Record<string, unknown>): this { return this; }\n clearAllRegister(): this { return this; }\n unsetRegister(_key: string): this { return this; }\n registerPage(_props: Record<string, unknown>): this { return this; }\n registerSession(_props: Record<string, unknown>): this { return this; }\n registerSessionOnce(_props: Record<string, unknown>): this { return this; }\n\n setProfile(_props: Record<string, unknown>, _callback?: Callback): void { /* noop */ }\n setOnceProfile(_props: Record<string, unknown>, _callback?: Callback): void { /* noop */ }\n incrementProfile(_props: Record<string, number>, _callback?: Callback): void { /* noop */ }\n appendProfile(_props: Record<string, unknown>, _callback?: Callback): void { /* noop */ }\n unsetProfile(_prop: string, _callback?: Callback): void { /* noop */ }\n deleteProfile(_callback?: Callback): void { /* noop */ }\n\n // ============================================================\n // 控制\n // ============================================================\n /** 关闭 SDK(track noop) */\n disable(): this {\n this._config.disabled = true;\n this._logger.warn('EventTracker disabled');\n return this;\n }\n /** 启用 SDK */\n enable(): this {\n this._config.disabled = false;\n return this;\n }\n\n /** 切换 server_url(多 sink / 灰度 / 主备切换)\n * @param url 单个 URL 或 URL 数组\n */\n setServerURL(url: ServerURL): this {\n return this.switchServer(url);\n }\n switchServer(url: ServerURL): this {\n if (!url) return this;\n this._config.server_url = url;\n this._registry.invoke('switch', url);\n return this;\n }\n\n /**\n * 强制 flush batch sender + failed queue + 等待所有 in-flight 完成\n */\n async flush(): Promise<void> {\n if (!this._inited) return;\n await this._pipeline.flush();\n }\n\n /**\n * 等待所有 in-flight 任务结束(发送、加密、queue 处理)\n */\n async waitUntilIdle(): Promise<void> {\n if (!this._inited) return;\n await this._pipeline.waitUntilIdle();\n }\n\n /** Abort 所有挂起任务 */\n abort(reason?: string): void {\n this._pipeline.abortAll(reason);\n }\n\n /** 完整关闭:channel close + pipeline abort + batch stop */\n close(): void {\n this._batchSender?.stop();\n this._channel?.close();\n if (this._statsTimer) {\n clearInterval(this._statsTimer);\n this._statsTimer = null;\n }\n this.abort('closed');\n }\n\n /** 工具 */\n uuid(): string {\n return uuidv4();\n }\n\n /** 预置属性(手动计算) */\n getPresetProperties(): Record<string, unknown> {\n return this._presetProps.build(this._config, {});\n }\n\n /** 完整关闭:channel close + pipeline abort + batch stop */\n shutdown(): void {\n this.close();\n }\n\n // ============================================================\n // Getter\n // ============================================================\n getConfig(): TrackerConfig {\n return { ...this._config };\n }\n getLogger(): Logger {\n return this._logger;\n }\n getRegistry(): PluginRegistry {\n return this._registry;\n }\n getRetryPolicy(): RetryPolicy {\n return this._retryPolicy;\n }\n getFailedQueue(): FailedQueue {\n return this._failedQueue;\n }\n getChannel(): InstanceChannel {\n return this._channel;\n }\n getPipeline(): SendPipeline {\n return this._pipeline;\n }\n getSignedIdentity(): SignedIdentity | undefined {\n return this._signedIdentity;\n }\n /** 获取 sender 失败统计快照(v1.2.0) */\n getStats() {\n return this._stats?.snapshot();\n }\n /** 重置 sender 统计 */\n resetStats(): void {\n this._stats?.reset();\n }\n isBrowser(): boolean {\n return isBrowser();\n }\n isInitialized(): boolean {\n return this._inited;\n }\n}\n\n// ============================================================\n// 多实例工厂\n// ============================================================\nconst INSTANCES = new Map<string, EventTracker>();\n\n/** 创建 / 切换实例 */\nexport function initPara(config: TrackerConfig): EventTracker {\n const instanceId = (config as { client_id?: string }).client_id || `instance-${INSTANCES.size + 1}`;\n let tracker = INSTANCES.get(instanceId);\n if (tracker) {\n tracker.switchServer(config.server_url);\n if (config.app_id) (tracker.getConfig() as { app_id?: string }).app_id = config.app_id;\n return tracker;\n }\n tracker = new EventTracker();\n tracker.init(config);\n INSTANCES.set(instanceId, tracker);\n return tracker;\n}\n\n/** 通过 client_id 取已有实例 */\nexport function registerAppid(instanceId: string): EventTracker | undefined {\n return INSTANCES.get(instanceId);\n}\n\n/** 列出所有实例 */\nexport function listInstances(): EventTracker[] {\n return Array.from(INSTANCES.values());\n}\n\n// 兼容旧 SDK 全局\nif (typeof window !== 'undefined') {\n (window as unknown as { eventTracker: EventTracker }).eventTracker = new EventTracker();\n}","/**\n * 平台适配层(v1.2.0)\n *\n * - 探测运行时:web / React Native / Node\n * - 提供平台特定的 KVStore fallback(Node 用 Map,RN 用 AsyncStorage shim)\n * - 默认 sender 在非 web 下做适配(beacon/image 禁用)\n */\n\nimport { MemoryStore } from '../storage/store.js';\nimport type { KVStore } from '../storage/store.js';\nimport { isBrowser } from '../core/env.js';\n\nexport type Platform = 'web' | 'rn' | 'node' | 'unknown';\n\nexport function detectPlatform(): Platform {\n if (isBrowser()) return 'web';\n // React Native: 探测 navigator.product === 'ReactNative' 或 global.__DEV__\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any;\n if (\n typeof g.navigator !== 'undefined' && g.navigator?.product === 'ReactNative'\n ) return 'rn';\n if (typeof g.__REACT_NATIVE__ !== 'undefined') return 'rn';\n // Node: process.versions.node\n if (typeof process !== 'undefined' && process.versions?.node) return 'node';\n return 'unknown';\n}\n\n/**\n * 自适应 KVStore\n * - web:交给上层默认(cookie/localStorage)\n * - rn:尝试 global.AsyncStorage,否则 MemoryStore\n * - node:MemoryStore(后续可挂 fs adapter)\n */\nexport function platformStore(): KVStore {\n // React Native AsyncStorage 适配层需要异步接口,KVStore 当前为同步契约,\n // 临时回退到 MemoryStore,输出更稳定的浏览器演示行为。\n // 后续可通过将 KVStore 改为异步接口以支持 RN 场景。\n // if (detectPlatform() === 'rn') {\n // const g = globalThis as unknown as {\n // AsyncStorage?: { getItem: (k: string) => Promise<string|null>; setItem: (k: string, v: string) => Promise<void> };\n // };\n // if (g.AsyncStorage && typeof g.AsyncStorage.getItem === 'function') {\n // return new AsyncStorageAdapter(g.AsyncStorage);\n // }\n // }\n return new MemoryStore();\n}\n\n/* AsyncStorageAdapter 故意移除 —— KVStore 为同步契约,适配 RN 的异步\n * 版本将在后续迭代中将 KVStore 升级为 async 后再实现。\n */\n\n/**\n * 平台相关的 sender 过滤:\n * - web:全部 sender 可用\n * - rn/node:禁用 image/beacon(无 navigator),仅 ajax\n */\nexport function isPlatformSenderEnabled(name: string): boolean {\n const p = detectPlatform();\n if (p === 'web') return true;\n if (name === 'ajax') return true;\n return false;\n}","/**\n * WASM 加密(v1.2.0 可选)\n *\n * - 把常见 HMAC-SHA256 / AES-GCM 操作抽到 wasm(性能 5-10x)\n * - 通过 dynamic import('./crypto-wasm.js') 按需加载\n * - wasm 未提供时 fallback 到 js\n * - 提供 `getWasmCrypto()` lazy 工厂\n *\n * 注意:本目录仅含 runtime glue;实际 wasm binary 由用户在构建期注入\n * (如:npm i @macroui/crypto-wasm 并在 init 时传入)\n */\n\nexport interface WasmCrypto {\n hmacSha256(key: Uint8Array, data: Uint8Array): Uint8Array;\n aesGcmEncrypt(key: Uint8Array, iv: Uint8Array, data: Uint8Array): Uint8Array;\n aesGcmDecrypt(key: Uint8Array, iv: Uint8Array, data: Uint8Array): Uint8Array;\n available: boolean;\n}\n\nlet _instance: Promise<WasmCrypto> | null = null;\n\n/**\n * 加载 wasm crypto\n * - 优先尝试 globalThis.__ET_WASM_CRYPTO__(用户注入)\n * - 否则尝试 import('@macroui/crypto-wasm') peer dep\n * - 失败时 fallback 到 JS 实现\n */\nexport function getWasmCrypto(): Promise<WasmCrypto> {\n if (_instance) return _instance;\n _instance = (async () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const g = globalThis as any;\n if (g.__ET_WASM_CRYPTO__) return g.__ET_WASM_CRYPTO__ as WasmCrypto;\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mod = await (Function('return import(\"@macroui/crypto-wasm\")')() as Promise<any>);\n if (mod && mod.default) return mod.default as WasmCrypto;\n } catch { /* ignore */ }\n // JS fallback\n return makeJsFallback();\n })();\n return _instance;\n}\n\nasync function makeJsFallback(): Promise<WasmCrypto> {\n return {\n available: false,\n async hmacSha256(key, data) {\n const k = await crypto.subtle.importKey(\n 'raw', key as BufferSource,\n { name: 'HMAC', hash: 'SHA-256' },\n false, ['sign'],\n );\n const sig = await crypto.subtle.sign('HMAC', k, data as BufferSource);\n return new Uint8Array(sig);\n },\n async aesGcmEncrypt(key, iv, data) {\n const k = await crypto.subtle.importKey('raw', key as BufferSource, 'AES-GCM', false, ['encrypt']);\n const ct = await crypto.subtle.encrypt({ name: 'AES-GCM', iv: iv as BufferSource }, k, data as BufferSource);\n return new Uint8Array(ct);\n },\n async aesGcmDecrypt(key, iv, data) {\n const k = await crypto.subtle.importKey('raw', key as BufferSource, 'AES-GCM', false, ['decrypt']);\n const pt = await crypto.subtle.decrypt({ name: 'AES-GCM', iv: iv as BufferSource }, k, data as BufferSource);\n return new Uint8Array(pt);\n },\n } as unknown as WasmCrypto;\n}\n\n/** 同步 hash 工具(用于 cache key,fallback) */\nexport function fastHash(s: string): number {\n let h = 2166136261;\n for (let i = 0; i < s.length; i++) {\n h ^= s.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return h >>> 0;\n}\n\n/** 注入自定义 wasm crypto(advanced 用) */\nexport function setWasmCrypto(c: WasmCrypto): void {\n _instance = Promise.resolve(c);\n}","/**\n * PII 自动检测与脱敏(v1.3.0)\n *\n * - 正则检测身份证 / 手机号 / 邮箱 / 银行卡 / IP\n * - 默认行为:hash(保留可关联性)\n * - 可配置:drop / mask / hash / passthrough\n * - 仅在 sendDataStage 中对 properties 字段做处理\n */\n\nexport type PiiAction = 'drop' | 'mask' | 'hash' | 'pass';\n\nexport interface PiiPattern {\n name: string;\n /** 正则 */\n re: RegExp;\n action: PiiAction;\n}\n\nconst MASK_CHAR = '*';\n\n// 中国大陆身份证\nconst RE_ID_CN = /\\b\\d{17}[\\dXx]\\b/g;\n// 手机号(11 位,1 开头)\nconst RE_PHONE_CN = /\\b1[3-9]\\d{9}\\b/g;\n// 邮箱\nconst RE_EMAIL = /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\\b/g;\n// 银行卡(13-19 位数字)\nconst RE_BANKCARD = /\\b\\d{13,19}\\b/g;\n// IPv4\nconst RE_IPV4 = /\\b(?:\\d{1,3}\\.){3}\\d{1,3}\\b/g;\n\nexport const DEFAULT_PATTERNS: PiiPattern[] = [\n { name: 'id_card_cn', re: RE_ID_CN, action: 'mask' },\n { name: 'phone_cn', re: RE_PHONE_CN, action: 'mask' },\n { name: 'email', re: RE_EMAIL, action: 'hash' },\n { name: 'bankcard', re: RE_BANKCARD, action: 'mask' },\n { name: 'ipv4', re: RE_IPV4, action: 'hash' },\n];\n\nexport interface PiiOptions {\n /** 自定义模式(在默认之后追加) */\n patterns?: PiiPattern[];\n /** 全局关闭 */\n enabled?: boolean;\n /** 白名单字段名(不处理) */\n excludeKeys?: string[];\n}\n\n/** 简单 hash(fnv1a) */\nexport function fnv1a(s: string): string {\n let h = 2166136261 >>> 0;\n for (let i = 0; i < s.length; i++) {\n h ^= s.charCodeAt(i);\n h = Math.imul(h, 16777619) >>> 0;\n }\n return 'h_' + h.toString(36);\n}\n\n/** 脱敏:保留前 1 后 1 */\nexport function maskValue(v: string): string {\n if (v.length <= 2) return MASK_CHAR.repeat(v.length);\n return v[0] + MASK_CHAR.repeat(v.length - 2) + v[v.length - 1];\n}\n\nfunction applyAction(action: PiiAction, v: string): string | undefined {\n switch (action) {\n case 'drop':\n return undefined;\n case 'mask':\n return maskValue(v);\n case 'hash':\n return fnv1a(v);\n case 'pass':\n default:\n return v;\n }\n}\n\nexport class PiiDetector {\n private patterns: PiiPattern[];\n private exclude: Set<string>;\n\n constructor(opts: PiiOptions = {}) {\n this.patterns = [...DEFAULT_PATTERNS, ...(opts.patterns || [])];\n this.exclude = new Set(opts.excludeKeys || []);\n }\n\n /** 对单个值做检测 */\n scan(value: unknown): { value: unknown; hits: Array<{ name: string; action: PiiAction }> } {\n if (typeof value !== 'string') return { value, hits: [] };\n let cur = value;\n const hits: Array<{ name: string; action: PiiAction }> = [];\n for (const p of this.patterns) {\n if (!p.re.test(cur)) {\n p.re.lastIndex = 0;\n continue;\n }\n p.re.lastIndex = 0;\n hits.push({ name: p.name, action: p.action });\n cur = cur.replace(p.re, (m) => {\n const r = applyAction(p.action, m);\n return r === undefined ? '' : r;\n });\n }\n return { value: cur, hits };\n }\n\n /** 对整棵 properties 做扫描(递归) */\n scanProperties(props: Record<string, unknown>): { properties: Record<string, unknown>; hits: number } {\n const out: Record<string, unknown> = {};\n let hits = 0;\n for (const [k, v] of Object.entries(props)) {\n if (this.exclude.has(k)) {\n out[k] = v;\n continue;\n }\n if (typeof v === 'string') {\n const { value, hits: h } = this.scan(v);\n out[k] = value;\n hits += h.length;\n } else if (v && typeof v === 'object' && !Array.isArray(v)) {\n const { properties: nested, hits: nh } = this.scanProperties(v as Record<string, unknown>);\n out[k] = nested;\n hits += nh;\n } else if (Array.isArray(v)) {\n out[k] = v.map((it) => {\n if (typeof it === 'string') {\n const { value: _v, hits: h } = this.scan(it);\n hits += h.length;\n return _v;\n }\n return it;\n });\n } else {\n out[k] = v;\n }\n }\n return { properties: out, hits };\n }\n}","/**\n * Privacy & Consent 管理(v1.3.0)\n *\n * - privacy_mode: 'off' | 'balanced' | 'strict'\n * off: 不脱敏\n * balanced: 按 excludeKeys 白名单 + 加密\n * strict: 强制脱敏 IP/UA/distinct_id,事件打 PII 标记\n * - Consent: grant(scope) / revoke(scope) / has(scope)\n * scope: 'analytics' | 'personalization' | 'marketing' | 'all'\n * 未授权时事件直接 drop + stats.dropped++\n */\n\nimport type { Logger } from './logger.js';\n\nexport type PrivacyMode = 'off' | 'balanced' | 'strict';\nexport type ConsentScope = 'analytics' | 'personalization' | 'marketing' | 'all';\n\nconst CONSENT_KEY = '__et_consent__';\n\nexport interface PrivacyState {\n mode: PrivacyMode;\n scopes: Set<ConsentScope>;\n}\n\nexport class PrivacyManager {\n private state: PrivacyState = { mode: 'off', scopes: new Set() };\n private storage: Storage | null = null;\n private listeners = new Set<(s: PrivacyState) => void>();\n\n constructor(private logger: Logger) {\n if (typeof window !== 'undefined') {\n try { this.storage = window.localStorage; } catch { /* ignore */ }\n this.loadFromStorage();\n }\n }\n\n setMode(mode: PrivacyMode): void {\n this.state.mode = mode;\n this.logger.log?.(`[Privacy] mode set to ${mode}`);\n this.emit();\n }\n\n getMode(): PrivacyMode {\n return this.state.mode;\n }\n\n /** 授权某个 scope */\n grant(scope: ConsentScope): void {\n if (scope === 'all') {\n this.state.scopes.add('analytics');\n this.state.scopes.add('personalization');\n this.state.scopes.add('marketing');\n } else {\n this.state.scopes.add(scope);\n }\n this.persist();\n this.logger.log?.(`[Consent] granted ${scope}`);\n this.emit();\n }\n\n /** 撤销某个 scope */\n revoke(scope: ConsentScope): void {\n if (scope === 'all') {\n this.state.scopes.clear();\n } else {\n this.state.scopes.delete(scope);\n }\n this.persist();\n this.logger.warn?.(`[Consent] revoked ${scope}`);\n this.emit();\n }\n\n /** 检查是否授权 */\n has(scope: ConsentScope): boolean {\n if (this.state.scopes.has('all')) return true;\n return this.state.scopes.has(scope);\n }\n\n /** 是否应该上报此事件 */\n shouldTrack(scope: ConsentScope = 'analytics'): boolean {\n if (!this.has(scope)) return false;\n return true;\n }\n\n /** 订阅 state 变化 */\n subscribe(fn: (s: PrivacyState) => void): () => void {\n this.listeners.add(fn);\n return () => this.listeners.delete(fn);\n }\n\n /** strict 模式下脱敏 properties */\n applyPrivacy(props: Record<string, unknown>, mode: PrivacyMode = this.state.mode): Record<string, unknown> {\n if (mode === 'off') return props;\n const out = { ...props };\n // balanced + strict 都脱敏\n if (mode === 'strict') {\n // 删除 IP / UA / 设备指纹类\n for (const k of ['$ip', '$ip_addr', '$user_agent', '$device_id', '$mac', '$idfa']) {\n if (k in out) delete out[k];\n }\n }\n // balanced: 保留分析维度,但匿名 distinct_id 替换为 hash\n if (mode === 'balanced' || mode === 'strict') {\n if ('$distinct_id' in out && typeof out.$distinct_id === 'string') {\n // 保留字段名让下游做关联;不再做 hash(由 identity 层做)\n }\n }\n return out;\n }\n\n private loadFromStorage(): void {\n if (!this.storage) return;\n try {\n const raw = this.storage.getItem(CONSENT_KEY);\n if (!raw) return;\n const data = JSON.parse(raw);\n if (data.mode) this.state.mode = data.mode;\n if (Array.isArray(data.scopes)) this.state.scopes = new Set(data.scopes);\n } catch { /* ignore */ }\n }\n\n private persist(): void {\n if (!this.storage) return;\n try {\n this.storage.setItem(CONSENT_KEY, JSON.stringify({\n mode: this.state.mode,\n scopes: Array.from(this.state.scopes),\n }));\n } catch { /* ignore */ }\n }\n\n private emit(): void {\n for (const l of Array.from(this.listeners)) {\n try { l(this.state); } catch { /* ignore */ }\n }\n }\n}","/**\n * Replay Engine(v1.3.0)\n *\n * - 把历史事件序列(JSON)喂回 SDK,重放真实交互链路\n * - 基于时间戳的同步调度(speed 可调)\n * - 输出每个 event 的回调 + 整体进度\n * - 支持 pause/resume/seek\n */\n\nexport interface ReplayEvent {\n type: string;\n event?: string;\n time: number;\n properties?: Record<string, unknown>;\n distinct_id?: string;\n // 其它字段透传\n [k: string]: unknown;\n}\n\nexport interface ReplayOptions {\n /** 速率倍率(1 = 实时,2 = 2x) */\n speed?: number;\n /** 是否调用真实的 sdk.track(默认 true;false = dryRun 仅回调) */\n callRealTrack?: boolean;\n /** 起始时间偏移(ms),跳过前面这段时间 */\n startOffsetMs?: number;\n /** 进度回调 */\n onProgress?: (info: { current: number; total: number; percent: number }) => void;\n /** 每条事件回调 */\n onEvent?: (ev: ReplayEvent, i: number) => void;\n /** 完成回调 */\n onEnd?: () => void;\n}\n\nexport interface ReplayHandle {\n pause(): void;\n resume(): void;\n seek(index: number): void;\n stop(): void;\n}\n\nexport function createReplay(events: ReplayEvent[], opts: ReplayOptions = {}): ReplayHandle {\n const speed = opts.speed ?? 1;\n const callReal = opts.callRealTrack !== false;\n const startOffset = opts.startOffsetMs ?? 0;\n\n let paused = false;\n let stopped = false;\n let currentIndex = 0;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let lastFiredAt: number | null = null;\n\n // 排序 + 过滤\n const sorted = [...events]\n .filter(e => e.time >= startOffset)\n .sort((a, b) => a.time - b.time);\n\n function getSdk(): { track?: (e: string, p?: Record<string, unknown>) => void } | null {\n if (typeof window === 'undefined') return null;\n return (window as unknown as { eventTracker?: { track?: (e: string, p?: Record<string, unknown>) => void } }).eventTracker ?? null;\n }\n\n function fireNext() {\n if (stopped || paused) return;\n if (currentIndex >= sorted.length) {\n opts.onEnd?.();\n return;\n }\n const ev = sorted[currentIndex];\n const now = Date.now();\n const relTime = ev.time - (sorted[0]?.time ?? 0);\n const targetRel = relTime / speed;\n if (lastFiredAt !== null) {\n const elapsed = now - lastFiredAt;\n const wait = targetRel - elapsed;\n if (wait > 0) {\n timer = setTimeout(fireNext, wait);\n return;\n }\n }\n lastFiredAt = now;\n opts.onEvent?.(ev, currentIndex);\n opts.onProgress?.({\n current: currentIndex + 1,\n total: sorted.length,\n percent: ((currentIndex + 1) / sorted.length) * 100,\n });\n if (callReal && ev.event) {\n const sdk = getSdk();\n try { sdk?.track?.(ev.event, ev.properties); } catch { /* ignore */ }\n }\n currentIndex++;\n // 立即尝试下一条\n queueMicrotask(fireNext);\n }\n\n // 启动\n if (typeof window !== 'undefined') {\n queueMicrotask(fireNext);\n } else if (sorted.length) {\n // node 环境:同步遍历\n for (let i = 0; i < sorted.length; i++) {\n opts.onEvent?.(sorted[i], i);\n opts.onProgress?.({ current: i + 1, total: sorted.length, percent: ((i + 1) / sorted.length) * 100 });\n if (callReal && sorted[i].event) {\n // node 下没有 sdk.track,跳过\n }\n }\n opts.onEnd?.();\n }\n\n return {\n pause() { paused = true; if (timer) { clearTimeout(timer); timer = null; } },\n resume() { paused = false; lastFiredAt = null; fireNext(); },\n seek(i) { currentIndex = Math.max(0, Math.min(i, sorted.length - 1)); lastFiredAt = null; fireNext(); },\n stop() { stopped = true; if (timer) { clearTimeout(timer); timer = null; } },\n };\n}","/**\n * Idle Scheduler(v1.3.0)\n *\n * - 用 requestIdleCallback(fallback setTimeout)调度低优先级任务\n * - 首屏 TTI 不阻塞\n * - 适用场景:preset property 计算 / 插件 install / stage 注册\n */\n\nexport type IdleCallback = (deadline: { didTimeout: boolean; timeRemaining: () => number }) => void;\n\nexport interface IdleScheduler {\n schedule(fn: IdleCallback, opts?: { timeout?: number }): number;\n cancel(handle: number): void;\n}\n\nfunction hasRIC(): boolean {\n return typeof (globalThis as { requestIdleCallback?: unknown }).requestIdleCallback === 'function';\n}\n\nexport function createIdleScheduler(): IdleScheduler {\n if (hasRIC()) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const ric = (globalThis as any).requestIdleCallback.bind(globalThis);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cic = (globalThis as any).cancelIdleCallback.bind(globalThis);\n return {\n schedule(fn, opts) {\n return ric(fn, opts || {});\n },\n cancel(handle) {\n cic(handle);\n },\n };\n }\n // fallback: setTimeout(0)\n return {\n schedule(fn) {\n return setTimeout(() => fn({ didTimeout: false, timeRemaining: () => 50 }), 0) as unknown as number;\n },\n cancel(handle) {\n clearTimeout(handle as unknown as ReturnType<typeof setTimeout>);\n },\n };\n}\n\nexport const globalIdleScheduler = createIdleScheduler();\n\n/**\n * 当浏览器空闲时再跑(timeout fallback 200ms)\n */\nexport function whenIdle(fn: IdleCallback, timeout = 200): () => void {\n const handle = globalIdleScheduler.schedule(fn, { timeout });\n return () => globalIdleScheduler.cancel(handle);\n}","/**\n * OffscreenSender (v1.3.0)\n *\n * 把 send/gzip/encrypt 全部挪到 Web Worker,主线程零阻塞\n *\n * - 使用专用 Worker(postMessage 协议)\n * - 主线程仅保留外壳:encodeEvent + postMessage\n * - 支持 batch send(同 worker 内聚合 + 单次 flush)\n * - 不可用时(Safari 14 之前 / Node)自动 fallback 到 ajax\n */\n\nimport type { Sender, SendContext } from './sender.js';\nimport type { EventData } from '../types/index.js';\n\ninterface WorkerMsgIn {\n kind: 'send' | 'sendBatch' | 'shutdown';\n payload?: EventData | EventData[];\n url?: string;\n serverUrl?: string | string[];\n gzip?: boolean;\n encryptor?: string; // 序列化后的 encryptor(实际场景由 worker 内 import SDK)\n}\n\ninterface WorkerMsgOut {\n kind: 'result' | 'error';\n ok: boolean;\n err?: string;\n durationMs?: number;\n}\n\nconst WORKER_SRC = `\nself.onmessage = async function (e) {\n const msg = e.data;\n const start = Date.now();\n try {\n if (msg.kind === 'send') {\n const ev = msg.payload;\n const body = 'data=' + encodeURIComponent(JSON.stringify(ev)) + '&batch=0';\n const r = await fetch(msg.url, { method:'POST', mode:'cors', credentials:'omit',\n headers:{'Content-Type':'application/x-www-form-urlencoded'}, body, keepalive:true });\n self.postMessage({ kind: r.ok ? 'result' : 'error', ok: r.ok, durationMs: Date.now() - start });\n } else if (msg.kind === 'sendBatch') {\n const evs = msg.payload;\n const body = 'data=' + encodeURIComponent(JSON.stringify(evs)) + '&batch=1';\n const r = await fetch(msg.url, { method:'POST', mode:'cors', credentials:'omit',\n headers:{'Content-Type':'application/x-www-form-urlencoded'}, body, keepalive:true });\n self.postMessage({ kind: r.ok ? 'result' : 'error', ok: r.ok, durationMs: Date.now() - start });\n } else if (msg.kind === 'shutdown') {\n self.close();\n }\n } catch (err) {\n self.postMessage({ kind: 'error', ok: false, err: String(err), durationMs: Date.now() - start });\n }\n};\n`;\n\nfunction hasWorker(): boolean {\n return typeof (globalThis as { Worker?: unknown }).Worker === 'function';\n}\n\nexport class OffscreenSender implements Sender {\n name = 'offscreen' as const;\n private worker: Worker | null = null;\n private fallback?: Sender;\n private queue: Array<{ resolve: () => void; reject: (e: Error) => void }> = [];\n\n canUse(): boolean {\n return hasWorker();\n }\n\n private getWorker(): Worker | null {\n if (this.worker) return this.worker;\n if (!hasWorker()) return null;\n try {\n const blob = new Blob([WORKER_SRC], { type: 'application/javascript' });\n const url = URL.createObjectURL(blob);\n this.worker = new Worker(url);\n this.worker.onmessage = (e: MessageEvent<WorkerMsgOut>) => {\n const head = this.queue.shift();\n if (!head) return;\n if (e.data.kind === 'error') {\n head.reject(new Error(e.data.err || 'worker send failed'));\n } else {\n head.resolve();\n }\n };\n this.worker.onerror = (e) => {\n // 全队列 reject\n const q = this.queue.splice(0);\n for (const t of q) t.reject(new Error(e.message || 'worker error'));\n };\n } catch {\n this.worker = null;\n }\n return this.worker;\n }\n\n async send(event: EventData, ctx: SendContext): Promise<void> {\n const url = Array.isArray(ctx.config.server_url) ? ctx.config.server_url[0] : ctx.config.server_url;\n const w = this.getWorker();\n if (!w) {\n // fallback\n const { AjaxSender } = await import('./ajax-sender.js');\n if (!this.fallback) this.fallback = new AjaxSender();\n return this.fallback.send(event, ctx);\n }\n return new Promise<void>((resolve, reject) => {\n this.queue.push({ resolve, reject });\n w.postMessage({\n kind: 'send',\n payload: event,\n url,\n } satisfies WorkerMsgIn);\n });\n }\n\n /** 批量发送(worker 内聚合) */\n async sendBatch(events: EventData[], ctx: SendContext): Promise<void> {\n const url = Array.isArray(ctx.config.server_url) ? ctx.config.server_url[0] : ctx.config.server_url;\n const w = this.getWorker();\n if (!w) {\n const { AjaxSender } = await import('./ajax-sender.js');\n if (!this.fallback) this.fallback = new AjaxSender();\n return (this.fallback as { sendBatch?: (events: EventData[], ctx: SendContext) => Promise<void> }).sendBatch?.(events, ctx);\n }\n return new Promise<void>((resolve, reject) => {\n this.queue.push({ resolve, reject });\n w.postMessage({\n kind: 'sendBatch',\n payload: events,\n url,\n } satisfies WorkerMsgIn);\n });\n }\n\n /** 关闭 worker */\n destroy(): void {\n if (this.worker) {\n this.worker.postMessage({ kind: 'shutdown' } satisfies WorkerMsgIn);\n this.worker.terminate();\n this.worker = null;\n }\n }\n}","/**\n * WebSocket Sender(v1.3.0)\n *\n * - 长连接上报,适合实时数据\n * - 支持服务端反向下发配置(dynamic config)\n * - 自动重连(指数退避)\n * - 离线时本地缓冲\n */\n\nimport type { Sender, SendContext } from './sender.js';\nimport type { EventData, TrackerConfig } from '../types/index.js';\n\ninterface WSMessage {\n kind: 'event' | 'batch' | 'ack' | 'config';\n data?: unknown;\n}\n\nexport interface WebSocketSenderOptions {\n /** WS 服务地址 */\n url: string;\n /** 鉴权 token(首条消息携带) */\n authToken?: string;\n /** 重连延迟上限(ms) */\n maxReconnectMs?: number;\n /** 离线缓冲上限 */\n maxBuffer?: number;\n}\n\nexport class WebSocketSender implements Sender {\n name = 'ws' as const;\n private ws: WebSocket | null = null;\n private buffer: EventData[] = [];\n private reconnectDelay = 1000;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private configCb: ((cfg: Partial<TrackerConfig>) => void) | null = null;\n\n constructor(private opts: WebSocketSenderOptions) {}\n\n canUse(): boolean {\n return typeof (globalThis as { WebSocket?: unknown }).WebSocket === 'function';\n }\n\n connect(): void {\n if (this.ws && (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING)) return;\n try {\n this.ws = new WebSocket(this.opts.url);\n } catch {\n this.scheduleReconnect();\n return;\n }\n this.ws.onopen = () => {\n this.reconnectDelay = 1000;\n // 鉴权\n if (this.opts.authToken) {\n this.safeSend({ kind: 'event', data: { _auth: this.opts.authToken } } as WSMessage);\n }\n // flush buffer\n const take = this.buffer.splice(0);\n for (const e of take) this.safeSend({ kind: 'event', data: e });\n };\n this.ws.onmessage = (e) => {\n try {\n const msg = JSON.parse(typeof e.data === 'string' ? e.data : '{}') as WSMessage;\n if (msg.kind === 'config' && msg.data) {\n this.configCb?.(msg.data as Partial<TrackerConfig>);\n }\n } catch { /* ignore */ }\n };\n this.ws.onerror = () => {\n this.scheduleReconnect();\n };\n this.ws.onclose = () => {\n this.scheduleReconnect();\n };\n }\n\n onConfig(cb: (cfg: Partial<TrackerConfig>) => void): void {\n this.configCb = cb;\n }\n\n async send(event: EventData, _ctx: SendContext): Promise<void> {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n this.buffer.push(event);\n if (this.buffer.length > (this.opts.maxBuffer ?? 1000)) this.buffer.shift();\n if (!this.ws) this.connect();\n return;\n }\n this.safeSend({ kind: 'event', data: event });\n }\n\n async sendBatch(events: EventData[], _ctx: SendContext): Promise<void> {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n this.buffer.push(...events);\n if (!this.ws) this.connect();\n return;\n }\n this.safeSend({ kind: 'batch', data: events });\n }\n\n close(): void {\n if (this.reconnectTimer) clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n if (this.ws) {\n this.ws.onclose = null;\n this.ws.close();\n this.ws = null;\n }\n }\n\n private safeSend(msg: WSMessage): void {\n try {\n this.ws?.send(JSON.stringify(msg));\n } catch {\n // 发送失败,回滚\n if (msg.kind === 'event' && msg.data) this.buffer.unshift(msg.data as EventData);\n if (msg.kind === 'batch' && Array.isArray(msg.data)) this.buffer.unshift(...(msg.data as EventData[]));\n }\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimer) return;\n const delay = Math.min(this.reconnectDelay, this.opts.maxReconnectMs ?? 30000);\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null;\n this.reconnectDelay = Math.min(this.reconnectDelay * 2, this.opts.maxReconnectMs ?? 30000);\n this.connect();\n }, delay);\n }\n}","/**\n * Edge Worker Adapter (v1.3.0)\n *\n * - 适配 Cloudflare Workers / D1\n * - 不依赖 DOM,用 globalThis.fetch / crypto\n * - KV 存储用 Map(运行时)\n * - 暴露 init() 工厂\n */\n\nimport type { TrackerConfig, EventData } from '../types/index.js';\nimport { encodeEvent, encodeBatch } from '../send/encode.js';\n\nexport interface EdgeEnv {\n /** 转发到真实 server_url 的可选 fetcher */\n fetch?: typeof fetch;\n /** D1 binding(可选,用于去重 / 缓冲) */\n DB?: {\n prepare: (sql: string) => {\n bind: (...args: unknown[]) => {\n run: () => Promise<unknown>;\n all: () => Promise<{ results?: unknown[] }>;\n };\n };\n };\n}\n\nexport interface EdgeInitOptions extends Partial<TrackerConfig> {\n /** Cloudflare env */\n env?: EdgeEnv;\n /** 队列缓冲上限 */\n maxQueue?: number;\n /** flush 间隔(ms) */\n flushIntervalMs?: number;\n}\n\nexport interface EdgeTracker {\n track: (event: string, properties?: Record<string, unknown>) => Promise<void>;\n flush: () => Promise<void>;\n size: () => number;\n close: () => void;\n}\n\nexport function initEdge(options: EdgeInitOptions): EdgeTracker {\n if (!options.server_url) throw new Error('server_url required');\n const env = options.env || {};\n const fetcher: typeof fetch = env.fetch || globalThis.fetch;\n const queue: EventData[] = [];\n const maxQueue = options.maxQueue ?? 500;\n const flushInterval = options.flushIntervalMs ?? 3000;\n let timer: ReturnType<typeof setInterval> | null = null;\n let distinctId = 'edge-user';\n\n function buildEvent(event: string, properties?: Record<string, unknown>): EventData {\n return {\n type: 'track',\n event,\n time: Date.now(),\n distinct_id: distinctId,\n properties: properties || {},\n lib: { $lib: 'event-tracker-edge', $lib_version: '1.3.0' },\n token: options.app_id || 'edge',\n project: options.app_id || 'edge',\n };\n }\n\n async function flush() {\n if (!queue.length) return;\n const take = queue.splice(0);\n try {\n const url = Array.isArray(options.server_url) ? options.server_url[0] : options.server_url!;\n const payload = await Promise.resolve(encodeBatch(take, options.encryptor));\n await fetcher(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: `data=${encodeURIComponent(payload)}&batch=1`,\n });\n } catch {\n // 失败回滚(重新入队,最多 maxQueue)\n const remain = queue.unshift(...take);\n if (remain > maxQueue) queue.splice(0, remain - maxQueue);\n }\n }\n\n return {\n async track(event: string, properties?: Record<string, unknown>) {\n const e = buildEvent(event, properties);\n queue.push(e);\n if (queue.length >= maxQueue) await flush();\n else if (!timer) timer = setInterval(flush, flushInterval);\n },\n async flush() { await flush(); },\n size() { return queue.length; },\n close() {\n if (timer) clearInterval(timer);\n timer = null;\n void flush();\n },\n };\n}\n\n/** 单事件便捷方法(不缓冲,立即发送) */\nexport async function trackOnce(\n event: string,\n properties: Record<string, unknown>,\n options: EdgeInitOptions,\n): Promise<void> {\n const fetcher: typeof fetch = options.env?.fetch || globalThis.fetch;\n if (!options.server_url) throw new Error('server_url required');\n const ev: EventData = {\n type: 'track',\n event,\n time: Date.now(),\n distinct_id: 'edge-user',\n properties,\n lib: { $lib: 'event-tracker-edge', $lib_version: '1.3.0' },\n token: options.app_id || 'edge',\n project: options.app_id || 'edge',\n };\n const url = Array.isArray(options.server_url) ? options.server_url[0] : options.server_url;\n const payload = await Promise.resolve(encodeEvent(ev, options.encryptor));\n await fetcher(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: `data=${encodeURIComponent(payload)}`,\n });\n}","/**\n * auto-track 插件\n * - $pageview: 路由变化时自动 track\n * - $WebClick: 监听 click,自动 track\n * - $WebStay: 页面离开时上报停留时长\n * - $scrolldepth: 25/50/75/100% 触发\n */\n\nimport type { Plugin } from '../../core/plugin.js';\nimport { isBrowser } from '../../core/env.js';\nimport { PresetEvent, PresetProperty } from '../../types/constants.js';\n\nexport interface AutoTrackOptions {\n pageview?: boolean;\n webclick?: boolean;\n webstay?: boolean;\n scrolldepth?: boolean;\n /** webclick 元素选择器过滤,匹配才上报 */\n webclickSelector?: string;\n /** 上报时附带的元素属性(attribute 名单) */\n webclickAttrs?: string[];\n /** scroll 触发阈值(百分比数组) */\n scrollThresholds?: number[];\n}\n\nexport function autoTrack(opts: AutoTrackOptions = {}): Plugin {\n let sdkRef: import('../../core/tracker.js').EventTracker | null = null;\n let enterTime = Date.now();\n let reachedThresholds = new Set<number>();\n const thresholds = opts.scrollThresholds ?? [25, 50, 75, 100];\n\n function fire(event: string, properties: Record<string, unknown> = {}): void {\n if (!sdkRef) return;\n sdkRef.track(event, properties);\n }\n\n function path(): string {\n try { return location.pathname + location.search + location.hash; } catch { return ''; }\n }\n\n function setupPageview(): void {\n const send = () => {\n fire(PresetEvent.PageView, {\n [PresetProperty.URLPath]: path(),\n [PresetProperty.Title]: document.title,\n [PresetProperty.Referrer]: document.referrer,\n });\n };\n // 首次加载\n setTimeout(send, 0);\n // history.pushState/replaceState\n const wrap = (key: 'pushState' | 'replaceState') => {\n const orig = history[key];\n history[key] = function (...args: unknown[]) {\n const r = orig.apply(this, args as Parameters<typeof orig>);\n setTimeout(send, 0);\n return r;\n };\n };\n wrap('pushState');\n wrap('replaceState');\n // popstate\n window.addEventListener('popstate', () => setTimeout(send, 0));\n // hashchange\n window.addEventListener('hashchange', () => setTimeout(send, 0));\n }\n\n function setupWebClick(selector: string | undefined, attrs: string[]): void {\n const onClick = (e: MouseEvent) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n const el = target.closest(selector || 'a, button, [data-track-click]') as HTMLElement | null;\n if (!el) return;\n const props: Record<string, unknown> = {\n [PresetProperty.ElementSelector]: cssPath(el),\n [PresetProperty.ElementType]: el.tagName.toLowerCase(),\n [PresetProperty.ElementContent]: (el.textContent || '').trim().slice(0, 100),\n [PresetProperty.ElementId]: el.id || undefined,\n [PresetProperty.ElementClassName]: el.className || undefined,\n };\n if (el instanceof HTMLAnchorElement) {\n props['$element_href'] = el.href;\n }\n for (const a of attrs) {\n const v = el.getAttribute(a);\n if (v != null) props[a] = v;\n }\n fire(PresetEvent.WebClick, props);\n };\n document.addEventListener('click', onClick, true);\n }\n\n function cssPath(el: Element): string {\n if (el.id) return `#${el.id}`;\n const parts: string[] = [];\n let cur: Element | null = el;\n while (cur && cur !== document.body && parts.length < 5) {\n const self: Element = cur;\n let part = self.tagName.toLowerCase();\n if (self.classList && self.classList.length) {\n part += '.' + Array.from(self.classList).slice(0, 2).join('.');\n }\n const parent: Element | null = self.parentElement;\n if (parent) {\n const siblings: Element[] = Array.from(parent.children).filter((c): c is Element => c instanceof Element && c.tagName === self.tagName);\n if (siblings.length > 1) {\n part += `:nth-of-type(${siblings.indexOf(self) + 1})`;\n }\n }\n parts.unshift(part);\n cur = parent;\n }\n return parts.join(' > ');\n }\n\n function setupWebStay(): void {\n const onEnter = () => { enterTime = Date.now(); };\n const onLeave = () => {\n const dur = Date.now() - enterTime;\n fire(PresetEvent.WebStay, {\n [PresetProperty.EventDuration]: dur,\n [PresetProperty.URLPath]: path(),\n });\n };\n window.addEventListener('beforeunload', onLeave);\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') onLeave();\n else onEnter();\n });\n }\n\n function setupScrollDepth(): void {\n reachedThresholds = new Set();\n const onScroll = () => {\n const docH = document.documentElement.scrollHeight - window.innerHeight;\n if (docH <= 0) return;\n const pct = Math.min(100, Math.round((window.scrollY / docH) * 100));\n for (const t of thresholds) {\n if (pct >= t && !reachedThresholds.has(t)) {\n reachedThresholds.add(t);\n fire('$scroll_depth', { percent: t, [PresetProperty.URLPath]: path() });\n }\n }\n };\n window.addEventListener('scroll', onScroll, { passive: true });\n }\n\n return {\n name: 'auto-track',\n install({ sdk }) {\n if (!isBrowser()) return;\n sdkRef = sdk;\n if (opts.pageview !== false) setupPageview();\n if (opts.webclick !== false) setupWebClick(opts.webclickSelector, opts.webclickAttrs || ['data-track-id', 'data-sensors-click']);\n if (opts.webstay !== false) setupWebStay();\n if (opts.scrolldepth) setupScrollDepth();\n },\n };\n}\n","/**\n * pageload 插件:performance API 采集首屏加载性能\n * - $WebPageLoad 事件,包含:\n * $load_time / $dom_ready_time / $dom_interactive_time / $response_time\n * $page_resource_size / $page_height / $viewport_position\n */\n\nimport type { Plugin } from '../../core/plugin.js';\nimport { isBrowser } from '../../core/env.js';\nimport { PresetEvent, PresetProperty } from '../../types/constants.js';\n\nexport interface PageLoadOptions {\n /** 是否立即触发(默认 true) */\n immediate?: boolean;\n /** 自定义时间轴 */\n measures?: string[];\n}\n\nexport function pageLoad(opts: PageLoadOptions = {}): Plugin {\n let sdkRef: import('../../core/tracker.js').EventTracker | null = null;\n\n function fire(): void {\n if (!sdkRef) return;\n const props: Record<string, unknown> = {\n [PresetProperty.URLPath]: location.pathname + location.search + location.hash,\n [PresetProperty.Title]: document.title,\n };\n\n // 尝试 performance API\n try {\n const perf = (typeof performance !== 'undefined' ? performance : null);\n if (perf) {\n const nav = perf.getEntriesByType('navigation')[0] as PerformanceNavigationTiming | undefined;\n if (nav) {\n if (typeof nav.domContentLoadedEventEnd === 'number') {\n props['$dom_ready_time'] = Math.round(nav.domContentLoadedEventEnd - nav.startTime);\n }\n if (typeof nav.domInteractive === 'number') {\n props['$dom_interactive_time'] = Math.round(nav.domInteractive - nav.startTime);\n }\n if (typeof nav.loadEventEnd === 'number' && typeof nav.startTime === 'number') {\n props['$load_time'] = Math.round(nav.loadEventEnd - nav.startTime);\n }\n if (typeof nav.responseEnd === 'number' && typeof nav.requestStart === 'number') {\n props['$response_time'] = Math.round(nav.responseEnd - nav.requestStart);\n }\n if (typeof nav.transferSize === 'number') {\n props[PresetProperty.PageResourceSize] = nav.transferSize;\n }\n }\n // paint\n const fp = perf.getEntriesByName('first-paint')[0];\n const fcp = perf.getEntriesByName('first-contentful-paint')[0];\n if (fp) props['$first_paint'] = Math.round(fp.startTime);\n if (fcp) props['$first_contentful_paint'] = Math.round(fcp.startTime);\n }\n } catch {\n /* ignore */\n }\n\n // 页面尺寸\n try {\n if (document.documentElement) {\n props[PresetProperty.PageHeight] = document.documentElement.scrollHeight;\n props[PresetProperty.ViewportPosition] = window.scrollY || 0;\n }\n } catch {\n /* ignore */\n }\n\n sdkRef.track(PresetEvent.WebPageLoad, props);\n }\n\n return {\n name: 'pageload',\n install({ sdk }) {\n if (!isBrowser()) return;\n sdkRef = sdk;\n const fireNow = opts.immediate !== false;\n if (document.readyState === 'complete') {\n if (fireNow) fire();\n else window.addEventListener('load', fire, { once: true });\n } else {\n window.addEventListener('load', () => {\n if (fireNow) fire();\n else setTimeout(fire, 0);\n }, { once: true });\n }\n },\n };\n}","/**\n * pageleave 插件:用户离开页面(关闭、跳转、切到后台)时上报\n * - $WebPageLeave 事件\n * - 包含 $event_duration / $url_path / $referrer / $viewport_position\n * - 包含 page_visible 标记(visibilitychange API)\n */\n\nimport type { Plugin } from '../../core/plugin.js';\nimport { isBrowser } from '../../core/env.js';\nimport { PresetEvent, PresetProperty } from '../../types/constants.js';\n\nexport interface PageLeaveOptions {\n /** 是否同步阻塞(sendBeacon 异步即可) */\n sendOnUnload?: boolean;\n}\n\nexport function pageLeave(_opts: PageLeaveOptions = {}): Plugin {\n let sdkRef: import('../../core/tracker.js').EventTracker | null = null;\n let enterTime = Date.now();\n\n function fire(reason: 'unload' | 'hidden' | 'pagehide'): void {\n if (!sdkRef) return;\n const dur = Date.now() - enterTime;\n sdkRef.track(PresetEvent.WebPageLeave, {\n [PresetProperty.EventDuration]: dur,\n [PresetProperty.URLPath]: location.pathname + location.search + location.hash,\n [PresetProperty.Title]: document.title,\n [PresetProperty.ViewportPosition]: window.scrollY || 0,\n $page_leave_reason: reason,\n });\n }\n\n return {\n name: 'pageleave',\n install({ sdk }) {\n if (!isBrowser()) return;\n sdkRef = sdk;\n enterTime = Date.now();\n\n // 重新进入页面时刷新 enterTime\n const onVisible = () => {\n if (document.visibilityState === 'visible') enterTime = Date.now();\n };\n document.addEventListener('visibilitychange', onVisible);\n\n // 关闭/离开\n window.addEventListener('pagehide', () => fire('pagehide'));\n window.addEventListener('beforeunload', () => fire('unload'));\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') fire('hidden');\n });\n },\n uninstall() {\n sdkRef = null;\n },\n };\n}","/**\n * exposure 插件:元素曝光(IntersectionObserver)\n * - $element_exposure 事件\n * - 元素进入视口超过阈值持续 X ms 才上报(默认 500ms)\n * - 同元素同阈值只上报一次\n */\n\nimport type { Plugin } from '../../core/plugin.js';\nimport { isBrowser } from '../../core/env.js';\nimport { PresetEvent, PresetProperty } from '../../types/constants.js';\n\nexport interface ExposureOptions {\n /** 选择器或元素集合 */\n selector?: string;\n /** 阈值(0~1,默认 0.5) */\n threshold?: number;\n /** 最小停留时间(ms,默认 500) */\n duration?: number;\n /** 额外附加属性(按 data-attr 注入到事件) */\n attrPrefix?: string;\n}\n\nexport function exposure(opts: ExposureOptions = {}): Plugin {\n let sdkRef: import('../../core/tracker.js').EventTracker | null = null;\n let observer: IntersectionObserver | null = null;\n const reported = new WeakSet<Element>();\n\n function cssPath(el: Element): string {\n if (el.id) return `#${el.id}`;\n const parts: string[] = [];\n let cur: Element | null = el;\n while (cur && cur !== document.body && parts.length < 5) {\n let part = cur.tagName.toLowerCase();\n if (cur.classList && cur.classList.length) {\n part += '.' + Array.from(cur.classList).slice(0, 2).join('.');\n }\n parts.unshift(part);\n cur = cur.parentElement;\n }\n return parts.join(' > ');\n }\n\n function setupObserver(): void {\n if (!('IntersectionObserver' in window)) return;\n const threshold = opts.threshold ?? 0.5;\n const duration = opts.duration ?? 500;\n observer = new IntersectionObserver(\n entries => {\n for (const entry of entries) {\n if (entry.intersectionRatio >= threshold) {\n const el = entry.target;\n const timer = setTimeout(() => {\n if (reported.has(el)) return;\n reported.add(el);\n if (!sdkRef) return;\n const props: Record<string, unknown> = {\n [PresetProperty.ElementSelector]: cssPath(el),\n [PresetProperty.ElementType]: el.tagName.toLowerCase(),\n $intersection_ratio: entry.intersectionRatio,\n $exposure_duration: duration,\n };\n if (el instanceof HTMLElement && el.dataset) {\n const prefix = opts.attrPrefix || 'data-exp-';\n for (const k of Object.keys(el.dataset)) {\n if (k.startsWith(prefix)) {\n props[k] = el.dataset[k];\n }\n }\n }\n sdkRef.track(PresetEvent.ElementExposure, props);\n }, duration);\n // 离开时取消未上报\n const off = () => {\n clearTimeout(timer);\n el.removeEventListener('mouseleave', off);\n };\n el.addEventListener('mouseleave', off);\n }\n }\n },\n { threshold: [threshold] },\n );\n\n if (opts.selector) {\n const targets = document.querySelectorAll(opts.selector);\n targets.forEach(t => observer!.observe(t));\n }\n }\n\n return {\n name: 'exposure',\n install({ sdk }) {\n if (!isBrowser()) return;\n sdkRef = sdk;\n if (document.readyState === 'complete') setupObserver();\n else window.addEventListener('load', setupObserver, { once: true });\n },\n uninstall() {\n observer?.disconnect();\n observer = null;\n sdkRef = null;\n },\n };\n}","/**\n * session-event 插件:会话管理\n * - 每条事件附 $event_session_id(首次访问生成,存 storage)\n * - $session_start / $session_end 事件\n * - 超时(默认 30 分钟)则重开会话\n */\n\nimport type { Plugin } from '../../core/plugin.js';\nimport type { StageContext, StageInterceptor } from '../../core/stage.js';\nimport { isBrowser } from '../../core/env.js';\nimport { PresetEvent, PresetProperty } from '../../types/constants.js';\nimport { uuidv4 } from '../../core/uuid.js';\nimport type { EventData } from '../../types/index.js';\nimport type { KVStore } from '../../storage/store.js';\n\nconst SESSION_KEY = 'et_session_id';\nconst SESSION_LAST_KEY = 'et_session_last_active';\nconst DEFAULT_TIMEOUT = 30 * 60 * 1000; // 30 分钟\n\nexport interface SessionOptions {\n /** 会话超时(ms) */\n timeout?: number;\n /** 是否在超时上报 $session_end */\n endOnTimeout?: boolean;\n}\n\nexport function sessionEvent(opts: SessionOptions = {}): Plugin {\n const timeout = opts.timeout ?? DEFAULT_TIMEOUT;\n let sdkRef: import('../../core/tracker.js').EventTracker | null = null;\n let storeRef: KVStore | null = null;\n let sessionId = '';\n let lastActive = 0;\n\n function newSession(reason: 'start' | 'timeout'): void {\n sessionId = uuidv4();\n lastActive = Date.now();\n if (storeRef) {\n storeRef.set(SESSION_KEY, sessionId);\n storeRef.set(SESSION_LAST_KEY, String(lastActive));\n }\n if (sdkRef && reason === 'start') {\n sdkRef.track('$session_start', { $event_session_id: sessionId });\n }\n }\n\n function check(): void {\n const now = Date.now();\n if (!sessionId || (lastActive && now - lastActive > timeout)) {\n newSession(now - lastActive > timeout ? 'timeout' : 'start');\n }\n lastActive = now;\n if (storeRef) storeRef.set(SESSION_LAST_KEY, String(lastActive));\n }\n\n const interceptor: StageInterceptor<unknown> = {\n name: 'session-event',\n priority: 10, // 早于业务拦截器\n entry(ctx: StageContext<unknown>) {\n if (ctx.meta.stage !== 'buildDataStage') return;\n check();\n const ev = ctx.data as EventData;\n if (ev && ev.properties) {\n ev.properties[PresetProperty.EventSessionId] = sessionId;\n }\n },\n };\n\n return {\n name: 'session-event',\n install({ sdk, stages, store }) {\n if (!isBrowser()) return;\n sdkRef = sdk;\n storeRef = store;\n\n // 读已有\n const existing = store.get(SESSION_KEY);\n const last = Number(store.get(SESSION_LAST_KEY) || '0');\n if (existing && last && Date.now() - last < timeout) {\n sessionId = existing;\n lastActive = last;\n } else {\n newSession('start');\n }\n\n stages.buildDataStage.register(interceptor);\n\n // 跨 tab 同步:通过 storage 事件检测其它 tab 关闭\n window.addEventListener('storage', (ev) => {\n if (ev.key === SESSION_KEY && !ev.newValue) {\n // 其它 tab 关闭了会话,本地也清掉\n sessionId = '';\n }\n });\n },\n uninstall() {\n sdkRef = null;\n storeRef = null;\n },\n };\n}","/**\n * Debug 发送器(独立 plugin)\n * - 启用后走 GET 请求到 debug_mode_url(默认从 server_url 推导 ?debug)\n * - 成功后 alert(\"debug数据发送成功\" + data)\n * - 失败时 alert(\"debug失败\" + JSON.stringify(err))\n * - 优先级最高(先于其它 senders 执行)\n */\n\nimport { encodeEvent, buildUrl } from '../../send/encode.js';\nimport { hasImage } from '../../core/env.js';\nimport { PresetProperty } from '../../types/constants.js';\nimport type { Plugin, InstallContext } from '../../core/plugin.js';\nimport type { EventData } from '../../types/index.js';\nimport type { StageContext } from '../../core/stage.js';\n\nexport interface DebugOptions {\n /** 是否启用(默认从 config.debug_mode 取) */\n enable?: boolean;\n /** 调试接收端 URL(默认从 config.server_url 推导 ?debug) */\n url?: string;\n /** 调试上传标记(出现在 Dry-Run header) */\n upload?: string;\n /** 成功回调(默认 alert) */\n onSuccess?: (event: EventData) => void;\n /** 失败回调(默认 alert) */\n onError?: (err: Error, event: EventData) => void;\n}\n\nfunction deriveDebugUrl(serverUrl: string | string[]): string {\n const base = Array.isArray(serverUrl) ? serverUrl[0] : serverUrl;\n return base.includes('?') ? base + '&debug' : base + '?debug';\n}\n\nexport function debugSender(opts: DebugOptions = {}): Plugin {\n return {\n name: 'debug-sender',\n install({ config, stages, registry, sdk }: InstallContext) {\n const enabled = opts.enable ?? !!config.debug_mode;\n if (!enabled) return;\n const url = opts.url ?? config.debug_mode_url ?? deriveDebugUrl(config.server_url);\n const upload = opts.upload ?? config.debug_mode_upload ?? 'true';\n\n stages.sendDataStage.register({\n name: 'debug-sender',\n priority: 30, // 最高优先级\n entry(ctx: StageContext<unknown>) {\n const event = ctx.data as EventData;\n try {\n const enc = encodeEvent(event, config.encryptor);\n Promise.resolve(enc).then((payload) => {\n const fullUrl = buildUrl(url, payload, 'form');\n if (hasImage()) {\n const img = new Image(1, 1);\n img.onload = () => {\n try { opts.onSuccess?.(event); } catch { /* ignore */ }\n try {\n if (typeof alert !== 'undefined') alert('debug数据发送成功' + (event.event || ''));\n } catch { /* ignore */ }\n };\n img.onerror = () => {\n const err = new Error('Image load failed');\n try { opts.onError?.(err, event); } catch { /* ignore */ }\n try {\n if (typeof alert !== 'undefined') alert('debug失败 错误原因' + JSON.stringify({ message: err.message }));\n } catch { /* ignore */ }\n };\n img.src = fullUrl;\n } else {\n ctx.cancellationToken.stop();\n }\n }).catch((e) => {\n sdk.getLogger().error('debug-sender error:', e);\n });\n } catch (e) {\n sdk.getLogger().error('debug-sender error:', e);\n }\n return event;\n },\n });\n\n // 标记 Dry-Run 风格\n registry.on('sdkAfterInitAPI', () => {\n Object.defineProperty(globalThis, '__et_debug_upload__', { value: upload, writable: true });\n });\n },\n uninstall() {\n try { delete (globalThis as Record<string, unknown>).__et_debug_upload__; } catch { /* ignore */ }\n },\n };\n}\n\n// 占位\nexport { PresetProperty };\n","/**\n * indexeddb-sender 插件:把事件写到 IndexedDB(用于离线缓存 / 批量消费)\n * - 不实际发送,只把序列化事件追加到指定 IDB store\n * - 适合后续被 webview bridge / native / service worker 消费\n */\n\nimport type { Plugin, InstallContext } from '../../core/plugin.js';\nimport type { StageContext, StageInterceptor } from '../../core/stage.js';\nimport type { EventData } from '../../types/index.js';\nimport { isBrowser } from '../../core/env.js';\nimport { encodeEvent } from '../../send/encode.js';\n\nexport interface IndexedDBSenderOptions {\n /** IDB 名(默认 event-tracker-outbox) */\n dbName?: string;\n /** object store 名(默认 outbox) */\n storeName?: string;\n /** 上限(条),超过从头丢弃 */\n max?: number;\n}\n\nexport function indexedDBSender(opts: IndexedDBSenderOptions = {}): Plugin {\n const dbName = opts.dbName || 'event-tracker-outbox';\n const storeName = opts.storeName || 'outbox';\n const max = opts.max || 500;\n\n let dbPromise: Promise<IDBDatabase | null> | null = null;\n\n function openDB(): Promise<IDBDatabase | null> {\n if (!isBrowser() || typeof indexedDB === 'undefined') return Promise.resolve(null);\n return new Promise(resolve => {\n try {\n const req = indexedDB.open(dbName, 1);\n req.onupgradeneeded = () => {\n const db = req.result;\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName, { autoIncrement: true });\n }\n };\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => resolve(null);\n } catch {\n resolve(null);\n }\n });\n }\n\n const interceptor: StageInterceptor<unknown> = {\n name: 'indexeddb-sender',\n priority: 60,\n entry(ctx: StageContext<unknown>) {\n if (ctx.meta.stage !== 'sendDataStage') return;\n const ev = ctx.data as EventData;\n dbPromise ??= openDB();\n dbPromise.then(db => {\n if (!db) return;\n try {\n const tx = db.transaction(storeName, 'readwrite');\n const store = tx.objectStore(storeName);\n const payload = encodeEvent(ev);\n // 限制大小:> max 则删头\n const cntReq = store.count();\n cntReq.onsuccess = () => {\n if ((cntReq.result as number) >= max) {\n store.delete(IDBKeyRange.lowerBound(0, true));\n }\n store.add({ time: Date.now(), payload });\n };\n } catch {\n /* ignore */\n }\n }).catch(() => { /* ignore */ });\n return ev;\n },\n };\n\n return {\n name: 'indexeddb-sender',\n install({ stages }: InstallContext) {\n if (!isBrowser()) return;\n stages.sendDataStage.register(interceptor);\n },\n uninstall() {\n dbPromise = null;\n },\n };\n}","/**\n * WebView 桥(v2 RPC)\n *\n * v1: vapph5define.call(name, args) 同步返回,缺点:\n * - 没法 timeout\n * - 没法传 callback-style\n * - 没法识别 native async\n *\n * v2:\n * - RPC 协议:call(name, args, cbId) → native 通过 vapph5define.rpc.response(cbId, result)\n * - 自动超时(默认 5s)→ reject\n * - 自动探测:window.vapph5define.rpc / window.vapph5define.call 任一可用\n * - SDK 暴露 sdk.bridge.callAsync(name, args) 返回 Promise\n * - 兼容旧 sdk.bridge.call(name, args)\n * - install 时 fetch app info 可 await\n */\n\nimport type { Plugin } from '../../core/plugin.js';\nimport { isBrowser } from '../../core/env.js';\n\ndeclare global {\n interface Window {\n vapph5define?: {\n /** v1 同步调用 */\n call: (name: string, ...args: unknown[]) => unknown;\n /** v1 监听 */\n handle: (name: string, fn: (...args: unknown[]) => unknown) => void;\n /** 是否在 app 中 */\n isInApp?: boolean;\n /** v2 RPC */\n rpc?: {\n call: (name: string, cbId: string, args: unknown) => void;\n response: (cbId: string, result: unknown, err?: string) => void;\n };\n };\n }\n}\n\nexport interface WebViewBridgeOptions {\n /** 自定义 vapph5 对象,默认 window.vapph5define */\n defineName?: string;\n /** 是否在 install 时立刻拉 app 信息 */\n fetchOnInit?: boolean;\n /** 自定义取 app 信息的协议名(默认 'getAppInfo') */\n protocolName?: string;\n /** RPC 默认超时(ms) */\n timeout?: number;\n /** 取回的应用信息合并到 SDK 的字段映射 */\n fieldMap?: Partial<Record<'app_version' | 'app_id' | 'app_state' | 'channel' | 'lib', string>>;\n}\n\nexport interface BridgeAPI {\n /** 同步调用(v1 风格) */\n call: <T = unknown>(name: string, ...args: unknown[]) => T | undefined;\n /** 异步 RPC 调用(v2) */\n callAsync: <T = unknown>(name: string, args?: unknown, timeoutMs?: number) => Promise<T>;\n /** 注册 native handler */\n on: (name: string, fn: (...args: unknown[]) => unknown) => void;\n /** 检测是否在 webview 中 */\n isInApp: () => boolean;\n}\n\nexport function webviewBridge(opts: WebViewBridgeOptions = {}): Plugin {\n let rpcCbSeq = 0;\n const rpcPending = new Map<string, {\n resolve: (v: unknown) => void;\n reject: (e: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n }>();\n\n return {\n name: 'webview-bridge',\n install({ sdk, config }) {\n if (!isBrowser()) return;\n const win = window as Window;\n const defineName = opts.defineName || 'vapph5define';\n const define = (win as unknown as Record<string, unknown>)[defineName] as Window['vapph5define'] | undefined;\n if (!define || typeof define.call !== 'function') {\n return; // 不在 WebView 中\n }\n const timeout = opts.timeout ?? 5000;\n\n const callAsync: BridgeAPI['callAsync'] = (name, args, timeoutMs) => {\n return new Promise((resolve, reject) => {\n // 优先用 v2 rpc\n if (define.rpc && typeof define.rpc.call === 'function') {\n const cbId = `rpc_${++rpcCbSeq}_${Date.now()}`;\n const t = setTimeout(() => {\n rpcPending.delete(cbId);\n reject(new Error(`[WebViewBridge] RPC '${name}' timeout after ${timeoutMs ?? timeout}ms`));\n }, timeoutMs ?? timeout);\n rpcPending.set(cbId, { resolve, reject, timer: t });\n try {\n define.rpc.call(name, cbId, args);\n } catch (e) {\n clearTimeout(t);\n rpcPending.delete(cbId);\n reject(e as Error);\n }\n } else {\n // fallback v1:同步转异步\n try {\n const r = (define as (...a: unknown[]) => unknown).call(name, args);\n resolve(r);\n } catch (e) {\n reject(e as Error);\n }\n }\n });\n };\n\n // 注册 v2 rpc response 监听\n if (define.rpc && typeof define.rpc.response === 'function') {\n define.handle('rpc.response', (cbId: unknown, result: unknown, err?: unknown) => {\n if (typeof cbId !== 'string') return;\n const p = rpcPending.get(cbId);\n if (!p) return;\n rpcPending.delete(cbId);\n clearTimeout(p.timer);\n if (err) p.reject(new Error(String(err)));\n else p.resolve(result);\n });\n }\n\n const bridge: BridgeAPI = {\n call: (name, ...args) => define.call(name, ...args) as never,\n callAsync,\n on: (name, fn) => define.handle(name, fn),\n isInApp: () => define.isInApp === true || (define.call('isInApp') as boolean) === true,\n };\n\n (sdk as unknown as { bridge?: BridgeAPI }).bridge = bridge;\n (config as unknown as { is_webview?: boolean }).is_webview = true;\n\n if (opts.fetchOnInit !== false) {\n // 用 callAsync(支持 v2 rpc + v1 同步),避免阻塞 install\n const protocolName = opts.protocolName || 'getAppInfo';\n void callAsync<Record<string, unknown>>(protocolName).then(result => {\n if (!result || typeof result !== 'object') return;\n const fm = opts.fieldMap || {};\n for (const [sdkKey, resultKey] of Object.entries(fm)) {\n const v = result[resultKey as string];\n if (v !== undefined && v !== null) {\n (config as unknown as Record<string, unknown>)[sdkKey] = v;\n }\n }\n sdk.register({\n $app_version: result.app_version || result.appVersion,\n $app_id: result.app_id || result.appId,\n $channel: result.channel,\n $lib: result.lib || result.lib_name || result.libName,\n });\n }).catch(() => { /* ignore timeout / err */ });\n }\n },\n };\n}","/**\n * encrypt 插件(v1.1 增强版)\n *\n * 三个能力:\n * 1. 加密 + 解密配对(神策风格)\n * - config.encryptor / config.decoder\n * - 加密函数接收 JSON 字符串返回字符串;解密函数反向\n *\n * 2. Web Crypto AES-GCM\n * - aesGcmEncrypt / aesGcmDecrypt\n * - 基于 Web Crypto API,256-bit key,输出 base64(iv||ciphertext)\n *\n * 3. 钩子:encryptEvent / decryptEvent\n * - 用于在事件被发送前/接收后做二次处理(脱敏、补字段等)\n *\n * 用法示例:\n * import { encryptor, aesGcmEncrypt, aesGcmDecrypt } from '@macroui/event-tracker/plugin/encrypt';\n * const key = 'my-32-byte-secret-key-1234567890ab';\n * sdk.use(encryptor({\n * encrypt: aesGcmEncrypt(key),\n * decrypt: aesGcmDecrypt(key),\n * encryptEvent: (e) => scrubPII(e),\n * decryptEvent: (e) => e,\n * }));\n */\n\nimport type { Plugin } from '../../core/plugin.js';\nimport type { EventData } from '../../types/index.js';\n\nexport type EncryptFn = (data: string) => string;\nexport type DecryptFn = (data: string) => string;\nexport type EventTransform = (event: EventData) => EventData | unknown;\n\nexport interface EncryptorOptions {\n /** 加密:JSON 字符串 -> 字符串 */\n encrypt: EncryptFn;\n /** 解密:字符串 -> JSON 字符串(可选;多数场景 SDK 不下行) */\n decrypt?: DecryptFn;\n /** 事件级加密前钩子(脱敏、补字段) */\n encryptEvent?: EventTransform;\n /** 事件级解密后钩子(一般用于 debug 拉回来的事件) */\n decryptEvent?: EventTransform;\n}\n\n// ============================================================\n// 1. XOR + Base64(兼容 v1.0,作为默认简易实现)\n// ============================================================\n\nfunction xorBase64(input: string, key: string): string {\n const k = key || 'default';\n let out = '';\n for (let i = 0; i < input.length; i++) {\n out += String.fromCharCode(input.charCodeAt(i) ^ k.charCodeAt(i % k.length));\n }\n if (typeof btoa !== 'undefined') return btoa(out);\n return Buffer.from(out, 'binary').toString('base64');\n}\n\nexport function defaultEncryptor(key: string): EncryptFn {\n return (data) => xorBase64(data, key);\n}\n\nexport function defaultDecryptor(key: string): DecryptFn {\n return (data) => {\n const bin = typeof atob !== 'undefined' ? atob(data) : Buffer.from(data, 'base64').toString('binary');\n let out = '';\n const k = key || 'default';\n for (let i = 0; i < bin.length; i++) {\n out += String.fromCharCode(bin.charCodeAt(i) ^ k.charCodeAt(i % k.length));\n }\n return out;\n };\n}\n\nexport { xorBase64 };\n\n// ============================================================\n// 2. AES-GCM(Web Crypto API;需要 https / localhost)\n// ============================================================\n\nconst ENC = new TextEncoder();\nconst DEC = new TextDecoder();\n\nfunction bytesToB64(bytes: Uint8Array): string {\n if (typeof btoa !== 'undefined') {\n let s = '';\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\n return btoa(s);\n }\n return Buffer.from(bytes).toString('base64');\n}\n\nfunction b64ToBytes(b64: string): Uint8Array {\n if (typeof atob !== 'undefined') {\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n }\n return new Uint8Array(Buffer.from(b64, 'base64'));\n}\n\nasync function importAesKey(rawKey: string): Promise<CryptoKey> {\n // 把字符串 key 哈希成 256-bit raw key\n const subtle = getSubtle();\n const hash = await subtle.digest('SHA-256', ENC.encode(rawKey));\n return subtle.importKey('raw', hash, { name: 'AES-GCM' }, false, ['encrypt', 'decrypt']);\n}\n\nfunction getSubtle(): SubtleCrypto {\n if (typeof globalThis !== 'undefined' && (globalThis as { crypto?: Crypto }).crypto?.subtle) {\n return (globalThis as { crypto: Crypto }).crypto.subtle;\n }\n // node 18+ 的 webcrypto\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { webcrypto } = require('crypto');\n (globalThis as { crypto: typeof webcrypto }).crypto = webcrypto;\n return webcrypto.subtle;\n } catch {\n throw new Error('[encrypt] Web Crypto API not available (need https/localhost or Node 18+)');\n }\n}\n\n/** AES-GCM 加密(同步 API 抛错;改用 Async 版本)\n * @deprecated Web Crypto API 是异步的,同步签名不现实;\n * 改用 aesGcmEncryptAsync + asyncSend helper,或预计算密文。\n */\nexport function aesGcmEncrypt(_rawKey: string): EncryptFn {\n return () => {\n throw new Error('[encrypt] Web Crypto subtle.encrypt is async-only; use aesGcmEncryptAsync and send via asyncSend()');\n };\n}\n\n/** AES-GCM 加密(异步版):返回 Promise<string> */\nexport function aesGcmEncryptAsync(rawKey: string): (data: string) => Promise<string> {\n let keyPromise: Promise<CryptoKey> | null = null;\n return async (data: string): Promise<string> => {\n if (!keyPromise) keyPromise = importAesKey(rawKey);\n const key = await keyPromise;\n const subtle = getSubtle();\n const iv = (globalThis as { crypto: Crypto }).crypto.getRandomValues(new Uint8Array(12));\n const cipher = new Uint8Array(\n await subtle.encrypt({ name: 'AES-GCM', iv }, key, ENC.encode(data)),\n );\n const out = new Uint8Array(iv.length + cipher.length);\n out.set(iv, 0);\n out.set(cipher, iv.length);\n return bytesToB64(out);\n };\n}\n\n/** AES-GCM 解密(异步版) */\nexport function aesGcmDecryptAsync(rawKey: string): (data: string) => Promise<string> {\n let keyPromise: Promise<CryptoKey> | null = null;\n return async (data: string): Promise<string> => {\n if (!keyPromise) keyPromise = importAesKey(rawKey);\n const key = await keyPromise;\n const subtle = getSubtle();\n const raw = b64ToBytes(data);\n const iv = raw.slice(0, 12);\n const cipher = raw.slice(12);\n const plain = await subtle.decrypt({ name: 'AES-GCM', iv }, key, cipher);\n return DEC.decode(plain);\n };\n}\n\n// ============================================================\n// 3. 插件\n// ============================================================\n\nexport function encryptor(opts: EncryptorOptions): Plugin {\n return {\n name: 'encryptor',\n install({ sdk, config }) {\n // 写入 config;tracker.sendEvent 会自动调用\n config.encryptor = opts.encrypt;\n config.decoder = opts.decrypt;\n // config.encryptEvent/decryptEvent 在 TrackerConfig 里是宽松的 Record<string,unknown> 函数\n const cfg = config as unknown as {\n encryptEvent?: EventTransform;\n decryptEvent?: EventTransform;\n };\n cfg.encryptEvent = opts.encryptEvent;\n cfg.decryptEvent = opts.decryptEvent;\n // 保留到 sdk 上,供调试 / 二次使用\n const ref = sdk as unknown as {\n __encryptor?: EncryptFn;\n __decoder?: DecryptFn;\n __encryptEvent?: EventTransform;\n __decryptEvent?: EventTransform;\n };\n ref.__encryptor = opts.encrypt;\n ref.__decoder = opts.decrypt;\n ref.__encryptEvent = opts.encryptEvent;\n ref.__decryptEvent = opts.decryptEvent;\n },\n uninstall(ctx) {\n if (!ctx) return;\n const { config, sdk } = ctx;\n delete config.encryptor;\n delete config.decoder;\n const cfg = config as unknown as {\n encryptEvent?: EventTransform;\n decryptEvent?: EventTransform;\n };\n delete cfg.encryptEvent;\n delete cfg.decryptEvent;\n const ref = sdk as unknown as Record<string, unknown>;\n delete ref.__encryptor;\n delete ref.__decoder;\n delete ref.__encryptEvent;\n delete ref.__decryptEvent;\n },\n };\n}\n\n/** 便捷工厂:XOR 配对 */\nexport function xorEncryptor(key: string): Plugin {\n return encryptor({ encrypt: defaultEncryptor(key), decrypt: defaultDecryptor(key) });\n}","/**\n * OpenTelemetry Bridge Plugin (v1.2.0)\n *\n * 把 SDK 事件转发到 OTel:\n * - track → otel tracer.startActiveSpan\n * - 用 @opentelemetry/api 作为可选 peer dependency\n * - 通过 dynamic import 兼容未安装 OTel 的场景\n * - 属性透传:event 类型 / properties → span attributes\n * - 支持自定义 mapper\n */\n\nimport type { Plugin, InstallContext } from '../../core/plugin.js';\nimport type { StageContext, StageInterceptor } from '../../core/stage.js';\n\nexport interface OtelBridgeOptions {\n /** tracer 名(默认 '@macroui/event-tracker') */\n tracerName?: string;\n /** span 名映射:(eventName) => spanName,默认 = eventName */\n spanName?: (event: string) => string;\n /** 属性过滤:返回 false 的属性不上报 */\n filterAttr?: (key: string, value: unknown) => boolean;\n /** 全局关闭 */\n enabled?: boolean;\n}\n\n/**\n * 尝试 dynamic import @opentelemetry/api\n * 成功返回 { trace, context },失败返回 null\n */\nasync function tryLoadOtel(): Promise<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n trace: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context: any;\n} | null> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mod = await (Function('return import(\"@opentelemetry/api\")')() as Promise<any>);\n if (mod && mod.trace && mod.context) return mod;\n return null;\n } catch {\n return null;\n }\n}\n\nexport function otelBridge(opts: OtelBridgeOptions = {}): Plugin {\n return {\n name: 'otel-bridge',\n async install({ stages }: InstallContext) {\n if (opts.enabled === false) return;\n const otel = await tryLoadOtel();\n if (!otel) {\n // eslint-disable-next-line no-console\n console.warn('[otel-bridge] @opentelemetry/api not found, plugin noop');\n return;\n }\n const tracer = otel.trace.getTracer(opts.tracerName || '@macroui/event-tracker');\n const spanName = opts.spanName || ((e: string) => e);\n const filter = opts.filterAttr || (() => true);\n\n const interceptor: StageInterceptor<unknown> = {\n name: 'otel-bridge',\n priority: 40,\n entry(ctx: StageContext<unknown>) {\n if (ctx.meta.stage !== 'sendDataStage') return ctx.data;\n const ev = ctx.data as { event?: string; properties?: Record<string, unknown>; type?: string };\n const eventName = ev.event || ev.type || 'event';\n const span = tracer.startSpan(spanName(eventName), {\n attributes: {\n 'et.event.name': eventName,\n 'et.event.type': ev.type || '',\n 'et.event.time': Date.now(),\n },\n });\n const props = ev.properties || {};\n for (const [k, v] of Object.entries(props)) {\n if (!filter(k, v)) continue;\n try {\n span.setAttribute(`et.${k}`, v as never);\n } catch {\n /* ignore */\n }\n }\n // span 立刻结束(事件级 trace)\n span.end();\n return ctx.data;\n },\n };\n stages.sendDataStage.register(interceptor);\n },\n };\n}","/**\n * OpenTelemetry Exporter (v1.3.0)\n *\n * - OTLP/HTTP + OTLP/gRPC 两种协议\n * - 把 EventTracker 事件 → OTel Span\n * - 不依赖 @opentelemetry/api(内部实现)\n * - 可独立 import:@macroui/event-tracker/plugin/otel-exporter\n */\n\nexport interface OtlpHttpOptions {\n endpoint: string; // 如 https://otel.example.com/v1/traces\n headers?: Record<string, string>;\n /** gzip */\n gzip?: boolean;\n /** timeout (ms) */\n timeoutMs?: number;\n}\n\nexport interface SpanData {\n name: string;\n kind?: 'SPAN_KIND_INTERNAL' | 'SPAN_KIND_CLIENT' | 'SPAN_KIND_SERVER';\n startTimeUnixNano: bigint | number;\n endTimeUnixNano: bigint | number;\n attributes: Array<{ key: string; value: { stringValue?: string; intValue?: number | bigint; boolValue?: boolean } }>;\n traceId: string;\n spanId: string;\n}\n\nexport interface OtelEvent {\n name: string;\n properties?: Record<string, unknown>;\n time: number;\n distinctId?: string;\n}\n\nfunction toHexId(num: number | bigint, len: number): string {\n const hex = BigInt(num).toString(16).padStart(len, '0');\n return hex.slice(-len);\n}\n\nfunction rand16(): string {\n const arr = new Uint8Array(8);\n crypto.getRandomValues(arr);\n let hex = '';\n for (const b of arr) hex += b.toString(16).padStart(2, '0');\n return hex;\n}\n\nfunction attrValue(v: unknown): { stringValue?: string; intValue?: number; boolValue?: boolean } {\n if (typeof v === 'string') return { stringValue: v };\n if (typeof v === 'number') return { intValue: Number.isFinite(v) ? v : 0 };\n if (typeof v === 'boolean') return { boolValue: v };\n return { stringValue: JSON.stringify(v) };\n}\n\nexport function eventToSpan(ev: OtelEvent): SpanData {\n const start = ev.time * 1_000_000; // ms → ns\n const end = (ev.time + 1) * 1_000_000; // 占 1ms\n const traceId = rand16() + rand16();\n const spanId = rand16();\n const attrs: SpanData['attributes'] = [\n { key: 'et.event.name', value: { stringValue: ev.name } },\n { key: 'et.event.time', value: { intValue: ev.time } },\n ];\n if (ev.distinctId) attrs.push({ key: 'enduser.id', value: { stringValue: ev.distinctId } });\n for (const [k, v] of Object.entries(ev.properties || {})) {\n attrs.push({ key: `et.${k}`, value: attrValue(v) });\n }\n return {\n name: ev.name,\n startTimeUnixNano: start,\n endTimeUnixNano: end,\n attributes: attrs,\n traceId,\n spanId,\n };\n}\n\nexport async function exportOtlpHttp(events: OtelEvent[], opts: OtlpHttpOptions): Promise<void> {\n const spans = events.map(eventToSpan);\n const body = {\n resourceSpans: [{\n resource: {\n attributes: [\n { key: 'service.name', value: { stringValue: 'event-tracker' } },\n { key: 'service.version', value: { stringValue: '1.3.0' } },\n ],\n },\n scopeSpans: [{\n scope: { name: '@macroui/event-tracker', version: '1.3.0' },\n spans: spans.map(s => ({\n ...s,\n startTimeUnixNano: String(s.startTimeUnixNano),\n endTimeUnixNano: String(s.endTimeUnixNano),\n traceId: s.traceId,\n spanId: s.spanId,\n })),\n }],\n }],\n };\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), opts.timeoutMs ?? 5000);\n try {\n const res = await fetch(opts.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(opts.headers || {}),\n },\n body: JSON.stringify(body),\n signal: ctrl.signal,\n });\n if (!res.ok) {\n throw new Error(`OTLP HTTP ${res.status}`);\n }\n } finally {\n clearTimeout(timer);\n }\n}\n\n/** OTel Exporter Plugin 形态 */\nexport interface OtelExporterOptions extends OtlpHttpOptions {\n /** 上报前过滤 */\n filter?: (ev: OtelEvent) => boolean;\n /** 批量上报:攒够 N 条 / T ms 触发 */\n batchSize?: number;\n batchIntervalMs?: number;\n}\n\nimport type { Plugin } from '../../core/plugin.js';\n\nexport function otelExporter(opts: OtelExporterOptions): Plugin {\n let buffer: OtelEvent[] = [];\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n async function flush() {\n if (!buffer.length) return;\n const take = buffer.splice(0, buffer.batchSize || 100);\n try {\n await exportOtlpHttp(take, opts);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn('[otelExporter] export failed:', e);\n }\n }\n\n function schedule() {\n if (timer) return;\n timer = setTimeout(() => {\n timer = null;\n void flush();\n }, opts.batchIntervalMs ?? 5000);\n }\n\n return {\n name: 'otel-exporter',\n install({ sdk }) {\n const orig = (sdk as unknown as { track: (e: string, p?: Record<string, unknown>) => void }).track;\n (sdk as unknown as { track: typeof orig }).track = function (event: string, properties?: Record<string, unknown>) {\n try {\n const ev: OtelEvent = {\n name: event,\n properties,\n time: Date.now(),\n distinctId: (sdk as unknown as { getDistinctId?: () => string }).getDistinctId?.(),\n };\n if (!opts.filter || opts.filter(ev)) {\n buffer.push(ev);\n if (buffer.length >= (opts.batchSize || 100)) {\n void flush();\n } else {\n schedule();\n }\n }\n } catch { /* ignore */ }\n return orig.call(this, event, properties);\n };\n },\n uninstall() {\n if (timer) clearTimeout(timer);\n timer = null;\n buffer = [];\n },\n };\n}","/**\n * A/B Test / 实验埋点 helper(v1.2.0)\n *\n * 提供:\n * - sdk.experiment(key, variants): 根据 variants 配置确定分组,sticky(localStorage)\n * - 每次 track 时自动注入 $experiment_key / $variant_id\n * - 支持曝光事件:exposure(key, variant)\n * - 不依赖外部实验平台 SDK\n */\n\nimport type { Plugin } from '../../core/plugin.js';\nimport type { StorageType } from '../../types/index.js';\n\nexport interface ExperimentVariant {\n /** 实验分组 id */\n id: string;\n /** 权重(数字,绝对值或 0-100 百分比) */\n weight?: number;\n /** 默认附加的 properties(会 merge 到事件 properties) */\n properties?: Record<string, unknown>;\n}\n\nexport interface ExperimentOptions {\n /** 自定义存储前缀 */\n storagePrefix?: string;\n /** 存储类型(默认 localStorage) */\n storage?: StorageType;\n}\n\nconst memoryFallback = new Map<string, string>();\n\nfunction getStored(key: string): string | null {\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n return window.localStorage.getItem(key);\n }\n } catch { /* ignore */ }\n return memoryFallback.get(key) ?? null;\n}\n\nfunction setStored(key: string, value: string): void {\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n window.localStorage.setItem(key, value);\n return;\n }\n } catch { /* ignore */ }\n memoryFallback.set(key, value);\n}\n\n/** 工具:hash 0-1(简单的字符串 hash) */\nfunction hash01(s: string): number {\n let h = 2166136261;\n for (let i = 0; i < s.length; i++) {\n h ^= s.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n // 转成 [0,1)\n return ((h >>> 0) % 1_000_000) / 1_000_000;\n}\n\nexport interface ExperimentContext {\n /** 拉取指定实验的分组(无配置返回 null) */\n variantOf: (key: string) => ExperimentVariant | null;\n /** 直接获取 variant id */\n variantIdOf: (key: string) => string | null;\n /** 上报曝光(一次会话只上报一次) */\n exposure: (key: string, properties?: Record<string, unknown>) => void;\n /** 强制设置(debug 用) */\n forceSet: (key: string, variantId: string) => void;\n /** 列出当前所有已分配 */\n list: () => Record<string, string>;\n}\n\n/**\n * 创建实验上下文(不依赖 SDK,可单独用)\n */\nexport function createExperiment(\n experiments: Record<string, ExperimentVariant[]>,\n opts: ExperimentOptions = {},\n): ExperimentContext {\n const prefix = opts.storagePrefix || '__et_exp_';\n const exposedKey = (k: string) => `${prefix}exp_${k}`;\n const variantKey = (k: string) => `${prefix}var_${k}`;\n\n function variantOf(key: string): ExperimentVariant | null {\n const variants = experiments[key];\n if (!variants || !variants.length) return null;\n // 已 sticky\n const stored = getStored(variantKey(key));\n if (stored) {\n const v = variants.find(x => x.id === stored);\n if (v) return v;\n }\n // 按权重分桶\n const totalW = variants.reduce((s, v) => s + (v.weight ?? 1), 0);\n const r = hash01(`${key}:${Math.random()}`) * totalW;\n let acc = 0;\n let chosen = variants[variants.length - 1];\n for (const v of variants) {\n acc += v.weight ?? 1;\n if (r <= acc) {\n chosen = v;\n break;\n }\n }\n setStored(variantKey(key), chosen.id);\n return chosen;\n }\n\n return {\n variantOf,\n variantIdOf: (k) => variantOf(k)?.id ?? null,\n exposure: (k, properties) => {\n if (typeof window === 'undefined') return;\n const expKey = exposedKey(k);\n const flag = getStored(expKey);\n if (flag) return; // 同一会话已曝光\n setStored(expKey, String(Date.now()));\n const v = variantOf(k);\n try {\n const sdk = (window as unknown as { eventTracker?: { track?: (e: string, p?: Record<string, unknown>) => void } }).eventTracker;\n sdk?.track?.('$ExperimentExposure', {\n $experiment_key: k,\n $variant_id: v?.id,\n $is_first_exposure: true,\n ...(properties || {}),\n });\n } catch { /* ignore */ }\n },\n forceSet: (k, vid) => setStored(variantKey(k), vid),\n list: () => {\n const out: Record<string, string> = {};\n for (const k of Object.keys(experiments)) {\n const v = variantOf(k);\n if (v) out[k] = v.id;\n }\n return out;\n },\n };\n}\n\n/** 插件形态:把 experiment 注入到事件 properties */\nexport function experiment(\n experiments: Record<string, ExperimentVariant[]>,\n opts: ExperimentOptions = {},\n): Plugin {\n const ctx = createExperiment(experiments, opts);\n return {\n name: 'experiment',\n install({ sdk, stages }) {\n (sdk as unknown as { experiment?: ExperimentContext }).experiment = ctx;\n stages.sendDataStage.register({\n name: 'experiment-inject',\n priority: 80,\n entry(stageCtx) {\n if (stageCtx.meta.stage !== 'sendDataStage') return stageCtx.data;\n const ev = stageCtx.data as { properties?: Record<string, unknown>; event?: string };\n const props = { ...(ev.properties || {}) };\n // 对每个实验查询分组并注入(只对第一个匹配 key 做强制注入,其余按需)\n for (const [key, v] of Object.entries(experiments)) {\n const variant = ctx.variantOf(key);\n if (!variant) continue;\n props[`$exp__${key}`] = variant.id;\n // 用户自定义 variant properties 合并\n if (variant.properties) Object.assign(props, variant.properties);\n }\n return { ...ev, properties: props };\n },\n });\n },\n };\n}","/**\n * Predictive Batching(v1.2.0)\n *\n * - 监听 user activity(click/scroll/keypress/mousemove 节流)\n * - 高活动期:缩短 batch flush 间隔\n * - 低活动期:拉长间隔,省电 / 省流量\n * - 通过 SDK config.batch_send.dynamic_interval 启用\n *\n * 不属于 SDK 强耦合:作为可选插件\n */\n\nimport type { Plugin } from '../../core/plugin.js';\n\nexport interface PredictiveBatchOptions {\n /** 最小间隔(活动期) */\n minInterval?: number;\n /** 最大间隔(静默期) */\n maxInterval?: number;\n /** 活动统计窗口(ms) */\n windowMs?: number;\n /** 活动阈值(窗口内事件 > 此数视为活动期) */\n activityThreshold?: number;\n /** 是否监听这些事件类型 */\n events?: ('click' | 'scroll' | 'keypress' | 'mousemove' | 'touchstart')[];\n}\n\n/**\n * 不修改 SDK 内部,而是提供一个工具函数 getInterval(opts)\n * 业务侧在 BatchSender.flush interval 决策时调用\n */\nexport function makeIntervalPredictor(opts: PredictiveBatchOptions = {}): () => number {\n const min = opts.minInterval ?? 1000;\n const max = opts.maxInterval ?? 30000;\n const winMs = opts.windowMs ?? 5000;\n const threshold = opts.activityThreshold ?? 5;\n const events = opts.events ?? ['click', 'scroll', 'keypress'];\n const counts: number[] = [];\n\n if (typeof window !== 'undefined') {\n const handler = () => {\n const now = Date.now();\n counts.push(now);\n while (counts.length && now - counts[0] > winMs) counts.shift();\n };\n for (const e of events) window.addEventListener(e, handler, { passive: true });\n }\n\n return () => {\n if (counts.length > threshold) return min;\n if (counts.length > 0) return Math.round(min + (max - min) * (1 - counts.length / threshold));\n return max;\n };\n}\n\nexport function predictiveBatcher(opts: PredictiveBatchOptions = {}): Plugin {\n const predict = makeIntervalPredictor(opts);\n return {\n name: 'predictive-batcher',\n install({ config }) {\n // 把 dynamic_interval 计算器挂到 config(BatchSender 可选读取)\n (config as unknown as { batch_send_predict?: () => number }).batch_send_predict = predict;\n },\n };\n}","/**\n * PII Detection Plugin (v1.3.0)\n *\n * 在 sendDataStage 拦截所有事件 properties,扫描 PII 并做脱敏\n */\n\nimport type { Plugin } from '../../core/plugin.js';\nimport type { StageContext, StageInterceptor } from '../../core/stage.js';\nimport { PiiDetector } from '../../core/pii.js';\nimport type { PiiOptions } from '../../core/pii.js';\n\nexport function piiDetector(opts: PiiOptions = {}): Plugin {\n const detector = new PiiDetector(opts);\n let piiHits = 0;\n\n const interceptor: StageInterceptor<unknown> = {\n name: 'pii-detector',\n priority: 25, // 在加密 / IDB 之前\n entry(ctx: StageContext<unknown>) {\n if (ctx.meta.stage !== 'sendDataStage') return ctx.data;\n if (opts.enabled === false) return ctx.data;\n const ev = ctx.data as { properties?: Record<string, unknown> };\n const props = ev.properties || {};\n const { properties, hits } = detector.scanProperties(props);\n piiHits += hits;\n return { ...ev, properties };\n },\n };\n\n return {\n name: 'pii-detector',\n install({ stages }) {\n stages.sendDataStage.register(interceptor);\n },\n uninstall() {\n piiHits = 0;\n },\n /** 内部用:获取累计命中数(测试 / debug) */\n __getHits: () => piiHits,\n } as Plugin & { __getHits: () => number };\n}","/**\n * Privacy & Consent Plugin (v1.3.0)\n *\n * - 接入 PrivacyManager 到 SDK\n * - sendDataStage 拦截:\n * 1. 未授权 scope → drop\n * 2. 按 privacy_mode 脱敏\n * - 在 sdk 上挂 sdk.privacy / sdk.consent API\n */\n\nimport type { Plugin, InstallContext } from '../../core/plugin.js';\nimport type { StageContext, StageInterceptor } from '../../core/stage.js';\nimport { PrivacyManager } from '../../core/privacy.js';\nimport type { ConsentScope, PrivacyMode } from '../../core/privacy.js';\n\nexport interface PrivacyOptions {\n mode?: PrivacyMode;\n /** 缺哪些 scope 时不 track?默认 ['analytics'] */\n requireScopes?: ConsentScope[];\n /** 是否在 init 时打印授权 banner */\n showBanner?: boolean;\n}\n\nexport function privacy(opts: PrivacyOptions = {}): Plugin {\n let manager: PrivacyManager | null = null;\n let requireScopes = opts.requireScopes || ['analytics'];\n let droppedCount = 0;\n\n return {\n name: 'privacy',\n install({ sdk, stages, logger }: InstallContext) {\n manager = new PrivacyManager(logger);\n if (opts.mode) manager.setMode(opts.mode);\n\n // 暴露给 SDK\n (sdk as unknown as {\n privacy: {\n setMode: (m: PrivacyMode) => void;\n getMode: () => PrivacyMode;\n grant: (s: ConsentScope) => void;\n revoke: (s: ConsentScope) => void;\n has: (s: ConsentScope) => boolean;\n onChange: (fn: (s: unknown) => void) => () => void;\n dropped: () => number;\n };\n }).privacy = {\n setMode: (m) => manager!.setMode(m),\n getMode: () => manager!.getMode(),\n grant: (s) => manager!.grant(s),\n revoke: (s) => manager!.revoke(s),\n has: (s) => manager!.has(s),\n onChange: (fn) => manager!.subscribe(fn),\n dropped: () => droppedCount,\n };\n\n stages.sendDataStage.register({\n name: 'privacy-gate',\n priority: 30,\n entry(ctx: StageContext<unknown>) {\n if (ctx.meta.stage !== 'sendDataStage') return ctx.data;\n const ev = ctx.data as { properties?: Record<string, unknown> };\n // 1. consent gate\n const scope: ConsentScope = (ev.properties?.$consent_scope as ConsentScope) || 'analytics';\n if (!manager!.has(scope)) {\n droppedCount++;\n return undefined; // drop\n }\n // 2. privacy 脱敏\n const mode = manager!.getMode();\n if (mode !== 'off' && ev.properties) {\n const newProps = manager!.applyPrivacy(ev.properties, mode);\n return { ...ev, properties: newProps };\n }\n return ctx.data;\n },\n });\n },\n uninstall() {\n manager = null;\n droppedCount = 0;\n },\n };\n}","/**\n * Cross-domain Stitching(v1.3.0)\n *\n * - 在 cookie 写入 _sa_link_id(同根域跨子域共享)\n * - 客户端初始化时检测:当前 distinct_id 是否与 _sa_link_id 绑定\n * - 未登录用户跨子域跳转时,session 连续\n * - 不依赖登录态\n */\n\nimport type { Plugin, InstallContext } from '../../core/plugin.js';\n\nexport interface CrossDomainOptions {\n /** cookie 名,默认 _sa_link_id */\n cookieName?: string;\n /** 共享域(如 .example.com),自动加 . */\n domain?: string;\n /** 过期天数,默认 365 */\n expiresDays?: number;\n /** 是否把 _sa_link_id 注入到 register / event properties */\n injectProperty?: boolean;\n}\n\nfunction readCookie(name: string): string | null {\n if (typeof document === 'undefined') return null;\n const target = encodeURIComponent(name) + '=';\n const parts = document.cookie.split(';');\n for (const raw of parts) {\n let c = raw;\n while (c.charAt(0) === ' ') c = c.substring(1);\n if (c.indexOf(target) === 0) {\n return decodeURIComponent(c.substring(target.length));\n }\n }\n return null;\n}\n\nfunction writeCookie(name: string, value: string, domain?: string, days = 365): void {\n if (typeof document === 'undefined') return;\n const exp = new Date();\n exp.setTime(exp.getTime() + days * 24 * 60 * 60 * 1000);\n let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}; expires=${exp.toUTCString()}; path=/`;\n if (domain) {\n cookie += `; domain=${domain}`;\n }\n try { document.cookie = cookie; } catch { /* ignore */ }\n}\n\nexport function crossDomainStitching(opts: CrossDomainOptions = {}): Plugin {\n const cookieName = opts.cookieName || '_sa_link_id';\n const domain = opts.domain?.startsWith('.') ? opts.domain : opts.domain ? `.${opts.domain}` : undefined;\n const expiresDays = opts.expiresDays ?? 365;\n const inject = opts.injectProperty !== false;\n\n return {\n name: 'cross-domain-stitching',\n install({ sdk, config }: InstallContext) {\n let linkId = readCookie(cookieName);\n if (!linkId) {\n // 生成新 link_id\n const c = (sdk as unknown as { uuid?: () => string }).uuid;\n linkId = typeof c === 'function' ? c() : `link_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n writeCookie(cookieName, linkId, domain, expiresDays);\n }\n // 暴露\n (sdk as unknown as { getLinkId?: () => string }).getLinkId = () => linkId!;\n (config as unknown as { _sa_link_id?: string })._sa_link_id = linkId;\n if (inject) {\n sdk.register({ _sa_link_id: linkId! });\n }\n },\n };\n}","/**\n * Schema Registry 校验(v1.3.0)\n *\n * - 内置默认 schemas:pageview / track / profile_set\n * - 支持自定义 schemas:schema({eventName, jsonSchema})\n * - 远程 schema URL:服务端可下发(带 ETag 缓存)\n * - 校验失败:默认 warn + 仍上报(可配置 drop)\n * - 动态 import ajv,未安装时 noop\n */\n\nimport type { Plugin } from '../../core/plugin.js';\nimport type { StageContext, StageInterceptor } from '../../core/stage.js';\n\nexport interface SchemaEntry {\n /** 事件名 */\n event: string;\n /** JSON Schema(Draft-07 兼容) */\n schema: Record<string, unknown>;\n}\n\nexport interface SchemaOptions {\n /** 自定义 schemas */\n schemas?: SchemaEntry[];\n /** 远程 schema URL(HTTP 拉取,带 ETag) */\n remoteUrl?: string;\n /** 校验失败处理 */\n onInvalid?: 'warn' | 'drop' | 'pass';\n /** 远程 schema TTL(ms),默认 1h */\n remoteTtlMs?: number;\n}\n\ninterface AjvLike {\n compile: (schema: object) => (data: unknown) => boolean;\n errors?: unknown[];\n}\n\nasync function tryLoadAjv(): Promise<AjvLike | null> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mod = await (Function('return import(\"ajv\")')() as Promise<any>);\n if (mod && mod.default) {\n const Ajv = mod.default;\n const ajv = new Ajv({ allErrors: true, strict: false });\n return ajv as unknown as AjvLike;\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport class SchemaRegistry {\n private ajv: AjvLike | null = null;\n private entries = new Map<string, (data: unknown) => boolean>();\n private remoteCache: { url: string; etag?: string; schemas: SchemaEntry[]; ts: number } | null = null;\n\n constructor(private opts: SchemaOptions) {}\n\n async init(): Promise<void> {\n this.ajv = await tryLoadAjv();\n if (!this.ajv) return;\n for (const e of this.opts.schemas || []) this.add(e);\n if (this.opts.remoteUrl) await this.fetchRemote();\n }\n\n add(entry: SchemaEntry): void {\n if (!this.ajv) return;\n const validate = this.ajv.compile(entry.schema);\n this.entries.set(entry.event, validate);\n }\n\n private async fetchRemote(): Promise<void> {\n if (!this.opts.remoteUrl) return;\n const ttl = this.opts.remoteTtlMs ?? 3600_000;\n if (this.remoteCache && Date.now() - this.remoteCache.ts < ttl) {\n for (const e of this.remoteCache.schemas) this.add(e);\n return;\n }\n try {\n const headers: Record<string, string> = {};\n if (this.remoteCache?.etag) headers['If-None-Match'] = this.remoteCache.etag;\n const r = await fetch(this.opts.remoteUrl, { headers });\n if (r.status === 304 && this.remoteCache) {\n this.remoteCache.ts = Date.now();\n for (const e of this.remoteCache.schemas) this.add(e);\n return;\n }\n if (!r.ok) return;\n const etag = r.headers.get('ETag') || undefined;\n const data = await r.json();\n const list: SchemaEntry[] = Array.isArray(data) ? data : (data.schemas || []);\n this.remoteCache = { url: this.opts.remoteUrl, etag, schemas: list, ts: Date.now() };\n for (const e of list) this.add(e);\n } catch {\n /* ignore */\n }\n }\n\n validate(event: string, data: unknown): { ok: boolean; errors?: unknown[] } {\n const fn = this.entries.get(event);\n if (!fn) return { ok: true };\n const ok = fn(data);\n return { ok, errors: ok ? undefined : (this.ajv?.errors || []) };\n }\n}\n\nexport function schemaRegistry(opts: SchemaOptions = {}): Plugin {\n let registry: SchemaRegistry | null = null;\n\n return {\n name: 'schema-registry',\n async install({ stages, logger }) {\n registry = new SchemaRegistry(opts);\n await registry.init();\n const onInvalid = opts.onInvalid || 'warn';\n\n const interceptor: StageInterceptor<unknown> = {\n name: 'schema-registry',\n priority: 20,\n entry(ctx: StageContext<unknown>) {\n if (ctx.meta.stage !== 'sendDataStage') return ctx.data;\n if (!registry) return ctx.data;\n const ev = ctx.data as { event?: string; type?: string; properties?: Record<string, unknown> };\n const eventName = ev.event || ev.type || '';\n const { ok, errors } = registry.validate(eventName, ev.properties || {});\n if (!ok) {\n if (onInvalid === 'drop') return undefined;\n if (onInvalid === 'warn') logger.warn?.(`[Schema] invalid event '${eventName}':`, errors);\n // pass 模式:忽略错误继续上报\n }\n return ctx.data;\n },\n };\n stages.sendDataStage.register(interceptor);\n },\n uninstall() {\n registry = null;\n },\n };\n}","/**\n * Rate Limiter(v1.3.0)\n *\n * - 三档限流:\n * 1. 全局(global):每秒最多 N 条\n * 2. 用户级(user):每用户每秒最多 M 条\n * 3. per-event(event):每个事件名每秒最多 K 条\n * - 超出 drop + 触发 onDrop 回调\n * - 用滑动窗口(100ms bucket)实现\n */\n\nexport interface RateLimitRule {\n /** 时间窗口(ms) */\n windowMs: number;\n /** 窗口内最大条数 */\n max: number;\n}\n\nexport interface RateLimiterOptions {\n global?: RateLimitRule;\n user?: RateLimitRule;\n perEvent?: RateLimitRule;\n /** 触发 drop 回调 */\n onDrop?: (info: { scope: 'global' | 'user' | 'event'; key?: string; event?: string }) => void;\n}\n\ninterface Bucket {\n ts: number;\n count: number;\n}\n\nexport class RateLimiter {\n private globalBuckets: Bucket[] = [];\n private userBuckets = new Map<string, Bucket[]>();\n private eventBuckets = new Map<string, Bucket[]>();\n\n constructor(private opts: RateLimiterOptions) {}\n\n /** 是否允许 */\n allow(event: string, userId?: string): boolean {\n const now = Date.now();\n if (this.opts.global && !this.checkBucket(this.globalBuckets, this.opts.global, now)) {\n this.opts.onDrop?.({ scope: 'global' });\n return false;\n }\n if (this.opts.user && userId) {\n let arr = this.userBuckets.get(userId);\n if (!arr) { arr = []; this.userBuckets.set(userId, arr); }\n if (!this.checkBucket(arr, this.opts.user, now)) {\n this.opts.onDrop?.({ scope: 'user', key: userId });\n return false;\n }\n }\n if (this.opts.perEvent) {\n let arr = this.eventBuckets.get(event);\n if (!arr) { arr = []; this.eventBuckets.set(event, arr); }\n if (!this.checkBucket(arr, this.opts.perEvent, now)) {\n this.opts.onDrop?.({ scope: 'event', event });\n return false;\n }\n }\n return true;\n }\n\n private checkBucket(buckets: Bucket[], rule: RateLimitRule, now: number): boolean {\n const cutoff = now - rule.windowMs;\n while (buckets.length && buckets[0].ts < cutoff) buckets.shift();\n const current = buckets.reduce((s, b) => s + b.count, 0);\n if (current >= rule.max) return false;\n buckets.push({ ts: now, count: 1 });\n return true;\n }\n\n /** 清空所有 bucket */\n reset(): void {\n this.globalBuckets = [];\n this.userBuckets.clear();\n this.eventBuckets.clear();\n }\n}\n\nimport type { Plugin, InstallContext } from '../../core/plugin.js';\nimport type { StageContext, StageInterceptor } from '../../core/stage.js';\n\nexport function rateLimiter(opts: RateLimiterOptions): Plugin {\n let limiter: RateLimiter | null = null;\n\n return {\n name: 'rate-limiter',\n install({ stages, sdk }: InstallContext) {\n limiter = new RateLimiter(opts);\n const interceptor: StageInterceptor<unknown> = {\n name: 'rate-limiter',\n priority: 15,\n entry(ctx: StageContext<unknown>) {\n if (ctx.meta.stage !== 'sendDataStage') return ctx.data;\n const ev = ctx.data as { event?: string; type?: string; distinct_id?: string };\n const event = ev.event || ev.type || '';\n const userId = ev.distinct_id || (sdk as unknown as { getDistinctId?: () => string }).getDistinctId?.();\n if (!limiter!.allow(event, userId)) {\n return undefined; // drop\n }\n return ctx.data;\n },\n };\n stages.sendDataStage.register(interceptor);\n },\n uninstall() {\n limiter?.reset();\n limiter = null;\n },\n };\n}","/**\n * CSP Nonce 支持(v1.3.0)\n *\n * - 从 meta[name=csp-nonce] 或 config.csp_nonce 读 nonce\n * - 在 sendDataStage 给所有事件加 $csp_nonce 属性\n * - 业务侧可以用它把数据通过合法 CSP 通道回传到自家 server\n */\n\nimport type { Plugin, InstallContext } from '../../core/plugin.js';\n\nexport interface CspOptions {\n /** 直接传 nonce 字符串 */\n nonce?: string;\n /** 从 meta[name=csp-nonce] 读 */\n metaSelector?: string;\n /** 是否自动注册为 event property */\n injectProperty?: boolean;\n}\n\nfunction readMetaNonce(selector: string): string | null {\n if (typeof document === 'undefined') return null;\n const el = document.querySelector(selector);\n return el?.getAttribute('nonce') || null;\n}\n\nexport function cspCompliant(opts: CspOptions = {}): Plugin {\n return {\n name: 'csp-compliant',\n install({ sdk, config }: InstallContext) {\n const nonce = opts.nonce\n || (opts.metaSelector && readMetaNonce(opts.metaSelector))\n || (config as unknown as { csp_nonce?: string }).csp_nonce\n || null;\n if (!nonce) return;\n (config as unknown as { csp_nonce?: string }).csp_nonce = nonce;\n if (opts.injectProperty !== false) {\n sdk.register({ $csp_nonce: nonce });\n }\n // 暴露获取方法\n (sdk as unknown as { getCspNonce?: () => string | null }).getCspNonce = () => nonce;\n },\n };\n}","/**\n * Audience Sync(v1.3.0)\n *\n * - 用户登录/属性变更后,把 distinct_id 同步到外部平台(Mailchimp / Braze / 自定义 webhook)\n * - 订阅式:sdk.on('identify', cb)\n * - 支持多 destination\n */\n\nexport interface AudienceDestination {\n name: string;\n endpoint: string;\n method?: 'POST' | 'PUT';\n headers?: Record<string, string>;\n /** 转换器:把 distinctId + props 转成目标平台格式 */\n transform?: (data: { distinct_id: string; properties: Record<string, unknown>; traits?: Record<string, unknown> }) => unknown;\n}\n\nexport interface AudienceSyncOptions {\n destinations: AudienceDestination[];\n /** 触发条件:'identify' | 'login' | 'all' */\n triggerOn?: 'identify' | 'login' | 'all';\n /** 失败重试次数 */\n maxRetry?: number;\n}\n\nexport interface AudienceContext {\n subscribe(fn: (data: { distinct_id: string; properties?: Record<string, unknown>; traits?: Record<string, unknown>; trigger: string }) => void): () => void;\n flush(): Promise<void>;\n queueSize(): number;\n}\n\nexport class AudienceSync {\n private listeners = new Set<(data: { distinct_id: string; properties?: Record<string, unknown>; traits?: Record<string, unknown>; trigger: string }) => void>();\n private pending: Array<{ distinct_id: string; properties?: Record<string, unknown>; traits?: Record<string, unknown>; trigger: string }> = [];\n\n constructor(public options: AudienceSyncOptions) {}\n\n subscribe(fn: (data: { distinct_id: string; properties?: Record<string, unknown>; traits?: Record<string, unknown>; trigger: string }) => void): () => void {\n this.listeners.add(fn);\n return () => this.listeners.delete(fn);\n }\n\n emit(data: { distinct_id: string; properties?: Record<string, unknown>; traits?: Record<string, unknown>; trigger: string }): void {\n for (const l of this.listeners) {\n try { l(data); } catch { /* ignore */ }\n }\n }\n\n /** 缓存到队列(用于晚点批量) */\n enqueue(data: { distinct_id: string; properties?: Record<string, unknown>; traits?: Record<string, unknown>; trigger: string }): void {\n this.pending.push(data);\n }\n\n queueSize(): number { return this.pending.length; }\n\n /** 手动 flush:把队列里的事件推到所有 destination */\n async flush(): Promise<void> {\n if (!this.pending.length) return;\n const take = this.pending.splice(0);\n for (const d of this.options.destinations) {\n for (const ev of take) {\n await this.send(d, ev).catch(() => { /* ignore */ });\n }\n }\n }\n\n private async send(d: AudienceDestination, data: { distinct_id: string; properties?: Record<string, unknown>; traits?: Record<string, unknown>; trigger: string }): Promise<void> {\n const payload = d.transform\n ? d.transform(data)\n : data;\n const max = this.options.maxRetry ?? 2;\n for (let i = 0; i <= max; i++) {\n try {\n const r = await fetch(d.endpoint, {\n method: d.method || 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(d.headers || {}),\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n if (r.ok) return;\n } catch { /* ignore retry */ }\n }\n }\n}\n\nimport type { Plugin, InstallContext } from '../../core/plugin.js';\n\nexport function audienceSync(options: AudienceSyncOptions): Plugin {\n let sync: AudienceSync | null = null;\n\n return {\n name: 'audience-sync',\n install({ sdk }: InstallContext) {\n sync = new AudienceSync(options);\n (sdk as unknown as { audience?: AudienceContext }).audience = sync;\n\n const origIdentify = (sdk as unknown as { identify?: (id: string, save?: boolean) => unknown }).identify?.bind(sdk);\n if (typeof origIdentify === 'function') {\n (sdk as unknown as { identify: typeof origIdentify }).identify = ((id: string, save?: boolean) => {\n const r = origIdentify(id, save);\n sync!.emit({ distinct_id: id, trigger: 'identify' });\n return r;\n }) as typeof origIdentify;\n }\n const origLogin = (sdk as unknown as { login?: (id: string) => unknown }).login?.bind(sdk);\n if (typeof origLogin === 'function') {\n (sdk as unknown as { login: typeof origLogin }).login = ((id: string) => {\n const r = origLogin(id);\n sync!.emit({ distinct_id: id, trigger: 'login' });\n return r;\n }) as typeof origLogin;\n }\n },\n uninstall() {\n sync = null;\n },\n };\n}","/**\n * 主入口:构造一个默认 SDK 实例(兼容神策风格的全局对象)\n *\n * 暴露:\n * - default export: 已经 attach 了所有 API 的全局单例\n * - EventTracker: 类,可以多实例\n * - named exports: 所有插件 / 工具\n */\n\nimport { EventTracker } from './core/tracker.js';\nimport { attachRegisterApi } from './core/register-api.js';\nimport { attachIdentityApi } from './core/identity-api.js';\nimport { attachProfileApi } from './core/profile-api.js';\nimport { attachTrackApi } from './core/track-api.js';\nimport { IdentityManager } from './core/identity.js';\nimport { PresetPropertyBuilder } from './presets/preset-properties.js';\nimport { PluginRegistry } from './core/plugin.js';\nimport { RetryPolicy } from './core/retry-policy.js';\nimport { FailedQueue } from './core/failed-queue.js';\nimport { InstanceChannel } from './core/instance-channel.js';\nimport { Logger } from './core/logger.js';\nimport { SendPipeline } from './core/send-pipeline.js';\nimport { PresetEvent, PresetProperty, LIB_NAME, LIB_VERSION } from './types/constants.js';\nimport type { TrackerConfig, EventData, SendType, StorageType, Callback } from './types/index.js';\n\n// 默认实例(神策风格的 window.eventTracker)\n// - 所有方法初始化为 noop(见 EventTracker 上的 default impl)\n// - init() 后被 attachXxxApi 替换\nconst tracker = new EventTracker();\n\nif (typeof window !== 'undefined') {\n (window as unknown as { eventTracker: EventTracker }).eventTracker = tracker;\n}\n\nexport default tracker;\nexport { tracker };\nexport { EventTracker };\n\n// 工厂 + 实例切换\nexport { initPara, registerAppid, listInstances } from './core/tracker.js';\n\n// 类型导出\nexport type {\n TrackerConfig,\n BaseConfig,\n SendConfig,\n StorageConfig,\n IdentityConfig,\n EncryptConfig,\n PresetConfig,\n DebugConfig,\n ObservabilityConfig,\n JsAppConfig,\n ClientConfig,\n DebugSenderConfig,\n EventData,\n SendType,\n StorageType,\n Callback,\n LogLevel,\n JSONValue,\n JSONObject,\n JSONArray,\n PropertyMap,\n ServerURL,\n StageName,\n HookName,\n} from './types/index.js';\n\nexport type { Plugin, InstallContext } from './core/plugin.js';\nexport type { StageInterceptor, StageContext, StageChain } from './core/stage.js';\nexport type { Lifecycle, HookFn } from './core/lifecycle.js';\n\n// 工具 / 错误\nexport {\n SDKError,\n InitError,\n SendError,\n EncryptError,\n IdentityError,\n StorageError,\n PluginError,\n ConfigError,\n isSDKError,\n} from './core/errors.js';\n\nexport {\n createSignedIdentity,\n hmacSignAsync,\n hmacVerifyAsync,\n} from './core/signed-identity.js';\nexport type { SignedIdentity } from './core/signed-identity.js';\n\n// 内部组件(高级用法)\nexport { SendPipeline } from './core/send-pipeline.js';\nexport { PluginRegistry } from './core/plugin.js';\nexport { RetryPolicy } from './core/retry-policy.js';\nexport { FailedQueue } from './core/failed-queue.js';\nexport { InstanceChannel } from './core/instance-channel.js';\nexport { Logger } from './core/logger.js';\nexport { IdentityManager } from './core/identity.js';\nexport { PresetPropertyBuilder } from './presets/preset-properties.js';\nexport { StatsCollector, GLOBAL_STATS } from './core/stats.js';\nexport type { StatsSnapshot, SenderStat } from './core/stats.js';\nexport { detectPlatform, platformStore, isPlatformSenderEnabled } from './core/platform.js';\nexport type { Platform } from './core/platform.js';\nexport { getWasmCrypto, fastHash, setWasmCrypto } from './core/wasm-crypto.js';\nexport type { WasmCrypto } from './core/wasm-crypto.js';\nexport { hmacSign, hmacSignSync, hmacVerify, signPayload } from './core/payload-signer.js';\nexport type { SignOptions } from './core/payload-signer.js';\nexport { PiiDetector, fnv1a, maskValue, DEFAULT_PATTERNS } from './core/pii.js';\nexport type { PiiOptions, PiiAction, PiiPattern } from './core/pii.js';\nexport { PrivacyManager } from './core/privacy.js';\nexport type { PrivacyMode, ConsentScope, PrivacyState } from './core/privacy.js';\nexport { createReplay } from './core/replay.js';\nexport type { ReplayEvent, ReplayOptions, ReplayHandle } from './core/replay.js';\nexport { createIdleScheduler, whenIdle, globalIdleScheduler } from './core/idle.js';\nexport type { IdleScheduler, IdleCallback } from './core/idle.js';\nexport { OffscreenSender } from './send/offscreen-sender.js';\nexport { WebSocketSender } from './send/ws-sender.js';\nexport type { WebSocketSenderOptions } from './send/ws-sender.js';\nexport { initEdge, trackOnce } from './edge/index.js';\nexport type { EdgeTracker, EdgeInitOptions, EdgeEnv } from './edge/index.js';\n\n// 预设常量\nexport { PresetEvent, PresetProperty, LIB_NAME, LIB_VERSION };\n\n// 插件\nexport { autoTrack } from './plugins/auto-track/index.js';\nexport { pageLoad } from './plugins/pageload/index.js';\nexport { pageLeave } from './plugins/pageleave/index.js';\nexport { exposure } from './plugins/exposure/index.js';\nexport { sessionEvent } from './plugins/session-event/index.js';\nexport { debugSender } from './plugins/debug-sender/index.js';\nexport { indexedDBSender } from './plugins/indexeddb-sender/index.js';\nexport { webviewBridge } from './plugins/webview-bridge/index.js';\nexport type { BridgeAPI, WebViewBridgeOptions } from './plugins/webview-bridge/index.js';\nexport { encryptor, xorEncryptor, defaultEncryptor, defaultDecryptor, aesGcmEncryptAsync, aesGcmDecryptAsync } from './plugins/encrypt/index.js';\nexport { otelBridge } from './plugins/otel-bridge/index.js';\nexport { otelExporter } from './plugins/otel-exporter/index.js';\nexport type { OtlpHttpOptions, SpanData, OtelEvent, OtelExporterOptions } from './plugins/otel-exporter/index.js';\nexport { experiment, createExperiment } from './plugins/experiment/index.js';\nexport type { ExperimentVariant, ExperimentOptions, ExperimentContext } from './plugins/experiment/index.js';\nexport { predictiveBatcher, makeIntervalPredictor } from './plugins/predictive-batcher/index.js';\nexport { piiDetector } from './plugins/pii-detector/index.js';\nexport { privacy } from './plugins/privacy/index.js';\nexport type { PrivacyOptions } from './plugins/privacy/index.js';\nexport { crossDomainStitching } from './plugins/cross-domain/index.js';\nexport type { CrossDomainOptions } from './plugins/cross-domain/index.js';\nexport { schemaRegistry, SchemaRegistry } from './plugins/schema-registry/index.js';\nexport type { SchemaEntry, SchemaOptions } from './plugins/schema-registry/index.js';\nexport { rateLimiter, RateLimiter } from './plugins/rate-limiter/index.js';\nexport type { RateLimiterOptions, RateLimitRule } from './plugins/rate-limiter/index.js';\nexport { cspCompliant } from './plugins/csp-compliant/index.js';\nexport type { CspOptions } from './plugins/csp-compliant/index.js';\nexport { audienceSync, AudienceSync } from './plugins/audience-sync/index.js';\nexport type { AudienceDestination, AudienceSyncOptions, AudienceContext } from './plugins/audience-sync/index.js';"],"names":["QUEUE_KEY","DEFAULT_MAX","getSubtle","ENC","bytesToB64","b64ToBytes"],"mappings":"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","x_google_ignoreList":[0]}