@amplitude/session-replay-browser 1.25.2-frustrationanalytics.0 → 1.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"session-replay-min.js","sources":["../../../../node_modules/tslib/tslib.es6.js","../../../analytics-core/lib/esm/types/constants.js","../../../analytics-core/lib/esm/types/status.js","../../../analytics-core/lib/esm/global-scope.js","../../../analytics-core/lib/esm/types/loglevel.js","../../../analytics-core/lib/esm/utils/return-wrapper.js","../../../analytics-core/lib/esm/logger.js","../../../analytics-core/lib/esm/config.js","../../../../node_modules/@amplitude/analytics-connector/dist/analytics-connector.esm.js","../../../analytics-core/lib/esm/types/server-zone.js","../../../analytics-core/lib/esm/transports/base.js","../../../analytics-core/lib/esm/transports/fetch.js","../../../../node_modules/@amplitude/rrweb-types/dist/rrweb-types.js","../../../analytics-remote-config/node_modules/@amplitude/analytics-types/lib/esm/server-zone.js","../../../analytics-remote-config/node_modules/@amplitude/analytics-types/lib/esm/status.js","../../../analytics-remote-config/node_modules/@amplitude/analytics-core/lib/esm/transports/base.js","../../../analytics-remote-config/lib/esm/remote-config.js","../../../analytics-remote-config/lib/esm/index.js","../../../../src/config/types.ts","../../../../src/constants.ts","../../../../src/helpers.ts","../../../../src/utils/get-input-type.ts","../../../../src/logger.ts","../../../../src/config/local-config.ts","../../../../src/config/joined-config.ts","../../../../src/messages.ts","../../../../src/version.ts","../../../../src/track-destination.ts","../../../../node_modules/idb/build/index.js","../../../../src/events/base-events-store.ts","../../../../src/events/legacy-idb-types.ts","../../../../src/events/events-idb-store.ts","../../../../src/events/events-memory-store.ts","../../../../src/events/events-manager.ts","../../../../src/events/multi-manager.ts","../../../../node_modules/@amplitude/rrweb-utils/dist/rrweb-utils.js","../../../../src/utils/rrweb.ts","../../../../src/libs/finder.ts","../../../../src/hooks/click.ts","../../../../src/beacon-transport.ts","../../../../src/hooks/scroll.ts","../../../../src/identifiers.ts","../../../../node_modules/@amplitude/rrweb-packer/dist/base-BrE4jft0.js","../../../../node_modules/@amplitude/rrweb-packer/dist/pack.js","../../../../src/events/event-compressor.ts","../../../../src/session-replay.ts","../../../analytics-core/lib/esm/analytics-connector.js"],"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","export var UNSET_VALUE = '-';\nexport var AMPLITUDE_PREFIX = 'AMP';\nexport var STORAGE_PREFIX = \"\".concat(AMPLITUDE_PREFIX, \"_unsent\");\nexport var AMPLITUDE_SERVER_URL = 'https://api2.amplitude.com/2/httpapi';\nexport var EU_AMPLITUDE_SERVER_URL = 'https://api.eu.amplitude.com/2/httpapi';\nexport var AMPLITUDE_BATCH_SERVER_URL = 'https://api2.amplitude.com/batch';\nexport var EU_AMPLITUDE_BATCH_SERVER_URL = 'https://api.eu.amplitude.com/batch';\n//# sourceMappingURL=constants.js.map","/** The status of an event. */\nexport var Status;\n(function (Status) {\n /** The status could not be determined. */\n Status[\"Unknown\"] = \"unknown\";\n /** The event was skipped due to configuration or callbacks. */\n Status[\"Skipped\"] = \"skipped\";\n /** The event was sent successfully. */\n Status[\"Success\"] = \"success\";\n /** A user or device in the payload is currently rate limited and should try again later. */\n Status[\"RateLimit\"] = \"rate_limit\";\n /** The sent payload was too large to be processed. */\n Status[\"PayloadTooLarge\"] = \"payload_too_large\";\n /** The event could not be processed. */\n Status[\"Invalid\"] = \"invalid\";\n /** A server-side error ocurred during submission. */\n Status[\"Failed\"] = \"failed\";\n /** a server or client side error occuring when a request takes too long and is cancelled */\n Status[\"Timeout\"] = \"Timeout\";\n /** NodeJS runtime environment error.. E.g. disconnected from network */\n Status[\"SystemError\"] = \"SystemError\";\n})(Status || (Status = {}));\n//# sourceMappingURL=status.js.map","/* eslint-disable no-restricted-globals */\n/* Only file allowed to access to globalThis, window, self */\nexport var getGlobalScope = function () {\n // This should only be used for integrations with Amplitude that are not running in a browser environment\n // We need to specify the name of the global variable as a string to prevent it from being minified\n var ampIntegrationContextName = 'ampIntegrationContext';\n if (typeof globalThis !== 'undefined' && typeof globalThis[ampIntegrationContextName] !== 'undefined') {\n return globalThis[ampIntegrationContextName];\n }\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n};\n//# sourceMappingURL=global-scope.js.map","export var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"None\"] = 0] = \"None\";\n LogLevel[LogLevel[\"Error\"] = 1] = \"Error\";\n LogLevel[LogLevel[\"Warn\"] = 2] = \"Warn\";\n LogLevel[LogLevel[\"Verbose\"] = 3] = \"Verbose\";\n LogLevel[LogLevel[\"Debug\"] = 4] = \"Debug\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=loglevel.js.map","export var returnWrapper = function (awaitable) { return ({\n promise: awaitable || Promise.resolve(),\n}); };\n//# sourceMappingURL=return-wrapper.js.map","import { LogLevel } from './types/loglevel';\nvar PREFIX = 'Amplitude Logger ';\nvar Logger = /** @class */ (function () {\n function Logger() {\n this.logLevel = LogLevel.None;\n }\n Logger.prototype.disable = function () {\n this.logLevel = LogLevel.None;\n };\n Logger.prototype.enable = function (logLevel) {\n if (logLevel === void 0) { logLevel = LogLevel.Warn; }\n this.logLevel = logLevel;\n };\n Logger.prototype.log = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Verbose) {\n return;\n }\n console.log(\"\".concat(PREFIX, \"[Log]: \").concat(args.join(' ')));\n };\n Logger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Warn) {\n return;\n }\n console.warn(\"\".concat(PREFIX, \"[Warn]: \").concat(args.join(' ')));\n };\n Logger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Error) {\n return;\n }\n console.error(\"\".concat(PREFIX, \"[Error]: \").concat(args.join(' ')));\n };\n Logger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Debug) {\n return;\n }\n // console.debug output is hidden by default in chrome\n console.log(\"\".concat(PREFIX, \"[Debug]: \").concat(args.join(' ')));\n };\n return Logger;\n}());\nexport { Logger };\n//# sourceMappingURL=logger.js.map","import { AMPLITUDE_SERVER_URL, AMPLITUDE_BATCH_SERVER_URL, EU_AMPLITUDE_SERVER_URL, EU_AMPLITUDE_BATCH_SERVER_URL, } from './types/constants';\nimport { Logger } from './logger';\nimport { LogLevel } from './types/loglevel';\nexport var getDefaultConfig = function () { return ({\n flushMaxRetries: 12,\n flushQueueSize: 200,\n flushIntervalMillis: 10000,\n instanceName: '$default_instance',\n logLevel: LogLevel.Warn,\n loggerProvider: new Logger(),\n offline: false,\n optOut: false,\n serverUrl: AMPLITUDE_SERVER_URL,\n serverZone: 'US',\n useBatch: false,\n}); };\nvar Config = /** @class */ (function () {\n function Config(options) {\n var _a, _b, _c, _d;\n this._optOut = false;\n var defaultConfig = getDefaultConfig();\n this.apiKey = options.apiKey;\n this.flushIntervalMillis = (_a = options.flushIntervalMillis) !== null && _a !== void 0 ? _a : defaultConfig.flushIntervalMillis;\n this.flushMaxRetries = options.flushMaxRetries || defaultConfig.flushMaxRetries;\n this.flushQueueSize = options.flushQueueSize || defaultConfig.flushQueueSize;\n this.instanceName = options.instanceName || defaultConfig.instanceName;\n this.loggerProvider = options.loggerProvider || defaultConfig.loggerProvider;\n this.logLevel = (_b = options.logLevel) !== null && _b !== void 0 ? _b : defaultConfig.logLevel;\n this.minIdLength = options.minIdLength;\n this.plan = options.plan;\n this.ingestionMetadata = options.ingestionMetadata;\n this.offline = options.offline !== undefined ? options.offline : defaultConfig.offline;\n this.optOut = (_c = options.optOut) !== null && _c !== void 0 ? _c : defaultConfig.optOut;\n this.serverUrl = options.serverUrl;\n this.serverZone = options.serverZone || defaultConfig.serverZone;\n this.storageProvider = options.storageProvider;\n this.transportProvider = options.transportProvider;\n this.useBatch = (_d = options.useBatch) !== null && _d !== void 0 ? _d : defaultConfig.useBatch;\n this.loggerProvider.enable(this.logLevel);\n var serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);\n this.serverZone = serverConfig.serverZone;\n this.serverUrl = serverConfig.serverUrl;\n }\n Object.defineProperty(Config.prototype, \"optOut\", {\n get: function () {\n return this._optOut;\n },\n set: function (optOut) {\n this._optOut = optOut;\n },\n enumerable: false,\n configurable: true\n });\n return Config;\n}());\nexport { Config };\nexport var getServerUrl = function (serverZone, useBatch) {\n if (serverZone === 'EU') {\n return useBatch ? EU_AMPLITUDE_BATCH_SERVER_URL : EU_AMPLITUDE_SERVER_URL;\n }\n return useBatch ? AMPLITUDE_BATCH_SERVER_URL : AMPLITUDE_SERVER_URL;\n};\nexport var createServerConfig = function (serverUrl, serverZone, useBatch) {\n if (serverUrl === void 0) { serverUrl = ''; }\n if (serverZone === void 0) { serverZone = getDefaultConfig().serverZone; }\n if (useBatch === void 0) { useBatch = getDefaultConfig().useBatch; }\n if (serverUrl) {\n return { serverUrl: serverUrl, serverZone: undefined };\n }\n var _serverZone = ['US', 'EU'].includes(serverZone) ? serverZone : getDefaultConfig().serverZone;\n return {\n serverZone: _serverZone,\n serverUrl: getServerUrl(_serverZone, useBatch),\n };\n};\nvar RequestMetadata = /** @class */ (function () {\n function RequestMetadata() {\n this.sdk = {\n metrics: {\n histogram: {},\n },\n };\n }\n RequestMetadata.prototype.recordHistogram = function (key, value) {\n this.sdk.metrics.histogram[key] = value;\n };\n return RequestMetadata;\n}());\nexport { RequestMetadata };\nvar HistogramOptions = /** @class */ (function () {\n function HistogramOptions() {\n }\n return HistogramOptions;\n}());\n//# sourceMappingURL=config.js.map","var ApplicationContextProviderImpl = /** @class */ (function () {\n function ApplicationContextProviderImpl() {\n }\n ApplicationContextProviderImpl.prototype.getApplicationContext = function () {\n return {\n versionName: this.versionName,\n language: getLanguage(),\n platform: 'Web',\n os: undefined,\n deviceModel: undefined,\n };\n };\n return ApplicationContextProviderImpl;\n}());\nvar getLanguage = function () {\n return ((typeof navigator !== 'undefined' &&\n ((navigator.languages && navigator.languages[0]) ||\n navigator.language)) ||\n '');\n};\n\nvar EventBridgeImpl = /** @class */ (function () {\n function EventBridgeImpl() {\n this.queue = [];\n }\n EventBridgeImpl.prototype.logEvent = function (event) {\n if (!this.receiver) {\n if (this.queue.length < 512) {\n this.queue.push(event);\n }\n }\n else {\n this.receiver(event);\n }\n };\n EventBridgeImpl.prototype.setEventReceiver = function (receiver) {\n this.receiver = receiver;\n if (this.queue.length > 0) {\n this.queue.forEach(function (event) {\n receiver(event);\n });\n this.queue = [];\n }\n };\n return EventBridgeImpl;\n}());\n\n/******************************************************************************\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***************************************************************************** */\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar isEqual = function (obj1, obj2) {\n var e_1, _a;\n var primitive = ['string', 'number', 'boolean', 'undefined'];\n var typeA = typeof obj1;\n var typeB = typeof obj2;\n if (typeA !== typeB) {\n return false;\n }\n try {\n for (var primitive_1 = __values(primitive), primitive_1_1 = primitive_1.next(); !primitive_1_1.done; primitive_1_1 = primitive_1.next()) {\n var p = primitive_1_1.value;\n if (p === typeA) {\n return obj1 === obj2;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (primitive_1_1 && !primitive_1_1.done && (_a = primitive_1.return)) _a.call(primitive_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // check null\n if (obj1 == null && obj2 == null) {\n return true;\n }\n else if (obj1 == null || obj2 == null) {\n return false;\n }\n // if got here - objects\n if (obj1.length !== obj2.length) {\n return false;\n }\n //check if arrays\n var isArrayA = Array.isArray(obj1);\n var isArrayB = Array.isArray(obj2);\n if (isArrayA !== isArrayB) {\n return false;\n }\n if (isArrayA && isArrayB) {\n //arrays\n for (var i = 0; i < obj1.length; i++) {\n if (!isEqual(obj1[i], obj2[i])) {\n return false;\n }\n }\n }\n else {\n //objects\n var sorted1 = Object.keys(obj1).sort();\n var sorted2 = Object.keys(obj2).sort();\n if (!isEqual(sorted1, sorted2)) {\n return false;\n }\n //compare object values\n var result_1 = true;\n Object.keys(obj1).forEach(function (key) {\n if (!isEqual(obj1[key], obj2[key])) {\n result_1 = false;\n }\n });\n return result_1;\n }\n return true;\n};\n\nvar ID_OP_SET = '$set';\nvar ID_OP_UNSET = '$unset';\nvar ID_OP_CLEAR_ALL = '$clearAll';\n// Polyfill for Object.entries\nif (!Object.entries) {\n Object.entries = function (obj) {\n var ownProps = Object.keys(obj);\n var i = ownProps.length;\n var resArray = new Array(i);\n while (i--) {\n resArray[i] = [ownProps[i], obj[ownProps[i]]];\n }\n return resArray;\n };\n}\nvar IdentityStoreImpl = /** @class */ (function () {\n function IdentityStoreImpl() {\n this.identity = { userProperties: {} };\n this.listeners = new Set();\n }\n IdentityStoreImpl.prototype.editIdentity = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n var actingUserProperties = __assign({}, this.identity.userProperties);\n var actingIdentity = __assign(__assign({}, this.identity), { userProperties: actingUserProperties });\n return {\n setUserId: function (userId) {\n actingIdentity.userId = userId;\n return this;\n },\n setDeviceId: function (deviceId) {\n actingIdentity.deviceId = deviceId;\n return this;\n },\n setUserProperties: function (userProperties) {\n actingIdentity.userProperties = userProperties;\n return this;\n },\n setOptOut: function (optOut) {\n actingIdentity.optOut = optOut;\n return this;\n },\n updateUserProperties: function (actions) {\n var e_1, _a, e_2, _b, e_3, _c;\n var actingProperties = actingIdentity.userProperties || {};\n try {\n for (var _d = __values(Object.entries(actions)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var _f = __read(_e.value, 2), action = _f[0], properties = _f[1];\n switch (action) {\n case ID_OP_SET:\n try {\n for (var _g = (e_2 = void 0, __values(Object.entries(properties))), _h = _g.next(); !_h.done; _h = _g.next()) {\n var _j = __read(_h.value, 2), key = _j[0], value = _j[1];\n actingProperties[key] = value;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n }\n finally { if (e_2) throw e_2.error; }\n }\n break;\n case ID_OP_UNSET:\n try {\n for (var _k = (e_3 = void 0, __values(Object.keys(properties))), _l = _k.next(); !_l.done; _l = _k.next()) {\n var key = _l.value;\n delete actingProperties[key];\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n }\n finally { if (e_3) throw e_3.error; }\n }\n break;\n case ID_OP_CLEAR_ALL:\n actingProperties = {};\n break;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_1) throw e_1.error; }\n }\n actingIdentity.userProperties = actingProperties;\n return this;\n },\n commit: function () {\n self.setIdentity(actingIdentity);\n return this;\n },\n };\n };\n IdentityStoreImpl.prototype.getIdentity = function () {\n return __assign({}, this.identity);\n };\n IdentityStoreImpl.prototype.setIdentity = function (identity) {\n var originalIdentity = __assign({}, this.identity);\n this.identity = __assign({}, identity);\n if (!isEqual(originalIdentity, this.identity)) {\n this.listeners.forEach(function (listener) {\n listener(identity);\n });\n }\n };\n IdentityStoreImpl.prototype.addIdentityListener = function (listener) {\n this.listeners.add(listener);\n };\n IdentityStoreImpl.prototype.removeIdentityListener = function (listener) {\n this.listeners.delete(listener);\n };\n return IdentityStoreImpl;\n}());\n\nvar safeGlobal = typeof globalThis !== 'undefined'\n ? globalThis\n : typeof global !== 'undefined'\n ? global\n : self;\n\nvar AnalyticsConnector = /** @class */ (function () {\n function AnalyticsConnector() {\n this.identityStore = new IdentityStoreImpl();\n this.eventBridge = new EventBridgeImpl();\n this.applicationContextProvider = new ApplicationContextProviderImpl();\n }\n AnalyticsConnector.getInstance = function (instanceName) {\n if (!safeGlobal['analyticsConnectorInstances']) {\n safeGlobal['analyticsConnectorInstances'] = {};\n }\n if (!safeGlobal['analyticsConnectorInstances'][instanceName]) {\n safeGlobal['analyticsConnectorInstances'][instanceName] =\n new AnalyticsConnector();\n }\n return safeGlobal['analyticsConnectorInstances'][instanceName];\n };\n return AnalyticsConnector;\n}());\n\nexport { AnalyticsConnector };\n","/**\n * @deprecated use ServerZoneType instead\n */\nexport var ServerZone;\n(function (ServerZone) {\n ServerZone[\"US\"] = \"US\";\n ServerZone[\"EU\"] = \"EU\";\n /**\n * Add for session-replay-browser migration from analytics-type v1.x.\n */\n ServerZone[\"STAGING\"] = \"STAGING\";\n})(ServerZone || (ServerZone = {}));\n//# sourceMappingURL=server-zone.js.map","import { Status } from '../types/status';\nvar BaseTransport = /** @class */ (function () {\n function BaseTransport() {\n }\n BaseTransport.prototype.send = function (_serverUrl, _payload) {\n return Promise.resolve(null);\n };\n BaseTransport.prototype.buildResponse = function (responseJSON) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n if (typeof responseJSON !== 'object') {\n return null;\n }\n var statusCode = responseJSON.code || 0;\n var status = this.buildStatus(statusCode);\n switch (status) {\n case Status.Success:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n eventsIngested: (_a = responseJSON.events_ingested) !== null && _a !== void 0 ? _a : 0,\n payloadSizeBytes: (_b = responseJSON.payload_size_bytes) !== null && _b !== void 0 ? _b : 0,\n serverUploadTime: (_c = responseJSON.server_upload_time) !== null && _c !== void 0 ? _c : 0,\n },\n };\n case Status.Invalid:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_d = responseJSON.error) !== null && _d !== void 0 ? _d : '',\n missingField: (_e = responseJSON.missing_field) !== null && _e !== void 0 ? _e : '',\n eventsWithInvalidFields: (_f = responseJSON.events_with_invalid_fields) !== null && _f !== void 0 ? _f : {},\n eventsWithMissingFields: (_g = responseJSON.events_with_missing_fields) !== null && _g !== void 0 ? _g : {},\n eventsWithInvalidIdLengths: (_h = responseJSON.events_with_invalid_id_lengths) !== null && _h !== void 0 ? _h : {},\n epsThreshold: (_j = responseJSON.eps_threshold) !== null && _j !== void 0 ? _j : 0,\n exceededDailyQuotaDevices: (_k = responseJSON.exceeded_daily_quota_devices) !== null && _k !== void 0 ? _k : {},\n silencedDevices: (_l = responseJSON.silenced_devices) !== null && _l !== void 0 ? _l : [],\n silencedEvents: (_m = responseJSON.silenced_events) !== null && _m !== void 0 ? _m : [],\n throttledDevices: (_o = responseJSON.throttled_devices) !== null && _o !== void 0 ? _o : {},\n throttledEvents: (_p = responseJSON.throttled_events) !== null && _p !== void 0 ? _p : [],\n },\n };\n case Status.PayloadTooLarge:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_q = responseJSON.error) !== null && _q !== void 0 ? _q : '',\n },\n };\n case Status.RateLimit:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_r = responseJSON.error) !== null && _r !== void 0 ? _r : '',\n epsThreshold: (_s = responseJSON.eps_threshold) !== null && _s !== void 0 ? _s : 0,\n throttledDevices: (_t = responseJSON.throttled_devices) !== null && _t !== void 0 ? _t : {},\n throttledUsers: (_u = responseJSON.throttled_users) !== null && _u !== void 0 ? _u : {},\n exceededDailyQuotaDevices: (_v = responseJSON.exceeded_daily_quota_devices) !== null && _v !== void 0 ? _v : {},\n exceededDailyQuotaUsers: (_w = responseJSON.exceeded_daily_quota_users) !== null && _w !== void 0 ? _w : {},\n throttledEvents: (_x = responseJSON.throttled_events) !== null && _x !== void 0 ? _x : [],\n },\n };\n case Status.Timeout:\n default:\n return {\n status: status,\n statusCode: statusCode,\n };\n }\n };\n BaseTransport.prototype.buildStatus = function (code) {\n if (code >= 200 && code < 300) {\n return Status.Success;\n }\n if (code === 429) {\n return Status.RateLimit;\n }\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n if (code === 408) {\n return Status.Timeout;\n }\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n if (code >= 500) {\n return Status.Failed;\n }\n return Status.Unknown;\n };\n return BaseTransport;\n}());\nexport { BaseTransport };\n//# sourceMappingURL=base.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { BaseTransport } from './base';\nvar FetchTransport = /** @class */ (function (_super) {\n __extends(FetchTransport, _super);\n function FetchTransport() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FetchTransport.prototype.send = function (serverUrl, payload) {\n return __awaiter(this, void 0, void 0, function () {\n var options, response, responseText;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n /* istanbul ignore if */\n if (typeof fetch === 'undefined') {\n throw new Error('FetchTransport is not supported');\n }\n options = {\n headers: {\n 'Content-Type': 'application/json',\n Accept: '*/*',\n },\n body: JSON.stringify(payload),\n method: 'POST',\n };\n return [4 /*yield*/, fetch(serverUrl, options)];\n case 1:\n response = _a.sent();\n return [4 /*yield*/, response.text()];\n case 2:\n responseText = _a.sent();\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return [2 /*return*/, this.buildResponse(JSON.parse(responseText))];\n }\n catch (_b) {\n return [2 /*return*/, this.buildResponse({ code: response.status })];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n return FetchTransport;\n}(BaseTransport));\nexport { FetchTransport };\n//# sourceMappingURL=fetch.js.map","var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType || {});\nexport {\n CanvasContext,\n EventType,\n IncrementalSource,\n MediaInteractions,\n MouseInteractions,\n NodeType,\n PointerTypes,\n ReplayerEvents\n};\n//# sourceMappingURL=rrweb-types.js.map\n","export var ServerZone;\n(function (ServerZone) {\n ServerZone[\"US\"] = \"US\";\n ServerZone[\"EU\"] = \"EU\";\n ServerZone[\"STAGING\"] = \"STAGING\";\n})(ServerZone || (ServerZone = {}));\n//# sourceMappingURL=server-zone.js.map","/** The status of an event. */\nexport var Status;\n(function (Status) {\n /** The status could not be determined. */\n Status[\"Unknown\"] = \"unknown\";\n /** The event was skipped due to configuration or callbacks. */\n Status[\"Skipped\"] = \"skipped\";\n /** The event was sent successfully. */\n Status[\"Success\"] = \"success\";\n /** A user or device in the payload is currently rate limited and should try again later. */\n Status[\"RateLimit\"] = \"rate_limit\";\n /** The sent payload was too large to be processed. */\n Status[\"PayloadTooLarge\"] = \"payload_too_large\";\n /** The event could not be processed. */\n Status[\"Invalid\"] = \"invalid\";\n /** A server-side error ocurred during submission. */\n Status[\"Failed\"] = \"failed\";\n /** a server or client side error occuring when a request takes too long and is cancelled */\n Status[\"Timeout\"] = \"Timeout\";\n /** NodeJS runtime environment error.. E.g. disconnected from network */\n Status[\"SystemError\"] = \"SystemError\";\n})(Status || (Status = {}));\n//# sourceMappingURL=status.js.map","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport { Status } from '@amplitude/analytics-types';\nvar BaseTransport = /** @class */ (function () {\n function BaseTransport() {\n }\n BaseTransport.prototype.send = function (_serverUrl, _payload) {\n return Promise.resolve(null);\n };\n BaseTransport.prototype.buildResponse = function (responseJSON) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n if (typeof responseJSON !== 'object') {\n return null;\n }\n var statusCode = responseJSON.code || 0;\n var status = this.buildStatus(statusCode);\n switch (status) {\n case Status.Success:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n eventsIngested: (_a = responseJSON.events_ingested) !== null && _a !== void 0 ? _a : 0,\n payloadSizeBytes: (_b = responseJSON.payload_size_bytes) !== null && _b !== void 0 ? _b : 0,\n serverUploadTime: (_c = responseJSON.server_upload_time) !== null && _c !== void 0 ? _c : 0,\n },\n };\n case Status.Invalid:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_d = responseJSON.error) !== null && _d !== void 0 ? _d : '',\n missingField: (_e = responseJSON.missing_field) !== null && _e !== void 0 ? _e : '',\n eventsWithInvalidFields: (_f = responseJSON.events_with_invalid_fields) !== null && _f !== void 0 ? _f : {},\n eventsWithMissingFields: (_g = responseJSON.events_with_missing_fields) !== null && _g !== void 0 ? _g : {},\n eventsWithInvalidIdLengths: (_h = responseJSON.events_with_invalid_id_lengths) !== null && _h !== void 0 ? _h : {},\n epsThreshold: (_j = responseJSON.eps_threshold) !== null && _j !== void 0 ? _j : 0,\n exceededDailyQuotaDevices: (_k = responseJSON.exceeded_daily_quota_devices) !== null && _k !== void 0 ? _k : {},\n silencedDevices: (_l = responseJSON.silenced_devices) !== null && _l !== void 0 ? _l : [],\n silencedEvents: (_m = responseJSON.silenced_events) !== null && _m !== void 0 ? _m : [],\n throttledDevices: (_o = responseJSON.throttled_devices) !== null && _o !== void 0 ? _o : {},\n throttledEvents: (_p = responseJSON.throttled_events) !== null && _p !== void 0 ? _p : [],\n },\n };\n case Status.PayloadTooLarge:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_q = responseJSON.error) !== null && _q !== void 0 ? _q : '',\n },\n };\n case Status.RateLimit:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_r = responseJSON.error) !== null && _r !== void 0 ? _r : '',\n epsThreshold: (_s = responseJSON.eps_threshold) !== null && _s !== void 0 ? _s : 0,\n throttledDevices: (_t = responseJSON.throttled_devices) !== null && _t !== void 0 ? _t : {},\n throttledUsers: (_u = responseJSON.throttled_users) !== null && _u !== void 0 ? _u : {},\n exceededDailyQuotaDevices: (_v = responseJSON.exceeded_daily_quota_devices) !== null && _v !== void 0 ? _v : {},\n exceededDailyQuotaUsers: (_w = responseJSON.exceeded_daily_quota_users) !== null && _w !== void 0 ? _w : {},\n throttledEvents: (_x = responseJSON.throttled_events) !== null && _x !== void 0 ? _x : [],\n },\n };\n case Status.Timeout:\n default:\n return {\n status: status,\n statusCode: statusCode,\n };\n }\n };\n BaseTransport.prototype.buildStatus = function (code) {\n if (code >= 200 && code < 300) {\n return Status.Success;\n }\n if (code === 429) {\n return Status.RateLimit;\n }\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n if (code === 408) {\n return Status.Timeout;\n }\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n if (code >= 500) {\n return Status.Failed;\n }\n return Status.Unknown;\n };\n return BaseTransport;\n}());\nexport { BaseTransport };\n//# sourceMappingURL=base.js.map","import { __assign, __awaiter, __generator, __values } from \"tslib\";\nimport { BaseTransport } from '@amplitude/analytics-core';\nimport { ServerZone, Status } from '@amplitude/analytics-types';\nvar UNEXPECTED_NETWORK_ERROR_MESSAGE = 'Network error occurred, remote config fetch failed';\nvar SUCCESS_REMOTE_CONFIG = 'Remote config successfully fetched';\nvar MAX_RETRIES_EXCEEDED_MESSAGE = 'Remote config fetch rejected due to exceeded retry count';\nvar TIMEOUT_MESSAGE = 'Remote config fetch rejected due to timeout after 5 seconds';\nvar UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport var REMOTE_CONFIG_SERVER_URL = 'https://sr-client-cfg.amplitude.com/config';\nexport var REMOTE_CONFIG_SERVER_URL_STAGING = 'https://sr-client-cfg.stag2.amplitude.com/config';\nexport var REMOTE_CONFIG_SERVER_URL_EU = 'https://sr-client-cfg.eu.amplitude.com/config';\nvar RemoteConfigFetch = /** @class */ (function () {\n function RemoteConfigFetch(_a) {\n var localConfig = _a.localConfig, configKeys = _a.configKeys;\n var _this = this;\n this.retryTimeout = 1000;\n this.attempts = 0;\n this.sessionTargetingMatch = false;\n this.metrics = {};\n this.getRemoteConfig = function (configNamespace, key, sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var fetchStartTime, configAPIResponse, remoteConfig;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n fetchStartTime = Date.now();\n return [4 /*yield*/, this.fetchWithTimeout(sessionId)];\n case 1:\n configAPIResponse = _a.sent();\n if (configAPIResponse) {\n remoteConfig = configAPIResponse.configs && configAPIResponse.configs[configNamespace];\n if (remoteConfig) {\n this.metrics.fetchTimeAPISuccess = Date.now() - fetchStartTime;\n return [2 /*return*/, remoteConfig[key]];\n }\n }\n this.metrics.fetchTimeAPIFail = Date.now() - fetchStartTime;\n return [2 /*return*/, undefined];\n }\n });\n }); };\n this.fetchWithTimeout = function (sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var controller, timeoutId, remoteConfig;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n controller = new AbortController();\n timeoutId = setTimeout(function () { return controller.abort(); }, 5000);\n return [4 /*yield*/, this.fetchRemoteConfig(controller.signal, sessionId)];\n case 1:\n remoteConfig = _a.sent();\n clearTimeout(timeoutId);\n return [2 /*return*/, remoteConfig];\n }\n });\n }); };\n this.fetchRemoteConfig = function (signal, sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var urlParams, _a, _b, configKey, options, serverUrl, res, parsedStatus, e_1, knownError;\n var e_2, _c;\n var _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (sessionId === this.lastFetchedSessionId && this.attempts >= this.localConfig.flushMaxRetries) {\n return [2 /*return*/, this.completeRequest({ err: MAX_RETRIES_EXCEEDED_MESSAGE })];\n }\n else if (signal.aborted) {\n return [2 /*return*/, this.completeRequest({ err: TIMEOUT_MESSAGE })];\n }\n else if (sessionId !== this.lastFetchedSessionId) {\n this.lastFetchedSessionId = sessionId;\n this.attempts = 0;\n }\n _e.label = 1;\n case 1:\n _e.trys.push([1, 3, , 4]);\n urlParams = new URLSearchParams({\n api_key: this.localConfig.apiKey,\n });\n try {\n for (_a = __values(this.configKeys), _b = _a.next(); !_b.done; _b = _a.next()) {\n configKey = _b.value;\n urlParams.append('config_keys', configKey);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (sessionId) {\n urlParams.set('session_id', String(sessionId));\n }\n options = {\n headers: {\n Accept: '*/*',\n },\n method: 'GET',\n };\n serverUrl = \"\".concat(this.getServerUrl(), \"?\").concat(urlParams.toString());\n this.attempts += 1;\n return [4 /*yield*/, fetch(serverUrl, __assign(__assign({}, options), { signal: signal }))];\n case 2:\n res = _e.sent();\n if (res === null) {\n return [2 /*return*/, this.completeRequest({ err: UNEXPECTED_ERROR_MESSAGE })];\n }\n parsedStatus = new BaseTransport().buildStatus(res.status);\n switch (parsedStatus) {\n case Status.Success:\n this.attempts = 0;\n return [2 /*return*/, this.parseAndStoreConfig(res)];\n case Status.Failed:\n return [2 /*return*/, this.retryFetch(signal, sessionId)];\n default:\n return [2 /*return*/, this.completeRequest({ err: UNEXPECTED_NETWORK_ERROR_MESSAGE })];\n }\n return [3 /*break*/, 4];\n case 3:\n e_1 = _e.sent();\n knownError = e_1;\n if (signal.aborted) {\n return [2 /*return*/, this.completeRequest({ err: TIMEOUT_MESSAGE })];\n }\n return [2 /*return*/, this.completeRequest({ err: (_d = knownError.message) !== null && _d !== void 0 ? _d : UNEXPECTED_ERROR_MESSAGE })];\n case 4: return [2 /*return*/];\n }\n });\n }); };\n this.retryFetch = function (signal, sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, _this.attempts * _this.retryTimeout); })];\n case 1:\n _a.sent();\n return [2 /*return*/, this.fetchRemoteConfig(signal, sessionId)];\n }\n });\n }); };\n this.parseAndStoreConfig = function (res) { return __awaiter(_this, void 0, void 0, function () {\n var remoteConfig;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, res.json()];\n case 1:\n remoteConfig = (_a.sent());\n this.completeRequest({ success: SUCCESS_REMOTE_CONFIG });\n return [2 /*return*/, remoteConfig];\n }\n });\n }); };\n this.localConfig = localConfig;\n this.configKeys = configKeys;\n }\n RemoteConfigFetch.prototype.getServerUrl = function () {\n if (this.localConfig.configServerUrl) {\n return this.localConfig.configServerUrl;\n }\n if (this.localConfig.serverZone === ServerZone.STAGING) {\n return REMOTE_CONFIG_SERVER_URL_STAGING;\n }\n if (this.localConfig.serverZone === ServerZone.EU) {\n return REMOTE_CONFIG_SERVER_URL_EU;\n }\n return REMOTE_CONFIG_SERVER_URL;\n };\n RemoteConfigFetch.prototype.completeRequest = function (_a) {\n var err = _a.err, success = _a.success;\n if (err) {\n throw new Error(err);\n }\n else if (success) {\n this.localConfig.loggerProvider.log(success);\n }\n };\n return RemoteConfigFetch;\n}());\nexport { RemoteConfigFetch };\nexport var createRemoteConfigFetch = function (_a) {\n var localConfig = _a.localConfig, configKeys = _a.configKeys;\n return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_b) {\n return [2 /*return*/, new RemoteConfigFetch({ localConfig: localConfig, configKeys: configKeys })];\n });\n });\n};\n//# sourceMappingURL=remote-config.js.map","import * as remoteConfigFetch from './remote-config';\nexport var createRemoteConfigFetch = remoteConfigFetch.createRemoteConfigFetch;\n//# sourceMappingURL=index.js.map","import { IConfig, LogLevel, ILogger } from '@amplitude/analytics-core';\nimport { StoreType, ConsoleLogLevel } from '../typings/session-replay';\n\nexport interface SamplingConfig {\n sample_rate: number;\n capture_enabled: boolean;\n}\n\nexport interface InteractionConfig {\n trackEveryNms?: number;\n enabled: boolean; // defaults to false\n batch: boolean; // defaults to false\n /**\n * UGC filter rules.\n */\n ugcFilterRules?: UGCFilterRule[];\n}\n\nexport interface LoggingConfig {\n console: {\n enabled: boolean;\n levels: ConsoleLogLevel[];\n };\n network?: {\n enabled: boolean;\n };\n}\n\nexport type SessionReplayRemoteConfig = {\n sr_sampling_config?: SamplingConfig;\n sr_privacy_config?: PrivacyConfig;\n sr_interaction_config?: InteractionConfig;\n sr_logging_config?: LoggingConfig;\n};\n\nexport interface SessionReplayRemoteConfigAPIResponse {\n configs: {\n sessionReplay: SessionReplayRemoteConfig;\n };\n}\n\nexport type MaskLevel =\n | 'light' // only mask a subset of inputs that's deemed sensitive - password, credit card, telephone #, email. These are information we never want to capture.\n | 'medium' // mask all inputs\n | 'conservative'; // mask all inputs and all texts\n\nexport const DEFAULT_MASK_LEVEL = 'medium';\n\n// err on the side of excluding more\nexport type PrivacyConfig = {\n blockSelector?: string | string[]; // exclude in the UI\n defaultMaskLevel?: MaskLevel;\n maskSelector?: string[];\n unmaskSelector?: string[];\n};\n\n/**\n * UGC filter rule.\n */\nexport type UGCFilterRule = {\n /**\n * The selector of the UGC element.\n */\n selector: string;\n /**\n * The replacement text for the UGC element.\n */\n replacement: string;\n};\n\nexport interface SessionReplayLocalConfig extends IConfig {\n apiKey: string;\n loggerProvider: ILogger;\n /**\n * LogLevel.None or LogLevel.Error or LogLevel.Warn or LogLevel.Verbose or LogLevel.Debug.\n * Sets the log level.\n *\n * @defaultValue LogLevel.Warn\n */\n logLevel: LogLevel;\n /**\n * The maximum number of retries allowed for sending replay events.\n * Once this limit is reached, failed events will no longer be sent.\n *\n * @defaultValue 2\n */\n flushMaxRetries: number;\n /**\n * Use this option to control how many sessions to select for replay collection.\n * The number should be a decimal between 0 and 1, for example 0.4, representing\n * the fraction of sessions to have randomly selected for replay collection.\n * Over a large number of sessions, 0.4 would select 40% of those sessions.\n * Sample rates as small as six decimal places (0.000001) are supported.\n *\n * @defaultValue 0\n */\n sampleRate: number;\n privacyConfig?: PrivacyConfig;\n /**\n * Adds additional debug event property to help debug instrumentation issues\n * (such as mismatching apps). Only recommended for debugging initial setup,\n * and not recommended for production.\n */\n debugMode?: boolean;\n /**\n * Specifies the endpoint URL to fetch remote configuration.\n * If provided, it overrides the default server zone configuration.\n */\n configServerUrl?: string;\n /**\n * Specifies the endpoint URL for sending session replay data.\n * If provided, it overrides the default server zone configuration.\n */\n trackServerUrl?: string;\n /**\n * If stylesheets are inlined, the contents of the stylesheet will be stored.\n * During replay, the stored stylesheet will be used instead of attempting to fetch it remotely.\n * This prevents replays from appearing broken due to missing stylesheets.\n * Note: Inlining stylesheets may not work in all cases.\n */\n shouldInlineStylesheet?: boolean;\n version?: SessionReplayVersion;\n /**\n * Performance configuration config. If enabled, we will defer compression\n * to be done during the browser's idle periods.\n */\n performanceConfig?: SessionReplayPerformanceConfig;\n /**\n * Specifies how replay events should be stored. `idb` uses IndexedDB to persist replay events\n * when all events cannot be sent during capture. `memory` stores replay events only in memory,\n * meaning events are lost when the page is closed. If IndexedDB is unavailable, the system falls back to `memory`.\n */\n storeType: StoreType;\n\n /**\n * Experimental features.\n */\n experimental?: {\n /**\n * If the SDK should compress the replay events using a webworker.\n */\n useWebWorker: boolean;\n };\n\n /**\n * If true, applies a background color to blocked elements in the replay.\n * This helps visualize which elements are blocked from being captured.\n */\n applyBackgroundColorToBlockedElements?: boolean;\n interactionConfig?: InteractionConfig;\n}\n\nexport interface SessionReplayJoinedConfig extends SessionReplayLocalConfig {\n captureEnabled?: boolean;\n interactionConfig?: InteractionConfig;\n loggingConfig?: LoggingConfig;\n}\n\nexport interface SessionReplayRemoteConfigFetch {\n getServerUrl: () => void;\n getSamplingConfig: (sessionId?: number) => Promise<SessionReplayRemoteConfig['sr_sampling_config'] | void>;\n fetchRemoteConfig: (sessionId?: number) => Promise<SessionReplayRemoteConfig | void>;\n getRemoteConfig: (sessionId?: number) => Promise<SessionReplayRemoteConfig | void>;\n}\n\nexport interface SessionReplayConfigs {\n localConfig: SessionReplayLocalConfig;\n joinedConfig: SessionReplayJoinedConfig;\n remoteConfig: SessionReplayRemoteConfig | undefined;\n}\nexport interface SessionReplayJoinedConfigGenerator {\n generateJoinedConfig: (sessionId?: string | number) => Promise<SessionReplayConfigs>;\n}\n\nexport interface SessionReplayMetadata {\n remoteConfig: SessionReplayRemoteConfig | undefined;\n localConfig: SessionReplayLocalConfig;\n joinedConfig: SessionReplayJoinedConfig;\n framework?: {\n name: string;\n version: string;\n };\n sessionId: string | number | undefined;\n hashValue?: number;\n sampleRate: number;\n replaySDKType: string | null;\n replaySDKVersion: string | undefined;\n standaloneSDKType: string;\n standaloneSDKVersion: string | undefined;\n}\n\nexport interface SessionReplayVersion {\n version: string;\n type: SessionReplayType;\n}\n\n/**\n * Configuration options for session replay performance.\n */\nexport interface SessionReplayPerformanceConfig {\n /**\n * If enabled, event compression will be deferred to occur during the browser's idle periods.\n */\n enabled: boolean;\n /**\n * Optional timeout in milliseconds for the `requestIdleCallback` API.\n * If specified, this value will be used to set a maximum time for the browser to wait\n * before executing the deferred compression task, even if the browser is not idle.\n */\n timeout?: number;\n}\n\nexport type SessionReplayType = 'standalone' | 'plugin' | 'segment';\n","import { AMPLITUDE_PREFIX, ServerZone } from '@amplitude/analytics-core';\n\nexport const DEFAULT_EVENT_PROPERTY_PREFIX = '[Amplitude]';\n\nexport const DEFAULT_SESSION_REPLAY_PROPERTY = `${DEFAULT_EVENT_PROPERTY_PREFIX} Session Replay ID`;\nexport const DEFAULT_SESSION_START_EVENT = 'session_start';\nexport const DEFAULT_SESSION_END_EVENT = 'session_end';\nexport const DEFAULT_SAMPLE_RATE = 0;\nexport const DEFAULT_SERVER_ZONE = ServerZone.US;\n\nexport const SESSION_REPLAY_DEBUG_PROPERTY = `${DEFAULT_EVENT_PROPERTY_PREFIX} Session Replay Debug`;\n\nexport const BLOCK_CLASS = 'amp-block';\nexport const MASK_TEXT_CLASS = 'amp-mask';\nexport const UNMASK_TEXT_CLASS = 'amp-unmask';\nexport const SESSION_REPLAY_SERVER_URL = 'https://api-sr.amplitude.com/sessions/v2/track';\nexport const SESSION_REPLAY_EU_URL = 'https://api-sr.eu.amplitude.com/sessions/v2/track';\nexport const SESSION_REPLAY_STAGING_URL = 'https://api-sr.stag2.amplitude.com/sessions/v2/track';\nexport const STORAGE_PREFIX = `${AMPLITUDE_PREFIX}_replay_unsent`;\nexport const MAX_EVENT_LIST_SIZE_IN_BYTES = 1 * 1000000; // 1 MB\nexport const INTERACTION_MIN_INTERVAL = 30_000; // 30 seconds\nexport const INTERACTION_MAX_INTERVAL = 60_000; // 1 minute\nexport const MIN_INTERVAL = 500; // 500 ms\nexport const MAX_INTERVAL = 10 * 1000; // 10 seconds\nexport const MAX_IDB_STORAGE_LENGTH = 1000 * 60 * 60 * 24 * 3; // 3 days\nexport const KB_SIZE = 1024;\nexport const MAX_URL_LENGTH = 1000;\n\nexport enum CustomRRwebEvent {\n GET_SR_PROPS = 'get-sr-props',\n DEBUG_INFO = 'debug-info',\n FETCH_REQUEST = 'fetch-request',\n METADATA = 'metadata',\n}\n","import { getGlobalScope, ServerZone } from '@amplitude/analytics-core';\nimport { DEFAULT_MASK_LEVEL, MaskLevel, PrivacyConfig, SessionReplayJoinedConfig, UGCFilterRule } from './config/types';\nimport {\n KB_SIZE,\n MASK_TEXT_CLASS,\n SESSION_REPLAY_EU_URL,\n SESSION_REPLAY_SERVER_URL,\n SESSION_REPLAY_STAGING_URL,\n UNMASK_TEXT_CLASS,\n} from './constants';\nimport { StorageData } from './typings/session-replay';\nimport { getInputType } from './utils/get-input-type';\n\ntype ChromeStorageEstimate = {\n quota?: number;\n usage?: number;\n usageDetails?: { [key: string]: number };\n};\n\n/**\n * Light: Subset of inputs\n * Medium: All inputs\n * Conservative: All inputs and all texts\n */\nconst isMaskedForLevel = (elementType: 'input' | 'text', level: MaskLevel, element: HTMLElement | null): boolean => {\n switch (level) {\n case 'light': {\n if (elementType !== 'input') {\n return true;\n }\n\n const inputType = element ? getInputType(element) : '';\n /* istanbul ignore if */ // TODO(lew): For some reason it's impossible to test this.\n if (!inputType) {\n return false;\n }\n\n if (['password', 'hidden', 'email', 'tel'].includes(inputType)) {\n return true;\n }\n\n if ((element as HTMLInputElement).autocomplete.startsWith('cc-')) {\n return true;\n }\n\n return false;\n }\n case 'medium':\n case 'conservative':\n return true;\n default:\n return isMaskedForLevel(elementType, DEFAULT_MASK_LEVEL, element);\n }\n};\n\n/**\n * Checks if the given element set to be masked by rrweb\n *\n * Priority is:\n * 1. [In code] Element/class based masking/unmasking <> [Config based] Selector based masking/unmasking\n * 2. Use app defaults\n */\nconst isMasked = (\n elementType: 'input' | 'text',\n config: PrivacyConfig = { defaultMaskLevel: DEFAULT_MASK_LEVEL },\n element: HTMLElement | null,\n): boolean => {\n if (element) {\n // Element or parent is explicitly instrumented in code to mask\n if (element.closest('.' + MASK_TEXT_CLASS)) {\n return true;\n }\n\n // Config has override for mask\n const shouldMask = (config.maskSelector ?? []).some((selector) => element.closest(selector));\n if (shouldMask) {\n return true;\n }\n\n // Code or config has override to unmask\n if (element.closest('.' + UNMASK_TEXT_CLASS)) {\n return false;\n }\n\n // Here we are probably sent an element, but we want to match if they have a\n // parent with an unmask selector.\n const shouldUnmask = (config.unmaskSelector ?? []).some((selector) => element.closest(selector));\n if (shouldUnmask) {\n return false;\n }\n }\n\n return isMaskedForLevel(elementType, config.defaultMaskLevel ?? DEFAULT_MASK_LEVEL, element);\n};\n\nexport const maskFn =\n (elementType: 'text' | 'input', config?: PrivacyConfig) =>\n (text: string, element: HTMLElement | null): string => {\n return isMasked(elementType, config, element) ? text.replace(/[^\\s]/g, '*') : text;\n };\n\nexport const generateHashCode = function (str: string) {\n let hash = 0;\n if (str.length === 0) return hash;\n for (let i = 0; i < str.length; i++) {\n const chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0;\n }\n return hash;\n};\n\nexport const isSessionInSample = function (sessionId: string | number, sampleRate: number) {\n const hashNumber = generateHashCode(sessionId.toString());\n const absHash = Math.abs(hashNumber);\n const absHashMultiply = absHash * 31;\n const mod = absHashMultiply % 1000000;\n return mod / 1000000 < sampleRate;\n};\n\nexport const getCurrentUrl = () => {\n const globalScope = getGlobalScope();\n return globalScope?.location ? globalScope.location.href : '';\n};\n\nexport const generateSessionReplayId = (sessionId: string | number, deviceId: string): string => {\n return `${deviceId}/${sessionId}`;\n};\n\nexport const getServerUrl = (serverZone?: keyof typeof ServerZone, trackServerUrl?: string): string => {\n if (trackServerUrl) {\n return trackServerUrl;\n }\n\n if (serverZone === ServerZone.STAGING) {\n return SESSION_REPLAY_STAGING_URL;\n }\n\n if (serverZone === ServerZone.EU) {\n return SESSION_REPLAY_EU_URL;\n }\n\n return SESSION_REPLAY_SERVER_URL;\n};\n\nconst isValidGlobUrl = (globUrl: string): boolean => {\n if (typeof globUrl !== 'string' || globUrl.trim() === '') return false;\n const urlPattern = /^\\/|^https?:\\/\\/[^\\s]+$/;\n if (!urlPattern.test(globUrl)) return false;\n return true;\n};\n\nconst globToRegex = (glob: string): RegExp => {\n // Escape special regex characters, then convert globs\n const escaped = glob\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&') // Escape regex specials\n .replace(/\\*/g, '.*') // Convert * to .*\n .replace(/\\?/g, '.'); // Convert ? to .\n\n return new RegExp(`^${escaped}$`);\n};\n\nexport const validateUGCFilterRules = (ugcFilterRules: UGCFilterRule[]) => {\n // validate ugcFilterRules\n if (!ugcFilterRules.every((rule) => typeof rule.selector === 'string' && typeof rule.replacement === 'string')) {\n throw new Error('ugcFilterRules must be an array of objects with selector and replacement properties');\n }\n\n // validate ugcFilterRules are valid globs\n if (!ugcFilterRules.every((rule) => isValidGlobUrl(rule.selector))) {\n throw new Error('ugcFilterRules must be an array of objects with valid globs');\n }\n};\n\nexport const getPageUrl = (pageUrl: string, ugcFilterRules: UGCFilterRule[]) => {\n // apply ugcFilterRules, order is important, first rule wins\n for (const rule of ugcFilterRules) {\n const regex = globToRegex(rule.selector);\n\n if (regex.test(pageUrl)) {\n return pageUrl.replace(regex, rule.replacement);\n }\n }\n\n return pageUrl;\n};\n\nexport const getStorageSize = async (): Promise<StorageData> => {\n try {\n const globalScope = getGlobalScope();\n if (globalScope) {\n const { usage, quota, usageDetails }: ChromeStorageEstimate = await globalScope.navigator.storage.estimate();\n const totalStorageSize = usage ? Math.round(usage / KB_SIZE) : 0;\n const percentOfQuota = usage && quota ? Math.round((usage / quota + Number.EPSILON) * 1000) / 1000 : 0;\n return { totalStorageSize, percentOfQuota, usageDetails: JSON.stringify(usageDetails) };\n }\n } catch (e) {\n // swallow\n }\n return { totalStorageSize: 0, percentOfQuota: 0, usageDetails: '' };\n};\n\nexport const getDebugConfig = (config: SessionReplayJoinedConfig) => {\n const debugConfig = {\n ...config,\n };\n const { apiKey } = debugConfig;\n debugConfig.apiKey = `****${apiKey.substring(apiKey.length - 4)}`;\n return debugConfig;\n};\n","export function toLowerCase<T extends string>(str: T): Lowercase<T> {\n return str.toLowerCase() as unknown as Lowercase<T>;\n}\n\n/**\n * Get the type of an input element.\n * This takes care of the case where a password input is changed to a text input.\n * In this case, we continue to consider this of type password, in order to avoid leaking sensitive data\n * where passwords should be masked.\n */\nexport function getInputType(element: HTMLElement): Lowercase<string> | null {\n // when omitting the type of input element(e.g. <input />), the type is treated as text\n const type = (element as HTMLInputElement).type;\n\n return element.hasAttribute('data-rr-is-password')\n ? 'password'\n : type\n ? // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type)\n : null;\n}\n","import { ILogger, LogLevel } from '@amplitude/analytics-core';\n\nexport class SafeLoggerProvider implements ILogger {\n private logger: ILogger;\n\n log: typeof console.log;\n warn: typeof console.warn;\n error: typeof console.error;\n debug: typeof console.debug;\n\n constructor(loggerProvider: ILogger) {\n this.logger = loggerProvider;\n this.log = this.getSafeMethod('log');\n this.warn = this.getSafeMethod('warn');\n this.error = this.getSafeMethod('error');\n this.debug = this.getSafeMethod('debug');\n }\n\n private getSafeMethod<K extends keyof ILogger>(method: K): ILogger[K] {\n if (!this.logger) {\n return (() => {\n // No-op function fallback\n }) as ILogger[K];\n }\n\n const fn = this.logger[method];\n if (typeof fn === 'function') {\n const originalFn = (fn as { __rrweb_original__?: ILogger[K] }).__rrweb_original__ ?? fn;\n return originalFn.bind(this.logger) as ILogger[K];\n }\n\n return (() => {\n // No-op function fallback\n }) as ILogger[K];\n }\n\n enable(logLevel: LogLevel) {\n this.logger.enable(logLevel);\n }\n\n disable() {\n this.logger.disable();\n }\n}\n","import { Config, Logger, FetchTransport, LogLevel } from '@amplitude/analytics-core';\nimport { DEFAULT_SAMPLE_RATE, DEFAULT_SERVER_ZONE } from '../constants';\nimport { SessionReplayOptions, StoreType } from '../typings/session-replay';\nimport {\n SessionReplayLocalConfig as ISessionReplayLocalConfig,\n InteractionConfig,\n PrivacyConfig,\n SessionReplayPerformanceConfig,\n SessionReplayVersion,\n} from './types';\nimport { SafeLoggerProvider } from '../logger';\nimport { validateUGCFilterRules } from '../helpers';\n\nexport const getDefaultConfig = () => ({\n flushMaxRetries: 2,\n logLevel: LogLevel.Warn,\n loggerProvider: new Logger(),\n transportProvider: new FetchTransport(),\n});\n\nexport class SessionReplayLocalConfig extends Config implements ISessionReplayLocalConfig {\n apiKey: string;\n sampleRate: number;\n privacyConfig?: PrivacyConfig;\n interactionConfig?: InteractionConfig;\n debugMode?: boolean;\n configServerUrl?: string;\n trackServerUrl?: string;\n shouldInlineStylesheet?: boolean;\n version?: SessionReplayVersion;\n storeType: StoreType;\n performanceConfig?: SessionReplayPerformanceConfig;\n experimental?: { useWebWorker: boolean };\n applyBackgroundColorToBlockedElements?: boolean;\n\n constructor(apiKey: string, options: SessionReplayOptions) {\n const defaultConfig = getDefaultConfig();\n super({\n transportProvider: defaultConfig.transportProvider,\n loggerProvider: new SafeLoggerProvider(options.loggerProvider || defaultConfig.loggerProvider),\n ...options,\n apiKey,\n });\n this.flushMaxRetries =\n options.flushMaxRetries !== undefined && options.flushMaxRetries <= defaultConfig.flushMaxRetries\n ? options.flushMaxRetries\n : defaultConfig.flushMaxRetries;\n\n this.apiKey = apiKey;\n this.sampleRate = options.sampleRate || DEFAULT_SAMPLE_RATE;\n this.serverZone = options.serverZone || DEFAULT_SERVER_ZONE;\n this.configServerUrl = options.configServerUrl;\n this.trackServerUrl = options.trackServerUrl;\n this.shouldInlineStylesheet = options.shouldInlineStylesheet;\n this.version = options.version;\n this.performanceConfig = options.performanceConfig;\n this.storeType = options.storeType ?? 'idb';\n this.applyBackgroundColorToBlockedElements = options.applyBackgroundColorToBlockedElements ?? false;\n\n if (options.privacyConfig) {\n this.privacyConfig = options.privacyConfig;\n }\n if (options.interactionConfig) {\n this.interactionConfig = options.interactionConfig;\n\n // validate ugcFilterRules, throw error if invalid - throw error at the beginning of the config\n if (this.interactionConfig.ugcFilterRules) {\n validateUGCFilterRules(this.interactionConfig.ugcFilterRules);\n }\n }\n if (options.debugMode) {\n this.debugMode = options.debugMode;\n }\n if (options.experimental) {\n this.experimental = options.experimental;\n }\n }\n}\n","import { RemoteConfigFetch, createRemoteConfigFetch } from '@amplitude/analytics-remote-config';\nimport { ILogger } from '@amplitude/analytics-core';\nimport { getDebugConfig } from '../helpers';\nimport { SessionReplayOptions } from '../typings/session-replay';\nimport { SessionReplayLocalConfig } from './local-config';\nimport {\n SessionReplayLocalConfig as ISessionReplayLocalConfig,\n PrivacyConfig,\n SessionReplayConfigs,\n SessionReplayJoinedConfig,\n SessionReplayRemoteConfig,\n} from './types';\n\nexport const removeInvalidSelectorsFromPrivacyConfig = (privacyConfig: PrivacyConfig, loggerProvider: ILogger) => {\n // This allows us to not search the DOM.\n const fragment = document.createDocumentFragment();\n\n const dropInvalidSelectors = (selectors: string[] | string = []): string[] | undefined => {\n if (typeof selectors === 'string') {\n selectors = [selectors];\n }\n selectors = selectors.filter((selector: string) => {\n try {\n fragment.querySelector(selector);\n } catch {\n loggerProvider.warn(`[session-replay-browser] omitting selector \"${selector}\" because it is invalid`);\n return false;\n }\n return true;\n });\n if (selectors.length === 0) {\n return undefined;\n }\n return selectors;\n };\n privacyConfig.blockSelector = dropInvalidSelectors(privacyConfig.blockSelector);\n privacyConfig.maskSelector = dropInvalidSelectors(privacyConfig.maskSelector);\n privacyConfig.unmaskSelector = dropInvalidSelectors(privacyConfig.unmaskSelector);\n return privacyConfig;\n};\nexport class SessionReplayJoinedConfigGenerator {\n private readonly localConfig: ISessionReplayLocalConfig;\n private readonly remoteConfigFetch: RemoteConfigFetch<SessionReplayRemoteConfig>;\n\n constructor(remoteConfigFetch: RemoteConfigFetch<SessionReplayRemoteConfig>, localConfig: ISessionReplayLocalConfig) {\n this.localConfig = localConfig;\n this.remoteConfigFetch = remoteConfigFetch;\n }\n\n async generateJoinedConfig(sessionId?: string | number): Promise<SessionReplayConfigs> {\n const config: SessionReplayJoinedConfig = { ...this.localConfig };\n // Special case here as optOut is implemented via getter/setter\n config.optOut = this.localConfig.optOut;\n // We always want captureEnabled to be true, unless there's an override\n // in the remote config.\n config.captureEnabled = true;\n let remoteConfig: SessionReplayRemoteConfig | undefined;\n try {\n const samplingConfig = await this.remoteConfigFetch.getRemoteConfig(\n 'sessionReplay',\n 'sr_sampling_config',\n sessionId,\n );\n\n const privacyConfig = await this.remoteConfigFetch.getRemoteConfig(\n 'sessionReplay',\n 'sr_privacy_config',\n sessionId,\n );\n\n const ugcFilterRules = config.interactionConfig?.ugcFilterRules;\n // This is intentionally forced to only be set through the remote config.\n config.interactionConfig = await this.remoteConfigFetch.getRemoteConfig(\n 'sessionReplay',\n 'sr_interaction_config',\n sessionId,\n );\n if (config.interactionConfig && ugcFilterRules) {\n config.interactionConfig.ugcFilterRules = ugcFilterRules;\n }\n\n // This is intentionally forced to only be set through the remote config.\n config.loggingConfig = await this.remoteConfigFetch.getRemoteConfig(\n 'sessionReplay',\n 'sr_logging_config',\n sessionId,\n );\n\n if (samplingConfig || privacyConfig) {\n remoteConfig = {};\n if (samplingConfig) {\n remoteConfig.sr_sampling_config = samplingConfig;\n }\n if (privacyConfig) {\n remoteConfig.sr_privacy_config = privacyConfig;\n }\n }\n } catch (err: unknown) {\n const knownError = err as Error;\n this.localConfig.loggerProvider.warn(knownError.message);\n config.captureEnabled = false;\n }\n\n if (!remoteConfig) {\n return {\n localConfig: this.localConfig,\n joinedConfig: config,\n remoteConfig,\n };\n }\n\n const { sr_sampling_config: samplingConfig, sr_privacy_config: remotePrivacyConfig } = remoteConfig;\n if (samplingConfig && Object.keys(samplingConfig).length > 0) {\n if (Object.prototype.hasOwnProperty.call(samplingConfig, 'capture_enabled')) {\n config.captureEnabled = samplingConfig.capture_enabled;\n } else {\n config.captureEnabled = false;\n }\n\n if (Object.prototype.hasOwnProperty.call(samplingConfig, 'sample_rate')) {\n config.sampleRate = samplingConfig.sample_rate;\n }\n } else {\n // If config API response was valid (ie 200), but no config returned, assume that\n // customer has not yet set up config, and use sample rate from SDK options,\n // allowing for immediate replay capture\n config.captureEnabled = true;\n this.localConfig.loggerProvider.debug(\n 'Remote config successfully fetched, but no values set for project, Session Replay capture enabled.',\n );\n }\n\n // Remote config join acts somewhat like a left join between the remote and the local\n // config. That is, remote config has precedence over local values as with sampling.\n // However, non conflicting values will be added to the lists.\n // Here's an example to illustrate:\n //\n // Remote config: {'.selector1': 'MASK', '.selector2': 'UNMASK'}\n // Local config: {'.selector1': 'UNMASK', '.selector3': 'MASK'}\n //\n // Resolved config: {'.selector1': 'MASK', '.selector2': 'UNMASK', '.selector3': 'MASK'}\n // config.privacyConfig = {\n // ...(config.privacyConfig ?? {}),\n // ...remotePrivacyConfig,\n // };\n\n if (remotePrivacyConfig) {\n const localPrivacyConfig: PrivacyConfig = config.privacyConfig ?? {};\n\n const joinedPrivacyConfig: Required<PrivacyConfig> & { blockSelector: string[] } = {\n defaultMaskLevel: remotePrivacyConfig.defaultMaskLevel ?? localPrivacyConfig.defaultMaskLevel ?? 'medium',\n blockSelector: [],\n maskSelector: [],\n unmaskSelector: [],\n };\n\n const privacyConfigSelectorMap = (privacyConfig: PrivacyConfig): Record<string, 'mask' | 'unmask' | 'block'> => {\n const selectorMap: Record<string, 'mask' | 'unmask' | 'block'> = {};\n if (typeof privacyConfig.blockSelector === 'string') {\n privacyConfig.blockSelector = [privacyConfig.blockSelector];\n }\n\n for (const selector of privacyConfig.blockSelector ?? []) {\n selectorMap[selector] = 'block';\n }\n for (const selector of privacyConfig.maskSelector ?? []) {\n selectorMap[selector] = 'mask';\n }\n for (const selector of privacyConfig.unmaskSelector ?? []) {\n selectorMap[selector] = 'unmask';\n }\n return selectorMap;\n };\n\n const selectorMap: Record<string, 'mask' | 'unmask' | 'block'> = {\n ...privacyConfigSelectorMap(localPrivacyConfig),\n ...privacyConfigSelectorMap(remotePrivacyConfig),\n };\n\n for (const [selector, selectorType] of Object.entries(selectorMap)) {\n if (selectorType === 'mask') {\n joinedPrivacyConfig.maskSelector.push(selector);\n } else if (selectorType === 'block') {\n joinedPrivacyConfig.blockSelector.push(selector);\n } else if (selectorType === 'unmask') {\n joinedPrivacyConfig.unmaskSelector.push(selector);\n }\n }\n\n config.privacyConfig = removeInvalidSelectorsFromPrivacyConfig(\n joinedPrivacyConfig,\n this.localConfig.loggerProvider,\n );\n }\n\n this.localConfig.loggerProvider.debug(\n JSON.stringify({ name: 'session replay joined config', config: getDebugConfig(config) }, null, 2),\n );\n\n return {\n localConfig: this.localConfig,\n joinedConfig: config,\n remoteConfig,\n };\n }\n}\n\nexport const createSessionReplayJoinedConfigGenerator = async (apiKey: string, options: SessionReplayOptions) => {\n const localConfig = new SessionReplayLocalConfig(apiKey, options);\n const remoteConfigFetch = await createRemoteConfigFetch<SessionReplayRemoteConfig>({\n localConfig,\n configKeys: ['sessionReplay'],\n });\n\n return new SessionReplayJoinedConfigGenerator(remoteConfigFetch, localConfig);\n};\n","export const UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport const UNEXPECTED_NETWORK_ERROR_MESSAGE = 'Network error occurred, event batch rejected';\nexport const MAX_RETRIES_EXCEEDED_MESSAGE = 'Session replay event batch rejected due to exceeded retry count';\nexport const STORAGE_FAILURE = 'Failed to store session replay events in IndexedDB';\nexport const MISSING_DEVICE_ID_MESSAGE = 'Session replay event batch not sent due to missing device ID';\nexport const MISSING_API_KEY_MESSAGE = 'Session replay event batch not sent due to missing api key';\n","// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.25.2-frustrationanalytics.0';\n","import { BaseTransport, ILogger, Status } from '@amplitude/analytics-core';\nimport { getCurrentUrl, getServerUrl } from './helpers';\nimport {\n MAX_RETRIES_EXCEEDED_MESSAGE,\n MISSING_API_KEY_MESSAGE,\n MISSING_DEVICE_ID_MESSAGE,\n UNEXPECTED_ERROR_MESSAGE,\n UNEXPECTED_NETWORK_ERROR_MESSAGE,\n} from './messages';\nimport {\n SessionReplayTrackDestination as AmplitudeSessionReplayTrackDestination,\n SessionReplayDestination,\n SessionReplayDestinationContext,\n} from './typings/session-replay';\nimport { VERSION } from './version';\nimport { MAX_URL_LENGTH, KB_SIZE } from './constants';\n\nexport type PayloadBatcher = ({ version, events }: { version: number; events: string[] }) => {\n version: number;\n events: unknown[];\n};\n\nexport class SessionReplayTrackDestination implements AmplitudeSessionReplayTrackDestination {\n loggerProvider: ILogger;\n storageKey = '';\n trackServerUrl?: string;\n retryTimeout = 1000;\n private scheduled: ReturnType<typeof setTimeout> | null = null;\n payloadBatcher: PayloadBatcher;\n queue: SessionReplayDestinationContext[] = [];\n\n constructor({\n trackServerUrl,\n loggerProvider,\n payloadBatcher,\n }: {\n trackServerUrl?: string;\n loggerProvider: ILogger;\n payloadBatcher?: PayloadBatcher;\n }) {\n this.loggerProvider = loggerProvider;\n this.payloadBatcher = payloadBatcher ? payloadBatcher : (payload) => payload;\n this.trackServerUrl = trackServerUrl;\n }\n\n sendEventsList(destinationData: SessionReplayDestination) {\n this.addToQueue({\n ...destinationData,\n attempts: 0,\n timeout: 0,\n });\n }\n\n addToQueue(...list: SessionReplayDestinationContext[]) {\n const tryable = list.filter((context) => {\n if (context.attempts < (context.flushMaxRetries || 0)) {\n context.attempts += 1;\n return true;\n }\n this.completeRequest({\n context,\n err: MAX_RETRIES_EXCEEDED_MESSAGE,\n });\n return false;\n });\n tryable.forEach((context) => {\n this.queue = this.queue.concat(context);\n if (context.timeout === 0) {\n this.schedule(0);\n return;\n }\n\n setTimeout(() => {\n context.timeout = 0;\n this.schedule(0);\n }, context.timeout);\n });\n }\n\n schedule(timeout: number) {\n if (this.scheduled) return;\n this.scheduled = setTimeout(() => {\n void this.flush(true).then(() => {\n if (this.queue.length > 0) {\n this.schedule(timeout);\n }\n });\n }, timeout);\n }\n\n async flush(useRetry = false) {\n const list: SessionReplayDestinationContext[] = [];\n const later: SessionReplayDestinationContext[] = [];\n this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n this.queue = later;\n\n if (this.scheduled) {\n clearTimeout(this.scheduled);\n this.scheduled = null;\n }\n\n await Promise.all(list.map((context) => this.send(context, useRetry)));\n }\n\n async send(context: SessionReplayDestinationContext, useRetry = true) {\n const apiKey = context.apiKey;\n if (!apiKey) {\n return this.completeRequest({ context, err: MISSING_API_KEY_MESSAGE });\n }\n const deviceId = context.deviceId;\n if (!deviceId) {\n return this.completeRequest({ context, err: MISSING_DEVICE_ID_MESSAGE });\n }\n const url = getCurrentUrl();\n const version = VERSION;\n const sampleRate = context.sampleRate;\n const urlParams = new URLSearchParams({\n device_id: deviceId,\n session_id: `${context.sessionId}`,\n type: `${context.type}`,\n });\n const sessionReplayLibrary = `${context.version?.type || 'standalone'}/${context.version?.version || version}`;\n const payload = this.payloadBatcher({\n version: 1,\n events: context.events,\n });\n\n if (payload.events.length === 0) {\n this.completeRequest({ context });\n return;\n }\n\n try {\n const options: RequestInit = {\n headers: {\n 'Content-Type': 'application/json',\n Accept: '*/*',\n Authorization: `Bearer ${apiKey}`,\n 'X-Client-Version': version,\n 'X-Client-Library': sessionReplayLibrary,\n 'X-Client-Url': url.substring(0, MAX_URL_LENGTH), // limit url length to 1000 characters to avoid ELB 400 error\n 'X-Client-Sample-Rate': `${sampleRate}`,\n },\n body: JSON.stringify(payload),\n method: 'POST',\n };\n\n const serverUrl = `${getServerUrl(context.serverZone, this.trackServerUrl)}?${urlParams.toString()}`;\n const res = await fetch(serverUrl, options);\n if (res === null) {\n this.completeRequest({ context, err: UNEXPECTED_ERROR_MESSAGE });\n return;\n }\n if (!useRetry) {\n let responseBody = '';\n try {\n responseBody = JSON.stringify(res.body, null, 2);\n } catch {\n // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n }\n this.completeRequest({ context, success: `${res.status}: ${responseBody}` });\n } else {\n this.handleReponse(res.status, context);\n }\n } catch (e) {\n this.completeRequest({ context, err: e as string });\n }\n }\n\n handleReponse(status: number, context: SessionReplayDestinationContext) {\n const parsedStatus = new BaseTransport().buildStatus(status);\n switch (parsedStatus) {\n case Status.Success:\n this.handleSuccessResponse(context);\n break;\n case Status.Failed:\n this.handleOtherResponse(context);\n break;\n default:\n this.completeRequest({ context, err: UNEXPECTED_NETWORK_ERROR_MESSAGE });\n }\n }\n\n handleSuccessResponse(context: SessionReplayDestinationContext) {\n const sizeOfEventsList = Math.round(new Blob(context.events).size / KB_SIZE);\n this.completeRequest({\n context,\n success: `Session replay event batch tracked successfully for session id ${context.sessionId}, size of events: ${sizeOfEventsList} KB`,\n });\n }\n\n handleOtherResponse(context: SessionReplayDestinationContext) {\n this.addToQueue({\n ...context,\n timeout: context.attempts * this.retryTimeout,\n });\n }\n\n completeRequest({\n context,\n err,\n success,\n }: {\n context: SessionReplayDestinationContext;\n err?: string;\n success?: string;\n }) {\n void context.onComplete();\n if (err) {\n this.loggerProvider.warn(err);\n } else if (success) {\n this.loggerProvider.log(success);\n }\n }\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst transactionDoneMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(this.request);\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nconst advanceMethodProps = ['continue', 'continuePrimaryKey', 'advance'];\nconst methodMap = {};\nconst advanceResults = new WeakMap();\nconst ittrProxiedCursorToOriginalProxy = new WeakMap();\nconst cursorIteratorTraps = {\n get(target, prop) {\n if (!advanceMethodProps.includes(prop))\n return target[prop];\n let cachedFunc = methodMap[prop];\n if (!cachedFunc) {\n cachedFunc = methodMap[prop] = function (...args) {\n advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args));\n };\n }\n return cachedFunc;\n },\n};\nasync function* iterate(...args) {\n // tslint:disable-next-line:no-this-assignment\n let cursor = this;\n if (!(cursor instanceof IDBCursor)) {\n cursor = await cursor.openCursor(...args);\n }\n if (!cursor)\n return;\n cursor = cursor;\n const proxiedCursor = new Proxy(cursor, cursorIteratorTraps);\n ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor);\n // Map this double-proxy back to the original, so other cursor methods work.\n reverseTransformCache.set(proxiedCursor, unwrap(cursor));\n while (cursor) {\n yield proxiedCursor;\n // If one of the advancing methods was not called, call continue().\n cursor = await (advanceResults.get(proxiedCursor) || cursor.continue());\n advanceResults.delete(proxiedCursor);\n }\n}\nfunction isIteratorProp(target, prop) {\n return ((prop === Symbol.asyncIterator &&\n instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor])) ||\n (prop === 'iterate' && instanceOfAny(target, [IDBIndex, IDBObjectStore])));\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get(target, prop, receiver) {\n if (isIteratorProp(target, prop))\n return iterate;\n return oldTraps.get(target, prop, receiver);\n },\n has(target, prop) {\n return isIteratorProp(target, prop) || oldTraps.has(target, prop);\n },\n}));\n\nexport { deleteDB, openDB, unwrap, wrap };\n","import { MAX_EVENT_LIST_SIZE_IN_BYTES, MAX_INTERVAL, MIN_INTERVAL } from '../constants';\nimport { Events, EventsStore, SendingSequencesReturn } from '../typings/session-replay';\nimport { ILogger } from '@amplitude/analytics-core';\n\nexport type InstanceArgs = {\n loggerProvider: ILogger;\n minInterval?: number;\n maxInterval?: number;\n maxPersistedEventsSize?: number;\n};\n\nexport abstract class BaseEventsStore<KeyType> implements EventsStore<KeyType> {\n protected readonly loggerProvider: ILogger;\n private minInterval = MIN_INTERVAL;\n private maxInterval = MAX_INTERVAL;\n private maxPersistedEventsSize = MAX_EVENT_LIST_SIZE_IN_BYTES;\n private interval = this.minInterval;\n private _timeAtLastSplit = Date.now(); // Initialize this so we have a point of comparison when events are recorded\n\n public get timeAtLastSplit() {\n return this._timeAtLastSplit;\n }\n\n constructor(args: InstanceArgs) {\n this.loggerProvider = args.loggerProvider;\n this.minInterval = args.minInterval ?? this.minInterval;\n this.maxInterval = args.maxInterval ?? this.maxInterval;\n this.maxPersistedEventsSize = args.maxPersistedEventsSize ?? this.maxPersistedEventsSize;\n }\n\n abstract addEventToCurrentSequence(\n sessionId: string | number,\n event: string,\n ): Promise<SendingSequencesReturn<KeyType> | undefined>;\n abstract getSequencesToSend(): Promise<SendingSequencesReturn<KeyType>[] | undefined>;\n abstract storeCurrentSequence(sessionId: number): Promise<SendingSequencesReturn<KeyType> | undefined>;\n abstract storeSendingEvents(sessionId: string | number, events: Events): Promise<KeyType | undefined>;\n abstract cleanUpSessionEventsStore(sessionId: number, sequenceId: KeyType): Promise<void>;\n\n /**\n * Determines whether to send the events list to the backend and start a new\n * empty events list, based on the size of the list as well as the last time sent\n * @param nextEventString\n * @returns boolean\n */\n shouldSplitEventsList = (events: Events, nextEventString: string): boolean => {\n const sizeOfNextEvent = new Blob([nextEventString]).size;\n const sizeOfEventsList = new Blob(events).size;\n if (sizeOfEventsList + sizeOfNextEvent >= this.maxPersistedEventsSize) {\n return true;\n }\n if (Date.now() - this.timeAtLastSplit > this.interval && events.length) {\n this.interval = Math.min(this.maxInterval, this.interval + this.minInterval);\n this._timeAtLastSplit = Date.now();\n return true;\n }\n return false;\n };\n}\n","import { SessionReplayRemoteConfig } from '../config/types';\nimport { Events } from '../typings/session-replay';\n\nexport enum RecordingStatus {\n RECORDING = 'recording',\n SENT = 'sent',\n}\n\nexport interface IDBStoreSequence {\n events: Events;\n status: RecordingStatus;\n}\n\ninterface IDBRemoteConfig {\n config: SessionReplayRemoteConfig;\n lastFetchedSessionId: number | undefined;\n}\nexport interface IDBStoreSession {\n currentSequenceId: number;\n sessionSequences: {\n [sequenceId: number]: IDBStoreSequence;\n };\n}\n\nexport interface IDBStore {\n remoteConfig?: IDBRemoteConfig;\n [sessionId: number]: IDBStoreSession;\n}\n","import { STORAGE_PREFIX, getGlobalScope } from '@amplitude/analytics-core';\nimport { DBSchema, IDBPDatabase, openDB } from 'idb';\nimport { STORAGE_FAILURE } from '../messages';\nimport { EventType, Events, SendingSequencesReturn } from '../typings/session-replay';\nimport { BaseEventsStore, InstanceArgs as BaseInstanceArgs } from './base-events-store';\nimport { IDBStore, IDBStoreSession, RecordingStatus } from './legacy-idb-types';\n\nexport const currentSequenceKey = 'sessionCurrentSequence';\nexport const sequencesToSendKey = 'sequencesToSend';\nexport const remoteConfigKey = 'remoteConfig';\n\nexport interface SessionReplayDB extends DBSchema {\n sessionCurrentSequence: {\n key: number;\n value: Omit<SendingSequencesReturn<number>, 'sequenceId'>;\n };\n sequencesToSend: {\n key: number;\n value: Omit<SendingSequencesReturn<number>, 'sequenceId'>;\n indexes: { sessionId: string | number };\n };\n}\n\nexport const keyValDatabaseExists = function (): Promise<IDBDatabase | void> {\n const globalScope = getGlobalScope();\n return new Promise((resolve, reject) => {\n if (!globalScope) {\n return reject(new Error('Global scope not found'));\n }\n\n if (!globalScope.indexedDB) {\n return reject(new Error('Session Replay: cannot find indexedDB'));\n }\n\n try {\n const request = globalScope.indexedDB.open('keyval-store');\n request.onupgradeneeded = function () {\n if (request.result.version === 1) {\n request.result.close();\n request.transaction && request.transaction.abort();\n globalScope.indexedDB.deleteDatabase('keyval-store');\n resolve();\n }\n };\n request.onsuccess = function () {\n resolve(request.result);\n };\n request.onerror = function () {\n reject(request.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n};\n\nconst batchPromiseAll = async (promiseBatch: Promise<any>[]) => {\n while (promiseBatch.length > 0) {\n const chunkSize = 10;\n const batch = promiseBatch.splice(0, chunkSize);\n await Promise.all(batch);\n }\n};\n\nexport const defineObjectStores = (db: IDBPDatabase<SessionReplayDB>) => {\n let sequencesStore;\n let currentSequenceStore;\n if (!db.objectStoreNames.contains(currentSequenceKey)) {\n currentSequenceStore = db.createObjectStore(currentSequenceKey, {\n keyPath: 'sessionId',\n });\n }\n if (!db.objectStoreNames.contains(sequencesToSendKey)) {\n sequencesStore = db.createObjectStore(sequencesToSendKey, {\n keyPath: 'sequenceId',\n autoIncrement: true,\n });\n sequencesStore.createIndex('sessionId', 'sessionId');\n }\n return {\n sequencesStore,\n currentSequenceStore,\n };\n};\n\nexport const createStore = async (dbName: string) => {\n return await openDB<SessionReplayDB>(dbName, 1, {\n upgrade: defineObjectStores,\n });\n};\n\ntype InstanceArgs = {\n apiKey: string;\n db: IDBPDatabase<SessionReplayDB>;\n} & BaseInstanceArgs;\n\nexport class SessionReplayEventsIDBStore extends BaseEventsStore<number> {\n private readonly apiKey: string;\n private readonly db: IDBPDatabase<SessionReplayDB>;\n\n constructor(args: InstanceArgs) {\n super(args);\n this.apiKey = args.apiKey;\n this.db = args.db;\n }\n\n static async new(\n type: EventType,\n args: Omit<InstanceArgs, 'db'>,\n sessionId?: string | number,\n ): Promise<SessionReplayEventsIDBStore | undefined> {\n try {\n const dbSuffix = type === 'replay' ? '' : `_${type}`;\n const dbName = `${args.apiKey.substring(0, 10)}_amp_session_replay_events${dbSuffix}`;\n const db = await createStore(dbName);\n const eventsIDBStore = new SessionReplayEventsIDBStore({\n ...args,\n db,\n });\n await eventsIDBStore.transitionFromKeyValStore(sessionId);\n return eventsIDBStore;\n } catch (e) {\n args.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return;\n }\n\n async getCurrentSequenceEvents(sessionId?: number) {\n if (sessionId) {\n const events = await this.db.get('sessionCurrentSequence', sessionId);\n if (!events) {\n return undefined;\n }\n return [events];\n }\n\n const allEvents = [];\n for (const events of await this.db.getAll('sessionCurrentSequence')) {\n allEvents.push(events);\n }\n\n return allEvents;\n }\n\n getSequencesToSend = async (): Promise<SendingSequencesReturn<number>[] | undefined> => {\n try {\n const sequences: SendingSequencesReturn<number>[] = [];\n let cursor = await this.db.transaction('sequencesToSend').store.openCursor();\n while (cursor) {\n const { sessionId, events } = cursor.value;\n sequences.push({\n events,\n sequenceId: cursor.key,\n sessionId,\n });\n cursor = await cursor.continue();\n }\n\n return sequences;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeCurrentSequence = async (sessionId: number) => {\n try {\n const currentSequenceData = await this.db.get<'sessionCurrentSequence'>(currentSequenceKey, sessionId);\n if (!currentSequenceData) {\n return undefined;\n }\n\n const sequenceId = await this.db.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: currentSequenceData.events,\n });\n\n await this.db.put<'sessionCurrentSequence'>(currentSequenceKey, {\n sessionId,\n events: [],\n });\n\n return {\n ...currentSequenceData,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n addEventToCurrentSequence = async (sessionId: number, event: string) => {\n try {\n const tx = this.db.transaction<'sessionCurrentSequence', 'readwrite'>(currentSequenceKey, 'readwrite');\n const sequenceEvents = await tx.store.get(sessionId);\n if (!sequenceEvents) {\n await tx.store.put({ sessionId, events: [event] });\n return;\n }\n let eventsToSend;\n if (this.shouldSplitEventsList(sequenceEvents.events, event)) {\n eventsToSend = sequenceEvents.events;\n // set store to empty array\n await tx.store.put({ sessionId, events: [event] });\n } else {\n // add event to array\n const updatedEvents = sequenceEvents.events.concat(event);\n await tx.store.put({ sessionId, events: updatedEvents });\n }\n\n await tx.done;\n if (!eventsToSend) {\n return undefined;\n }\n\n const sequenceId = await this.storeSendingEvents(sessionId, eventsToSend);\n\n if (!sequenceId) {\n return undefined;\n }\n\n return {\n events: eventsToSend,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeSendingEvents = async (sessionId: number, events: Events) => {\n try {\n const sequenceId = await this.db.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: events,\n });\n return sequenceId;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n cleanUpSessionEventsStore = async (_sessionId: number, sequenceId?: number) => {\n if (!sequenceId) {\n return;\n }\n try {\n await this.db.delete<'sequencesToSend'>(sequencesToSendKey, sequenceId);\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n };\n\n transitionFromKeyValStore = async (sessionId?: string | number) => {\n try {\n const keyValDb = await keyValDatabaseExists();\n if (!keyValDb) {\n return;\n }\n\n const transitionCurrentSessionSequences = async (numericSessionId: number, sessionStore: IDBStoreSession) => {\n const currentSessionSequences = sessionStore.sessionSequences;\n const promisesToBatch: Promise<number | SendingSequencesReturn<number> | undefined>[] = [];\n\n Object.keys(currentSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n const sequence = currentSessionSequences[numericSequenceId];\n if (numericSequenceId === sessionStore.currentSequenceId) {\n const eventAddPromises: Promise<SendingSequencesReturn<number> | undefined>[] = sequence.events.map(\n async (event) => this.addEventToCurrentSequence(numericSessionId, event),\n );\n promisesToBatch.push(...eventAddPromises);\n } else if (sequence.status !== RecordingStatus.SENT) {\n promisesToBatch.push(this.storeSendingEvents(numericSessionId, sequence.events));\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n };\n\n const storageKey = `${STORAGE_PREFIX}_${this.apiKey.substring(0, 10)}`;\n try {\n const getAllRequest = keyValDb.transaction('keyval').objectStore('keyval').getAll(storageKey);\n const transitionPromise = new Promise<void>((resolve) => {\n getAllRequest.onsuccess = async (e) => {\n const storedReplaySessionContextList = e && ((e.target as IDBRequest).result as IDBStore[]);\n const storedReplaySessionContexts = storedReplaySessionContextList && storedReplaySessionContextList[0];\n if (storedReplaySessionContexts) {\n const promisesToBatch: Promise<any>[] = [];\n\n Object.keys(storedReplaySessionContexts).forEach((storedSessionId) => {\n const numericSessionId = parseInt(storedSessionId, 10);\n const oldSessionStore = storedReplaySessionContexts[numericSessionId];\n\n if (sessionId === numericSessionId) {\n promisesToBatch.push(transitionCurrentSessionSequences(numericSessionId, oldSessionStore));\n } else {\n const oldSessionSequences = oldSessionStore.sessionSequences;\n Object.keys(oldSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n if (oldSessionSequences[numericSequenceId].status !== RecordingStatus.SENT) {\n promisesToBatch.push(\n this.storeSendingEvents(numericSessionId, oldSessionSequences[numericSequenceId].events),\n );\n }\n });\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n }\n resolve();\n };\n });\n\n await transitionPromise;\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.indexedDB.deleteDatabase('keyval-store');\n }\n } catch (e) {\n this.loggerProvider.warn(`Failed to transition session replay events from keyval to new store: ${e as string}`);\n }\n } catch (e) {\n this.loggerProvider.warn(\n `Failed to access keyval store: ${\n e as string\n }. For more information, visit: https://www.docs.developers.amplitude.com/session-replay/sdks/standalone/#indexeddb-best-practices`,\n );\n }\n };\n}\n","import { Events, SendingSequencesReturn } from '../typings/session-replay';\nimport { BaseEventsStore } from './base-events-store';\n\nexport class InMemoryEventsStore extends BaseEventsStore<number> {\n private finalizedSequences: Record<number, { sessionId: string | number; events: string[] }> = {};\n private sequences: Record<string | number, string[]> = {};\n private sequenceId = 0;\n\n private resetCurrentSequence(sessionId: string | number) {\n this.sequences[sessionId] = [];\n }\n\n private addSequence(sessionId: string | number): SendingSequencesReturn<number> {\n const sequenceId = this.sequenceId++;\n const events = [...this.sequences[sessionId]];\n this.finalizedSequences[sequenceId] = { sessionId, events };\n this.resetCurrentSequence(sessionId);\n return { sequenceId, events, sessionId };\n }\n\n async getSequencesToSend(): Promise<SendingSequencesReturn<number>[] | undefined> {\n return Object.entries(this.finalizedSequences).map(([sequenceId, { sessionId, events }]) => ({\n sequenceId: Number(sequenceId),\n sessionId,\n events,\n }));\n }\n\n async storeCurrentSequence(sessionId: string | number): Promise<SendingSequencesReturn<number> | undefined> {\n if (!this.sequences[sessionId]) {\n return undefined;\n }\n return this.addSequence(sessionId);\n }\n\n async addEventToCurrentSequence(\n sessionId: number,\n event: string,\n ): Promise<SendingSequencesReturn<number> | undefined> {\n if (!this.sequences[sessionId]) {\n this.resetCurrentSequence(sessionId);\n }\n\n let sequenceReturn: SendingSequencesReturn<number> | undefined;\n if (this.shouldSplitEventsList(this.sequences[sessionId], event)) {\n sequenceReturn = this.addSequence(sessionId);\n }\n\n this.sequences[sessionId].push(event);\n\n return sequenceReturn;\n }\n\n async storeSendingEvents(sessionId: number, events: Events): Promise<number | undefined> {\n this.finalizedSequences[this.sequenceId] = { sessionId, events };\n\n return this.sequenceId++;\n }\n\n async cleanUpSessionEventsStore(_sessionId: number, sequenceId?: number): Promise<void> {\n if (sequenceId !== undefined) {\n delete this.finalizedSequences[sequenceId];\n }\n }\n}\n","import {\n SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n EventsStore,\n EventType,\n StoreType,\n} from '../typings/session-replay';\n\nimport { SessionReplayJoinedConfig } from '../config/types';\nimport { getStorageSize } from '../helpers';\nimport { PayloadBatcher, SessionReplayTrackDestination } from '../track-destination';\nimport { SessionReplayEventsIDBStore } from './events-idb-store';\nimport { InMemoryEventsStore } from './events-memory-store';\n\nexport const createEventsManager = async <Type extends EventType>({\n config,\n sessionId,\n minInterval,\n maxInterval,\n type,\n payloadBatcher,\n storeType,\n}: {\n config: SessionReplayJoinedConfig;\n type: Type;\n minInterval?: number;\n maxInterval?: number;\n sessionId?: string | number;\n payloadBatcher?: PayloadBatcher;\n storeType: StoreType;\n}): Promise<AmplitudeSessionReplayEventsManager<Type, string>> => {\n const trackDestination = new SessionReplayTrackDestination({\n ...config,\n loggerProvider: config.loggerProvider,\n payloadBatcher,\n });\n\n const getMemoryStore = (): EventsStore<number> => {\n return new InMemoryEventsStore({\n loggerProvider: config.loggerProvider,\n maxInterval,\n minInterval,\n });\n };\n\n const getIdbStoreOrFallback = async (): Promise<EventsStore<number>> => {\n const store = await SessionReplayEventsIDBStore.new(\n type,\n {\n loggerProvider: config.loggerProvider,\n minInterval,\n maxInterval,\n apiKey: config.apiKey,\n },\n sessionId,\n );\n config.loggerProvider.log('Failed to initialize idb store, falling back to memory store.');\n return store ?? getMemoryStore();\n };\n\n const store: EventsStore<number> = storeType === 'idb' ? await getIdbStoreOrFallback() : getMemoryStore();\n\n /**\n * Immediately sends events to the track destination.\n */\n const sendEventsList = ({\n events,\n sessionId,\n deviceId,\n sequenceId,\n }: {\n events: string[];\n sessionId: string | number;\n deviceId: string;\n sequenceId?: number;\n }) => {\n if (config.debugMode) {\n getStorageSize()\n .then(({ totalStorageSize, percentOfQuota, usageDetails }) => {\n config.loggerProvider.debug(\n `Total storage size: ${totalStorageSize} KB, percentage of quota: ${percentOfQuota}%, usage details: ${usageDetails}`,\n );\n })\n .catch(() => {\n // swallow error\n });\n }\n\n trackDestination.sendEventsList({\n events: events,\n sessionId: sessionId,\n flushMaxRetries: config.flushMaxRetries,\n apiKey: config.apiKey,\n deviceId: deviceId,\n sampleRate: config.sampleRate,\n serverZone: config.serverZone,\n version: config.version,\n type,\n onComplete: async () => {\n await store.cleanUpSessionEventsStore(sessionId, sequenceId);\n return;\n },\n });\n };\n\n const sendCurrentSequenceEvents = ({ sessionId, deviceId }: { sessionId: number; deviceId: string }) => {\n store\n .storeCurrentSequence(sessionId)\n .then((currentSequence) => {\n if (currentSequence) {\n sendEventsList({\n sequenceId: currentSequence.sequenceId,\n events: currentSequence.events,\n sessionId: currentSequence.sessionId,\n deviceId,\n });\n }\n })\n .catch((e) => {\n config.loggerProvider.warn('Failed to get current sequence of session replay events for session:', e);\n });\n };\n\n const sendStoredEvents = async ({ deviceId }: { deviceId: string }) => {\n const sequencesToSend = await store.getSequencesToSend();\n sequencesToSend &&\n sequencesToSend.forEach((sequence) => {\n sendEventsList({\n sequenceId: sequence.sequenceId,\n events: sequence.events,\n sessionId: sequence.sessionId,\n deviceId,\n });\n });\n };\n\n const addEvent = ({\n event,\n sessionId,\n deviceId,\n }: {\n event: { type: Type; data: string };\n sessionId: number;\n deviceId: string;\n }) => {\n store\n .addEventToCurrentSequence(sessionId, event.data)\n .then((sequenceToSend) => {\n return (\n sequenceToSend &&\n sendEventsList({\n sequenceId: sequenceToSend.sequenceId,\n events: sequenceToSend.events,\n sessionId: sequenceToSend.sessionId,\n deviceId,\n })\n );\n })\n .catch((e) => {\n config.loggerProvider.warn('Failed to add event to session replay capture:', e);\n });\n };\n\n async function flush(useRetry = false) {\n return trackDestination.flush(useRetry);\n }\n\n return {\n sendCurrentSequenceEvents,\n addEvent,\n sendStoredEvents,\n flush,\n };\n};\n","import {\n SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n EventsManagerWithType,\n} from '../typings/session-replay';\n\n/**\n * \"Registers\" events managers internally. When an event is added this class routes the event to the correct\n * manager. For all send or flush methods this will invoke the event for all registered managers.\n */\nexport class MultiEventManager<EventType, EventDataType>\n implements AmplitudeSessionReplayEventsManager<EventType, EventDataType>\n{\n private managers: Map<EventType, AmplitudeSessionReplayEventsManager<EventType, EventDataType>>;\n\n constructor(...managers: EventsManagerWithType<EventType, EventDataType>[]) {\n const managersMap = new Map<EventType, AmplitudeSessionReplayEventsManager<EventType, EventDataType>>();\n managers.forEach((t) => {\n managersMap.set(t.name, t.manager);\n });\n this.managers = managersMap;\n }\n\n async sendStoredEvents(opts: { deviceId: string }): Promise<void> {\n const promises: Promise<void>[] = [];\n this.managers.forEach((manager) => {\n promises.push(manager.sendStoredEvents(opts));\n });\n await Promise.all(promises);\n }\n\n addEvent({\n sessionId,\n event,\n deviceId,\n }: {\n sessionId: number;\n event: { type: EventType; data: EventDataType };\n deviceId: string;\n }): void {\n this.managers.get(event.type)?.addEvent({ sessionId, event, deviceId });\n }\n\n sendCurrentSequenceEvents({ sessionId, deviceId }: { sessionId: number; deviceId: string }): void {\n this.managers.forEach((manager) => {\n manager.sendCurrentSequenceEvents({ sessionId, deviceId });\n });\n }\n\n async flush(useRetry?: boolean | undefined): Promise<void> {\n const promises: Promise<void>[] = [];\n this.managers.forEach((manager) => {\n promises.push(manager.flush(useRetry));\n });\n await Promise.all(promises);\n }\n}\n","const testableAccessors = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype = {};\nconst isAngularZonePresent = () => {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key])\n return untaintedBasePrototype[key];\n const defaultObj = globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a, _b;\n return Boolean(\n (_b = (_a = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a;\n return typeof defaultPrototype[method] === \"function\" && ((_a = defaultPrototype[method]) == null ? void 0 : _a.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent()) {\n untaintedBasePrototype[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch {\n return defaultPrototype;\n }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache[cacheKey])\n return untaintedAccessorCache[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedAccessor = (_a = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache[cacheKey])\n return untaintedMethodCache[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n) {\n return getUntaintedAccessor(\"Node\", n, \"childNodes\");\n}\nfunction parentNode(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentNode\");\n}\nfunction parentElement(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentElement\");\n}\nfunction textContent(n) {\n return getUntaintedAccessor(\"Node\", n, \"textContent\");\n}\nfunction contains(n, other) {\n return getUntaintedMethod(\"Node\", n, \"contains\")(other);\n}\nfunction getRootNode(n) {\n return getUntaintedMethod(\"Node\", n, \"getRootNode\")();\n}\nfunction host(n) {\n if (!n || !(\"host\" in n)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n, \"host\");\n}\nfunction styleSheets(n) {\n return n.styleSheets;\n}\nfunction shadowRoot(n) {\n if (!n || !(\"shadowRoot\" in n)) return null;\n return getUntaintedAccessor(\"Element\", n, \"shadowRoot\");\n}\nfunction querySelector(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nconst index = {\n childNodes,\n parentNode,\n parentElement,\n textContent,\n contains,\n getRootNode,\n host,\n styleSheets,\n shadowRoot,\n querySelector,\n querySelectorAll,\n mutationObserver: mutationObserverCtor\n};\nexport {\n childNodes,\n contains,\n index as default,\n getRootNode,\n getUntaintedAccessor,\n getUntaintedMethod,\n getUntaintedPrototype,\n host,\n isAngularZonePresent,\n mutationObserverCtor,\n parentElement,\n parentNode,\n querySelector,\n querySelectorAll,\n shadowRoot,\n styleSheets,\n textContent\n};\n//# sourceMappingURL=rrweb-utils.js.map\n","import { getGlobalScope } from '@amplitude/analytics-core';\nimport dom from '@amplitude/rrweb-utils';\nimport type { eventWithTime, scrollCallback } from '@amplitude/rrweb-types';\n\n// These functions are not exposed in rrweb package, so we will define it here to use\n// Ignoring this function since this is copied from rrweb\n/* istanbul ignore next */\nexport function getWindowScroll(win: Window) {\n const doc = win.document;\n return {\n left: doc.scrollingElement\n ? doc.scrollingElement.scrollLeft\n : win.pageXOffset !== undefined\n ? win.pageXOffset\n : doc.documentElement.scrollLeft ||\n (doc?.body && dom.parentElement(doc.body)?.scrollLeft) ||\n doc?.body?.scrollLeft ||\n 0,\n top: doc.scrollingElement\n ? doc.scrollingElement.scrollTop\n : win.pageYOffset !== undefined\n ? win.pageYOffset\n : doc?.documentElement.scrollTop ||\n (doc?.body && dom.parentElement(doc.body)?.scrollTop) ||\n doc?.body?.scrollTop ||\n 0,\n };\n}\n\nexport function getWindowHeight(): number {\n const globalScope = getGlobalScope();\n return (\n globalScope?.innerHeight ||\n (document.documentElement && document.documentElement.clientHeight) ||\n (document.body && document.body.clientHeight) ||\n 0\n );\n}\n\nexport function getWindowWidth(): number {\n const globalScope = getGlobalScope();\n return (\n globalScope?.innerWidth ||\n (document.documentElement && document.documentElement.clientWidth) ||\n (document.body && document.body.clientWidth) ||\n 0\n );\n}\n\nexport type Mirror = {\n getNode: (id: number) => Node | null;\n};\n\nexport type RecordFunction = {\n (options: {\n emit: (event: eventWithTime) => void;\n inlineStylesheet?: boolean;\n hooks?: {\n mouseInteraction?: any;\n scroll?: scrollCallback;\n };\n maskAllInputs?: boolean;\n maskTextClass?: string;\n blockClass?: string;\n blockSelector?: string;\n maskInputFn?: (text: string, element: HTMLElement | null) => string;\n maskTextFn?: (text: string, element: HTMLElement | null) => string;\n maskTextSelector?: string;\n recordCanvas?: boolean;\n errorHandler?: (error: unknown) => boolean;\n plugins?: any[];\n applyBackgroundColorToBlockedElements?: boolean;\n }): (() => void) | undefined;\n addCustomEvent: (eventName: string, eventData: any) => void;\n mirror: Mirror;\n};\n","/* istanbul ignore file */\n\n// DO NOT EDIT (unless you know what you're doing)\n// Taken directly from git@github.com:antonmedv/finder.git@77d33158440dfffee4a300d2975b43a5283004ab\n\n/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\n/* eslint-disable prefer-const */\n\n// License: MIT\n// Author: Anton Medvedev <anton@medv.io>\n// Source: https://github.com/antonmedv/finder\n\ntype Knot = {\n name: string;\n penalty: number;\n level?: number;\n};\n\ntype Path = Knot[];\n\nexport type Options = {\n root: Element;\n idName: (name: string) => boolean;\n className: (name: string) => boolean;\n tagName: (name: string) => boolean;\n attr: (name: string, value: string) => boolean;\n seedMinLength: number;\n optimizedMinLength: number;\n threshold: number;\n maxNumberOfTries: number;\n timeoutMs: number | undefined;\n};\n\nlet config: Options;\nlet rootDocument: Document | Element;\nlet start: Date;\n\nexport function finder(input: Element, options?: Partial<Options>): string {\n start = new Date();\n if (input.nodeType !== Node.ELEMENT_NODE) {\n throw new Error(`Can't generate CSS selector for non-element node type.`);\n }\n if ('html' === input.tagName.toLowerCase()) {\n return 'html';\n }\n const defaults: Options = {\n root: document.body,\n idName: (_name: string) => true,\n className: (_name: string) => true,\n tagName: (_name: string) => true,\n attr: (_name: string, _value: string) => false,\n seedMinLength: 1,\n optimizedMinLength: 2,\n threshold: 1000,\n maxNumberOfTries: 10000,\n timeoutMs: undefined,\n };\n\n config = { ...defaults, ...options };\n rootDocument = findRootDocument(config.root, defaults);\n\n let path = bottomUpSearch(input, 'all', () =>\n bottomUpSearch(input, 'two', () => bottomUpSearch(input, 'one', () => bottomUpSearch(input, 'none'))),\n );\n\n if (path) {\n const optimized = sort(optimize(path, input));\n if (optimized.length > 0) {\n path = optimized[0];\n }\n return selector(path);\n } else {\n throw new Error(`Selector was not found.`);\n }\n}\n\nfunction findRootDocument(rootNode: Element | Document, defaults: Options) {\n if (rootNode.nodeType === Node.DOCUMENT_NODE) {\n return rootNode;\n }\n if (rootNode === defaults.root) {\n return rootNode.ownerDocument as Document;\n }\n return rootNode;\n}\n\nfunction bottomUpSearch(\n input: Element,\n limit: 'all' | 'two' | 'one' | 'none',\n fallback?: () => Path | null,\n): Path | null {\n let path: Path | null = null;\n let stack: Knot[][] = [];\n let current: Element | null = input;\n let i = 0;\n while (current) {\n const elapsedTime = new Date().getTime() - start.getTime();\n if (config.timeoutMs !== undefined && elapsedTime > config.timeoutMs) {\n throw new Error(`Timeout: Can't find a unique selector after ${elapsedTime}ms`);\n }\n let level: Knot[] = maybe(id(current)) ||\n maybe(...attr(current)) ||\n maybe(...classNames(current)) ||\n maybe(tagName(current)) || [any()];\n const nth = index(current);\n if (limit == 'all') {\n if (nth) {\n level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n }\n } else if (limit == 'two') {\n level = level.slice(0, 1);\n if (nth) {\n level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n }\n } else if (limit == 'one') {\n const [node] = (level = level.slice(0, 1));\n if (nth && dispensableNth(node)) {\n level = [nthChild(node, nth)];\n }\n } else if (limit == 'none') {\n level = [any()];\n if (nth) {\n level = [nthChild(level[0], nth)];\n }\n }\n for (let node of level) {\n node.level = i;\n }\n stack.push(level);\n if (stack.length >= config.seedMinLength) {\n path = findUniquePath(stack, fallback);\n if (path) {\n break;\n }\n }\n current = current.parentElement;\n i++;\n }\n if (!path) {\n path = findUniquePath(stack, fallback);\n }\n if (!path && fallback) {\n return fallback();\n }\n return path;\n}\n\nfunction findUniquePath(stack: Knot[][], fallback?: () => Path | null): Path | null {\n const paths = sort(combinations(stack));\n if (paths.length > config.threshold) {\n return fallback ? fallback() : null;\n }\n for (let candidate of paths) {\n if (unique(candidate)) {\n return candidate;\n }\n }\n return null;\n}\n\nfunction selector(path: Path): string {\n let node = path[0];\n let query = node.name;\n for (let i = 1; i < path.length; i++) {\n const level = path[i].level || 0;\n if (node.level === level - 1) {\n query = `${path[i].name} > ${query}`;\n } else {\n query = `${path[i].name} ${query}`;\n }\n node = path[i];\n }\n return query;\n}\n\nfunction penalty(path: Path): number {\n return path.map((node) => node.penalty).reduce((acc, i) => acc + i, 0);\n}\n\nfunction unique(path: Path) {\n const css = selector(path);\n switch (rootDocument.querySelectorAll(css).length) {\n case 0:\n throw new Error(`Can't select any node with this selector: ${css}`);\n case 1:\n return true;\n default:\n return false;\n }\n}\n\nfunction id(input: Element): Knot | null {\n const elementId = input.getAttribute('id');\n if (elementId && config.idName(elementId)) {\n return {\n name: '#' + CSS.escape(elementId),\n penalty: 0,\n };\n }\n return null;\n}\n\nfunction attr(input: Element): Knot[] {\n const attrs = Array.from(input.attributes).filter((attr) => config.attr(attr.name, attr.value));\n return attrs.map(\n (attr): Knot => ({\n name: `[${CSS.escape(attr.name)}=\"${CSS.escape(attr.value)}\"]`,\n penalty: 0.5,\n }),\n );\n}\n\nfunction classNames(input: Element): Knot[] {\n const names = Array.from(input.classList).filter(config.className);\n return names.map(\n (name): Knot => ({\n name: '.' + CSS.escape(name),\n penalty: 1,\n }),\n );\n}\n\nfunction tagName(input: Element): Knot | null {\n const name = input.tagName.toLowerCase();\n if (config.tagName(name)) {\n return {\n name,\n penalty: 2,\n };\n }\n return null;\n}\n\nfunction any(): Knot {\n return {\n name: '*',\n penalty: 3,\n };\n}\n\nfunction index(input: Element): number | null {\n const parent = input.parentNode;\n if (!parent) {\n return null;\n }\n let child = parent.firstChild;\n if (!child) {\n return null;\n }\n let i = 0;\n while (child) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n i++;\n }\n if (child === input) {\n break;\n }\n child = child.nextSibling;\n }\n return i;\n}\n\nfunction nthChild(node: Knot, i: number): Knot {\n return {\n name: node.name + `:nth-child(${i})`,\n penalty: node.penalty + 1,\n };\n}\n\nfunction dispensableNth(node: Knot) {\n return node.name !== 'html' && !node.name.startsWith('#');\n}\n\nfunction maybe(...level: (Knot | null)[]): Knot[] | null {\n const list = level.filter(notEmpty);\n if (list.length > 0) {\n return list;\n }\n return null;\n}\n\nfunction notEmpty<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nfunction* combinations(stack: Knot[][], path: Knot[] = []): Generator<Knot[]> {\n if (stack.length > 0) {\n for (let node of stack[0]) {\n yield* combinations(stack.slice(1, stack.length), path.concat(node));\n }\n } else {\n yield path;\n }\n}\n\nfunction sort(paths: Iterable<Path>): Path[] {\n return [...paths].sort((a, b) => penalty(a) - penalty(b));\n}\n\ntype Scope = {\n counter: number;\n visited: Map<string, boolean>;\n};\n\nfunction* optimize(\n path: Path,\n input: Element,\n scope: Scope = {\n counter: 0,\n visited: new Map<string, boolean>(),\n },\n): Generator<Knot[]> {\n if (path.length > 2 && path.length > config.optimizedMinLength) {\n for (let i = 1; i < path.length - 1; i++) {\n if (scope.counter > config.maxNumberOfTries) {\n return; // Okay At least I tried!\n }\n scope.counter += 1;\n const newPath = [...path];\n newPath.splice(i, 1);\n const newPathKey = selector(newPath);\n if (scope.visited.has(newPathKey)) {\n return;\n }\n if (unique(newPath) && same(newPath, input)) {\n yield newPath;\n scope.visited.set(newPathKey, true);\n yield* optimize(newPath, input, scope);\n }\n }\n }\n}\n\nfunction same(path: Path, input: Element) {\n return rootDocument.querySelector(selector(path)) === input;\n}\n","import type { mouseInteractionCallBack } from '@amplitude/rrweb-types';\nimport { MouseInteractions } from '@amplitude/rrweb-types';\nimport { getWindowScroll, Mirror } from '../utils/rrweb';\nimport { SessionReplayEventsManager as AmplitudeSessionReplayEventsManager } from '../typings/session-replay';\nimport { PayloadBatcher } from 'src/track-destination';\nimport { finder } from '../libs/finder';\nimport { getGlobalScope, ILogger } from '@amplitude/analytics-core';\nimport { UGCFilterRule } from 'src/config/types';\nimport { getPageUrl } from '../helpers';\n\n// exported for testing\nexport type ClickEvent = {\n timestamp: number;\n x: number;\n y: number;\n viewportWidth: number;\n viewportHeight: number;\n pageUrl: string;\n selector?: string;\n type: 'click';\n};\n\n// exported for testing\nexport type ClickEventWithCount = ClickEvent & { count: number };\n\ntype Options = {\n sessionId: string | number;\n deviceIdFn: () => string | undefined;\n eventsManager: AmplitudeSessionReplayEventsManager<'interaction', string>;\n mirror: Mirror;\n ugcFilterRules: UGCFilterRule[];\n};\n\nconst HOUR_IN_MILLISECONDS = 3_600_000;\n\nexport const clickNonBatcher: PayloadBatcher = ({ version, events }) => {\n const clickEvents: ClickEvent[] = [];\n events.forEach((evt: string) => {\n const record = JSON.parse(evt) as Record<string, unknown>;\n record.count = 1;\n if (record.type === 'click') {\n clickEvents.push(record as ClickEvent);\n }\n });\n return { version, events: clickEvents };\n};\n\nexport const clickBatcher: PayloadBatcher = ({ version, events }) => {\n const clickEvents: ClickEvent[] = [];\n events.forEach((evt: string) => {\n const record = JSON.parse(evt) as Record<string, unknown>;\n if (record.type === 'click') {\n clickEvents.push(record as ClickEvent);\n }\n });\n\n const reduced = clickEvents.reduce<Record<string, ClickEventWithCount>>((prev, curr) => {\n const { x, y, selector, timestamp } = curr;\n\n // round down to nearest hour.\n const hour = timestamp - (timestamp % HOUR_IN_MILLISECONDS);\n\n const k = `${x}:${y}:${selector ?? ''}:${hour}`;\n if (!prev[k]) {\n prev[k] = { ...curr, timestamp: hour, count: 1 };\n } else {\n prev[k].count += 1;\n }\n return prev;\n }, {});\n\n return { version, events: Object.values(reduced) };\n};\n\nexport const clickHook: (logger: ILogger, options: Options) => mouseInteractionCallBack =\n (logger, { eventsManager, sessionId, deviceIdFn, mirror, ugcFilterRules }) =>\n (e) => {\n if (e.type !== MouseInteractions.Click) {\n return;\n }\n\n const globalScope = getGlobalScope();\n if (!globalScope) {\n return;\n }\n\n const { location, innerHeight, innerWidth } = globalScope;\n // it only makes sense to send events if a pageUrl exists\n if (!location) {\n return;\n }\n\n const { x, y } = e;\n if (x === undefined || y === undefined) {\n return;\n }\n\n const node = mirror.getNode(e.id);\n let selector;\n if (node) {\n try {\n selector = finder(node as Element);\n } catch (err) {\n logger.debug('error resolving selector from finder');\n }\n }\n\n const { left: scrollX, top: scrollY } = getWindowScroll(globalScope as unknown as Window);\n\n const pageUrl = getPageUrl(location.href, ugcFilterRules);\n\n const event: ClickEvent = {\n x: x + scrollX,\n y: y + scrollY,\n selector,\n\n viewportHeight: innerHeight,\n viewportWidth: innerWidth,\n pageUrl,\n timestamp: Date.now(),\n type: 'click',\n };\n const deviceId = deviceIdFn();\n if (deviceId) {\n eventsManager.addEvent({ sessionId, event: { type: 'interaction', data: JSON.stringify(event) }, deviceId });\n }\n };\n","import { getGlobalScope } from '@amplitude/analytics-core';\nimport { SessionReplayJoinedConfig } from './config/types';\nimport { SessionReplayDestinationSessionMetadata } from './typings/session-replay';\nimport { getServerUrl } from './helpers';\n\ntype BeaconSendFn<T> = (pageUrl: string, payload: T) => boolean;\n\n/**\n * For very small payloads it's preferable to use the [Beacon API](https://developer.mozilla.org/en-US/docs/Web/API/Beacon_API).\n * While it doesn't provide 100% guarantees on sends, it greatly helps with overall reliability and page load performance. As\n * the Beacon API has a potential to fail due to size constraints we want to fall back to XHR if need be. This is mostly to\n * be used with 'pagehide' or 'beforeunload' events.\n *\n * Note there are only 3 CORS safelisted Content-Types you can send:\n *\n * - application/x-www-form-urlencoded\n * - multipart/form-data\n * - text/plain\n *\n * If we do not send one of these, some browsers like Chrome may not send this at all. Also we incur the overhead of a preflight\n * request. In our case we will add no additional content-type header. If you are trying to ping a server that requires this\n * header, you may want to use the regular fetch API or a different mechanism.\n */\nexport class BeaconTransport<T> {\n private sendBeacon: BeaconSendFn<T>;\n private sendXhr: BeaconSendFn<T>;\n private readonly basePageUrl: string;\n private readonly context: Omit<SessionReplayDestinationSessionMetadata, 'deviceId'>;\n private readonly apiKey: string;\n\n constructor(context: Omit<SessionReplayDestinationSessionMetadata, 'deviceId'>, config: SessionReplayJoinedConfig) {\n const globalScope = getGlobalScope();\n if (globalScope && globalScope.navigator && typeof globalScope.navigator.sendBeacon === 'function') {\n this.sendBeacon = (pageUrl, payload) => {\n try {\n if (globalScope.navigator.sendBeacon(pageUrl, JSON.stringify(payload))) {\n return true;\n }\n } catch (e) {\n // not logging error, since it would be hard to view and just adds overhead.\n }\n return false;\n };\n } else {\n this.sendBeacon = () => false;\n }\n\n this.sendXhr = (pageUrl, payload) => {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', pageUrl, true);\n xhr.setRequestHeader('Accept', '*/*');\n xhr.send(JSON.stringify(payload));\n return true;\n };\n\n this.basePageUrl = getServerUrl(config.serverZone, config.trackServerUrl);\n this.apiKey = config.apiKey;\n this.context = context;\n }\n\n send(deviceId: string, payload: T) {\n const { sessionId, type } = this.context;\n const urlParams = new URLSearchParams({\n device_id: deviceId,\n session_id: String(sessionId),\n type: String(type),\n api_key: this.apiKey,\n });\n\n const pageUrl = `${this.basePageUrl}?${urlParams.toString()}`;\n\n // ideally send using the beacon API, but there is a chance it may fail, possibly due to a payload\n // size limit. in this case, try best effort to send using xhr.\n this.sendBeacon(pageUrl, payload) || this.sendXhr(pageUrl, payload);\n }\n}\n","import { getWindowHeight, getWindowWidth } from '../utils/rrweb';\nimport type { scrollCallback, scrollPosition } from '@amplitude/rrweb-types';\nimport { BeaconTransport } from '../beacon-transport';\nimport { getGlobalScope } from '@amplitude/analytics-core';\nimport { SessionReplayJoinedConfig } from '../config/types';\nimport { SessionReplayDestinationSessionMetadata } from '../typings/session-replay';\nimport { getPageUrl } from '../helpers';\n\nexport type ScrollEvent = {\n timestamp: number; // Timestamp the event occurred\n maxScrollX: number; // Max window scroll X on a page\n maxScrollY: number; // Max window scroll Y on a page\n maxScrollHeight: number; // Max window scroll Y + window height on a page\n maxScrollWidth: number; // Max window scroll X + window width on a page\n viewportWidth: number;\n viewportHeight: number;\n pageUrl: string;\n type: 'scroll';\n};\n\nexport type ScrollEventPayload = { version: number; events: ScrollEvent[] };\n\n/**\n * This is intended to watch and update max scroll activity when loaded for a particular page.\n * A new instance should be created if the page URL changes, since by default it does not reset\n * it's max scroll state. It is intended to send very few and very small events utilizing the\n * Beacon API.\n * @see {@link BeaconTransport} for more details on Beacon API usage.\n */\nexport class ScrollWatcher {\n private timestamp = Date.now();\n private _maxScrollX: number;\n private _maxScrollY: number;\n private _maxScrollWidth: number;\n private _maxScrollHeight: number;\n private readonly transport: BeaconTransport<ScrollEventPayload>;\n private readonly config: Pick<SessionReplayJoinedConfig, 'loggerProvider' | 'interactionConfig'>;\n\n static default(\n context: Omit<SessionReplayDestinationSessionMetadata, 'deviceId'>,\n config: SessionReplayJoinedConfig,\n ): ScrollWatcher {\n return new ScrollWatcher(new BeaconTransport<ScrollEventPayload>(context, config), config);\n }\n\n constructor(\n transport: BeaconTransport<ScrollEventPayload>,\n config: Pick<SessionReplayJoinedConfig, 'loggerProvider' | 'interactionConfig'>,\n ) {\n this._maxScrollX = 0;\n this._maxScrollY = 0;\n this._maxScrollWidth = getWindowWidth();\n this._maxScrollHeight = getWindowHeight();\n this.config = config;\n\n this.transport = transport;\n }\n\n public get maxScrollX(): number {\n return this._maxScrollX;\n }\n\n public get maxScrollY(): number {\n return this._maxScrollY;\n }\n\n public get maxScrollWidth(): number {\n return this._maxScrollWidth;\n }\n\n public get maxScrollHeight(): number {\n return this._maxScrollHeight;\n }\n\n update(e: scrollPosition) {\n const now = Date.now();\n if (e.x > this._maxScrollX) {\n const width = getWindowWidth();\n this._maxScrollX = e.x;\n const maxScrollWidth = e.x + width;\n if (maxScrollWidth > this._maxScrollWidth) {\n this._maxScrollWidth = maxScrollWidth;\n }\n this.timestamp = now;\n }\n\n if (e.y > this._maxScrollY) {\n const height = getWindowHeight();\n this._maxScrollY = e.y;\n const maxScrollHeight = e.y + height;\n if (maxScrollHeight > this._maxScrollHeight) {\n this._maxScrollHeight = maxScrollHeight;\n }\n this.timestamp = now;\n }\n }\n\n hook: scrollCallback = (e: scrollPosition) => {\n this.update(e);\n };\n\n send: (deviceIdFn: () => string | undefined) => (_: PageTransitionEvent | Event) => void = (deviceIdFn) => (_) => {\n const deviceId = deviceIdFn();\n const globalScope = getGlobalScope();\n if (globalScope && deviceId) {\n this.transport.send(deviceId, {\n version: 1,\n events: [\n {\n maxScrollX: this._maxScrollX,\n maxScrollY: this._maxScrollY,\n maxScrollWidth: this._maxScrollWidth,\n maxScrollHeight: this._maxScrollHeight,\n\n viewportHeight: getWindowHeight(),\n viewportWidth: getWindowWidth(),\n pageUrl: getPageUrl(globalScope.location.href, this.config.interactionConfig?.ugcFilterRules ?? []),\n timestamp: this.timestamp,\n type: 'scroll',\n },\n ],\n });\n }\n };\n}\n","import { generateSessionReplayId } from './helpers';\nimport { SessionIdentifiers as ISessionIdentifiers } from './typings/session-replay';\n\nexport class SessionIdentifiers implements ISessionIdentifiers {\n deviceId?: string;\n sessionId?: string | number;\n sessionReplayId?: string;\n\n constructor({ sessionId, deviceId }: { sessionId?: string | number; deviceId?: string }) {\n this.deviceId = deviceId;\n this.sessionId = sessionId;\n\n if (sessionId && deviceId) {\n this.sessionReplayId = generateSessionReplayId(sessionId, deviceId);\n }\n }\n}\n","var u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\nvar fleb = new u8([\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 2,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 5,\n 5,\n 5,\n 0,\n /* unused */\n 0,\n 0,\n /* impossible */\n 0\n]);\nvar fdeb = new u8([\n 0,\n 0,\n 0,\n 0,\n 1,\n 1,\n 2,\n 2,\n 3,\n 3,\n 4,\n 4,\n 5,\n 5,\n 6,\n 6,\n 7,\n 7,\n 8,\n 8,\n 9,\n 9,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n /* unused */\n 0,\n 0\n]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function(eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n var x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar hMap = function(cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i)\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = /* @__PURE__ */ hMap(flt, 9, 0), flrm = /* @__PURE__ */ hMap(flt, 9, 1);\nvar fdm = /* @__PURE__ */ hMap(fdt, 5, 0), fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);\nvar max = function(a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function(d, p, m) {\n var o = p / 8 >> 0;\n return (d[o] | d[o + 1] << 8) >>> (p & 7) & m;\n};\nvar bits16 = function(d, p) {\n var o = p / 8 >> 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >>> (p & 7);\n};\nvar shft = function(p) {\n return (p / 8 >> 0) + (p & 7 && 1);\n};\nvar slc = function(v, s, e) {\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function(dat, buf, st) {\n var sl = dat.length;\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function(l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n if (!noSt && pos + tl * (clb + 7) > tbts)\n break;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl; ) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts)\n throw \"unexpected EOF\";\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var mxa = lbt + dbt + 18;\n while (noSt || pos + mxa < tbts) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts)\n throw \"unexpected EOF\";\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts)\n throw \"unexpected EOF\";\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = pos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt == buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function(d, p, v) {\n v <<= p & 7;\n var o = p / 8 >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function(d, p, v) {\n v <<= p & 7;\n var o = p / 8 >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function(d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [new u8(0), 0];\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function(a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function(a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function(n, l, d) {\n return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function(c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function(v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function(cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function(out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = /* @__PURE__ */ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar dflt = function(dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function(i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767;\n var pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function() {\n var a = 1, b = 0;\n return {\n p: function(d) {\n var n = a, m = b;\n var l = d.length;\n for (var i = 0; i != l; ) {\n var e = Math.min(i + 5552, l);\n for (; i < e; ++i)\n n += d[i], m += n;\n n %= 65521, m %= 65521;\n }\n a = n, b = m;\n },\n d: function() {\n return (a >>> 8 << 16 | (b & 255) << 8 | b >>> 8) + ((a & 255) << 23) * 2;\n }\n };\n};\nvar dopt = function(dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function(d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function(c, o) {\n var lv = o.level, fl2 = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function(d) {\n if ((d[0] & 15) != 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (opts === void 0) {\n opts = {};\n }\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\nfunction strToU8(str, latin1) {\n var l = str.length;\n if (!latin1 && typeof TextEncoder != \"undefined\")\n return new TextEncoder().encode(str);\n var ar = new u8(str.length + (str.length >>> 1));\n var ai = 0;\n var w = function(v) {\n ar[ai++] = v;\n };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + (l - i << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | c >>> 6), w(128 | c & 63);\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | str.charCodeAt(++i) & 1023, w(240 | c >>> 18), w(128 | c >>> 12 & 63), w(128 | c >>> 6 & 63), w(128 | c & 63);\n else\n w(224 | c >>> 12), w(128 | c >>> 6 & 63), w(128 | c & 63);\n }\n return slc(ar, 0, ai);\n}\nfunction strFromU8(dat, latin1) {\n var r = \"\";\n if (!latin1 && typeof TextDecoder != \"undefined\")\n return new TextDecoder().decode(dat);\n for (var i = 0; i < dat.length; ) {\n var c = dat[i++];\n if (c < 128 || latin1)\n r += String.fromCharCode(c);\n else if (c < 224)\n r += String.fromCharCode((c & 31) << 6 | dat[i++] & 63);\n else if (c < 240)\n r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | dat[i++] & 63);\n else\n c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | dat[i++] & 63) - 65536, r += String.fromCharCode(55296 | c >> 10, 56320 | c & 1023);\n }\n return r;\n}\nconst MARK = \"v1\";\nexport {\n MARK as M,\n strToU8 as a,\n strFromU8 as s,\n unzlibSync as u,\n zlibSync as z\n};\n//# sourceMappingURL=base-BrE4jft0.js.map\n","import { M as MARK, s as strFromU8, z as zlibSync, a as strToU8 } from \"./base-BrE4jft0.js\";\nconst pack = (event) => {\n const _e = {\n ...event,\n v: MARK\n };\n return strFromU8(zlibSync(strToU8(JSON.stringify(_e))), true);\n};\nexport {\n pack\n};\n//# sourceMappingURL=pack.js.map\n","import { getGlobalScope } from '@amplitude/analytics-core';\nimport { pack } from '@amplitude/rrweb-packer';\nimport type { eventWithTime } from '@amplitude/rrweb-types';\nimport { SessionReplayJoinedConfig } from '../config/types';\nimport { SessionReplayEventsManager } from '../typings/session-replay';\n\ninterface TaskQueue {\n event: eventWithTime;\n sessionId: string | number;\n}\n\nconst DEFAULT_TIMEOUT = 2000;\nexport class EventCompressor {\n taskQueue: TaskQueue[] = [];\n isProcessing = false;\n eventsManager?: SessionReplayEventsManager<'replay' | 'interaction', string>;\n config: SessionReplayJoinedConfig;\n deviceId: string | undefined;\n canUseIdleCallback: boolean | undefined;\n timeout: number;\n worker?: Worker;\n\n constructor(\n eventsManager: SessionReplayEventsManager<'replay' | 'interaction', string>,\n config: SessionReplayJoinedConfig,\n deviceId: string | undefined,\n workerScriptInternal?: string, // this is used for unit testing\n ) {\n const globalScope = getGlobalScope();\n this.canUseIdleCallback = globalScope && 'requestIdleCallback' in globalScope;\n this.eventsManager = eventsManager;\n this.config = config;\n this.deviceId = deviceId;\n this.timeout = config.performanceConfig?.timeout || DEFAULT_TIMEOUT;\n\n // These two lines will be changed at compile time.\n const replace: Record<string, string> = {};\n // This next line is going to be ridiculously hard to cover in unit tests, ignoring.\n /* istanbul ignore next */\n const workerScript = replace.COMPRESSION_WEBWORKER_BODY ?? workerScriptInternal;\n if (this.config.experimental?.useWebWorker && globalScope && globalScope.Worker && workerScript) {\n config.loggerProvider.log('[Experimental] Enabling web worker for compression');\n\n const worker = new Worker(URL.createObjectURL(new Blob([workerScript], { type: 'application/javascript' })));\n worker.onerror = (e) => {\n config.loggerProvider.error(e);\n };\n worker.onmessage = (e) => {\n const { compressedEvent, sessionId } = e.data as Record<string, string>;\n this.addCompressedEventToManager(compressedEvent, sessionId);\n };\n\n this.worker = worker;\n }\n }\n\n // Schedule processing during idle time\n public scheduleIdleProcessing(): void {\n if (!this.isProcessing) {\n this.isProcessing = true;\n requestIdleCallback(\n (idleDeadline) => {\n this.processQueue(idleDeadline);\n },\n { timeout: this.timeout },\n );\n }\n }\n\n // Add an event to the task queue if idle callback is supported or compress the event directly\n public enqueueEvent(event: eventWithTime, sessionId: string | number): void {\n if (this.canUseIdleCallback && this.config.performanceConfig?.enabled) {\n this.config.loggerProvider.debug('Enqueuing event for processing during idle time.');\n this.taskQueue.push({ event, sessionId });\n this.scheduleIdleProcessing();\n } else {\n this.config.loggerProvider.debug('Processing event without idle callback.');\n this.addCompressedEvent(event, sessionId);\n }\n }\n\n // Process the task queue during idle time\n public processQueue(idleDeadline: IdleDeadline): void {\n // Process tasks while there's idle time or until the max number of tasks is reached\n while (this.taskQueue.length > 0 && (idleDeadline.timeRemaining() > 0 || idleDeadline.didTimeout)) {\n const task = this.taskQueue.shift();\n if (task) {\n const { event, sessionId } = task;\n this.addCompressedEvent(event, sessionId);\n }\n }\n\n // If there are still tasks in the queue, schedule the next idle callback\n if (this.taskQueue.length > 0) {\n requestIdleCallback(\n (idleDeadline) => {\n this.processQueue(idleDeadline);\n },\n { timeout: this.timeout },\n );\n } else {\n this.isProcessing = false;\n }\n }\n\n compressEvent = (event: eventWithTime) => {\n const packedEvent = pack(event);\n return JSON.stringify(packedEvent);\n };\n\n private addCompressedEventToManager = (compressedEvent: string, sessionId: string | number) => {\n if (this.eventsManager && this.deviceId) {\n this.eventsManager.addEvent({\n event: { type: 'replay', data: compressedEvent },\n sessionId,\n deviceId: this.deviceId,\n });\n }\n };\n\n public addCompressedEvent = (event: eventWithTime, sessionId: string | number) => {\n if (this.worker) {\n // This indirectly compresses the event.\n this.worker.postMessage({ event, sessionId });\n } else {\n const compressedEvent = this.compressEvent(event);\n this.addCompressedEventToManager(compressedEvent, sessionId);\n }\n };\n\n public terminate = () => {\n this.worker?.terminate();\n };\n}\n","import {\n Logger,\n returnWrapper,\n getAnalyticsConnector,\n getGlobalScope,\n ILogger,\n LogLevel,\n} from '@amplitude/analytics-core';\n\n// Import only specific types to avoid pulling in the entire rrweb-types package\nimport { EventType as RRWebEventType, scrollCallback, eventWithTime } from '@amplitude/rrweb-types';\nimport { createSessionReplayJoinedConfigGenerator } from './config/joined-config';\nimport {\n LoggingConfig,\n SessionReplayJoinedConfig,\n SessionReplayJoinedConfigGenerator,\n SessionReplayMetadata,\n SessionReplayLocalConfig,\n SessionReplayRemoteConfig,\n} from './config/types';\nimport {\n BLOCK_CLASS,\n CustomRRwebEvent,\n DEFAULT_SESSION_REPLAY_PROPERTY,\n INTERACTION_MAX_INTERVAL,\n INTERACTION_MIN_INTERVAL,\n MASK_TEXT_CLASS,\n SESSION_REPLAY_DEBUG_PROPERTY,\n} from './constants';\nimport { createEventsManager } from './events/events-manager';\nimport { MultiEventManager } from './events/multi-manager';\nimport { generateHashCode, getDebugConfig, getPageUrl, getStorageSize, isSessionInSample, maskFn } from './helpers';\nimport { clickBatcher, clickHook, clickNonBatcher } from './hooks/click';\nimport { ScrollWatcher } from './hooks/scroll';\nimport { SessionIdentifiers } from './identifiers';\nimport {\n AmplitudeSessionReplay,\n SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n DebugInfo,\n EventType,\n EventsManagerWithType,\n SessionIdentifiers as ISessionIdentifiers,\n SessionReplayOptions,\n} from './typings/session-replay';\nimport { VERSION } from './version';\nimport { EventCompressor } from './events/event-compressor';\nimport { SafeLoggerProvider } from './logger';\n\n// Import only the type for NetworkRequestEvent to keep type safety\nimport type { NetworkRequestEvent, NetworkObservers } from './observers';\nimport type { RecordFunction } from './utils/rrweb';\n\ntype PageLeaveFn = (e: PageTransitionEvent | Event) => void;\n\nexport class SessionReplay implements AmplitudeSessionReplay {\n name = '@amplitude/session-replay-browser';\n config: SessionReplayJoinedConfig | undefined;\n joinedConfigGenerator: SessionReplayJoinedConfigGenerator | undefined;\n identifiers: ISessionIdentifiers | undefined;\n eventsManager?: AmplitudeSessionReplayEventsManager<'replay' | 'interaction', string>;\n loggerProvider: ILogger;\n recordCancelCallback: ReturnType<RecordFunction> | null = null;\n eventCount = 0;\n eventCompressor: EventCompressor | undefined;\n\n // Visible for testing only\n pageLeaveFns: PageLeaveFn[] = [];\n private scrollHook?: scrollCallback;\n private networkObservers?: NetworkObservers;\n private metadata: SessionReplayMetadata | undefined;\n\n // Cache the dynamically imported record function\n private recordFunction: RecordFunction | null = null;\n\n constructor() {\n this.loggerProvider = new SafeLoggerProvider(new Logger());\n }\n\n init(apiKey: string, options: SessionReplayOptions) {\n return returnWrapper(this._init(apiKey, options));\n }\n\n private teardownEventListeners = (teardown: boolean) => {\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.removeEventListener('blur', this.blurListener);\n globalScope.removeEventListener('focus', this.focusListener);\n !teardown && globalScope.addEventListener('blur', this.blurListener);\n !teardown && globalScope.addEventListener('focus', this.focusListener);\n // prefer pagehide to unload events, this is the standard going forward. it is not\n // 100% reliable, but is bfcache-compatible.\n if (globalScope.self && 'onpagehide' in globalScope.self) {\n globalScope.removeEventListener('pagehide', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('pagehide', this.pageLeaveListener);\n } else {\n // this has performance implications, but is the only way we can reliably send events\n // in browser that don't support pagehide.\n globalScope.removeEventListener('beforeunload', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('beforeunload', this.pageLeaveListener);\n }\n }\n };\n\n protected async _init(apiKey: string, options: SessionReplayOptions) {\n this.loggerProvider = new SafeLoggerProvider(options.loggerProvider || new Logger());\n Object.prototype.hasOwnProperty.call(options, 'logLevel') &&\n this.loggerProvider.enable(options.logLevel as LogLevel);\n this.identifiers = new SessionIdentifiers({ sessionId: options.sessionId, deviceId: options.deviceId });\n this.joinedConfigGenerator = await createSessionReplayJoinedConfigGenerator(apiKey, options);\n const { joinedConfig, localConfig, remoteConfig } = await this.joinedConfigGenerator.generateJoinedConfig(\n this.identifiers.sessionId,\n );\n this.config = joinedConfig;\n\n this.setMetadata(\n options.sessionId,\n joinedConfig,\n localConfig,\n remoteConfig,\n options.version?.version,\n VERSION,\n options.version?.type,\n );\n\n if (options.sessionId && this.config.interactionConfig?.enabled) {\n const scrollWatcher = ScrollWatcher.default(\n {\n sessionId: options.sessionId,\n type: 'interaction',\n },\n this.config,\n );\n this.pageLeaveFns = [scrollWatcher.send(this.getDeviceId.bind(this)).bind(scrollWatcher)];\n this.scrollHook = scrollWatcher.hook.bind(scrollWatcher);\n }\n\n const managers: EventsManagerWithType<EventType, string>[] = [];\n let { storeType } = this.config;\n if (storeType === 'idb' && !getGlobalScope()?.indexedDB) {\n storeType = 'memory';\n this.loggerProvider.warn('Could not use preferred indexedDB storage, reverting to in memory option.');\n }\n this.loggerProvider.log(`Using ${storeType} for event storage.`);\n try {\n const rrwebEventManager = await createEventsManager<'replay'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'replay',\n storeType,\n });\n managers.push({ name: 'replay', manager: rrwebEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating replay events manager: ${typedError.toString()}`);\n }\n\n if (this.config.interactionConfig?.enabled) {\n const payloadBatcher = this.config.interactionConfig.batch ? clickBatcher : clickNonBatcher;\n try {\n const interactionEventManager = await createEventsManager<'interaction'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'interaction',\n minInterval: this.config.interactionConfig.trackEveryNms ?? INTERACTION_MIN_INTERVAL,\n maxInterval: INTERACTION_MAX_INTERVAL,\n payloadBatcher,\n storeType,\n });\n managers.push({ name: 'interaction', manager: interactionEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating interaction events manager: ${typedError.toString()}`);\n }\n }\n\n this.eventsManager = new MultiEventManager<'replay' | 'interaction', string>(...managers);\n // To prevent too many threads.\n if (this.eventCompressor) {\n this.eventCompressor.terminate();\n }\n this.eventCompressor = new EventCompressor(this.eventsManager, this.config, this.getDeviceId());\n\n await this.initializeNetworkObservers();\n\n this.loggerProvider.log('Installing @amplitude/session-replay-browser.');\n\n this.teardownEventListeners(false);\n\n void this.initialize(true);\n }\n\n setSessionId(sessionId: string | number, deviceId?: string) {\n return returnWrapper(this.asyncSetSessionId(sessionId, deviceId));\n }\n\n async asyncSetSessionId(sessionId: string | number, deviceId?: string) {\n const previousSessionId = this.identifiers && this.identifiers.sessionId;\n if (previousSessionId) {\n this.sendEvents(previousSessionId);\n }\n\n const deviceIdForReplayId = deviceId || this.getDeviceId();\n this.identifiers = new SessionIdentifiers({\n sessionId: sessionId,\n deviceId: deviceIdForReplayId,\n });\n\n // If there is no previous session id, SDK is being initialized for the first time,\n // and config was just fetched in initialization, so no need to fetch it a second time\n if (this.joinedConfigGenerator && previousSessionId) {\n const { joinedConfig } = await this.joinedConfigGenerator.generateJoinedConfig(this.identifiers.sessionId);\n this.config = joinedConfig;\n }\n void this.recordEvents();\n }\n\n getSessionReplayProperties() {\n const config = this.config;\n const identifiers = this.identifiers;\n if (!config || !identifiers) {\n this.loggerProvider.warn('Session replay init has not been called, cannot get session replay properties.');\n return {};\n }\n\n const shouldRecord = this.getShouldRecord();\n let eventProperties: { [key: string]: string | null } = {};\n\n if (shouldRecord) {\n eventProperties = {\n [DEFAULT_SESSION_REPLAY_PROPERTY]: identifiers.sessionReplayId ? identifiers.sessionReplayId : null,\n };\n if (config.debugMode) {\n eventProperties[SESSION_REPLAY_DEBUG_PROPERTY] = JSON.stringify({\n appHash: generateHashCode(config.apiKey).toString(),\n });\n }\n }\n\n void this.addCustomRRWebEvent(\n CustomRRwebEvent.GET_SR_PROPS,\n {\n shouldRecord,\n eventProperties: eventProperties,\n },\n this.eventCount === 10,\n );\n if (this.eventCount === 10) {\n this.eventCount = 0;\n }\n this.eventCount++;\n\n return eventProperties;\n }\n\n blurListener = () => {\n this.sendEvents();\n };\n\n focusListener = () => {\n // Restart recording on focus to ensure that when user\n // switches tabs, we take a full snapshot\n void this.recordEvents(false);\n };\n\n /**\n * This is an instance member so that if init is called multiple times\n * it doesn't add another listener to the page leave event. This is to\n * prevent duplicate listener actions from firing.\n */\n private pageLeaveListener = (e: PageTransitionEvent | Event) => {\n this.pageLeaveFns.forEach((fn) => {\n fn(e);\n });\n };\n\n sendEvents(sessionId?: string | number) {\n const sessionIdToSend = sessionId || this.identifiers?.sessionId;\n const deviceId = this.getDeviceId();\n this.eventsManager &&\n sessionIdToSend &&\n deviceId &&\n this.eventsManager.sendCurrentSequenceEvents({ sessionId: sessionIdToSend, deviceId });\n }\n\n async initialize(shouldSendStoredEvents = false) {\n if (!this.identifiers?.sessionId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of session id.`);\n return Promise.resolve();\n }\n\n const deviceId = this.getDeviceId();\n if (!deviceId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of device id.`);\n return Promise.resolve();\n }\n this.eventsManager && shouldSendStoredEvents && void this.eventsManager.sendStoredEvents({ deviceId });\n\n return this.recordEvents();\n }\n\n shouldOptOut() {\n let identityStoreOptOut: boolean | undefined;\n if (this.config?.instanceName) {\n const identityStore = getAnalyticsConnector(this.config.instanceName).identityStore;\n identityStoreOptOut = identityStore.getIdentity().optOut;\n }\n\n return identityStoreOptOut !== undefined ? identityStoreOptOut : this.config?.optOut;\n }\n\n getShouldRecord() {\n if (!this.identifiers || !this.config || !this.identifiers.sessionId) {\n this.loggerProvider.warn(`Session is not being recorded due to lack of config, please call sessionReplay.init.`);\n return false;\n }\n if (!this.config.captureEnabled) {\n this.loggerProvider.log(\n `Session ${this.identifiers.sessionId} not being captured due to capture being disabled for project or because the remote config could not be fetched.`,\n );\n return false;\n }\n\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to optOut config.`);\n return false;\n }\n\n const isInSample = isSessionInSample(this.identifiers.sessionId, this.config.sampleRate);\n if (!isInSample) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to sample rate.`);\n }\n return isInSample;\n }\n\n getBlockSelectors(): string | string[] | undefined {\n // For some reason, this defaults to empty array ([]) if undefined in the compiled script.\n // Empty arrays cause errors when being evaluated in Safari.\n // Force the selector to be undefined if it's an empty array.\n const blockSelector = this.config?.privacyConfig?.blockSelector ?? [];\n if (blockSelector.length === 0) {\n return undefined;\n }\n return blockSelector;\n }\n\n getMaskTextSelectors(): string | undefined {\n if (this.config?.privacyConfig?.defaultMaskLevel === 'conservative') {\n return '*';\n }\n\n const maskSelector = this.config?.privacyConfig?.maskSelector;\n if (!maskSelector) {\n return;\n }\n\n return maskSelector as unknown as string;\n }\n\n async getRecordingPlugins(loggingConfig: LoggingConfig | undefined) {\n const plugins = [];\n\n // Default plugin settings -\n // {\n // level: ['info', 'log', 'warn', 'error'],\n // lengthThreshold: 10000,\n // stringifyOptions: {\n // stringLengthLimit: undefined,\n // numOfKeysLimit: 50,\n // depthOfLimit: 4,\n // },\n // logger: window.console,\n // }\n if (loggingConfig?.console?.enabled) {\n try {\n // Dynamic import keeps console plugin separate and only loads when needed\n const { getRecordConsolePlugin } = await import('@amplitude/rrweb-plugin-console-record');\n plugins.push(getRecordConsolePlugin({ level: loggingConfig.console.levels }));\n } catch (error) {\n this.loggerProvider.warn('Failed to load console plugin:', error);\n }\n }\n\n return plugins.length > 0 ? plugins : undefined;\n }\n\n private async getRecordFunction(): Promise<RecordFunction | null> {\n if (this.recordFunction) {\n return this.recordFunction;\n }\n\n try {\n const { record } = await import('@amplitude/rrweb-record');\n this.recordFunction = record;\n return record;\n } catch (error) {\n this.loggerProvider.warn('Failed to load rrweb-record module:', error);\n return null;\n }\n }\n\n async recordEvents(shouldLogMetadata = true) {\n const config = this.config;\n const shouldRecord = this.getShouldRecord();\n const sessionId = this.identifiers?.sessionId;\n if (!shouldRecord || !sessionId || !config) {\n return;\n }\n this.stopRecordingEvents();\n\n const recordFunction = await this.getRecordFunction();\n\n // May be undefined if cannot import rrweb-record\n if (!recordFunction) {\n return;\n }\n\n await this.initializeNetworkObservers();\n\n this.networkObservers?.start((event: NetworkRequestEvent) => {\n void this.addCustomRRWebEvent(CustomRRwebEvent.FETCH_REQUEST, event);\n });\n const { privacyConfig, interactionConfig, loggingConfig } = config;\n\n const hooks = interactionConfig?.enabled\n ? {\n mouseInteraction:\n this.eventsManager &&\n clickHook(this.loggerProvider, {\n eventsManager: this.eventsManager,\n sessionId,\n deviceIdFn: this.getDeviceId.bind(this),\n mirror: recordFunction.mirror,\n ugcFilterRules: interactionConfig.ugcFilterRules ?? [],\n }),\n scroll: this.scrollHook,\n }\n : {};\n\n const ugcFilterRules =\n interactionConfig?.enabled && interactionConfig.ugcFilterRules ? interactionConfig.ugcFilterRules : [];\n\n this.loggerProvider.log(`Session Replay capture beginning for ${sessionId}.`);\n\n try {\n this.recordCancelCallback = recordFunction({\n emit: (event: eventWithTime) => {\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${sessionId} out of recording due to optOut config.`);\n this.stopRecordingEvents();\n this.sendEvents();\n return;\n }\n\n if (event.type === RRWebEventType.Meta) {\n event.data.href = getPageUrl(event.data.href, ugcFilterRules);\n }\n\n if (this.eventCompressor) {\n // Schedule processing during idle time if the browser supports requestIdleCallback\n this.eventCompressor.enqueueEvent(event, sessionId);\n }\n },\n inlineStylesheet: config.shouldInlineStylesheet,\n hooks,\n maskAllInputs: true,\n maskTextClass: MASK_TEXT_CLASS,\n blockClass: BLOCK_CLASS,\n blockSelector: this.getBlockSelectors() as string | undefined,\n applyBackgroundColorToBlockedElements: config.applyBackgroundColorToBlockedElements,\n maskInputFn: maskFn('input', privacyConfig),\n maskTextFn: maskFn('text', privacyConfig),\n maskTextSelector: this.getMaskTextSelectors(),\n recordCanvas: false,\n errorHandler: (error: unknown) => {\n const typedError = error as Error & { _external_?: boolean };\n\n // styled-components relies on this error being thrown and bubbled up, rrweb is otherwise suppressing it\n if (typedError.message.includes('insertRule') && typedError.message.includes('CSSStyleSheet')) {\n throw typedError;\n }\n\n // rrweb does monkey patching on certain window functions such as CSSStyleSheet.proptype.insertRule,\n // and errors from external clients calling these functions can get suppressed. Styled components depend\n // on these errors being re-thrown.\n if (typedError._external_) {\n throw typedError;\n }\n\n this.loggerProvider.warn('Error while capturing replay: ', typedError.toString());\n // Return true so that we don't clutter user's consoles with internal rrweb errors\n return true;\n },\n plugins: await this.getRecordingPlugins(loggingConfig),\n });\n\n void this.addCustomRRWebEvent(CustomRRwebEvent.DEBUG_INFO);\n if (shouldLogMetadata) {\n void this.addCustomRRWebEvent(CustomRRwebEvent.METADATA, this.metadata);\n }\n } catch (error) {\n this.loggerProvider.warn('Failed to initialize session replay:', error);\n }\n }\n\n addCustomRRWebEvent = async (\n eventName: CustomRRwebEvent,\n eventData: { [key: string]: any } = {},\n addStorageInfo = true,\n ) => {\n try {\n let debugInfo: DebugInfo | undefined = undefined;\n const config = this.config;\n // Only add debug info for non-metadata events\n if (config && eventName !== CustomRRwebEvent.METADATA) {\n debugInfo = {\n config: getDebugConfig(config),\n version: VERSION,\n };\n if (addStorageInfo) {\n const storageSizeData = await getStorageSize();\n debugInfo = {\n ...storageSizeData,\n ...debugInfo,\n };\n }\n }\n // Check first to ensure we are recording\n if (this.recordCancelCallback && this.recordFunction) {\n this.recordFunction.addCustomEvent(eventName, {\n ...eventData,\n ...debugInfo,\n });\n } else {\n this.loggerProvider.debug(\n `Not able to add custom replay capture event ${eventName} due to no ongoing recording.`,\n );\n }\n } catch (e) {\n this.loggerProvider.debug('Error while adding custom replay capture event: ', e);\n }\n };\n\n stopRecordingEvents = () => {\n try {\n this.loggerProvider.log('Session Replay capture stopping.');\n this.recordCancelCallback && this.recordCancelCallback();\n this.recordCancelCallback = null;\n this.networkObservers?.stop();\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while stopping replay capture: ${typedError.toString()}`);\n }\n };\n\n getDeviceId() {\n return this.identifiers?.deviceId;\n }\n\n getSessionId() {\n return this.identifiers?.sessionId;\n }\n\n async flush(useRetry = false) {\n return this.eventsManager?.flush(useRetry);\n }\n\n shutdown() {\n this.teardownEventListeners(true);\n this.stopRecordingEvents();\n this.sendEvents();\n }\n\n private mapSDKType(sdkType: string | undefined) {\n if (sdkType === 'plugin') {\n return '@amplitude/plugin-session-replay-browser';\n }\n\n if (sdkType === 'segment') {\n return '@amplitude/segment-session-replay-plugin';\n }\n\n return null;\n }\n\n private setMetadata(\n sessionId: string | number | undefined,\n joinedConfig: SessionReplayJoinedConfig,\n localConfig: SessionReplayLocalConfig,\n remoteConfig: SessionReplayRemoteConfig | undefined,\n replaySDKVersion: string | undefined,\n standaloneSDKVersion: string | undefined,\n sdkType: string | undefined,\n ) {\n const hashValue = sessionId?.toString() ? generateHashCode(sessionId.toString()) : undefined;\n\n this.metadata = {\n joinedConfig,\n localConfig,\n remoteConfig,\n sessionId,\n hashValue,\n sampleRate: joinedConfig.sampleRate,\n replaySDKType: this.mapSDKType(sdkType),\n replaySDKVersion,\n standaloneSDKType: '@amplitude/session-replay-browser',\n standaloneSDKVersion,\n };\n }\n\n private async initializeNetworkObservers(): Promise<void> {\n if (this.config?.loggingConfig?.network?.enabled && !this.networkObservers) {\n try {\n const { NetworkObservers: NetworkObserversClass } = await import('./observers');\n this.networkObservers = new NetworkObserversClass();\n } catch (error) {\n this.loggerProvider.warn('Failed to import or instantiate NetworkObservers:', error);\n }\n }\n }\n}\n","import { AnalyticsConnector } from '@amplitude/analytics-connector';\nexport var getAnalyticsConnector = function (instanceName) {\n if (instanceName === void 0) { instanceName = '$default_instance'; }\n return AnalyticsConnector.getInstance(instanceName);\n};\nexport var setConnectorUserId = function (userId, instanceName) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setUserId(userId).commit();\n};\nexport var setConnectorDeviceId = function (deviceId, instanceName) {\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setDeviceId(deviceId).commit();\n};\n//# sourceMappingURL=analytics-connector.js.map"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__assign","assign","t","s","i","n","arguments","length","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","create","Iterator","verb","Symbol","iterator","v","op","TypeError","pop","push","SuppressedError","Status","STORAGE_PREFIX","concat","AMPLITUDE_SERVER_URL","LogLevel","getGlobalScope","ampIntegrationContextName","globalThis","window","self","global","returnWrapper","awaitable","promise","PREFIX","Logger","logLevel","None","disable","enable","Warn","log","args","_i","Verbose","console","join","warn","error","Error","debug","Debug","getDefaultConfig","flushMaxRetries","flushQueueSize","flushIntervalMillis","instanceName","loggerProvider","offline","optOut","serverUrl","serverZone","useBatch","Config","options","_a","_b","_c","_d","_optOut","defaultConfig","apiKey","minIdLength","plan","ingestionMetadata","undefined","storageProvider","transportProvider","serverConfig","createServerConfig","defineProperty","get","set","enumerable","configurable","getServerUrl","_serverZone","includes","ApplicationContextProviderImpl","getApplicationContext","versionName","language","getLanguage","platform","os","deviceModel","navigator","languages","EventBridgeImpl","queue","logEvent","event","receiver","setEventReceiver","forEach","__values","o","m","__read","r","ar","isEqual","obj1","obj2","e_1","typeA","primitive_1","primitive_1_1","e_1_1","return","isArrayA","isArray","isArrayB","sorted1","keys","sort","sorted2","result_1","key","entries","obj","ownProps","resArray","ServerZone","IdentityStoreImpl","identity","userProperties","listeners","Set","editIdentity","actingUserProperties","actingIdentity","setUserId","userId","setDeviceId","deviceId","setUserProperties","setOptOut","updateUserProperties","actions","e_2","e_3","actingProperties","_e","_f","action","properties","_g","_h","_j","e_2_1","_k","_l","e_3_1","commit","setIdentity","getIdentity","originalIdentity","listener","addIdentityListener","add","removeIdentityListener","delete","safeGlobal","AnalyticsConnector","identityStore","eventBridge","applicationContextProvider","getInstance","BaseTransport","send","_serverUrl","_payload","buildResponse","responseJSON","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","statusCode","code","status","buildStatus","Success","eventsIngested","events_ingested","payloadSizeBytes","payload_size_bytes","serverUploadTime","server_upload_time","Invalid","missingField","missing_field","eventsWithInvalidFields","events_with_invalid_fields","eventsWithMissingFields","events_with_missing_fields","eventsWithInvalidIdLengths","events_with_invalid_id_lengths","epsThreshold","eps_threshold","exceededDailyQuotaDevices","exceeded_daily_quota_devices","silencedDevices","silenced_devices","silencedEvents","silenced_events","throttledDevices","throttled_devices","throttledEvents","throttled_events","PayloadTooLarge","RateLimit","throttledUsers","throttled_users","exceededDailyQuotaUsers","exceeded_daily_quota_users","Timeout","Failed","Unknown","FetchTransport","_super","String","__","constructor","__extends","payload","response","responseText","fetch","headers","Accept","JSON","stringify","method","text","parse","EventType","EventType2","MouseInteractions","MouseInteractions2","TIMEOUT_MESSAGE","UNEXPECTED_ERROR_MESSAGE","RemoteConfigFetch","localConfig","configKeys","_this","retryTimeout","attempts","sessionTargetingMatch","metrics","getRemoteConfig","configNamespace","sessionId","fetchStartTime","configAPIResponse","remoteConfig","Date","now","fetchWithTimeout","configs","fetchTimeAPISuccess","fetchTimeAPIFail","controller","timeoutId","AbortController","setTimeout","abort","fetchRemoteConfig","signal","clearTimeout","urlParams","configKey","res","knownError","lastFetchedSessionId","completeRequest","err","aborted","URLSearchParams","api_key","append","toString","parseAndStoreConfig","retryFetch","message","json","success","configServerUrl","STAGING","EU","createRemoteConfigFetch","DEFAULT_MASK_LEVEL","DEFAULT_EVENT_PROPERTY_PREFIX","DEFAULT_SESSION_REPLAY_PROPERTY","DEFAULT_SERVER_ZONE","US","SESSION_REPLAY_DEBUG_PROPERTY","MASK_TEXT_CLASS","CustomRRwebEvent","isMaskedForLevel","elementType","level","element","inputType","type","hasAttribute","toLowerCase","getInputType","autocomplete","startsWith","maskFn","config","defaultMaskLevel","closest","shouldMask","maskSelector","some","selector","shouldUnmask","unmaskSelector","isMasked","replace","generateHashCode","str","hash","charCodeAt","trackServerUrl","globToRegex","glob","escaped","RegExp","getPageUrl","pageUrl","ugcFilterRules","rule","regex","test","replacement","getStorageSize","globalScope","usage","quota","usageDetails","storage","estimate","totalStorageSize","Math","round","percentOfQuota","Number","EPSILON","getDebugConfig","debugConfig","substring","SafeLoggerProvider","logger","getSafeMethod","fn","__rrweb_original__","bind","SessionReplayLocalConfig","super","sampleRate","shouldInlineStylesheet","version","performanceConfig","storeType","applyBackgroundColorToBlockedElements","privacyConfig","interactionConfig","every","isValidGlobUrl","globUrl","trim","validateUGCFilterRules","debugMode","experimental","SessionReplayJoinedConfigGenerator","remoteConfigFetch","generateJoinedConfig","captureEnabled","samplingConfig","loggingConfig","sr_sampling_config","sr_privacy_config","joinedConfig","remotePrivacyConfig","capture_enabled","sample_rate","localPrivacyConfig","joinedPrivacyConfig","blockSelector","privacyConfigSelectorMap","selectorMap","selectorType","fragment","document","createDocumentFragment","dropInvalidSelectors","selectors","filter","querySelector","removeInvalidSelectorsFromPrivacyConfig","name","STORAGE_FAILURE","VERSION","SessionReplayTrackDestination","payloadBatcher","storageKey","scheduled","sendEventsList","destinationData","addToQueue","timeout","list","context","schedule","flush","useRetry","later","all","map","url","location","href","getCurrentUrl","device_id","session_id","sessionReplayLibrary","events","Authorization","handleReponse","responseBody","handleSuccessResponse","handleOtherResponse","sizeOfEventsList","Blob","size","onComplete","instanceOfAny","object","constructors","c","idbProxyableTypes","cursorAdvanceMethods","transactionDoneMap","WeakMap","transformCache","reverseTransformCache","idbProxyTraps","target","prop","IDBTransaction","objectStoreNames","objectStore","wrap","has","replaceTraps","callback","wrapFunction","func","IDBCursor","advance","continue","continuePrimaryKey","unwrap","request","transformCachableValue","tx","unlisten","removeEventListener","complete","DOMException","addEventListener","cacheDonePromiseForTransaction","IDBDatabase","IDBObjectStore","IDBIndex","Proxy","IDBRequest","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","useIndex","isWrite","async","storeName","transaction","store","index","shift","oldTraps","advanceMethodProps","methodMap","advanceResults","ittrProxiedCursorToOriginalProxy","cursorIteratorTraps","cachedFunc","iterate","cursor","openCursor","proxiedCursor","isIteratorProp","asyncIterator","BaseEventsStore","timeAtLastSplit","_timeAtLastSplit","minInterval","maxInterval","maxPersistedEventsSize","interval","shouldSplitEventsList","nextEventString","sizeOfNextEvent","min","RecordingStatus","currentSequenceKey","sequencesToSendKey","batchPromiseAll","promiseBatch","chunkSize","batch","splice","defineObjectStores","db","sequencesStore","currentSequenceStore","contains","createObjectStore","keyPath","autoIncrement","createIndex","createStore","dbName","blocked","upgrade","blocking","terminated","indexedDB","open","openPromise","oldVersion","newVersion","catch","openDB","SessionReplayEventsIDBStore","getSequencesToSend","sequences","sequenceId","storeCurrentSequence","currentSequenceData","put","addEventToCurrentSequence","sequenceEvents","eventsToSend","updatedEvents","storeSendingEvents","cleanUpSessionEventsStore","_sessionId","transitionFromKeyValStore","keyValDb","onupgradeneeded","close","deleteDatabase","onsuccess","onerror","keyValDatabaseExists","transitionCurrentSessionSequences","numericSessionId","sessionStore","currentSessionSequences","sessionSequences","promisesToBatch","numericSequenceId","parseInt","sequence","currentSequenceId","eventAddPromises","SENT","getAllRequest","getAll","transitionPromise","storedReplaySessionContextList","storedReplaySessionContexts","storedSessionId","oldSessionStore","oldSessionSequences","dbSuffix","eventsIDBStore","getCurrentSequenceEvents","allEvents","InMemoryEventsStore","finalizedSequences","resetCurrentSequence","addSequence","sequenceReturn","createEventsManager","trackDestination","getMemoryStore","new","sendCurrentSequenceEvents","currentSequence","addEvent","data","sequenceToSend","sendStoredEvents","sequencesToSend","MultiEventManager","managers","managersMap","manager","opts","promises","testableAccessors","Node","ShadowRoot","Element","MutationObserver","testableMethods","untaintedBasePrototype","getUntaintedPrototype","defaultObj","defaultPrototype","accessorNames","isUntaintedAccessors","Boolean","accessor","getOwnPropertyDescriptor","methodNames","isUntaintedMethods","Zone","iframeEl","createElement","appendChild","win","contentWindow","untaintedObject","removeChild","untaintedAccessorCache","getUntaintedAccessor","instance","cacheKey","untaintedPrototype","untaintedAccessor","untaintedMethodCache","getUntaintedMethod","untaintedMethod","childNodes","parentNode","parentElement","textContent","other","getRootNode","host","styleSheets","shadowRoot","querySelectorAll","mutationObserver","getWindowHeight","innerHeight","documentElement","clientHeight","getWindowWidth","innerWidth","clientWidth","rootDocument","start","finder","input","nodeType","ELEMENT_NODE","tagName","defaults","root","idName","_name","className","attr","_value","seedMinLength","optimizedMinLength","threshold","maxNumberOfTries","timeoutMs","rootNode","DOCUMENT_NODE","ownerDocument","findRootDocument","path","bottomUpSearch","optimized","optimize","limit","fallback","stack","current","elapsedTime","getTime","maybe","id","classNames","penalty","nth","dispensableNth","node","nthChild","slice","findUniquePath","paths","combinations","candidate","unique","query","reduce","acc","css","elementId","getAttribute","CSS","escape","attrs","from","attributes","classList","parent","child","firstChild","nextSibling","notEmpty","a","scope","counter","visited","newPath","newPathKey","same","clickNonBatcher","clickEvents","evt","record","count","clickBatcher","reduced","prev","curr","x","timestamp","hour","k","values","clickHook","eventsManager","deviceIdFn","mirror","Click","getNode","left","scrollX","top","scrollY","doc","scrollingElement","scrollLeft","pageXOffset","dom","scrollTop","pageYOffset","getWindowScroll","viewportHeight","viewportWidth","BeaconTransport","sendBeacon","sendXhr","xhr","XMLHttpRequest","setRequestHeader","basePageUrl","ScrollWatcher","transport","hook","update","maxScrollX","_maxScrollX","maxScrollY","_maxScrollY","maxScrollWidth","_maxScrollWidth","maxScrollHeight","_maxScrollHeight","width","height","SessionIdentifiers","sessionReplayId","generateSessionReplayId","u8","Uint8Array","u16","Uint16Array","u32","Uint32Array","fleb","fdeb","clim","freb","eb","j","fl","revfl","revfd","rev","hMap","cd","mb","l","co","le","rvb","sv","r_1","flt","fdt","flm","fdm","shft","slc","subarray","wbits","wbits16","hTree","t2","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","max","lc","cl","cli","cln","cls","w","clen","cf","wfblk","out","pos","dat","wblk","final","syms","lf","df","li","bs","bl","_a2","dlt","mlb","_b2","ddt","mdb","lclt","nlc","lcdt","ndc","lcfreq","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","dopt","opt","pre","post","st","lvl","plvl","lst","floor","msk_1","head","bs1_1","ceil","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","mem","zlibSync","adler","lv","fl2","wbytes","pack","latin1","TextDecoder","decode","fromCharCode","strFromU8","TextEncoder","encode","ai","strToU8","EventCompressor","workerScriptInternal","taskQueue","isProcessing","compressEvent","packedEvent","addCompressedEventToManager","compressedEvent","addCompressedEvent","worker","postMessage","terminate","canUseIdleCallback","workerScript","useWebWorker","Worker","URL","createObjectURL","onmessage","scheduleIdleProcessing","requestIdleCallback","idleDeadline","processQueue","enqueueEvent","enabled","timeRemaining","didTimeout","task","SessionReplay","recordCancelCallback","eventCount","pageLeaveFns","recordFunction","teardownEventListeners","teardown","blurListener","focusListener","pageLeaveListener","sendEvents","recordEvents","addCustomRRWebEvent","eventName","eventData","addStorageInfo","debugInfo","METADATA","storageSizeData","addCustomEvent","stopRecordingEvents","networkObservers","stop","typedError","init","_init","identifiers","joinedConfigGenerator","createSessionReplayJoinedConfigGenerator","setMetadata","scrollWatcher","default","getDeviceId","scrollHook","rrwebEventManager","interactionEventManager","trackEveryNms","eventCompressor","initializeNetworkObservers","initialize","setSessionId","asyncSetSessionId","previousSessionId","deviceIdForReplayId","getSessionReplayProperties","shouldRecord","getShouldRecord","eventProperties","appHash","GET_SR_PROPS","sessionIdToSend","shouldSendStoredEvents","shouldOptOut","identityStoreOptOut","isInSample","hashNumber","abs","isSessionInSample","getBlockSelectors","getMaskTextSelectors","getRecordingPlugins","plugins","getRecordConsolePlugin","import","levels","getRecordFunction","shouldLogMetadata","FETCH_REQUEST","hooks","mouseInteraction","scroll","emit","RRWebEventType","Meta","inlineStylesheet","maskAllInputs","maskTextClass","blockClass","maskInputFn","maskTextFn","maskTextSelector","recordCanvas","errorHandler","_external_","DEBUG_INFO","metadata","getSessionId","shutdown","mapSDKType","sdkType","replaySDKVersion","standaloneSDKVersion","hashValue","replaySDKType","standaloneSDKType","network","NetworkObservers","NetworkObserversClass"],"mappings":"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"}
1
+ {"version":3,"file":"session-replay-min.js","sources":["../../../../node_modules/tslib/tslib.es6.js","../../../analytics-core/lib/esm/types/constants.js","../../../analytics-core/lib/esm/types/status.js","../../../analytics-core/lib/esm/global-scope.js","../../../analytics-core/lib/esm/types/loglevel.js","../../../analytics-core/lib/esm/utils/return-wrapper.js","../../../analytics-core/lib/esm/logger.js","../../../analytics-core/lib/esm/config.js","../../../../node_modules/@amplitude/analytics-connector/dist/analytics-connector.esm.js","../../../analytics-core/lib/esm/types/server-zone.js","../../../analytics-core/lib/esm/transports/base.js","../../../analytics-core/lib/esm/transports/fetch.js","../../../../node_modules/@amplitude/rrweb-types/dist/rrweb-types.js","../../../analytics-remote-config/node_modules/@amplitude/analytics-types/lib/esm/server-zone.js","../../../analytics-remote-config/node_modules/@amplitude/analytics-types/lib/esm/status.js","../../../analytics-remote-config/node_modules/@amplitude/analytics-core/lib/esm/transports/base.js","../../../analytics-remote-config/lib/esm/remote-config.js","../../../analytics-remote-config/lib/esm/index.js","../../../../src/config/types.ts","../../../../src/constants.ts","../../../../src/helpers.ts","../../../../src/utils/get-input-type.ts","../../../../src/logger.ts","../../../../src/config/local-config.ts","../../../../src/config/joined-config.ts","../../../../src/messages.ts","../../../../src/version.ts","../../../../src/track-destination.ts","../../../../node_modules/idb/build/index.js","../../../../src/events/base-events-store.ts","../../../../src/events/legacy-idb-types.ts","../../../../src/events/events-idb-store.ts","../../../../src/events/events-memory-store.ts","../../../../src/events/events-manager.ts","../../../../src/events/multi-manager.ts","../../../../node_modules/@amplitude/rrweb-utils/dist/rrweb-utils.js","../../../../src/utils/rrweb.ts","../../../../src/libs/finder.ts","../../../../src/hooks/click.ts","../../../../src/beacon-transport.ts","../../../../src/hooks/scroll.ts","../../../../src/identifiers.ts","../../../../node_modules/@amplitude/rrweb-packer/dist/base-BrE4jft0.js","../../../../node_modules/@amplitude/rrweb-packer/dist/pack.js","../../../../src/events/event-compressor.ts","../../../../src/session-replay.ts","../../../analytics-core/lib/esm/analytics-connector.js"],"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","export var UNSET_VALUE = '-';\nexport var AMPLITUDE_PREFIX = 'AMP';\nexport var STORAGE_PREFIX = \"\".concat(AMPLITUDE_PREFIX, \"_unsent\");\nexport var AMPLITUDE_SERVER_URL = 'https://api2.amplitude.com/2/httpapi';\nexport var EU_AMPLITUDE_SERVER_URL = 'https://api.eu.amplitude.com/2/httpapi';\nexport var AMPLITUDE_BATCH_SERVER_URL = 'https://api2.amplitude.com/batch';\nexport var EU_AMPLITUDE_BATCH_SERVER_URL = 'https://api.eu.amplitude.com/batch';\n//# sourceMappingURL=constants.js.map","/** The status of an event. */\nexport var Status;\n(function (Status) {\n /** The status could not be determined. */\n Status[\"Unknown\"] = \"unknown\";\n /** The event was skipped due to configuration or callbacks. */\n Status[\"Skipped\"] = \"skipped\";\n /** The event was sent successfully. */\n Status[\"Success\"] = \"success\";\n /** A user or device in the payload is currently rate limited and should try again later. */\n Status[\"RateLimit\"] = \"rate_limit\";\n /** The sent payload was too large to be processed. */\n Status[\"PayloadTooLarge\"] = \"payload_too_large\";\n /** The event could not be processed. */\n Status[\"Invalid\"] = \"invalid\";\n /** A server-side error ocurred during submission. */\n Status[\"Failed\"] = \"failed\";\n /** a server or client side error occuring when a request takes too long and is cancelled */\n Status[\"Timeout\"] = \"Timeout\";\n /** NodeJS runtime environment error.. E.g. disconnected from network */\n Status[\"SystemError\"] = \"SystemError\";\n})(Status || (Status = {}));\n//# sourceMappingURL=status.js.map","/* eslint-disable no-restricted-globals */\n/* Only file allowed to access to globalThis, window, self */\nexport var getGlobalScope = function () {\n // This should only be used for integrations with Amplitude that are not running in a browser environment\n // We need to specify the name of the global variable as a string to prevent it from being minified\n var ampIntegrationContextName = 'ampIntegrationContext';\n if (typeof globalThis !== 'undefined' && typeof globalThis[ampIntegrationContextName] !== 'undefined') {\n return globalThis[ampIntegrationContextName];\n }\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n};\n//# sourceMappingURL=global-scope.js.map","export var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"None\"] = 0] = \"None\";\n LogLevel[LogLevel[\"Error\"] = 1] = \"Error\";\n LogLevel[LogLevel[\"Warn\"] = 2] = \"Warn\";\n LogLevel[LogLevel[\"Verbose\"] = 3] = \"Verbose\";\n LogLevel[LogLevel[\"Debug\"] = 4] = \"Debug\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=loglevel.js.map","export var returnWrapper = function (awaitable) { return ({\n promise: awaitable || Promise.resolve(),\n}); };\n//# sourceMappingURL=return-wrapper.js.map","import { LogLevel } from './types/loglevel';\nvar PREFIX = 'Amplitude Logger ';\nvar Logger = /** @class */ (function () {\n function Logger() {\n this.logLevel = LogLevel.None;\n }\n Logger.prototype.disable = function () {\n this.logLevel = LogLevel.None;\n };\n Logger.prototype.enable = function (logLevel) {\n if (logLevel === void 0) { logLevel = LogLevel.Warn; }\n this.logLevel = logLevel;\n };\n Logger.prototype.log = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Verbose) {\n return;\n }\n console.log(\"\".concat(PREFIX, \"[Log]: \").concat(args.join(' ')));\n };\n Logger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Warn) {\n return;\n }\n console.warn(\"\".concat(PREFIX, \"[Warn]: \").concat(args.join(' ')));\n };\n Logger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Error) {\n return;\n }\n console.error(\"\".concat(PREFIX, \"[Error]: \").concat(args.join(' ')));\n };\n Logger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Debug) {\n return;\n }\n // console.debug output is hidden by default in chrome\n console.log(\"\".concat(PREFIX, \"[Debug]: \").concat(args.join(' ')));\n };\n return Logger;\n}());\nexport { Logger };\n//# sourceMappingURL=logger.js.map","import { AMPLITUDE_SERVER_URL, AMPLITUDE_BATCH_SERVER_URL, EU_AMPLITUDE_SERVER_URL, EU_AMPLITUDE_BATCH_SERVER_URL, } from './types/constants';\nimport { Logger } from './logger';\nimport { LogLevel } from './types/loglevel';\nexport var getDefaultConfig = function () { return ({\n flushMaxRetries: 12,\n flushQueueSize: 200,\n flushIntervalMillis: 10000,\n instanceName: '$default_instance',\n logLevel: LogLevel.Warn,\n loggerProvider: new Logger(),\n offline: false,\n optOut: false,\n serverUrl: AMPLITUDE_SERVER_URL,\n serverZone: 'US',\n useBatch: false,\n}); };\nvar Config = /** @class */ (function () {\n function Config(options) {\n var _a, _b, _c, _d;\n this._optOut = false;\n var defaultConfig = getDefaultConfig();\n this.apiKey = options.apiKey;\n this.flushIntervalMillis = (_a = options.flushIntervalMillis) !== null && _a !== void 0 ? _a : defaultConfig.flushIntervalMillis;\n this.flushMaxRetries = options.flushMaxRetries || defaultConfig.flushMaxRetries;\n this.flushQueueSize = options.flushQueueSize || defaultConfig.flushQueueSize;\n this.instanceName = options.instanceName || defaultConfig.instanceName;\n this.loggerProvider = options.loggerProvider || defaultConfig.loggerProvider;\n this.logLevel = (_b = options.logLevel) !== null && _b !== void 0 ? _b : defaultConfig.logLevel;\n this.minIdLength = options.minIdLength;\n this.plan = options.plan;\n this.ingestionMetadata = options.ingestionMetadata;\n this.offline = options.offline !== undefined ? options.offline : defaultConfig.offline;\n this.optOut = (_c = options.optOut) !== null && _c !== void 0 ? _c : defaultConfig.optOut;\n this.serverUrl = options.serverUrl;\n this.serverZone = options.serverZone || defaultConfig.serverZone;\n this.storageProvider = options.storageProvider;\n this.transportProvider = options.transportProvider;\n this.useBatch = (_d = options.useBatch) !== null && _d !== void 0 ? _d : defaultConfig.useBatch;\n this.loggerProvider.enable(this.logLevel);\n var serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);\n this.serverZone = serverConfig.serverZone;\n this.serverUrl = serverConfig.serverUrl;\n }\n Object.defineProperty(Config.prototype, \"optOut\", {\n get: function () {\n return this._optOut;\n },\n set: function (optOut) {\n this._optOut = optOut;\n },\n enumerable: false,\n configurable: true\n });\n return Config;\n}());\nexport { Config };\nexport var getServerUrl = function (serverZone, useBatch) {\n if (serverZone === 'EU') {\n return useBatch ? EU_AMPLITUDE_BATCH_SERVER_URL : EU_AMPLITUDE_SERVER_URL;\n }\n return useBatch ? AMPLITUDE_BATCH_SERVER_URL : AMPLITUDE_SERVER_URL;\n};\nexport var createServerConfig = function (serverUrl, serverZone, useBatch) {\n if (serverUrl === void 0) { serverUrl = ''; }\n if (serverZone === void 0) { serverZone = getDefaultConfig().serverZone; }\n if (useBatch === void 0) { useBatch = getDefaultConfig().useBatch; }\n if (serverUrl) {\n return { serverUrl: serverUrl, serverZone: undefined };\n }\n var _serverZone = ['US', 'EU'].includes(serverZone) ? serverZone : getDefaultConfig().serverZone;\n return {\n serverZone: _serverZone,\n serverUrl: getServerUrl(_serverZone, useBatch),\n };\n};\nvar RequestMetadata = /** @class */ (function () {\n function RequestMetadata() {\n this.sdk = {\n metrics: {\n histogram: {},\n },\n };\n }\n RequestMetadata.prototype.recordHistogram = function (key, value) {\n this.sdk.metrics.histogram[key] = value;\n };\n return RequestMetadata;\n}());\nexport { RequestMetadata };\nvar HistogramOptions = /** @class */ (function () {\n function HistogramOptions() {\n }\n return HistogramOptions;\n}());\n//# sourceMappingURL=config.js.map","var ApplicationContextProviderImpl = /** @class */ (function () {\n function ApplicationContextProviderImpl() {\n }\n ApplicationContextProviderImpl.prototype.getApplicationContext = function () {\n return {\n versionName: this.versionName,\n language: getLanguage(),\n platform: 'Web',\n os: undefined,\n deviceModel: undefined,\n };\n };\n return ApplicationContextProviderImpl;\n}());\nvar getLanguage = function () {\n return ((typeof navigator !== 'undefined' &&\n ((navigator.languages && navigator.languages[0]) ||\n navigator.language)) ||\n '');\n};\n\nvar EventBridgeImpl = /** @class */ (function () {\n function EventBridgeImpl() {\n this.queue = [];\n }\n EventBridgeImpl.prototype.logEvent = function (event) {\n if (!this.receiver) {\n if (this.queue.length < 512) {\n this.queue.push(event);\n }\n }\n else {\n this.receiver(event);\n }\n };\n EventBridgeImpl.prototype.setEventReceiver = function (receiver) {\n this.receiver = receiver;\n if (this.queue.length > 0) {\n this.queue.forEach(function (event) {\n receiver(event);\n });\n this.queue = [];\n }\n };\n return EventBridgeImpl;\n}());\n\n/******************************************************************************\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***************************************************************************** */\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar isEqual = function (obj1, obj2) {\n var e_1, _a;\n var primitive = ['string', 'number', 'boolean', 'undefined'];\n var typeA = typeof obj1;\n var typeB = typeof obj2;\n if (typeA !== typeB) {\n return false;\n }\n try {\n for (var primitive_1 = __values(primitive), primitive_1_1 = primitive_1.next(); !primitive_1_1.done; primitive_1_1 = primitive_1.next()) {\n var p = primitive_1_1.value;\n if (p === typeA) {\n return obj1 === obj2;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (primitive_1_1 && !primitive_1_1.done && (_a = primitive_1.return)) _a.call(primitive_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // check null\n if (obj1 == null && obj2 == null) {\n return true;\n }\n else if (obj1 == null || obj2 == null) {\n return false;\n }\n // if got here - objects\n if (obj1.length !== obj2.length) {\n return false;\n }\n //check if arrays\n var isArrayA = Array.isArray(obj1);\n var isArrayB = Array.isArray(obj2);\n if (isArrayA !== isArrayB) {\n return false;\n }\n if (isArrayA && isArrayB) {\n //arrays\n for (var i = 0; i < obj1.length; i++) {\n if (!isEqual(obj1[i], obj2[i])) {\n return false;\n }\n }\n }\n else {\n //objects\n var sorted1 = Object.keys(obj1).sort();\n var sorted2 = Object.keys(obj2).sort();\n if (!isEqual(sorted1, sorted2)) {\n return false;\n }\n //compare object values\n var result_1 = true;\n Object.keys(obj1).forEach(function (key) {\n if (!isEqual(obj1[key], obj2[key])) {\n result_1 = false;\n }\n });\n return result_1;\n }\n return true;\n};\n\nvar ID_OP_SET = '$set';\nvar ID_OP_UNSET = '$unset';\nvar ID_OP_CLEAR_ALL = '$clearAll';\n// Polyfill for Object.entries\nif (!Object.entries) {\n Object.entries = function (obj) {\n var ownProps = Object.keys(obj);\n var i = ownProps.length;\n var resArray = new Array(i);\n while (i--) {\n resArray[i] = [ownProps[i], obj[ownProps[i]]];\n }\n return resArray;\n };\n}\nvar IdentityStoreImpl = /** @class */ (function () {\n function IdentityStoreImpl() {\n this.identity = { userProperties: {} };\n this.listeners = new Set();\n }\n IdentityStoreImpl.prototype.editIdentity = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n var actingUserProperties = __assign({}, this.identity.userProperties);\n var actingIdentity = __assign(__assign({}, this.identity), { userProperties: actingUserProperties });\n return {\n setUserId: function (userId) {\n actingIdentity.userId = userId;\n return this;\n },\n setDeviceId: function (deviceId) {\n actingIdentity.deviceId = deviceId;\n return this;\n },\n setUserProperties: function (userProperties) {\n actingIdentity.userProperties = userProperties;\n return this;\n },\n setOptOut: function (optOut) {\n actingIdentity.optOut = optOut;\n return this;\n },\n updateUserProperties: function (actions) {\n var e_1, _a, e_2, _b, e_3, _c;\n var actingProperties = actingIdentity.userProperties || {};\n try {\n for (var _d = __values(Object.entries(actions)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var _f = __read(_e.value, 2), action = _f[0], properties = _f[1];\n switch (action) {\n case ID_OP_SET:\n try {\n for (var _g = (e_2 = void 0, __values(Object.entries(properties))), _h = _g.next(); !_h.done; _h = _g.next()) {\n var _j = __read(_h.value, 2), key = _j[0], value = _j[1];\n actingProperties[key] = value;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n }\n finally { if (e_2) throw e_2.error; }\n }\n break;\n case ID_OP_UNSET:\n try {\n for (var _k = (e_3 = void 0, __values(Object.keys(properties))), _l = _k.next(); !_l.done; _l = _k.next()) {\n var key = _l.value;\n delete actingProperties[key];\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n }\n finally { if (e_3) throw e_3.error; }\n }\n break;\n case ID_OP_CLEAR_ALL:\n actingProperties = {};\n break;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_1) throw e_1.error; }\n }\n actingIdentity.userProperties = actingProperties;\n return this;\n },\n commit: function () {\n self.setIdentity(actingIdentity);\n return this;\n },\n };\n };\n IdentityStoreImpl.prototype.getIdentity = function () {\n return __assign({}, this.identity);\n };\n IdentityStoreImpl.prototype.setIdentity = function (identity) {\n var originalIdentity = __assign({}, this.identity);\n this.identity = __assign({}, identity);\n if (!isEqual(originalIdentity, this.identity)) {\n this.listeners.forEach(function (listener) {\n listener(identity);\n });\n }\n };\n IdentityStoreImpl.prototype.addIdentityListener = function (listener) {\n this.listeners.add(listener);\n };\n IdentityStoreImpl.prototype.removeIdentityListener = function (listener) {\n this.listeners.delete(listener);\n };\n return IdentityStoreImpl;\n}());\n\nvar safeGlobal = typeof globalThis !== 'undefined'\n ? globalThis\n : typeof global !== 'undefined'\n ? global\n : self;\n\nvar AnalyticsConnector = /** @class */ (function () {\n function AnalyticsConnector() {\n this.identityStore = new IdentityStoreImpl();\n this.eventBridge = new EventBridgeImpl();\n this.applicationContextProvider = new ApplicationContextProviderImpl();\n }\n AnalyticsConnector.getInstance = function (instanceName) {\n if (!safeGlobal['analyticsConnectorInstances']) {\n safeGlobal['analyticsConnectorInstances'] = {};\n }\n if (!safeGlobal['analyticsConnectorInstances'][instanceName]) {\n safeGlobal['analyticsConnectorInstances'][instanceName] =\n new AnalyticsConnector();\n }\n return safeGlobal['analyticsConnectorInstances'][instanceName];\n };\n return AnalyticsConnector;\n}());\n\nexport { AnalyticsConnector };\n","/**\n * @deprecated use ServerZoneType instead\n */\nexport var ServerZone;\n(function (ServerZone) {\n ServerZone[\"US\"] = \"US\";\n ServerZone[\"EU\"] = \"EU\";\n /**\n * Add for session-replay-browser migration from analytics-type v1.x.\n */\n ServerZone[\"STAGING\"] = \"STAGING\";\n})(ServerZone || (ServerZone = {}));\n//# sourceMappingURL=server-zone.js.map","import { Status } from '../types/status';\nvar BaseTransport = /** @class */ (function () {\n function BaseTransport() {\n }\n BaseTransport.prototype.send = function (_serverUrl, _payload) {\n return Promise.resolve(null);\n };\n BaseTransport.prototype.buildResponse = function (responseJSON) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n if (typeof responseJSON !== 'object') {\n return null;\n }\n var statusCode = responseJSON.code || 0;\n var status = this.buildStatus(statusCode);\n switch (status) {\n case Status.Success:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n eventsIngested: (_a = responseJSON.events_ingested) !== null && _a !== void 0 ? _a : 0,\n payloadSizeBytes: (_b = responseJSON.payload_size_bytes) !== null && _b !== void 0 ? _b : 0,\n serverUploadTime: (_c = responseJSON.server_upload_time) !== null && _c !== void 0 ? _c : 0,\n },\n };\n case Status.Invalid:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_d = responseJSON.error) !== null && _d !== void 0 ? _d : '',\n missingField: (_e = responseJSON.missing_field) !== null && _e !== void 0 ? _e : '',\n eventsWithInvalidFields: (_f = responseJSON.events_with_invalid_fields) !== null && _f !== void 0 ? _f : {},\n eventsWithMissingFields: (_g = responseJSON.events_with_missing_fields) !== null && _g !== void 0 ? _g : {},\n eventsWithInvalidIdLengths: (_h = responseJSON.events_with_invalid_id_lengths) !== null && _h !== void 0 ? _h : {},\n epsThreshold: (_j = responseJSON.eps_threshold) !== null && _j !== void 0 ? _j : 0,\n exceededDailyQuotaDevices: (_k = responseJSON.exceeded_daily_quota_devices) !== null && _k !== void 0 ? _k : {},\n silencedDevices: (_l = responseJSON.silenced_devices) !== null && _l !== void 0 ? _l : [],\n silencedEvents: (_m = responseJSON.silenced_events) !== null && _m !== void 0 ? _m : [],\n throttledDevices: (_o = responseJSON.throttled_devices) !== null && _o !== void 0 ? _o : {},\n throttledEvents: (_p = responseJSON.throttled_events) !== null && _p !== void 0 ? _p : [],\n },\n };\n case Status.PayloadTooLarge:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_q = responseJSON.error) !== null && _q !== void 0 ? _q : '',\n },\n };\n case Status.RateLimit:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_r = responseJSON.error) !== null && _r !== void 0 ? _r : '',\n epsThreshold: (_s = responseJSON.eps_threshold) !== null && _s !== void 0 ? _s : 0,\n throttledDevices: (_t = responseJSON.throttled_devices) !== null && _t !== void 0 ? _t : {},\n throttledUsers: (_u = responseJSON.throttled_users) !== null && _u !== void 0 ? _u : {},\n exceededDailyQuotaDevices: (_v = responseJSON.exceeded_daily_quota_devices) !== null && _v !== void 0 ? _v : {},\n exceededDailyQuotaUsers: (_w = responseJSON.exceeded_daily_quota_users) !== null && _w !== void 0 ? _w : {},\n throttledEvents: (_x = responseJSON.throttled_events) !== null && _x !== void 0 ? _x : [],\n },\n };\n case Status.Timeout:\n default:\n return {\n status: status,\n statusCode: statusCode,\n };\n }\n };\n BaseTransport.prototype.buildStatus = function (code) {\n if (code >= 200 && code < 300) {\n return Status.Success;\n }\n if (code === 429) {\n return Status.RateLimit;\n }\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n if (code === 408) {\n return Status.Timeout;\n }\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n if (code >= 500) {\n return Status.Failed;\n }\n return Status.Unknown;\n };\n return BaseTransport;\n}());\nexport { BaseTransport };\n//# sourceMappingURL=base.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\nimport { BaseTransport } from './base';\nvar FetchTransport = /** @class */ (function (_super) {\n __extends(FetchTransport, _super);\n function FetchTransport() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FetchTransport.prototype.send = function (serverUrl, payload) {\n return __awaiter(this, void 0, void 0, function () {\n var options, response, responseText;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n /* istanbul ignore if */\n if (typeof fetch === 'undefined') {\n throw new Error('FetchTransport is not supported');\n }\n options = {\n headers: {\n 'Content-Type': 'application/json',\n Accept: '*/*',\n },\n body: JSON.stringify(payload),\n method: 'POST',\n };\n return [4 /*yield*/, fetch(serverUrl, options)];\n case 1:\n response = _a.sent();\n return [4 /*yield*/, response.text()];\n case 2:\n responseText = _a.sent();\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return [2 /*return*/, this.buildResponse(JSON.parse(responseText))];\n }\n catch (_b) {\n return [2 /*return*/, this.buildResponse({ code: response.status })];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n return FetchTransport;\n}(BaseTransport));\nexport { FetchTransport };\n//# sourceMappingURL=fetch.js.map","var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType || {});\nexport {\n CanvasContext,\n EventType,\n IncrementalSource,\n MediaInteractions,\n MouseInteractions,\n NodeType,\n PointerTypes,\n ReplayerEvents\n};\n//# sourceMappingURL=rrweb-types.js.map\n","export var ServerZone;\n(function (ServerZone) {\n ServerZone[\"US\"] = \"US\";\n ServerZone[\"EU\"] = \"EU\";\n ServerZone[\"STAGING\"] = \"STAGING\";\n})(ServerZone || (ServerZone = {}));\n//# sourceMappingURL=server-zone.js.map","/** The status of an event. */\nexport var Status;\n(function (Status) {\n /** The status could not be determined. */\n Status[\"Unknown\"] = \"unknown\";\n /** The event was skipped due to configuration or callbacks. */\n Status[\"Skipped\"] = \"skipped\";\n /** The event was sent successfully. */\n Status[\"Success\"] = \"success\";\n /** A user or device in the payload is currently rate limited and should try again later. */\n Status[\"RateLimit\"] = \"rate_limit\";\n /** The sent payload was too large to be processed. */\n Status[\"PayloadTooLarge\"] = \"payload_too_large\";\n /** The event could not be processed. */\n Status[\"Invalid\"] = \"invalid\";\n /** A server-side error ocurred during submission. */\n Status[\"Failed\"] = \"failed\";\n /** a server or client side error occuring when a request takes too long and is cancelled */\n Status[\"Timeout\"] = \"Timeout\";\n /** NodeJS runtime environment error.. E.g. disconnected from network */\n Status[\"SystemError\"] = \"SystemError\";\n})(Status || (Status = {}));\n//# sourceMappingURL=status.js.map","/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\nimport { Status } from '@amplitude/analytics-types';\nvar BaseTransport = /** @class */ (function () {\n function BaseTransport() {\n }\n BaseTransport.prototype.send = function (_serverUrl, _payload) {\n return Promise.resolve(null);\n };\n BaseTransport.prototype.buildResponse = function (responseJSON) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n if (typeof responseJSON !== 'object') {\n return null;\n }\n var statusCode = responseJSON.code || 0;\n var status = this.buildStatus(statusCode);\n switch (status) {\n case Status.Success:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n eventsIngested: (_a = responseJSON.events_ingested) !== null && _a !== void 0 ? _a : 0,\n payloadSizeBytes: (_b = responseJSON.payload_size_bytes) !== null && _b !== void 0 ? _b : 0,\n serverUploadTime: (_c = responseJSON.server_upload_time) !== null && _c !== void 0 ? _c : 0,\n },\n };\n case Status.Invalid:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_d = responseJSON.error) !== null && _d !== void 0 ? _d : '',\n missingField: (_e = responseJSON.missing_field) !== null && _e !== void 0 ? _e : '',\n eventsWithInvalidFields: (_f = responseJSON.events_with_invalid_fields) !== null && _f !== void 0 ? _f : {},\n eventsWithMissingFields: (_g = responseJSON.events_with_missing_fields) !== null && _g !== void 0 ? _g : {},\n eventsWithInvalidIdLengths: (_h = responseJSON.events_with_invalid_id_lengths) !== null && _h !== void 0 ? _h : {},\n epsThreshold: (_j = responseJSON.eps_threshold) !== null && _j !== void 0 ? _j : 0,\n exceededDailyQuotaDevices: (_k = responseJSON.exceeded_daily_quota_devices) !== null && _k !== void 0 ? _k : {},\n silencedDevices: (_l = responseJSON.silenced_devices) !== null && _l !== void 0 ? _l : [],\n silencedEvents: (_m = responseJSON.silenced_events) !== null && _m !== void 0 ? _m : [],\n throttledDevices: (_o = responseJSON.throttled_devices) !== null && _o !== void 0 ? _o : {},\n throttledEvents: (_p = responseJSON.throttled_events) !== null && _p !== void 0 ? _p : [],\n },\n };\n case Status.PayloadTooLarge:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_q = responseJSON.error) !== null && _q !== void 0 ? _q : '',\n },\n };\n case Status.RateLimit:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_r = responseJSON.error) !== null && _r !== void 0 ? _r : '',\n epsThreshold: (_s = responseJSON.eps_threshold) !== null && _s !== void 0 ? _s : 0,\n throttledDevices: (_t = responseJSON.throttled_devices) !== null && _t !== void 0 ? _t : {},\n throttledUsers: (_u = responseJSON.throttled_users) !== null && _u !== void 0 ? _u : {},\n exceededDailyQuotaDevices: (_v = responseJSON.exceeded_daily_quota_devices) !== null && _v !== void 0 ? _v : {},\n exceededDailyQuotaUsers: (_w = responseJSON.exceeded_daily_quota_users) !== null && _w !== void 0 ? _w : {},\n throttledEvents: (_x = responseJSON.throttled_events) !== null && _x !== void 0 ? _x : [],\n },\n };\n case Status.Timeout:\n default:\n return {\n status: status,\n statusCode: statusCode,\n };\n }\n };\n BaseTransport.prototype.buildStatus = function (code) {\n if (code >= 200 && code < 300) {\n return Status.Success;\n }\n if (code === 429) {\n return Status.RateLimit;\n }\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n if (code === 408) {\n return Status.Timeout;\n }\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n if (code >= 500) {\n return Status.Failed;\n }\n return Status.Unknown;\n };\n return BaseTransport;\n}());\nexport { BaseTransport };\n//# sourceMappingURL=base.js.map","import { __assign, __awaiter, __generator, __values } from \"tslib\";\nimport { BaseTransport } from '@amplitude/analytics-core';\nimport { ServerZone, Status } from '@amplitude/analytics-types';\nvar UNEXPECTED_NETWORK_ERROR_MESSAGE = 'Network error occurred, remote config fetch failed';\nvar SUCCESS_REMOTE_CONFIG = 'Remote config successfully fetched';\nvar MAX_RETRIES_EXCEEDED_MESSAGE = 'Remote config fetch rejected due to exceeded retry count';\nvar TIMEOUT_MESSAGE = 'Remote config fetch rejected due to timeout after 5 seconds';\nvar UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport var REMOTE_CONFIG_SERVER_URL = 'https://sr-client-cfg.amplitude.com/config';\nexport var REMOTE_CONFIG_SERVER_URL_STAGING = 'https://sr-client-cfg.stag2.amplitude.com/config';\nexport var REMOTE_CONFIG_SERVER_URL_EU = 'https://sr-client-cfg.eu.amplitude.com/config';\nvar RemoteConfigFetch = /** @class */ (function () {\n function RemoteConfigFetch(_a) {\n var localConfig = _a.localConfig, configKeys = _a.configKeys;\n var _this = this;\n this.retryTimeout = 1000;\n this.attempts = 0;\n this.sessionTargetingMatch = false;\n this.metrics = {};\n this.getRemoteConfig = function (configNamespace, key, sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var fetchStartTime, configAPIResponse, remoteConfig;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n fetchStartTime = Date.now();\n return [4 /*yield*/, this.fetchWithTimeout(sessionId)];\n case 1:\n configAPIResponse = _a.sent();\n if (configAPIResponse) {\n remoteConfig = configAPIResponse.configs && configAPIResponse.configs[configNamespace];\n if (remoteConfig) {\n this.metrics.fetchTimeAPISuccess = Date.now() - fetchStartTime;\n return [2 /*return*/, remoteConfig[key]];\n }\n }\n this.metrics.fetchTimeAPIFail = Date.now() - fetchStartTime;\n return [2 /*return*/, undefined];\n }\n });\n }); };\n this.fetchWithTimeout = function (sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var controller, timeoutId, remoteConfig;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n controller = new AbortController();\n timeoutId = setTimeout(function () { return controller.abort(); }, 5000);\n return [4 /*yield*/, this.fetchRemoteConfig(controller.signal, sessionId)];\n case 1:\n remoteConfig = _a.sent();\n clearTimeout(timeoutId);\n return [2 /*return*/, remoteConfig];\n }\n });\n }); };\n this.fetchRemoteConfig = function (signal, sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var urlParams, _a, _b, configKey, options, serverUrl, res, parsedStatus, e_1, knownError;\n var e_2, _c;\n var _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (sessionId === this.lastFetchedSessionId && this.attempts >= this.localConfig.flushMaxRetries) {\n return [2 /*return*/, this.completeRequest({ err: MAX_RETRIES_EXCEEDED_MESSAGE })];\n }\n else if (signal.aborted) {\n return [2 /*return*/, this.completeRequest({ err: TIMEOUT_MESSAGE })];\n }\n else if (sessionId !== this.lastFetchedSessionId) {\n this.lastFetchedSessionId = sessionId;\n this.attempts = 0;\n }\n _e.label = 1;\n case 1:\n _e.trys.push([1, 3, , 4]);\n urlParams = new URLSearchParams({\n api_key: this.localConfig.apiKey,\n });\n try {\n for (_a = __values(this.configKeys), _b = _a.next(); !_b.done; _b = _a.next()) {\n configKey = _b.value;\n urlParams.append('config_keys', configKey);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n }\n if (sessionId) {\n urlParams.set('session_id', String(sessionId));\n }\n options = {\n headers: {\n Accept: '*/*',\n },\n method: 'GET',\n };\n serverUrl = \"\".concat(this.getServerUrl(), \"?\").concat(urlParams.toString());\n this.attempts += 1;\n return [4 /*yield*/, fetch(serverUrl, __assign(__assign({}, options), { signal: signal }))];\n case 2:\n res = _e.sent();\n if (res === null) {\n return [2 /*return*/, this.completeRequest({ err: UNEXPECTED_ERROR_MESSAGE })];\n }\n parsedStatus = new BaseTransport().buildStatus(res.status);\n switch (parsedStatus) {\n case Status.Success:\n this.attempts = 0;\n return [2 /*return*/, this.parseAndStoreConfig(res)];\n case Status.Failed:\n return [2 /*return*/, this.retryFetch(signal, sessionId)];\n default:\n return [2 /*return*/, this.completeRequest({ err: UNEXPECTED_NETWORK_ERROR_MESSAGE })];\n }\n return [3 /*break*/, 4];\n case 3:\n e_1 = _e.sent();\n knownError = e_1;\n if (signal.aborted) {\n return [2 /*return*/, this.completeRequest({ err: TIMEOUT_MESSAGE })];\n }\n return [2 /*return*/, this.completeRequest({ err: (_d = knownError.message) !== null && _d !== void 0 ? _d : UNEXPECTED_ERROR_MESSAGE })];\n case 4: return [2 /*return*/];\n }\n });\n }); };\n this.retryFetch = function (signal, sessionId) { return __awaiter(_this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, _this.attempts * _this.retryTimeout); })];\n case 1:\n _a.sent();\n return [2 /*return*/, this.fetchRemoteConfig(signal, sessionId)];\n }\n });\n }); };\n this.parseAndStoreConfig = function (res) { return __awaiter(_this, void 0, void 0, function () {\n var remoteConfig;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, res.json()];\n case 1:\n remoteConfig = (_a.sent());\n this.completeRequest({ success: SUCCESS_REMOTE_CONFIG });\n return [2 /*return*/, remoteConfig];\n }\n });\n }); };\n this.localConfig = localConfig;\n this.configKeys = configKeys;\n }\n RemoteConfigFetch.prototype.getServerUrl = function () {\n if (this.localConfig.configServerUrl) {\n return this.localConfig.configServerUrl;\n }\n if (this.localConfig.serverZone === ServerZone.STAGING) {\n return REMOTE_CONFIG_SERVER_URL_STAGING;\n }\n if (this.localConfig.serverZone === ServerZone.EU) {\n return REMOTE_CONFIG_SERVER_URL_EU;\n }\n return REMOTE_CONFIG_SERVER_URL;\n };\n RemoteConfigFetch.prototype.completeRequest = function (_a) {\n var err = _a.err, success = _a.success;\n if (err) {\n throw new Error(err);\n }\n else if (success) {\n this.localConfig.loggerProvider.log(success);\n }\n };\n return RemoteConfigFetch;\n}());\nexport { RemoteConfigFetch };\nexport var createRemoteConfigFetch = function (_a) {\n var localConfig = _a.localConfig, configKeys = _a.configKeys;\n return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_b) {\n return [2 /*return*/, new RemoteConfigFetch({ localConfig: localConfig, configKeys: configKeys })];\n });\n });\n};\n//# sourceMappingURL=remote-config.js.map","import * as remoteConfigFetch from './remote-config';\nexport var createRemoteConfigFetch = remoteConfigFetch.createRemoteConfigFetch;\n//# sourceMappingURL=index.js.map","import { IConfig, LogLevel, ILogger } from '@amplitude/analytics-core';\nimport { StoreType, ConsoleLogLevel } from '../typings/session-replay';\n\nexport interface SamplingConfig {\n sample_rate: number;\n capture_enabled: boolean;\n}\n\nexport interface InteractionConfig {\n trackEveryNms?: number;\n enabled: boolean; // defaults to false\n batch: boolean; // defaults to false\n /**\n * UGC filter rules.\n */\n ugcFilterRules?: UGCFilterRule[];\n}\n\nexport interface LoggingConfig {\n console: {\n enabled: boolean;\n levels: ConsoleLogLevel[];\n };\n network?: {\n enabled: boolean;\n };\n}\n\nexport type SessionReplayRemoteConfig = {\n sr_sampling_config?: SamplingConfig;\n sr_privacy_config?: PrivacyConfig;\n sr_interaction_config?: InteractionConfig;\n sr_logging_config?: LoggingConfig;\n};\n\nexport interface SessionReplayRemoteConfigAPIResponse {\n configs: {\n sessionReplay: SessionReplayRemoteConfig;\n };\n}\n\nexport type MaskLevel =\n | 'light' // only mask a subset of inputs that's deemed sensitive - password, credit card, telephone #, email. These are information we never want to capture.\n | 'medium' // mask all inputs\n | 'conservative'; // mask all inputs and all texts\n\nexport const DEFAULT_MASK_LEVEL = 'medium';\n\n// err on the side of excluding more\nexport type PrivacyConfig = {\n blockSelector?: string | string[]; // exclude in the UI\n defaultMaskLevel?: MaskLevel;\n maskSelector?: string[];\n unmaskSelector?: string[];\n};\n\n/**\n * UGC filter rule.\n */\nexport type UGCFilterRule = {\n /**\n * The selector of the UGC element.\n */\n selector: string;\n /**\n * The replacement text for the UGC element.\n */\n replacement: string;\n};\n\nexport interface SessionReplayLocalConfig extends IConfig {\n apiKey: string;\n loggerProvider: ILogger;\n /**\n * LogLevel.None or LogLevel.Error or LogLevel.Warn or LogLevel.Verbose or LogLevel.Debug.\n * Sets the log level.\n *\n * @defaultValue LogLevel.Warn\n */\n logLevel: LogLevel;\n /**\n * The maximum number of retries allowed for sending replay events.\n * Once this limit is reached, failed events will no longer be sent.\n *\n * @defaultValue 2\n */\n flushMaxRetries: number;\n /**\n * Use this option to control how many sessions to select for replay collection.\n * The number should be a decimal between 0 and 1, for example 0.4, representing\n * the fraction of sessions to have randomly selected for replay collection.\n * Over a large number of sessions, 0.4 would select 40% of those sessions.\n * Sample rates as small as six decimal places (0.000001) are supported.\n *\n * @defaultValue 0\n */\n sampleRate: number;\n privacyConfig?: PrivacyConfig;\n /**\n * Adds additional debug event property to help debug instrumentation issues\n * (such as mismatching apps). Only recommended for debugging initial setup,\n * and not recommended for production.\n */\n debugMode?: boolean;\n /**\n * Specifies the endpoint URL to fetch remote configuration.\n * If provided, it overrides the default server zone configuration.\n */\n configServerUrl?: string;\n /**\n * Specifies the endpoint URL for sending session replay data.\n * If provided, it overrides the default server zone configuration.\n */\n trackServerUrl?: string;\n /**\n * If stylesheets are inlined, the contents of the stylesheet will be stored.\n * During replay, the stored stylesheet will be used instead of attempting to fetch it remotely.\n * This prevents replays from appearing broken due to missing stylesheets.\n * Note: Inlining stylesheets may not work in all cases.\n */\n shouldInlineStylesheet?: boolean;\n version?: SessionReplayVersion;\n /**\n * Performance configuration config. If enabled, we will defer compression\n * to be done during the browser's idle periods.\n */\n performanceConfig?: SessionReplayPerformanceConfig;\n /**\n * Specifies how replay events should be stored. `idb` uses IndexedDB to persist replay events\n * when all events cannot be sent during capture. `memory` stores replay events only in memory,\n * meaning events are lost when the page is closed. If IndexedDB is unavailable, the system falls back to `memory`.\n */\n storeType: StoreType;\n\n /**\n * Experimental features.\n */\n experimental?: {\n /**\n * If the SDK should compress the replay events using a webworker.\n */\n useWebWorker: boolean;\n };\n\n /**\n * If true, applies a background color to blocked elements in the replay.\n * This helps visualize which elements are blocked from being captured.\n */\n applyBackgroundColorToBlockedElements?: boolean;\n interactionConfig?: InteractionConfig;\n}\n\nexport interface SessionReplayJoinedConfig extends SessionReplayLocalConfig {\n captureEnabled?: boolean;\n interactionConfig?: InteractionConfig;\n loggingConfig?: LoggingConfig;\n}\n\nexport interface SessionReplayRemoteConfigFetch {\n getServerUrl: () => void;\n getSamplingConfig: (sessionId?: number) => Promise<SessionReplayRemoteConfig['sr_sampling_config'] | void>;\n fetchRemoteConfig: (sessionId?: number) => Promise<SessionReplayRemoteConfig | void>;\n getRemoteConfig: (sessionId?: number) => Promise<SessionReplayRemoteConfig | void>;\n}\n\nexport interface SessionReplayConfigs {\n localConfig: SessionReplayLocalConfig;\n joinedConfig: SessionReplayJoinedConfig;\n remoteConfig: SessionReplayRemoteConfig | undefined;\n}\nexport interface SessionReplayJoinedConfigGenerator {\n generateJoinedConfig: (sessionId?: string | number) => Promise<SessionReplayConfigs>;\n}\n\nexport interface SessionReplayMetadata {\n remoteConfig: SessionReplayRemoteConfig | undefined;\n localConfig: SessionReplayLocalConfig;\n joinedConfig: SessionReplayJoinedConfig;\n framework?: {\n name: string;\n version: string;\n };\n sessionId: string | number | undefined;\n hashValue?: number;\n sampleRate: number;\n replaySDKType: string | null;\n replaySDKVersion: string | undefined;\n standaloneSDKType: string;\n standaloneSDKVersion: string | undefined;\n}\n\nexport interface SessionReplayVersion {\n version: string;\n type: SessionReplayType;\n}\n\n/**\n * Configuration options for session replay performance.\n */\nexport interface SessionReplayPerformanceConfig {\n /**\n * If enabled, event compression will be deferred to occur during the browser's idle periods.\n */\n enabled: boolean;\n /**\n * Optional timeout in milliseconds for the `requestIdleCallback` API.\n * If specified, this value will be used to set a maximum time for the browser to wait\n * before executing the deferred compression task, even if the browser is not idle.\n */\n timeout?: number;\n}\n\nexport type SessionReplayType = 'standalone' | 'plugin' | 'segment';\n","import { AMPLITUDE_PREFIX, ServerZone } from '@amplitude/analytics-core';\n\nexport const DEFAULT_EVENT_PROPERTY_PREFIX = '[Amplitude]';\n\nexport const DEFAULT_SESSION_REPLAY_PROPERTY = `${DEFAULT_EVENT_PROPERTY_PREFIX} Session Replay ID`;\nexport const DEFAULT_SESSION_START_EVENT = 'session_start';\nexport const DEFAULT_SESSION_END_EVENT = 'session_end';\nexport const DEFAULT_SAMPLE_RATE = 0;\nexport const DEFAULT_SERVER_ZONE = ServerZone.US;\n\nexport const SESSION_REPLAY_DEBUG_PROPERTY = `${DEFAULT_EVENT_PROPERTY_PREFIX} Session Replay Debug`;\n\nexport const BLOCK_CLASS = 'amp-block';\nexport const MASK_TEXT_CLASS = 'amp-mask';\nexport const UNMASK_TEXT_CLASS = 'amp-unmask';\nexport const SESSION_REPLAY_SERVER_URL = 'https://api-sr.amplitude.com/sessions/v2/track';\nexport const SESSION_REPLAY_EU_URL = 'https://api-sr.eu.amplitude.com/sessions/v2/track';\nexport const SESSION_REPLAY_STAGING_URL = 'https://api-sr.stag2.amplitude.com/sessions/v2/track';\nexport const STORAGE_PREFIX = `${AMPLITUDE_PREFIX}_replay_unsent`;\nexport const MAX_EVENT_LIST_SIZE_IN_BYTES = 1 * 1000000; // 1 MB\nexport const INTERACTION_MIN_INTERVAL = 30_000; // 30 seconds\nexport const INTERACTION_MAX_INTERVAL = 60_000; // 1 minute\nexport const MIN_INTERVAL = 500; // 500 ms\nexport const MAX_INTERVAL = 10 * 1000; // 10 seconds\nexport const MAX_IDB_STORAGE_LENGTH = 1000 * 60 * 60 * 24 * 3; // 3 days\nexport const KB_SIZE = 1024;\nexport const MAX_URL_LENGTH = 1000;\n\nexport enum CustomRRwebEvent {\n GET_SR_PROPS = 'get-sr-props',\n DEBUG_INFO = 'debug-info',\n FETCH_REQUEST = 'fetch-request',\n METADATA = 'metadata',\n}\n","import { getGlobalScope, ServerZone } from '@amplitude/analytics-core';\nimport { DEFAULT_MASK_LEVEL, MaskLevel, PrivacyConfig, SessionReplayJoinedConfig, UGCFilterRule } from './config/types';\nimport {\n KB_SIZE,\n MASK_TEXT_CLASS,\n SESSION_REPLAY_EU_URL,\n SESSION_REPLAY_SERVER_URL,\n SESSION_REPLAY_STAGING_URL,\n UNMASK_TEXT_CLASS,\n} from './constants';\nimport { StorageData } from './typings/session-replay';\nimport { getInputType } from './utils/get-input-type';\n\ntype ChromeStorageEstimate = {\n quota?: number;\n usage?: number;\n usageDetails?: { [key: string]: number };\n};\n\n/**\n * Light: Subset of inputs\n * Medium: All inputs\n * Conservative: All inputs and all texts\n */\nconst isMaskedForLevel = (elementType: 'input' | 'text', level: MaskLevel, element: HTMLElement | null): boolean => {\n switch (level) {\n case 'light': {\n if (elementType !== 'input') {\n return true;\n }\n\n const inputType = element ? getInputType(element) : '';\n /* istanbul ignore if */ // TODO(lew): For some reason it's impossible to test this.\n if (!inputType) {\n return false;\n }\n\n if (['password', 'hidden', 'email', 'tel'].includes(inputType)) {\n return true;\n }\n\n if ((element as HTMLInputElement).autocomplete.startsWith('cc-')) {\n return true;\n }\n\n return false;\n }\n case 'medium':\n case 'conservative':\n return true;\n default:\n return isMaskedForLevel(elementType, DEFAULT_MASK_LEVEL, element);\n }\n};\n\n/**\n * Checks if the given element set to be masked by rrweb\n *\n * Priority is:\n * 1. [In code] Element/class based masking/unmasking <> [Config based] Selector based masking/unmasking\n * 2. Use app defaults\n */\nconst isMasked = (\n elementType: 'input' | 'text',\n config: PrivacyConfig = { defaultMaskLevel: DEFAULT_MASK_LEVEL },\n element: HTMLElement | null,\n): boolean => {\n if (element) {\n // Element or parent is explicitly instrumented in code to mask\n if (element.closest('.' + MASK_TEXT_CLASS)) {\n return true;\n }\n\n // Config has override for mask\n const shouldMask = (config.maskSelector ?? []).some((selector) => element.closest(selector));\n if (shouldMask) {\n return true;\n }\n\n // Code or config has override to unmask\n if (element.closest('.' + UNMASK_TEXT_CLASS)) {\n return false;\n }\n\n // Here we are probably sent an element, but we want to match if they have a\n // parent with an unmask selector.\n const shouldUnmask = (config.unmaskSelector ?? []).some((selector) => element.closest(selector));\n if (shouldUnmask) {\n return false;\n }\n }\n\n return isMaskedForLevel(elementType, config.defaultMaskLevel ?? DEFAULT_MASK_LEVEL, element);\n};\n\nexport const maskFn =\n (elementType: 'text' | 'input', config?: PrivacyConfig) =>\n (text: string, element: HTMLElement | null): string => {\n return isMasked(elementType, config, element) ? text.replace(/[^\\s]/g, '*') : text;\n };\n\nexport const generateHashCode = function (str: string) {\n let hash = 0;\n if (str.length === 0) return hash;\n for (let i = 0; i < str.length; i++) {\n const chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0;\n }\n return hash;\n};\n\nexport const isSessionInSample = function (sessionId: string | number, sampleRate: number) {\n const hashNumber = generateHashCode(sessionId.toString());\n const absHash = Math.abs(hashNumber);\n const absHashMultiply = absHash * 31;\n const mod = absHashMultiply % 1000000;\n return mod / 1000000 < sampleRate;\n};\n\nexport const getCurrentUrl = () => {\n const globalScope = getGlobalScope();\n return globalScope?.location ? globalScope.location.href : '';\n};\n\nexport const generateSessionReplayId = (sessionId: string | number, deviceId: string): string => {\n return `${deviceId}/${sessionId}`;\n};\n\nexport const getServerUrl = (serverZone?: keyof typeof ServerZone, trackServerUrl?: string): string => {\n if (trackServerUrl) {\n return trackServerUrl;\n }\n\n if (serverZone === ServerZone.STAGING) {\n return SESSION_REPLAY_STAGING_URL;\n }\n\n if (serverZone === ServerZone.EU) {\n return SESSION_REPLAY_EU_URL;\n }\n\n return SESSION_REPLAY_SERVER_URL;\n};\n\nconst isValidGlobUrl = (globUrl: string): boolean => {\n if (typeof globUrl !== 'string' || globUrl.trim() === '') return false;\n const urlPattern = /^\\/|^https?:\\/\\/[^\\s]+$/;\n if (!urlPattern.test(globUrl)) return false;\n return true;\n};\n\nconst globToRegex = (glob: string): RegExp => {\n // Escape special regex characters, then convert globs\n const escaped = glob\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&') // Escape regex specials\n .replace(/\\*/g, '.*') // Convert * to .*\n .replace(/\\?/g, '.'); // Convert ? to .\n\n return new RegExp(`^${escaped}$`);\n};\n\nexport const validateUGCFilterRules = (ugcFilterRules: UGCFilterRule[]) => {\n // validate ugcFilterRules\n if (!ugcFilterRules.every((rule) => typeof rule.selector === 'string' && typeof rule.replacement === 'string')) {\n throw new Error('ugcFilterRules must be an array of objects with selector and replacement properties');\n }\n\n // validate ugcFilterRules are valid globs\n if (!ugcFilterRules.every((rule) => isValidGlobUrl(rule.selector))) {\n throw new Error('ugcFilterRules must be an array of objects with valid globs');\n }\n};\n\nexport const getPageUrl = (pageUrl: string, ugcFilterRules: UGCFilterRule[]) => {\n // apply ugcFilterRules, order is important, first rule wins\n for (const rule of ugcFilterRules) {\n const regex = globToRegex(rule.selector);\n\n if (regex.test(pageUrl)) {\n return pageUrl.replace(regex, rule.replacement);\n }\n }\n\n return pageUrl;\n};\n\nexport const getStorageSize = async (): Promise<StorageData> => {\n try {\n const globalScope = getGlobalScope();\n if (globalScope) {\n const { usage, quota, usageDetails }: ChromeStorageEstimate = await globalScope.navigator.storage.estimate();\n const totalStorageSize = usage ? Math.round(usage / KB_SIZE) : 0;\n const percentOfQuota = usage && quota ? Math.round((usage / quota + Number.EPSILON) * 1000) / 1000 : 0;\n return { totalStorageSize, percentOfQuota, usageDetails: JSON.stringify(usageDetails) };\n }\n } catch (e) {\n // swallow\n }\n return { totalStorageSize: 0, percentOfQuota: 0, usageDetails: '' };\n};\n\nexport const getDebugConfig = (config: SessionReplayJoinedConfig) => {\n const debugConfig = {\n ...config,\n };\n const { apiKey } = debugConfig;\n debugConfig.apiKey = `****${apiKey.substring(apiKey.length - 4)}`;\n return debugConfig;\n};\n","export function toLowerCase<T extends string>(str: T): Lowercase<T> {\n return str.toLowerCase() as unknown as Lowercase<T>;\n}\n\n/**\n * Get the type of an input element.\n * This takes care of the case where a password input is changed to a text input.\n * In this case, we continue to consider this of type password, in order to avoid leaking sensitive data\n * where passwords should be masked.\n */\nexport function getInputType(element: HTMLElement): Lowercase<string> | null {\n // when omitting the type of input element(e.g. <input />), the type is treated as text\n const type = (element as HTMLInputElement).type;\n\n return element.hasAttribute('data-rr-is-password')\n ? 'password'\n : type\n ? // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type)\n : null;\n}\n","import { ILogger, LogLevel } from '@amplitude/analytics-core';\n\nexport class SafeLoggerProvider implements ILogger {\n private logger: ILogger;\n\n log: typeof console.log;\n warn: typeof console.warn;\n error: typeof console.error;\n debug: typeof console.debug;\n\n constructor(loggerProvider: ILogger) {\n this.logger = loggerProvider;\n this.log = this.getSafeMethod('log');\n this.warn = this.getSafeMethod('warn');\n this.error = this.getSafeMethod('error');\n this.debug = this.getSafeMethod('debug');\n }\n\n private getSafeMethod<K extends keyof ILogger>(method: K): ILogger[K] {\n if (!this.logger) {\n return (() => {\n // No-op function fallback\n }) as ILogger[K];\n }\n\n const fn = this.logger[method];\n if (typeof fn === 'function') {\n const originalFn = (fn as { __rrweb_original__?: ILogger[K] }).__rrweb_original__ ?? fn;\n return originalFn.bind(this.logger) as ILogger[K];\n }\n\n return (() => {\n // No-op function fallback\n }) as ILogger[K];\n }\n\n enable(logLevel: LogLevel) {\n this.logger.enable(logLevel);\n }\n\n disable() {\n this.logger.disable();\n }\n}\n","import { Config, Logger, FetchTransport, LogLevel } from '@amplitude/analytics-core';\nimport { DEFAULT_SAMPLE_RATE, DEFAULT_SERVER_ZONE } from '../constants';\nimport { SessionReplayOptions, StoreType } from '../typings/session-replay';\nimport {\n SessionReplayLocalConfig as ISessionReplayLocalConfig,\n InteractionConfig,\n PrivacyConfig,\n SessionReplayPerformanceConfig,\n SessionReplayVersion,\n} from './types';\nimport { SafeLoggerProvider } from '../logger';\nimport { validateUGCFilterRules } from '../helpers';\n\nexport const getDefaultConfig = () => ({\n flushMaxRetries: 2,\n logLevel: LogLevel.Warn,\n loggerProvider: new Logger(),\n transportProvider: new FetchTransport(),\n});\n\nexport class SessionReplayLocalConfig extends Config implements ISessionReplayLocalConfig {\n apiKey: string;\n sampleRate: number;\n privacyConfig?: PrivacyConfig;\n interactionConfig?: InteractionConfig;\n debugMode?: boolean;\n configServerUrl?: string;\n trackServerUrl?: string;\n shouldInlineStylesheet?: boolean;\n version?: SessionReplayVersion;\n storeType: StoreType;\n performanceConfig?: SessionReplayPerformanceConfig;\n experimental?: { useWebWorker: boolean };\n applyBackgroundColorToBlockedElements?: boolean;\n\n constructor(apiKey: string, options: SessionReplayOptions) {\n const defaultConfig = getDefaultConfig();\n super({\n transportProvider: defaultConfig.transportProvider,\n loggerProvider: new SafeLoggerProvider(options.loggerProvider || defaultConfig.loggerProvider),\n ...options,\n apiKey,\n });\n this.flushMaxRetries =\n options.flushMaxRetries !== undefined && options.flushMaxRetries <= defaultConfig.flushMaxRetries\n ? options.flushMaxRetries\n : defaultConfig.flushMaxRetries;\n\n this.apiKey = apiKey;\n this.sampleRate = options.sampleRate || DEFAULT_SAMPLE_RATE;\n this.serverZone = options.serverZone || DEFAULT_SERVER_ZONE;\n this.configServerUrl = options.configServerUrl;\n this.trackServerUrl = options.trackServerUrl;\n this.shouldInlineStylesheet = options.shouldInlineStylesheet;\n this.version = options.version;\n this.performanceConfig = options.performanceConfig;\n this.storeType = options.storeType ?? 'idb';\n this.applyBackgroundColorToBlockedElements = options.applyBackgroundColorToBlockedElements ?? false;\n\n if (options.privacyConfig) {\n this.privacyConfig = options.privacyConfig;\n }\n if (options.interactionConfig) {\n this.interactionConfig = options.interactionConfig;\n\n // validate ugcFilterRules, throw error if invalid - throw error at the beginning of the config\n if (this.interactionConfig.ugcFilterRules) {\n validateUGCFilterRules(this.interactionConfig.ugcFilterRules);\n }\n }\n if (options.debugMode) {\n this.debugMode = options.debugMode;\n }\n if (options.experimental) {\n this.experimental = options.experimental;\n }\n }\n}\n","import { RemoteConfigFetch, createRemoteConfigFetch } from '@amplitude/analytics-remote-config';\nimport { ILogger } from '@amplitude/analytics-core';\nimport { getDebugConfig } from '../helpers';\nimport { SessionReplayOptions } from '../typings/session-replay';\nimport { SessionReplayLocalConfig } from './local-config';\nimport {\n SessionReplayLocalConfig as ISessionReplayLocalConfig,\n PrivacyConfig,\n SessionReplayConfigs,\n SessionReplayJoinedConfig,\n SessionReplayRemoteConfig,\n} from './types';\n\nexport const removeInvalidSelectorsFromPrivacyConfig = (privacyConfig: PrivacyConfig, loggerProvider: ILogger) => {\n // This allows us to not search the DOM.\n const fragment = document.createDocumentFragment();\n\n const dropInvalidSelectors = (selectors: string[] | string = []): string[] | undefined => {\n if (typeof selectors === 'string') {\n selectors = [selectors];\n }\n selectors = selectors.filter((selector: string) => {\n try {\n fragment.querySelector(selector);\n } catch {\n loggerProvider.warn(`[session-replay-browser] omitting selector \"${selector}\" because it is invalid`);\n return false;\n }\n return true;\n });\n if (selectors.length === 0) {\n return undefined;\n }\n return selectors;\n };\n privacyConfig.blockSelector = dropInvalidSelectors(privacyConfig.blockSelector);\n privacyConfig.maskSelector = dropInvalidSelectors(privacyConfig.maskSelector);\n privacyConfig.unmaskSelector = dropInvalidSelectors(privacyConfig.unmaskSelector);\n return privacyConfig;\n};\nexport class SessionReplayJoinedConfigGenerator {\n private readonly localConfig: ISessionReplayLocalConfig;\n private readonly remoteConfigFetch: RemoteConfigFetch<SessionReplayRemoteConfig>;\n\n constructor(remoteConfigFetch: RemoteConfigFetch<SessionReplayRemoteConfig>, localConfig: ISessionReplayLocalConfig) {\n this.localConfig = localConfig;\n this.remoteConfigFetch = remoteConfigFetch;\n }\n\n async generateJoinedConfig(sessionId?: string | number): Promise<SessionReplayConfigs> {\n const config: SessionReplayJoinedConfig = { ...this.localConfig };\n // Special case here as optOut is implemented via getter/setter\n config.optOut = this.localConfig.optOut;\n // We always want captureEnabled to be true, unless there's an override\n // in the remote config.\n config.captureEnabled = true;\n let remoteConfig: SessionReplayRemoteConfig | undefined;\n try {\n const samplingConfig = await this.remoteConfigFetch.getRemoteConfig(\n 'sessionReplay',\n 'sr_sampling_config',\n sessionId,\n );\n\n const privacyConfig = await this.remoteConfigFetch.getRemoteConfig(\n 'sessionReplay',\n 'sr_privacy_config',\n sessionId,\n );\n\n const ugcFilterRules = config.interactionConfig?.ugcFilterRules;\n // This is intentionally forced to only be set through the remote config.\n config.interactionConfig = await this.remoteConfigFetch.getRemoteConfig(\n 'sessionReplay',\n 'sr_interaction_config',\n sessionId,\n );\n if (config.interactionConfig && ugcFilterRules) {\n config.interactionConfig.ugcFilterRules = ugcFilterRules;\n }\n\n // This is intentionally forced to only be set through the remote config.\n config.loggingConfig = await this.remoteConfigFetch.getRemoteConfig(\n 'sessionReplay',\n 'sr_logging_config',\n sessionId,\n );\n\n if (samplingConfig || privacyConfig) {\n remoteConfig = {};\n if (samplingConfig) {\n remoteConfig.sr_sampling_config = samplingConfig;\n }\n if (privacyConfig) {\n remoteConfig.sr_privacy_config = privacyConfig;\n }\n }\n } catch (err: unknown) {\n const knownError = err as Error;\n this.localConfig.loggerProvider.warn(knownError.message);\n config.captureEnabled = false;\n }\n\n if (!remoteConfig) {\n return {\n localConfig: this.localConfig,\n joinedConfig: config,\n remoteConfig,\n };\n }\n\n const { sr_sampling_config: samplingConfig, sr_privacy_config: remotePrivacyConfig } = remoteConfig;\n if (samplingConfig && Object.keys(samplingConfig).length > 0) {\n if (Object.prototype.hasOwnProperty.call(samplingConfig, 'capture_enabled')) {\n config.captureEnabled = samplingConfig.capture_enabled;\n } else {\n config.captureEnabled = false;\n }\n\n if (Object.prototype.hasOwnProperty.call(samplingConfig, 'sample_rate')) {\n config.sampleRate = samplingConfig.sample_rate;\n }\n } else {\n // If config API response was valid (ie 200), but no config returned, assume that\n // customer has not yet set up config, and use sample rate from SDK options,\n // allowing for immediate replay capture\n config.captureEnabled = true;\n this.localConfig.loggerProvider.debug(\n 'Remote config successfully fetched, but no values set for project, Session Replay capture enabled.',\n );\n }\n\n // Remote config join acts somewhat like a left join between the remote and the local\n // config. That is, remote config has precedence over local values as with sampling.\n // However, non conflicting values will be added to the lists.\n // Here's an example to illustrate:\n //\n // Remote config: {'.selector1': 'MASK', '.selector2': 'UNMASK'}\n // Local config: {'.selector1': 'UNMASK', '.selector3': 'MASK'}\n //\n // Resolved config: {'.selector1': 'MASK', '.selector2': 'UNMASK', '.selector3': 'MASK'}\n // config.privacyConfig = {\n // ...(config.privacyConfig ?? {}),\n // ...remotePrivacyConfig,\n // };\n\n if (remotePrivacyConfig) {\n const localPrivacyConfig: PrivacyConfig = config.privacyConfig ?? {};\n\n const joinedPrivacyConfig: Required<PrivacyConfig> & { blockSelector: string[] } = {\n defaultMaskLevel: remotePrivacyConfig.defaultMaskLevel ?? localPrivacyConfig.defaultMaskLevel ?? 'medium',\n blockSelector: [],\n maskSelector: [],\n unmaskSelector: [],\n };\n\n const privacyConfigSelectorMap = (privacyConfig: PrivacyConfig): Record<string, 'mask' | 'unmask' | 'block'> => {\n const selectorMap: Record<string, 'mask' | 'unmask' | 'block'> = {};\n if (typeof privacyConfig.blockSelector === 'string') {\n privacyConfig.blockSelector = [privacyConfig.blockSelector];\n }\n\n for (const selector of privacyConfig.blockSelector ?? []) {\n selectorMap[selector] = 'block';\n }\n for (const selector of privacyConfig.maskSelector ?? []) {\n selectorMap[selector] = 'mask';\n }\n for (const selector of privacyConfig.unmaskSelector ?? []) {\n selectorMap[selector] = 'unmask';\n }\n return selectorMap;\n };\n\n const selectorMap: Record<string, 'mask' | 'unmask' | 'block'> = {\n ...privacyConfigSelectorMap(localPrivacyConfig),\n ...privacyConfigSelectorMap(remotePrivacyConfig),\n };\n\n for (const [selector, selectorType] of Object.entries(selectorMap)) {\n if (selectorType === 'mask') {\n joinedPrivacyConfig.maskSelector.push(selector);\n } else if (selectorType === 'block') {\n joinedPrivacyConfig.blockSelector.push(selector);\n } else if (selectorType === 'unmask') {\n joinedPrivacyConfig.unmaskSelector.push(selector);\n }\n }\n\n config.privacyConfig = removeInvalidSelectorsFromPrivacyConfig(\n joinedPrivacyConfig,\n this.localConfig.loggerProvider,\n );\n }\n\n this.localConfig.loggerProvider.debug(\n JSON.stringify({ name: 'session replay joined config', config: getDebugConfig(config) }, null, 2),\n );\n\n return {\n localConfig: this.localConfig,\n joinedConfig: config,\n remoteConfig,\n };\n }\n}\n\nexport const createSessionReplayJoinedConfigGenerator = async (apiKey: string, options: SessionReplayOptions) => {\n const localConfig = new SessionReplayLocalConfig(apiKey, options);\n const remoteConfigFetch = await createRemoteConfigFetch<SessionReplayRemoteConfig>({\n localConfig,\n configKeys: ['sessionReplay'],\n });\n\n return new SessionReplayJoinedConfigGenerator(remoteConfigFetch, localConfig);\n};\n","export const UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport const UNEXPECTED_NETWORK_ERROR_MESSAGE = 'Network error occurred, event batch rejected';\nexport const MAX_RETRIES_EXCEEDED_MESSAGE = 'Session replay event batch rejected due to exceeded retry count';\nexport const STORAGE_FAILURE = 'Failed to store session replay events in IndexedDB';\nexport const MISSING_DEVICE_ID_MESSAGE = 'Session replay event batch not sent due to missing device ID';\nexport const MISSING_API_KEY_MESSAGE = 'Session replay event batch not sent due to missing api key';\n","// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.25.2';\n","import { BaseTransport, ILogger, Status } from '@amplitude/analytics-core';\nimport { getCurrentUrl, getServerUrl } from './helpers';\nimport {\n MAX_RETRIES_EXCEEDED_MESSAGE,\n MISSING_API_KEY_MESSAGE,\n MISSING_DEVICE_ID_MESSAGE,\n UNEXPECTED_ERROR_MESSAGE,\n UNEXPECTED_NETWORK_ERROR_MESSAGE,\n} from './messages';\nimport {\n SessionReplayTrackDestination as AmplitudeSessionReplayTrackDestination,\n SessionReplayDestination,\n SessionReplayDestinationContext,\n} from './typings/session-replay';\nimport { VERSION } from './version';\nimport { MAX_URL_LENGTH, KB_SIZE } from './constants';\n\nexport type PayloadBatcher = ({ version, events }: { version: number; events: string[] }) => {\n version: number;\n events: unknown[];\n};\n\nexport class SessionReplayTrackDestination implements AmplitudeSessionReplayTrackDestination {\n loggerProvider: ILogger;\n storageKey = '';\n trackServerUrl?: string;\n retryTimeout = 1000;\n private scheduled: ReturnType<typeof setTimeout> | null = null;\n payloadBatcher: PayloadBatcher;\n queue: SessionReplayDestinationContext[] = [];\n\n constructor({\n trackServerUrl,\n loggerProvider,\n payloadBatcher,\n }: {\n trackServerUrl?: string;\n loggerProvider: ILogger;\n payloadBatcher?: PayloadBatcher;\n }) {\n this.loggerProvider = loggerProvider;\n this.payloadBatcher = payloadBatcher ? payloadBatcher : (payload) => payload;\n this.trackServerUrl = trackServerUrl;\n }\n\n sendEventsList(destinationData: SessionReplayDestination) {\n this.addToQueue({\n ...destinationData,\n attempts: 0,\n timeout: 0,\n });\n }\n\n addToQueue(...list: SessionReplayDestinationContext[]) {\n const tryable = list.filter((context) => {\n if (context.attempts < (context.flushMaxRetries || 0)) {\n context.attempts += 1;\n return true;\n }\n this.completeRequest({\n context,\n err: MAX_RETRIES_EXCEEDED_MESSAGE,\n });\n return false;\n });\n tryable.forEach((context) => {\n this.queue = this.queue.concat(context);\n if (context.timeout === 0) {\n this.schedule(0);\n return;\n }\n\n setTimeout(() => {\n context.timeout = 0;\n this.schedule(0);\n }, context.timeout);\n });\n }\n\n schedule(timeout: number) {\n if (this.scheduled) return;\n this.scheduled = setTimeout(() => {\n void this.flush(true).then(() => {\n if (this.queue.length > 0) {\n this.schedule(timeout);\n }\n });\n }, timeout);\n }\n\n async flush(useRetry = false) {\n const list: SessionReplayDestinationContext[] = [];\n const later: SessionReplayDestinationContext[] = [];\n this.queue.forEach((context) => (context.timeout === 0 ? list.push(context) : later.push(context)));\n this.queue = later;\n\n if (this.scheduled) {\n clearTimeout(this.scheduled);\n this.scheduled = null;\n }\n\n await Promise.all(list.map((context) => this.send(context, useRetry)));\n }\n\n async send(context: SessionReplayDestinationContext, useRetry = true) {\n const apiKey = context.apiKey;\n if (!apiKey) {\n return this.completeRequest({ context, err: MISSING_API_KEY_MESSAGE });\n }\n const deviceId = context.deviceId;\n if (!deviceId) {\n return this.completeRequest({ context, err: MISSING_DEVICE_ID_MESSAGE });\n }\n const url = getCurrentUrl();\n const version = VERSION;\n const sampleRate = context.sampleRate;\n const urlParams = new URLSearchParams({\n device_id: deviceId,\n session_id: `${context.sessionId}`,\n type: `${context.type}`,\n });\n const sessionReplayLibrary = `${context.version?.type || 'standalone'}/${context.version?.version || version}`;\n const payload = this.payloadBatcher({\n version: 1,\n events: context.events,\n });\n\n if (payload.events.length === 0) {\n this.completeRequest({ context });\n return;\n }\n\n try {\n const options: RequestInit = {\n headers: {\n 'Content-Type': 'application/json',\n Accept: '*/*',\n Authorization: `Bearer ${apiKey}`,\n 'X-Client-Version': version,\n 'X-Client-Library': sessionReplayLibrary,\n 'X-Client-Url': url.substring(0, MAX_URL_LENGTH), // limit url length to 1000 characters to avoid ELB 400 error\n 'X-Client-Sample-Rate': `${sampleRate}`,\n },\n body: JSON.stringify(payload),\n method: 'POST',\n };\n\n const serverUrl = `${getServerUrl(context.serverZone, this.trackServerUrl)}?${urlParams.toString()}`;\n const res = await fetch(serverUrl, options);\n if (res === null) {\n this.completeRequest({ context, err: UNEXPECTED_ERROR_MESSAGE });\n return;\n }\n if (!useRetry) {\n let responseBody = '';\n try {\n responseBody = JSON.stringify(res.body, null, 2);\n } catch {\n // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n }\n this.completeRequest({ context, success: `${res.status}: ${responseBody}` });\n } else {\n this.handleReponse(res.status, context);\n }\n } catch (e) {\n this.completeRequest({ context, err: e as string });\n }\n }\n\n handleReponse(status: number, context: SessionReplayDestinationContext) {\n const parsedStatus = new BaseTransport().buildStatus(status);\n switch (parsedStatus) {\n case Status.Success:\n this.handleSuccessResponse(context);\n break;\n case Status.Failed:\n this.handleOtherResponse(context);\n break;\n default:\n this.completeRequest({ context, err: UNEXPECTED_NETWORK_ERROR_MESSAGE });\n }\n }\n\n handleSuccessResponse(context: SessionReplayDestinationContext) {\n const sizeOfEventsList = Math.round(new Blob(context.events).size / KB_SIZE);\n this.completeRequest({\n context,\n success: `Session replay event batch tracked successfully for session id ${context.sessionId}, size of events: ${sizeOfEventsList} KB`,\n });\n }\n\n handleOtherResponse(context: SessionReplayDestinationContext) {\n this.addToQueue({\n ...context,\n timeout: context.attempts * this.retryTimeout,\n });\n }\n\n completeRequest({\n context,\n err,\n success,\n }: {\n context: SessionReplayDestinationContext;\n err?: string;\n success?: string;\n }) {\n void context.onComplete();\n if (err) {\n this.loggerProvider.warn(err);\n } else if (success) {\n this.loggerProvider.log(success);\n }\n }\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst transactionDoneMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(this.request);\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nconst advanceMethodProps = ['continue', 'continuePrimaryKey', 'advance'];\nconst methodMap = {};\nconst advanceResults = new WeakMap();\nconst ittrProxiedCursorToOriginalProxy = new WeakMap();\nconst cursorIteratorTraps = {\n get(target, prop) {\n if (!advanceMethodProps.includes(prop))\n return target[prop];\n let cachedFunc = methodMap[prop];\n if (!cachedFunc) {\n cachedFunc = methodMap[prop] = function (...args) {\n advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args));\n };\n }\n return cachedFunc;\n },\n};\nasync function* iterate(...args) {\n // tslint:disable-next-line:no-this-assignment\n let cursor = this;\n if (!(cursor instanceof IDBCursor)) {\n cursor = await cursor.openCursor(...args);\n }\n if (!cursor)\n return;\n cursor = cursor;\n const proxiedCursor = new Proxy(cursor, cursorIteratorTraps);\n ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor);\n // Map this double-proxy back to the original, so other cursor methods work.\n reverseTransformCache.set(proxiedCursor, unwrap(cursor));\n while (cursor) {\n yield proxiedCursor;\n // If one of the advancing methods was not called, call continue().\n cursor = await (advanceResults.get(proxiedCursor) || cursor.continue());\n advanceResults.delete(proxiedCursor);\n }\n}\nfunction isIteratorProp(target, prop) {\n return ((prop === Symbol.asyncIterator &&\n instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor])) ||\n (prop === 'iterate' && instanceOfAny(target, [IDBIndex, IDBObjectStore])));\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get(target, prop, receiver) {\n if (isIteratorProp(target, prop))\n return iterate;\n return oldTraps.get(target, prop, receiver);\n },\n has(target, prop) {\n return isIteratorProp(target, prop) || oldTraps.has(target, prop);\n },\n}));\n\nexport { deleteDB, openDB, unwrap, wrap };\n","import { MAX_EVENT_LIST_SIZE_IN_BYTES, MAX_INTERVAL, MIN_INTERVAL } from '../constants';\nimport { Events, EventsStore, SendingSequencesReturn } from '../typings/session-replay';\nimport { ILogger } from '@amplitude/analytics-core';\n\nexport type InstanceArgs = {\n loggerProvider: ILogger;\n minInterval?: number;\n maxInterval?: number;\n maxPersistedEventsSize?: number;\n};\n\nexport abstract class BaseEventsStore<KeyType> implements EventsStore<KeyType> {\n protected readonly loggerProvider: ILogger;\n private minInterval = MIN_INTERVAL;\n private maxInterval = MAX_INTERVAL;\n private maxPersistedEventsSize = MAX_EVENT_LIST_SIZE_IN_BYTES;\n private interval = this.minInterval;\n private _timeAtLastSplit = Date.now(); // Initialize this so we have a point of comparison when events are recorded\n\n public get timeAtLastSplit() {\n return this._timeAtLastSplit;\n }\n\n constructor(args: InstanceArgs) {\n this.loggerProvider = args.loggerProvider;\n this.minInterval = args.minInterval ?? this.minInterval;\n this.maxInterval = args.maxInterval ?? this.maxInterval;\n this.maxPersistedEventsSize = args.maxPersistedEventsSize ?? this.maxPersistedEventsSize;\n }\n\n abstract addEventToCurrentSequence(\n sessionId: string | number,\n event: string,\n ): Promise<SendingSequencesReturn<KeyType> | undefined>;\n abstract getSequencesToSend(): Promise<SendingSequencesReturn<KeyType>[] | undefined>;\n abstract storeCurrentSequence(sessionId: number): Promise<SendingSequencesReturn<KeyType> | undefined>;\n abstract storeSendingEvents(sessionId: string | number, events: Events): Promise<KeyType | undefined>;\n abstract cleanUpSessionEventsStore(sessionId: number, sequenceId: KeyType): Promise<void>;\n\n /**\n * Determines whether to send the events list to the backend and start a new\n * empty events list, based on the size of the list as well as the last time sent\n * @param nextEventString\n * @returns boolean\n */\n shouldSplitEventsList = (events: Events, nextEventString: string): boolean => {\n const sizeOfNextEvent = new Blob([nextEventString]).size;\n const sizeOfEventsList = new Blob(events).size;\n if (sizeOfEventsList + sizeOfNextEvent >= this.maxPersistedEventsSize) {\n return true;\n }\n if (Date.now() - this.timeAtLastSplit > this.interval && events.length) {\n this.interval = Math.min(this.maxInterval, this.interval + this.minInterval);\n this._timeAtLastSplit = Date.now();\n return true;\n }\n return false;\n };\n}\n","import { SessionReplayRemoteConfig } from '../config/types';\nimport { Events } from '../typings/session-replay';\n\nexport enum RecordingStatus {\n RECORDING = 'recording',\n SENT = 'sent',\n}\n\nexport interface IDBStoreSequence {\n events: Events;\n status: RecordingStatus;\n}\n\ninterface IDBRemoteConfig {\n config: SessionReplayRemoteConfig;\n lastFetchedSessionId: number | undefined;\n}\nexport interface IDBStoreSession {\n currentSequenceId: number;\n sessionSequences: {\n [sequenceId: number]: IDBStoreSequence;\n };\n}\n\nexport interface IDBStore {\n remoteConfig?: IDBRemoteConfig;\n [sessionId: number]: IDBStoreSession;\n}\n","import { STORAGE_PREFIX, getGlobalScope } from '@amplitude/analytics-core';\nimport { DBSchema, IDBPDatabase, openDB } from 'idb';\nimport { STORAGE_FAILURE } from '../messages';\nimport { EventType, Events, SendingSequencesReturn } from '../typings/session-replay';\nimport { BaseEventsStore, InstanceArgs as BaseInstanceArgs } from './base-events-store';\nimport { IDBStore, IDBStoreSession, RecordingStatus } from './legacy-idb-types';\n\nexport const currentSequenceKey = 'sessionCurrentSequence';\nexport const sequencesToSendKey = 'sequencesToSend';\nexport const remoteConfigKey = 'remoteConfig';\n\nexport interface SessionReplayDB extends DBSchema {\n sessionCurrentSequence: {\n key: number;\n value: Omit<SendingSequencesReturn<number>, 'sequenceId'>;\n };\n sequencesToSend: {\n key: number;\n value: Omit<SendingSequencesReturn<number>, 'sequenceId'>;\n indexes: { sessionId: string | number };\n };\n}\n\nexport const keyValDatabaseExists = function (): Promise<IDBDatabase | void> {\n const globalScope = getGlobalScope();\n return new Promise((resolve, reject) => {\n if (!globalScope) {\n return reject(new Error('Global scope not found'));\n }\n\n if (!globalScope.indexedDB) {\n return reject(new Error('Session Replay: cannot find indexedDB'));\n }\n\n try {\n const request = globalScope.indexedDB.open('keyval-store');\n request.onupgradeneeded = function () {\n if (request.result.version === 1) {\n request.result.close();\n request.transaction && request.transaction.abort();\n globalScope.indexedDB.deleteDatabase('keyval-store');\n resolve();\n }\n };\n request.onsuccess = function () {\n resolve(request.result);\n };\n request.onerror = function () {\n reject(request.error);\n };\n } catch (e) {\n reject(e);\n }\n });\n};\n\nconst batchPromiseAll = async (promiseBatch: Promise<any>[]) => {\n while (promiseBatch.length > 0) {\n const chunkSize = 10;\n const batch = promiseBatch.splice(0, chunkSize);\n await Promise.all(batch);\n }\n};\n\nexport const defineObjectStores = (db: IDBPDatabase<SessionReplayDB>) => {\n let sequencesStore;\n let currentSequenceStore;\n if (!db.objectStoreNames.contains(currentSequenceKey)) {\n currentSequenceStore = db.createObjectStore(currentSequenceKey, {\n keyPath: 'sessionId',\n });\n }\n if (!db.objectStoreNames.contains(sequencesToSendKey)) {\n sequencesStore = db.createObjectStore(sequencesToSendKey, {\n keyPath: 'sequenceId',\n autoIncrement: true,\n });\n sequencesStore.createIndex('sessionId', 'sessionId');\n }\n return {\n sequencesStore,\n currentSequenceStore,\n };\n};\n\nexport const createStore = async (dbName: string) => {\n return await openDB<SessionReplayDB>(dbName, 1, {\n upgrade: defineObjectStores,\n });\n};\n\ntype InstanceArgs = {\n apiKey: string;\n db: IDBPDatabase<SessionReplayDB>;\n} & BaseInstanceArgs;\n\nexport class SessionReplayEventsIDBStore extends BaseEventsStore<number> {\n private readonly apiKey: string;\n private readonly db: IDBPDatabase<SessionReplayDB>;\n\n constructor(args: InstanceArgs) {\n super(args);\n this.apiKey = args.apiKey;\n this.db = args.db;\n }\n\n static async new(\n type: EventType,\n args: Omit<InstanceArgs, 'db'>,\n sessionId?: string | number,\n ): Promise<SessionReplayEventsIDBStore | undefined> {\n try {\n const dbSuffix = type === 'replay' ? '' : `_${type}`;\n const dbName = `${args.apiKey.substring(0, 10)}_amp_session_replay_events${dbSuffix}`;\n const db = await createStore(dbName);\n const eventsIDBStore = new SessionReplayEventsIDBStore({\n ...args,\n db,\n });\n await eventsIDBStore.transitionFromKeyValStore(sessionId);\n return eventsIDBStore;\n } catch (e) {\n args.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return;\n }\n\n async getCurrentSequenceEvents(sessionId?: number) {\n if (sessionId) {\n const events = await this.db.get('sessionCurrentSequence', sessionId);\n if (!events) {\n return undefined;\n }\n return [events];\n }\n\n const allEvents = [];\n for (const events of await this.db.getAll('sessionCurrentSequence')) {\n allEvents.push(events);\n }\n\n return allEvents;\n }\n\n getSequencesToSend = async (): Promise<SendingSequencesReturn<number>[] | undefined> => {\n try {\n const sequences: SendingSequencesReturn<number>[] = [];\n let cursor = await this.db.transaction('sequencesToSend').store.openCursor();\n while (cursor) {\n const { sessionId, events } = cursor.value;\n sequences.push({\n events,\n sequenceId: cursor.key,\n sessionId,\n });\n cursor = await cursor.continue();\n }\n\n return sequences;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeCurrentSequence = async (sessionId: number) => {\n try {\n const currentSequenceData = await this.db.get<'sessionCurrentSequence'>(currentSequenceKey, sessionId);\n if (!currentSequenceData) {\n return undefined;\n }\n\n const sequenceId = await this.db.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: currentSequenceData.events,\n });\n\n await this.db.put<'sessionCurrentSequence'>(currentSequenceKey, {\n sessionId,\n events: [],\n });\n\n return {\n ...currentSequenceData,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n addEventToCurrentSequence = async (sessionId: number, event: string) => {\n try {\n const tx = this.db.transaction<'sessionCurrentSequence', 'readwrite'>(currentSequenceKey, 'readwrite');\n const sequenceEvents = await tx.store.get(sessionId);\n if (!sequenceEvents) {\n await tx.store.put({ sessionId, events: [event] });\n return;\n }\n let eventsToSend;\n if (this.shouldSplitEventsList(sequenceEvents.events, event)) {\n eventsToSend = sequenceEvents.events;\n // set store to empty array\n await tx.store.put({ sessionId, events: [event] });\n } else {\n // add event to array\n const updatedEvents = sequenceEvents.events.concat(event);\n await tx.store.put({ sessionId, events: updatedEvents });\n }\n\n await tx.done;\n if (!eventsToSend) {\n return undefined;\n }\n\n const sequenceId = await this.storeSendingEvents(sessionId, eventsToSend);\n\n if (!sequenceId) {\n return undefined;\n }\n\n return {\n events: eventsToSend,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeSendingEvents = async (sessionId: number, events: Events) => {\n try {\n const sequenceId = await this.db.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: events,\n });\n return sequenceId;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n cleanUpSessionEventsStore = async (_sessionId: number, sequenceId?: number) => {\n if (!sequenceId) {\n return;\n }\n try {\n await this.db.delete<'sequencesToSend'>(sequencesToSendKey, sequenceId);\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n };\n\n transitionFromKeyValStore = async (sessionId?: string | number) => {\n try {\n const keyValDb = await keyValDatabaseExists();\n if (!keyValDb) {\n return;\n }\n\n const transitionCurrentSessionSequences = async (numericSessionId: number, sessionStore: IDBStoreSession) => {\n const currentSessionSequences = sessionStore.sessionSequences;\n const promisesToBatch: Promise<number | SendingSequencesReturn<number> | undefined>[] = [];\n\n Object.keys(currentSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n const sequence = currentSessionSequences[numericSequenceId];\n if (numericSequenceId === sessionStore.currentSequenceId) {\n const eventAddPromises: Promise<SendingSequencesReturn<number> | undefined>[] = sequence.events.map(\n async (event) => this.addEventToCurrentSequence(numericSessionId, event),\n );\n promisesToBatch.push(...eventAddPromises);\n } else if (sequence.status !== RecordingStatus.SENT) {\n promisesToBatch.push(this.storeSendingEvents(numericSessionId, sequence.events));\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n };\n\n const storageKey = `${STORAGE_PREFIX}_${this.apiKey.substring(0, 10)}`;\n try {\n const getAllRequest = keyValDb.transaction('keyval').objectStore('keyval').getAll(storageKey);\n const transitionPromise = new Promise<void>((resolve) => {\n getAllRequest.onsuccess = async (e) => {\n const storedReplaySessionContextList = e && ((e.target as IDBRequest).result as IDBStore[]);\n const storedReplaySessionContexts = storedReplaySessionContextList && storedReplaySessionContextList[0];\n if (storedReplaySessionContexts) {\n const promisesToBatch: Promise<any>[] = [];\n\n Object.keys(storedReplaySessionContexts).forEach((storedSessionId) => {\n const numericSessionId = parseInt(storedSessionId, 10);\n const oldSessionStore = storedReplaySessionContexts[numericSessionId];\n\n if (sessionId === numericSessionId) {\n promisesToBatch.push(transitionCurrentSessionSequences(numericSessionId, oldSessionStore));\n } else {\n const oldSessionSequences = oldSessionStore.sessionSequences;\n Object.keys(oldSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n if (oldSessionSequences[numericSequenceId].status !== RecordingStatus.SENT) {\n promisesToBatch.push(\n this.storeSendingEvents(numericSessionId, oldSessionSequences[numericSequenceId].events),\n );\n }\n });\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n }\n resolve();\n };\n });\n\n await transitionPromise;\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.indexedDB.deleteDatabase('keyval-store');\n }\n } catch (e) {\n this.loggerProvider.warn(`Failed to transition session replay events from keyval to new store: ${e as string}`);\n }\n } catch (e) {\n this.loggerProvider.warn(\n `Failed to access keyval store: ${\n e as string\n }. For more information, visit: https://www.docs.developers.amplitude.com/session-replay/sdks/standalone/#indexeddb-best-practices`,\n );\n }\n };\n}\n","import { Events, SendingSequencesReturn } from '../typings/session-replay';\nimport { BaseEventsStore } from './base-events-store';\n\nexport class InMemoryEventsStore extends BaseEventsStore<number> {\n private finalizedSequences: Record<number, { sessionId: string | number; events: string[] }> = {};\n private sequences: Record<string | number, string[]> = {};\n private sequenceId = 0;\n\n private resetCurrentSequence(sessionId: string | number) {\n this.sequences[sessionId] = [];\n }\n\n private addSequence(sessionId: string | number): SendingSequencesReturn<number> {\n const sequenceId = this.sequenceId++;\n const events = [...this.sequences[sessionId]];\n this.finalizedSequences[sequenceId] = { sessionId, events };\n this.resetCurrentSequence(sessionId);\n return { sequenceId, events, sessionId };\n }\n\n async getSequencesToSend(): Promise<SendingSequencesReturn<number>[] | undefined> {\n return Object.entries(this.finalizedSequences).map(([sequenceId, { sessionId, events }]) => ({\n sequenceId: Number(sequenceId),\n sessionId,\n events,\n }));\n }\n\n async storeCurrentSequence(sessionId: string | number): Promise<SendingSequencesReturn<number> | undefined> {\n if (!this.sequences[sessionId]) {\n return undefined;\n }\n return this.addSequence(sessionId);\n }\n\n async addEventToCurrentSequence(\n sessionId: number,\n event: string,\n ): Promise<SendingSequencesReturn<number> | undefined> {\n if (!this.sequences[sessionId]) {\n this.resetCurrentSequence(sessionId);\n }\n\n let sequenceReturn: SendingSequencesReturn<number> | undefined;\n if (this.shouldSplitEventsList(this.sequences[sessionId], event)) {\n sequenceReturn = this.addSequence(sessionId);\n }\n\n this.sequences[sessionId].push(event);\n\n return sequenceReturn;\n }\n\n async storeSendingEvents(sessionId: number, events: Events): Promise<number | undefined> {\n this.finalizedSequences[this.sequenceId] = { sessionId, events };\n\n return this.sequenceId++;\n }\n\n async cleanUpSessionEventsStore(_sessionId: number, sequenceId?: number): Promise<void> {\n if (sequenceId !== undefined) {\n delete this.finalizedSequences[sequenceId];\n }\n }\n}\n","import {\n SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n EventsStore,\n EventType,\n StoreType,\n} from '../typings/session-replay';\n\nimport { SessionReplayJoinedConfig } from '../config/types';\nimport { getStorageSize } from '../helpers';\nimport { PayloadBatcher, SessionReplayTrackDestination } from '../track-destination';\nimport { SessionReplayEventsIDBStore } from './events-idb-store';\nimport { InMemoryEventsStore } from './events-memory-store';\n\nexport const createEventsManager = async <Type extends EventType>({\n config,\n sessionId,\n minInterval,\n maxInterval,\n type,\n payloadBatcher,\n storeType,\n}: {\n config: SessionReplayJoinedConfig;\n type: Type;\n minInterval?: number;\n maxInterval?: number;\n sessionId?: string | number;\n payloadBatcher?: PayloadBatcher;\n storeType: StoreType;\n}): Promise<AmplitudeSessionReplayEventsManager<Type, string>> => {\n const trackDestination = new SessionReplayTrackDestination({\n ...config,\n loggerProvider: config.loggerProvider,\n payloadBatcher,\n });\n\n const getMemoryStore = (): EventsStore<number> => {\n return new InMemoryEventsStore({\n loggerProvider: config.loggerProvider,\n maxInterval,\n minInterval,\n });\n };\n\n const getIdbStoreOrFallback = async (): Promise<EventsStore<number>> => {\n const store = await SessionReplayEventsIDBStore.new(\n type,\n {\n loggerProvider: config.loggerProvider,\n minInterval,\n maxInterval,\n apiKey: config.apiKey,\n },\n sessionId,\n );\n config.loggerProvider.log('Failed to initialize idb store, falling back to memory store.');\n return store ?? getMemoryStore();\n };\n\n const store: EventsStore<number> = storeType === 'idb' ? await getIdbStoreOrFallback() : getMemoryStore();\n\n /**\n * Immediately sends events to the track destination.\n */\n const sendEventsList = ({\n events,\n sessionId,\n deviceId,\n sequenceId,\n }: {\n events: string[];\n sessionId: string | number;\n deviceId: string;\n sequenceId?: number;\n }) => {\n if (config.debugMode) {\n getStorageSize()\n .then(({ totalStorageSize, percentOfQuota, usageDetails }) => {\n config.loggerProvider.debug(\n `Total storage size: ${totalStorageSize} KB, percentage of quota: ${percentOfQuota}%, usage details: ${usageDetails}`,\n );\n })\n .catch(() => {\n // swallow error\n });\n }\n\n trackDestination.sendEventsList({\n events: events,\n sessionId: sessionId,\n flushMaxRetries: config.flushMaxRetries,\n apiKey: config.apiKey,\n deviceId: deviceId,\n sampleRate: config.sampleRate,\n serverZone: config.serverZone,\n version: config.version,\n type,\n onComplete: async () => {\n await store.cleanUpSessionEventsStore(sessionId, sequenceId);\n return;\n },\n });\n };\n\n const sendCurrentSequenceEvents = ({ sessionId, deviceId }: { sessionId: number; deviceId: string }) => {\n store\n .storeCurrentSequence(sessionId)\n .then((currentSequence) => {\n if (currentSequence) {\n sendEventsList({\n sequenceId: currentSequence.sequenceId,\n events: currentSequence.events,\n sessionId: currentSequence.sessionId,\n deviceId,\n });\n }\n })\n .catch((e) => {\n config.loggerProvider.warn('Failed to get current sequence of session replay events for session:', e);\n });\n };\n\n const sendStoredEvents = async ({ deviceId }: { deviceId: string }) => {\n const sequencesToSend = await store.getSequencesToSend();\n sequencesToSend &&\n sequencesToSend.forEach((sequence) => {\n sendEventsList({\n sequenceId: sequence.sequenceId,\n events: sequence.events,\n sessionId: sequence.sessionId,\n deviceId,\n });\n });\n };\n\n const addEvent = ({\n event,\n sessionId,\n deviceId,\n }: {\n event: { type: Type; data: string };\n sessionId: number;\n deviceId: string;\n }) => {\n store\n .addEventToCurrentSequence(sessionId, event.data)\n .then((sequenceToSend) => {\n return (\n sequenceToSend &&\n sendEventsList({\n sequenceId: sequenceToSend.sequenceId,\n events: sequenceToSend.events,\n sessionId: sequenceToSend.sessionId,\n deviceId,\n })\n );\n })\n .catch((e) => {\n config.loggerProvider.warn('Failed to add event to session replay capture:', e);\n });\n };\n\n async function flush(useRetry = false) {\n return trackDestination.flush(useRetry);\n }\n\n return {\n sendCurrentSequenceEvents,\n addEvent,\n sendStoredEvents,\n flush,\n };\n};\n","import {\n SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n EventsManagerWithType,\n} from '../typings/session-replay';\n\n/**\n * \"Registers\" events managers internally. When an event is added this class routes the event to the correct\n * manager. For all send or flush methods this will invoke the event for all registered managers.\n */\nexport class MultiEventManager<EventType, EventDataType>\n implements AmplitudeSessionReplayEventsManager<EventType, EventDataType>\n{\n private managers: Map<EventType, AmplitudeSessionReplayEventsManager<EventType, EventDataType>>;\n\n constructor(...managers: EventsManagerWithType<EventType, EventDataType>[]) {\n const managersMap = new Map<EventType, AmplitudeSessionReplayEventsManager<EventType, EventDataType>>();\n managers.forEach((t) => {\n managersMap.set(t.name, t.manager);\n });\n this.managers = managersMap;\n }\n\n async sendStoredEvents(opts: { deviceId: string }): Promise<void> {\n const promises: Promise<void>[] = [];\n this.managers.forEach((manager) => {\n promises.push(manager.sendStoredEvents(opts));\n });\n await Promise.all(promises);\n }\n\n addEvent({\n sessionId,\n event,\n deviceId,\n }: {\n sessionId: number;\n event: { type: EventType; data: EventDataType };\n deviceId: string;\n }): void {\n this.managers.get(event.type)?.addEvent({ sessionId, event, deviceId });\n }\n\n sendCurrentSequenceEvents({ sessionId, deviceId }: { sessionId: number; deviceId: string }): void {\n this.managers.forEach((manager) => {\n manager.sendCurrentSequenceEvents({ sessionId, deviceId });\n });\n }\n\n async flush(useRetry?: boolean | undefined): Promise<void> {\n const promises: Promise<void>[] = [];\n this.managers.forEach((manager) => {\n promises.push(manager.flush(useRetry));\n });\n await Promise.all(promises);\n }\n}\n","const testableAccessors = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype = {};\nconst isAngularZonePresent = () => {\n return !!globalThis.Zone;\n};\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key])\n return untaintedBasePrototype[key];\n const defaultObj = globalThis[key];\n const defaultPrototype = defaultObj.prototype;\n const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a, _b;\n return Boolean(\n (_b = (_a = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a;\n return typeof defaultPrototype[method] === \"function\" && ((_a = defaultPrototype[method]) == null ? void 0 : _a.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods && !isAngularZonePresent()) {\n untaintedBasePrototype[key] = defaultObj.prototype;\n return defaultObj.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return defaultObj.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch {\n return defaultPrototype;\n }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache[cacheKey])\n return untaintedAccessorCache[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedAccessor = (_a = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache[cacheKey])\n return untaintedMethodCache[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n) {\n return getUntaintedAccessor(\"Node\", n, \"childNodes\");\n}\nfunction parentNode(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentNode\");\n}\nfunction parentElement(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentElement\");\n}\nfunction textContent(n) {\n return getUntaintedAccessor(\"Node\", n, \"textContent\");\n}\nfunction contains(n, other) {\n return getUntaintedMethod(\"Node\", n, \"contains\")(other);\n}\nfunction getRootNode(n) {\n return getUntaintedMethod(\"Node\", n, \"getRootNode\")();\n}\nfunction host(n) {\n if (!n || !(\"host\" in n)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n, \"host\");\n}\nfunction styleSheets(n) {\n return n.styleSheets;\n}\nfunction shadowRoot(n) {\n if (!n || !(\"shadowRoot\" in n)) return null;\n return getUntaintedAccessor(\"Element\", n, \"shadowRoot\");\n}\nfunction querySelector(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nconst index = {\n childNodes,\n parentNode,\n parentElement,\n textContent,\n contains,\n getRootNode,\n host,\n styleSheets,\n shadowRoot,\n querySelector,\n querySelectorAll,\n mutationObserver: mutationObserverCtor\n};\nexport {\n childNodes,\n contains,\n index as default,\n getRootNode,\n getUntaintedAccessor,\n getUntaintedMethod,\n getUntaintedPrototype,\n host,\n isAngularZonePresent,\n mutationObserverCtor,\n parentElement,\n parentNode,\n querySelector,\n querySelectorAll,\n shadowRoot,\n styleSheets,\n textContent\n};\n//# sourceMappingURL=rrweb-utils.js.map\n","import { getGlobalScope } from '@amplitude/analytics-core';\nimport dom from '@amplitude/rrweb-utils';\nimport type { eventWithTime, scrollCallback } from '@amplitude/rrweb-types';\n\n// These functions are not exposed in rrweb package, so we will define it here to use\n// Ignoring this function since this is copied from rrweb\n/* istanbul ignore next */\nexport function getWindowScroll(win: Window) {\n const doc = win.document;\n return {\n left: doc.scrollingElement\n ? doc.scrollingElement.scrollLeft\n : win.pageXOffset !== undefined\n ? win.pageXOffset\n : doc.documentElement.scrollLeft ||\n (doc?.body && dom.parentElement(doc.body)?.scrollLeft) ||\n doc?.body?.scrollLeft ||\n 0,\n top: doc.scrollingElement\n ? doc.scrollingElement.scrollTop\n : win.pageYOffset !== undefined\n ? win.pageYOffset\n : doc?.documentElement.scrollTop ||\n (doc?.body && dom.parentElement(doc.body)?.scrollTop) ||\n doc?.body?.scrollTop ||\n 0,\n };\n}\n\nexport function getWindowHeight(): number {\n const globalScope = getGlobalScope();\n return (\n globalScope?.innerHeight ||\n (document.documentElement && document.documentElement.clientHeight) ||\n (document.body && document.body.clientHeight) ||\n 0\n );\n}\n\nexport function getWindowWidth(): number {\n const globalScope = getGlobalScope();\n return (\n globalScope?.innerWidth ||\n (document.documentElement && document.documentElement.clientWidth) ||\n (document.body && document.body.clientWidth) ||\n 0\n );\n}\n\nexport type Mirror = {\n getNode: (id: number) => Node | null;\n};\n\nexport type RecordFunction = {\n (options: {\n emit: (event: eventWithTime) => void;\n inlineStylesheet?: boolean;\n hooks?: {\n mouseInteraction?: any;\n scroll?: scrollCallback;\n };\n maskAllInputs?: boolean;\n maskTextClass?: string;\n blockClass?: string;\n blockSelector?: string;\n maskInputFn?: (text: string, element: HTMLElement | null) => string;\n maskTextFn?: (text: string, element: HTMLElement | null) => string;\n maskTextSelector?: string;\n recordCanvas?: boolean;\n errorHandler?: (error: unknown) => boolean;\n plugins?: any[];\n applyBackgroundColorToBlockedElements?: boolean;\n }): (() => void) | undefined;\n addCustomEvent: (eventName: string, eventData: any) => void;\n mirror: Mirror;\n};\n","/* istanbul ignore file */\n\n// DO NOT EDIT (unless you know what you're doing)\n// Taken directly from git@github.com:antonmedv/finder.git@77d33158440dfffee4a300d2975b43a5283004ab\n\n/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\n/* eslint-disable prefer-const */\n\n// License: MIT\n// Author: Anton Medvedev <anton@medv.io>\n// Source: https://github.com/antonmedv/finder\n\ntype Knot = {\n name: string;\n penalty: number;\n level?: number;\n};\n\ntype Path = Knot[];\n\nexport type Options = {\n root: Element;\n idName: (name: string) => boolean;\n className: (name: string) => boolean;\n tagName: (name: string) => boolean;\n attr: (name: string, value: string) => boolean;\n seedMinLength: number;\n optimizedMinLength: number;\n threshold: number;\n maxNumberOfTries: number;\n timeoutMs: number | undefined;\n};\n\nlet config: Options;\nlet rootDocument: Document | Element;\nlet start: Date;\n\nexport function finder(input: Element, options?: Partial<Options>): string {\n start = new Date();\n if (input.nodeType !== Node.ELEMENT_NODE) {\n throw new Error(`Can't generate CSS selector for non-element node type.`);\n }\n if ('html' === input.tagName.toLowerCase()) {\n return 'html';\n }\n const defaults: Options = {\n root: document.body,\n idName: (_name: string) => true,\n className: (_name: string) => true,\n tagName: (_name: string) => true,\n attr: (_name: string, _value: string) => false,\n seedMinLength: 1,\n optimizedMinLength: 2,\n threshold: 1000,\n maxNumberOfTries: 10000,\n timeoutMs: undefined,\n };\n\n config = { ...defaults, ...options };\n rootDocument = findRootDocument(config.root, defaults);\n\n let path = bottomUpSearch(input, 'all', () =>\n bottomUpSearch(input, 'two', () => bottomUpSearch(input, 'one', () => bottomUpSearch(input, 'none'))),\n );\n\n if (path) {\n const optimized = sort(optimize(path, input));\n if (optimized.length > 0) {\n path = optimized[0];\n }\n return selector(path);\n } else {\n throw new Error(`Selector was not found.`);\n }\n}\n\nfunction findRootDocument(rootNode: Element | Document, defaults: Options) {\n if (rootNode.nodeType === Node.DOCUMENT_NODE) {\n return rootNode;\n }\n if (rootNode === defaults.root) {\n return rootNode.ownerDocument as Document;\n }\n return rootNode;\n}\n\nfunction bottomUpSearch(\n input: Element,\n limit: 'all' | 'two' | 'one' | 'none',\n fallback?: () => Path | null,\n): Path | null {\n let path: Path | null = null;\n let stack: Knot[][] = [];\n let current: Element | null = input;\n let i = 0;\n while (current) {\n const elapsedTime = new Date().getTime() - start.getTime();\n if (config.timeoutMs !== undefined && elapsedTime > config.timeoutMs) {\n throw new Error(`Timeout: Can't find a unique selector after ${elapsedTime}ms`);\n }\n let level: Knot[] = maybe(id(current)) ||\n maybe(...attr(current)) ||\n maybe(...classNames(current)) ||\n maybe(tagName(current)) || [any()];\n const nth = index(current);\n if (limit == 'all') {\n if (nth) {\n level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n }\n } else if (limit == 'two') {\n level = level.slice(0, 1);\n if (nth) {\n level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n }\n } else if (limit == 'one') {\n const [node] = (level = level.slice(0, 1));\n if (nth && dispensableNth(node)) {\n level = [nthChild(node, nth)];\n }\n } else if (limit == 'none') {\n level = [any()];\n if (nth) {\n level = [nthChild(level[0], nth)];\n }\n }\n for (let node of level) {\n node.level = i;\n }\n stack.push(level);\n if (stack.length >= config.seedMinLength) {\n path = findUniquePath(stack, fallback);\n if (path) {\n break;\n }\n }\n current = current.parentElement;\n i++;\n }\n if (!path) {\n path = findUniquePath(stack, fallback);\n }\n if (!path && fallback) {\n return fallback();\n }\n return path;\n}\n\nfunction findUniquePath(stack: Knot[][], fallback?: () => Path | null): Path | null {\n const paths = sort(combinations(stack));\n if (paths.length > config.threshold) {\n return fallback ? fallback() : null;\n }\n for (let candidate of paths) {\n if (unique(candidate)) {\n return candidate;\n }\n }\n return null;\n}\n\nfunction selector(path: Path): string {\n let node = path[0];\n let query = node.name;\n for (let i = 1; i < path.length; i++) {\n const level = path[i].level || 0;\n if (node.level === level - 1) {\n query = `${path[i].name} > ${query}`;\n } else {\n query = `${path[i].name} ${query}`;\n }\n node = path[i];\n }\n return query;\n}\n\nfunction penalty(path: Path): number {\n return path.map((node) => node.penalty).reduce((acc, i) => acc + i, 0);\n}\n\nfunction unique(path: Path) {\n const css = selector(path);\n switch (rootDocument.querySelectorAll(css).length) {\n case 0:\n throw new Error(`Can't select any node with this selector: ${css}`);\n case 1:\n return true;\n default:\n return false;\n }\n}\n\nfunction id(input: Element): Knot | null {\n const elementId = input.getAttribute('id');\n if (elementId && config.idName(elementId)) {\n return {\n name: '#' + CSS.escape(elementId),\n penalty: 0,\n };\n }\n return null;\n}\n\nfunction attr(input: Element): Knot[] {\n const attrs = Array.from(input.attributes).filter((attr) => config.attr(attr.name, attr.value));\n return attrs.map(\n (attr): Knot => ({\n name: `[${CSS.escape(attr.name)}=\"${CSS.escape(attr.value)}\"]`,\n penalty: 0.5,\n }),\n );\n}\n\nfunction classNames(input: Element): Knot[] {\n const names = Array.from(input.classList).filter(config.className);\n return names.map(\n (name): Knot => ({\n name: '.' + CSS.escape(name),\n penalty: 1,\n }),\n );\n}\n\nfunction tagName(input: Element): Knot | null {\n const name = input.tagName.toLowerCase();\n if (config.tagName(name)) {\n return {\n name,\n penalty: 2,\n };\n }\n return null;\n}\n\nfunction any(): Knot {\n return {\n name: '*',\n penalty: 3,\n };\n}\n\nfunction index(input: Element): number | null {\n const parent = input.parentNode;\n if (!parent) {\n return null;\n }\n let child = parent.firstChild;\n if (!child) {\n return null;\n }\n let i = 0;\n while (child) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n i++;\n }\n if (child === input) {\n break;\n }\n child = child.nextSibling;\n }\n return i;\n}\n\nfunction nthChild(node: Knot, i: number): Knot {\n return {\n name: node.name + `:nth-child(${i})`,\n penalty: node.penalty + 1,\n };\n}\n\nfunction dispensableNth(node: Knot) {\n return node.name !== 'html' && !node.name.startsWith('#');\n}\n\nfunction maybe(...level: (Knot | null)[]): Knot[] | null {\n const list = level.filter(notEmpty);\n if (list.length > 0) {\n return list;\n }\n return null;\n}\n\nfunction notEmpty<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nfunction* combinations(stack: Knot[][], path: Knot[] = []): Generator<Knot[]> {\n if (stack.length > 0) {\n for (let node of stack[0]) {\n yield* combinations(stack.slice(1, stack.length), path.concat(node));\n }\n } else {\n yield path;\n }\n}\n\nfunction sort(paths: Iterable<Path>): Path[] {\n return [...paths].sort((a, b) => penalty(a) - penalty(b));\n}\n\ntype Scope = {\n counter: number;\n visited: Map<string, boolean>;\n};\n\nfunction* optimize(\n path: Path,\n input: Element,\n scope: Scope = {\n counter: 0,\n visited: new Map<string, boolean>(),\n },\n): Generator<Knot[]> {\n if (path.length > 2 && path.length > config.optimizedMinLength) {\n for (let i = 1; i < path.length - 1; i++) {\n if (scope.counter > config.maxNumberOfTries) {\n return; // Okay At least I tried!\n }\n scope.counter += 1;\n const newPath = [...path];\n newPath.splice(i, 1);\n const newPathKey = selector(newPath);\n if (scope.visited.has(newPathKey)) {\n return;\n }\n if (unique(newPath) && same(newPath, input)) {\n yield newPath;\n scope.visited.set(newPathKey, true);\n yield* optimize(newPath, input, scope);\n }\n }\n }\n}\n\nfunction same(path: Path, input: Element) {\n return rootDocument.querySelector(selector(path)) === input;\n}\n","import type { mouseInteractionCallBack } from '@amplitude/rrweb-types';\nimport { MouseInteractions } from '@amplitude/rrweb-types';\nimport { getWindowScroll, Mirror } from '../utils/rrweb';\nimport { SessionReplayEventsManager as AmplitudeSessionReplayEventsManager } from '../typings/session-replay';\nimport { PayloadBatcher } from 'src/track-destination';\nimport { finder } from '../libs/finder';\nimport { getGlobalScope, ILogger } from '@amplitude/analytics-core';\nimport { UGCFilterRule } from 'src/config/types';\nimport { getPageUrl } from '../helpers';\n\n// exported for testing\nexport type ClickEvent = {\n timestamp: number;\n x: number;\n y: number;\n viewportWidth: number;\n viewportHeight: number;\n pageUrl: string;\n selector?: string;\n type: 'click';\n};\n\n// exported for testing\nexport type ClickEventWithCount = ClickEvent & { count: number };\n\ntype Options = {\n sessionId: string | number;\n deviceIdFn: () => string | undefined;\n eventsManager: AmplitudeSessionReplayEventsManager<'interaction', string>;\n mirror: Mirror;\n ugcFilterRules: UGCFilterRule[];\n};\n\nconst HOUR_IN_MILLISECONDS = 3_600_000;\n\nexport const clickNonBatcher: PayloadBatcher = ({ version, events }) => {\n const clickEvents: ClickEvent[] = [];\n events.forEach((evt: string) => {\n const record = JSON.parse(evt) as Record<string, unknown>;\n record.count = 1;\n if (record.type === 'click') {\n clickEvents.push(record as ClickEvent);\n }\n });\n return { version, events: clickEvents };\n};\n\nexport const clickBatcher: PayloadBatcher = ({ version, events }) => {\n const clickEvents: ClickEvent[] = [];\n events.forEach((evt: string) => {\n const record = JSON.parse(evt) as Record<string, unknown>;\n if (record.type === 'click') {\n clickEvents.push(record as ClickEvent);\n }\n });\n\n const reduced = clickEvents.reduce<Record<string, ClickEventWithCount>>((prev, curr) => {\n const { x, y, selector, timestamp } = curr;\n\n // round down to nearest hour.\n const hour = timestamp - (timestamp % HOUR_IN_MILLISECONDS);\n\n const k = `${x}:${y}:${selector ?? ''}:${hour}`;\n if (!prev[k]) {\n prev[k] = { ...curr, timestamp: hour, count: 1 };\n } else {\n prev[k].count += 1;\n }\n return prev;\n }, {});\n\n return { version, events: Object.values(reduced) };\n};\n\nexport const clickHook: (logger: ILogger, options: Options) => mouseInteractionCallBack =\n (logger, { eventsManager, sessionId, deviceIdFn, mirror, ugcFilterRules }) =>\n (e) => {\n if (e.type !== MouseInteractions.Click) {\n return;\n }\n\n const globalScope = getGlobalScope();\n if (!globalScope) {\n return;\n }\n\n const { location, innerHeight, innerWidth } = globalScope;\n // it only makes sense to send events if a pageUrl exists\n if (!location) {\n return;\n }\n\n const { x, y } = e;\n if (x === undefined || y === undefined) {\n return;\n }\n\n const node = mirror.getNode(e.id);\n let selector;\n if (node) {\n try {\n selector = finder(node as Element);\n } catch (err) {\n logger.debug('error resolving selector from finder');\n }\n }\n\n const { left: scrollX, top: scrollY } = getWindowScroll(globalScope as unknown as Window);\n\n const pageUrl = getPageUrl(location.href, ugcFilterRules);\n\n const event: ClickEvent = {\n x: x + scrollX,\n y: y + scrollY,\n selector,\n\n viewportHeight: innerHeight,\n viewportWidth: innerWidth,\n pageUrl,\n timestamp: Date.now(),\n type: 'click',\n };\n const deviceId = deviceIdFn();\n if (deviceId) {\n eventsManager.addEvent({ sessionId, event: { type: 'interaction', data: JSON.stringify(event) }, deviceId });\n }\n };\n","import { getGlobalScope } from '@amplitude/analytics-core';\nimport { SessionReplayJoinedConfig } from './config/types';\nimport { SessionReplayDestinationSessionMetadata } from './typings/session-replay';\nimport { getServerUrl } from './helpers';\n\ntype BeaconSendFn<T> = (pageUrl: string, payload: T) => boolean;\n\n/**\n * For very small payloads it's preferable to use the [Beacon API](https://developer.mozilla.org/en-US/docs/Web/API/Beacon_API).\n * While it doesn't provide 100% guarantees on sends, it greatly helps with overall reliability and page load performance. As\n * the Beacon API has a potential to fail due to size constraints we want to fall back to XHR if need be. This is mostly to\n * be used with 'pagehide' or 'beforeunload' events.\n *\n * Note there are only 3 CORS safelisted Content-Types you can send:\n *\n * - application/x-www-form-urlencoded\n * - multipart/form-data\n * - text/plain\n *\n * If we do not send one of these, some browsers like Chrome may not send this at all. Also we incur the overhead of a preflight\n * request. In our case we will add no additional content-type header. If you are trying to ping a server that requires this\n * header, you may want to use the regular fetch API or a different mechanism.\n */\nexport class BeaconTransport<T> {\n private sendBeacon: BeaconSendFn<T>;\n private sendXhr: BeaconSendFn<T>;\n private readonly basePageUrl: string;\n private readonly context: Omit<SessionReplayDestinationSessionMetadata, 'deviceId'>;\n private readonly apiKey: string;\n\n constructor(context: Omit<SessionReplayDestinationSessionMetadata, 'deviceId'>, config: SessionReplayJoinedConfig) {\n const globalScope = getGlobalScope();\n if (globalScope && globalScope.navigator && typeof globalScope.navigator.sendBeacon === 'function') {\n this.sendBeacon = (pageUrl, payload) => {\n try {\n if (globalScope.navigator.sendBeacon(pageUrl, JSON.stringify(payload))) {\n return true;\n }\n } catch (e) {\n // not logging error, since it would be hard to view and just adds overhead.\n }\n return false;\n };\n } else {\n this.sendBeacon = () => false;\n }\n\n this.sendXhr = (pageUrl, payload) => {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', pageUrl, true);\n xhr.setRequestHeader('Accept', '*/*');\n xhr.send(JSON.stringify(payload));\n return true;\n };\n\n this.basePageUrl = getServerUrl(config.serverZone, config.trackServerUrl);\n this.apiKey = config.apiKey;\n this.context = context;\n }\n\n send(deviceId: string, payload: T) {\n const { sessionId, type } = this.context;\n const urlParams = new URLSearchParams({\n device_id: deviceId,\n session_id: String(sessionId),\n type: String(type),\n api_key: this.apiKey,\n });\n\n const pageUrl = `${this.basePageUrl}?${urlParams.toString()}`;\n\n // ideally send using the beacon API, but there is a chance it may fail, possibly due to a payload\n // size limit. in this case, try best effort to send using xhr.\n this.sendBeacon(pageUrl, payload) || this.sendXhr(pageUrl, payload);\n }\n}\n","import { getWindowHeight, getWindowWidth } from '../utils/rrweb';\nimport type { scrollCallback, scrollPosition } from '@amplitude/rrweb-types';\nimport { BeaconTransport } from '../beacon-transport';\nimport { getGlobalScope } from '@amplitude/analytics-core';\nimport { SessionReplayJoinedConfig } from '../config/types';\nimport { SessionReplayDestinationSessionMetadata } from '../typings/session-replay';\nimport { getPageUrl } from '../helpers';\n\nexport type ScrollEvent = {\n timestamp: number; // Timestamp the event occurred\n maxScrollX: number; // Max window scroll X on a page\n maxScrollY: number; // Max window scroll Y on a page\n maxScrollHeight: number; // Max window scroll Y + window height on a page\n maxScrollWidth: number; // Max window scroll X + window width on a page\n viewportWidth: number;\n viewportHeight: number;\n pageUrl: string;\n type: 'scroll';\n};\n\nexport type ScrollEventPayload = { version: number; events: ScrollEvent[] };\n\n/**\n * This is intended to watch and update max scroll activity when loaded for a particular page.\n * A new instance should be created if the page URL changes, since by default it does not reset\n * it's max scroll state. It is intended to send very few and very small events utilizing the\n * Beacon API.\n * @see {@link BeaconTransport} for more details on Beacon API usage.\n */\nexport class ScrollWatcher {\n private timestamp = Date.now();\n private _maxScrollX: number;\n private _maxScrollY: number;\n private _maxScrollWidth: number;\n private _maxScrollHeight: number;\n private readonly transport: BeaconTransport<ScrollEventPayload>;\n private readonly config: Pick<SessionReplayJoinedConfig, 'loggerProvider' | 'interactionConfig'>;\n\n static default(\n context: Omit<SessionReplayDestinationSessionMetadata, 'deviceId'>,\n config: SessionReplayJoinedConfig,\n ): ScrollWatcher {\n return new ScrollWatcher(new BeaconTransport<ScrollEventPayload>(context, config), config);\n }\n\n constructor(\n transport: BeaconTransport<ScrollEventPayload>,\n config: Pick<SessionReplayJoinedConfig, 'loggerProvider' | 'interactionConfig'>,\n ) {\n this._maxScrollX = 0;\n this._maxScrollY = 0;\n this._maxScrollWidth = getWindowWidth();\n this._maxScrollHeight = getWindowHeight();\n this.config = config;\n\n this.transport = transport;\n }\n\n public get maxScrollX(): number {\n return this._maxScrollX;\n }\n\n public get maxScrollY(): number {\n return this._maxScrollY;\n }\n\n public get maxScrollWidth(): number {\n return this._maxScrollWidth;\n }\n\n public get maxScrollHeight(): number {\n return this._maxScrollHeight;\n }\n\n update(e: scrollPosition) {\n const now = Date.now();\n if (e.x > this._maxScrollX) {\n const width = getWindowWidth();\n this._maxScrollX = e.x;\n const maxScrollWidth = e.x + width;\n if (maxScrollWidth > this._maxScrollWidth) {\n this._maxScrollWidth = maxScrollWidth;\n }\n this.timestamp = now;\n }\n\n if (e.y > this._maxScrollY) {\n const height = getWindowHeight();\n this._maxScrollY = e.y;\n const maxScrollHeight = e.y + height;\n if (maxScrollHeight > this._maxScrollHeight) {\n this._maxScrollHeight = maxScrollHeight;\n }\n this.timestamp = now;\n }\n }\n\n hook: scrollCallback = (e: scrollPosition) => {\n this.update(e);\n };\n\n send: (deviceIdFn: () => string | undefined) => (_: PageTransitionEvent | Event) => void = (deviceIdFn) => (_) => {\n const deviceId = deviceIdFn();\n const globalScope = getGlobalScope();\n if (globalScope && deviceId) {\n this.transport.send(deviceId, {\n version: 1,\n events: [\n {\n maxScrollX: this._maxScrollX,\n maxScrollY: this._maxScrollY,\n maxScrollWidth: this._maxScrollWidth,\n maxScrollHeight: this._maxScrollHeight,\n\n viewportHeight: getWindowHeight(),\n viewportWidth: getWindowWidth(),\n pageUrl: getPageUrl(globalScope.location.href, this.config.interactionConfig?.ugcFilterRules ?? []),\n timestamp: this.timestamp,\n type: 'scroll',\n },\n ],\n });\n }\n };\n}\n","import { generateSessionReplayId } from './helpers';\nimport { SessionIdentifiers as ISessionIdentifiers } from './typings/session-replay';\n\nexport class SessionIdentifiers implements ISessionIdentifiers {\n deviceId?: string;\n sessionId?: string | number;\n sessionReplayId?: string;\n\n constructor({ sessionId, deviceId }: { sessionId?: string | number; deviceId?: string }) {\n this.deviceId = deviceId;\n this.sessionId = sessionId;\n\n if (sessionId && deviceId) {\n this.sessionReplayId = generateSessionReplayId(sessionId, deviceId);\n }\n }\n}\n","var u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\nvar fleb = new u8([\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 2,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 5,\n 5,\n 5,\n 0,\n /* unused */\n 0,\n 0,\n /* impossible */\n 0\n]);\nvar fdeb = new u8([\n 0,\n 0,\n 0,\n 0,\n 1,\n 1,\n 2,\n 2,\n 3,\n 3,\n 4,\n 4,\n 5,\n 5,\n 6,\n 6,\n 7,\n 7,\n 8,\n 8,\n 9,\n 9,\n 10,\n 10,\n 11,\n 11,\n 12,\n 12,\n 13,\n 13,\n /* unused */\n 0,\n 0\n]);\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\nvar freb = function(eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = j - b[i] << 5 | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n var x = (i & 43690) >>> 1 | (i & 21845) << 1;\n x = (x & 52428) >>> 2 | (x & 13107) << 2;\n x = (x & 61680) >>> 4 | (x & 3855) << 4;\n rev[i] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1;\n}\nvar hMap = function(cd, mb, r) {\n var s = cd.length;\n var i = 0;\n var l = new u16(mb);\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = le[i - 1] + l[i - 1] << 1;\n }\n var co;\n if (r) {\n co = new u16(1 << mb);\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n var sv = i << 4 | cd[i];\n var r_1 = mb - cd[i];\n var v = le[cd[i] - 1]++ << r_1;\n for (var m = v | (1 << r_1) - 1; v <= m; ++v) {\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n } else {\n co = new u16(s);\n for (i = 0; i < s; ++i)\n co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i];\n }\n return co;\n};\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\nvar flm = /* @__PURE__ */ hMap(flt, 9, 0), flrm = /* @__PURE__ */ hMap(flt, 9, 1);\nvar fdm = /* @__PURE__ */ hMap(fdt, 5, 0), fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);\nvar max = function(a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\nvar bits = function(d, p, m) {\n var o = p / 8 >> 0;\n return (d[o] | d[o + 1] << 8) >>> (p & 7) & m;\n};\nvar bits16 = function(d, p) {\n var o = p / 8 >> 0;\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >>> (p & 7);\n};\nvar shft = function(p) {\n return (p / 8 >> 0) + (p & 7 && 1);\n};\nvar slc = function(v, s, e) {\n if (e == null || e > v.length)\n e = v.length;\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar inflt = function(dat, buf, st) {\n var sl = dat.length;\n var noBuf = !buf || st;\n var noSt = !st || st.i;\n if (!st)\n st = {};\n if (!buf)\n buf = new u8(sl * 3);\n var cbuf = function(l2) {\n var bl = buf.length;\n if (l2 > bl) {\n var nbuf = new u8(Math.max(bl * 2, l2));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n var tbts = sl * 8;\n do {\n if (!lm) {\n st.f = final = bits(dat, pos, 1);\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;\n if (t > sl) {\n if (noSt)\n throw \"unexpected EOF\";\n break;\n }\n if (noBuf)\n cbuf(bt + l);\n buf.set(dat.subarray(s, t), bt);\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n } else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n var ldt = new u8(tl);\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n if (!noSt && pos + tl * (clb + 7) > tbts)\n break;\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl; ) {\n var r = clm[bits(dat, pos, clbmsk)];\n pos += r & 15;\n var s = r >>> 4;\n if (s < 16) {\n ldt[i++] = s;\n } else {\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n lbt = max(lt);\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n } else\n throw \"invalid block type\";\n if (pos > tbts)\n throw \"unexpected EOF\";\n }\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var mxa = lbt + dbt + 18;\n while (noSt || pos + mxa < tbts) {\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts)\n throw \"unexpected EOF\";\n if (!c)\n throw \"invalid length/literal\";\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lm = null;\n break;\n } else {\n var add = sym - 254;\n if (sym > 264) {\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw \"invalid distance\";\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts)\n throw \"unexpected EOF\";\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = pos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt == buf.length ? buf : slc(buf, 0, bt);\n};\nvar wbits = function(d, p, v) {\n v <<= p & 7;\n var o = p / 8 >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\nvar wbits16 = function(d, p, v) {\n v <<= p & 7;\n var o = p / 8 >> 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\nvar hTree = function(d, mb) {\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [new u8(0), 0];\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function(a, b) {\n return a.f - b.f;\n });\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l, r };\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l, r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n var tr = new u16(maxSym + 1);\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n var i = 0, dt = 0;\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function(a, b) {\n return tr[b.s] - tr[a.s] || a.f - b.f;\n });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << mbt - tr[i2_1]);\n tr[i2_1] = mb;\n } else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << mb - tr[i2_2]++ - 1;\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\nvar ln = function(n, l, d) {\n return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;\n};\nvar lc = function(c) {\n var s = c.length;\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n var cli = 0, cln = c[0], cls = 1;\n var w = function(v) {\n cl[cli++] = v;\n };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);\n cls = 0;\n }\n } else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(cls - 3 << 5 | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\nvar clen = function(cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\nvar wfblk = function(out, pos, dat) {\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\nvar wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a2 = hTree(lf, 15), dlt = _a2[0], mlb = _a2[1];\n var _b2 = hTree(df, 15), ddt = _b2[0], mdb = _b2[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = bl + 5 << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12;\n }\n }\n } else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = syms[i] >>> 18 & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst];\n } else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\nvar deo = /* @__PURE__ */ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\nvar dflt = function(dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7e3)) + post);\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n var e = i + 65535;\n if (e < s) {\n pos = wfblk(w, pos, dat.subarray(i, e));\n } else {\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n } else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function(i2) {\n return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;\n };\n var syms = new u32(25e3);\n var lf = new u16(288), df = new u16(32);\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n var hv = hsh(i);\n var imod = i & 32767;\n var pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n if (wi <= i) {\n var rem = s - i;\n if ((lc_1 > 7e3 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n if (nl > maxn)\n break;\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j + 32768 & 32767;\n var pti = prev[ti];\n var cd = ti - pti + 32768 & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod + 32768 & 32767;\n }\n }\n if (d) {\n syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n } else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\nvar adler = function() {\n var a = 1, b = 0;\n return {\n p: function(d) {\n var n = a, m = b;\n var l = d.length;\n for (var i = 0; i != l; ) {\n var e = Math.min(i + 5552, l);\n for (; i < e; ++i)\n n += d[i], m += n;\n n %= 65521, m %= 65521;\n }\n a = n, b = m;\n },\n d: function() {\n return (a >>> 8 << 16 | (b & 255) << 8 | b >>> 8) + ((a & 255) << 23) * 2;\n }\n };\n};\nvar dopt = function(dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st);\n};\nvar wbytes = function(d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\nvar zlh = function(c, o) {\n var lv = o.level, fl2 = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = fl2 << 6 | (fl2 ? 32 - 2 * fl2 : 1);\n};\nvar zlv = function(d) {\n if ((d[0] & 15) != 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31)\n throw \"invalid zlib data\";\n if (d[1] & 32)\n throw \"invalid zlib data: preset dictionaries not supported\";\n};\nfunction zlibSync(data, opts) {\n if (opts === void 0) {\n opts = {};\n }\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nfunction unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\nfunction strToU8(str, latin1) {\n var l = str.length;\n if (!latin1 && typeof TextEncoder != \"undefined\")\n return new TextEncoder().encode(str);\n var ar = new u8(str.length + (str.length >>> 1));\n var ai = 0;\n var w = function(v) {\n ar[ai++] = v;\n };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + (l - i << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | c >>> 6), w(128 | c & 63);\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | str.charCodeAt(++i) & 1023, w(240 | c >>> 18), w(128 | c >>> 12 & 63), w(128 | c >>> 6 & 63), w(128 | c & 63);\n else\n w(224 | c >>> 12), w(128 | c >>> 6 & 63), w(128 | c & 63);\n }\n return slc(ar, 0, ai);\n}\nfunction strFromU8(dat, latin1) {\n var r = \"\";\n if (!latin1 && typeof TextDecoder != \"undefined\")\n return new TextDecoder().decode(dat);\n for (var i = 0; i < dat.length; ) {\n var c = dat[i++];\n if (c < 128 || latin1)\n r += String.fromCharCode(c);\n else if (c < 224)\n r += String.fromCharCode((c & 31) << 6 | dat[i++] & 63);\n else if (c < 240)\n r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | dat[i++] & 63);\n else\n c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | dat[i++] & 63) - 65536, r += String.fromCharCode(55296 | c >> 10, 56320 | c & 1023);\n }\n return r;\n}\nconst MARK = \"v1\";\nexport {\n MARK as M,\n strToU8 as a,\n strFromU8 as s,\n unzlibSync as u,\n zlibSync as z\n};\n//# sourceMappingURL=base-BrE4jft0.js.map\n","import { M as MARK, s as strFromU8, z as zlibSync, a as strToU8 } from \"./base-BrE4jft0.js\";\nconst pack = (event) => {\n const _e = {\n ...event,\n v: MARK\n };\n return strFromU8(zlibSync(strToU8(JSON.stringify(_e))), true);\n};\nexport {\n pack\n};\n//# sourceMappingURL=pack.js.map\n","import { getGlobalScope } from '@amplitude/analytics-core';\nimport { pack } from '@amplitude/rrweb-packer';\nimport type { eventWithTime } from '@amplitude/rrweb-types';\nimport { SessionReplayJoinedConfig } from '../config/types';\nimport { SessionReplayEventsManager } from '../typings/session-replay';\n\ninterface TaskQueue {\n event: eventWithTime;\n sessionId: string | number;\n}\n\nconst DEFAULT_TIMEOUT = 2000;\nexport class EventCompressor {\n taskQueue: TaskQueue[] = [];\n isProcessing = false;\n eventsManager?: SessionReplayEventsManager<'replay' | 'interaction', string>;\n config: SessionReplayJoinedConfig;\n deviceId: string | undefined;\n canUseIdleCallback: boolean | undefined;\n timeout: number;\n worker?: Worker;\n\n constructor(\n eventsManager: SessionReplayEventsManager<'replay' | 'interaction', string>,\n config: SessionReplayJoinedConfig,\n deviceId: string | undefined,\n workerScriptInternal?: string, // this is used for unit testing\n ) {\n const globalScope = getGlobalScope();\n this.canUseIdleCallback = globalScope && 'requestIdleCallback' in globalScope;\n this.eventsManager = eventsManager;\n this.config = config;\n this.deviceId = deviceId;\n this.timeout = config.performanceConfig?.timeout || DEFAULT_TIMEOUT;\n\n // These two lines will be changed at compile time.\n const replace: Record<string, string> = {};\n // This next line is going to be ridiculously hard to cover in unit tests, ignoring.\n /* istanbul ignore next */\n const workerScript = replace.COMPRESSION_WEBWORKER_BODY ?? workerScriptInternal;\n if (this.config.experimental?.useWebWorker && globalScope && globalScope.Worker && workerScript) {\n config.loggerProvider.log('[Experimental] Enabling web worker for compression');\n\n const worker = new Worker(URL.createObjectURL(new Blob([workerScript], { type: 'application/javascript' })));\n worker.onerror = (e) => {\n config.loggerProvider.error(e);\n };\n worker.onmessage = (e) => {\n const { compressedEvent, sessionId } = e.data as Record<string, string>;\n this.addCompressedEventToManager(compressedEvent, sessionId);\n };\n\n this.worker = worker;\n }\n }\n\n // Schedule processing during idle time\n public scheduleIdleProcessing(): void {\n if (!this.isProcessing) {\n this.isProcessing = true;\n requestIdleCallback(\n (idleDeadline) => {\n this.processQueue(idleDeadline);\n },\n { timeout: this.timeout },\n );\n }\n }\n\n // Add an event to the task queue if idle callback is supported or compress the event directly\n public enqueueEvent(event: eventWithTime, sessionId: string | number): void {\n if (this.canUseIdleCallback && this.config.performanceConfig?.enabled) {\n this.config.loggerProvider.debug('Enqueuing event for processing during idle time.');\n this.taskQueue.push({ event, sessionId });\n this.scheduleIdleProcessing();\n } else {\n this.config.loggerProvider.debug('Processing event without idle callback.');\n this.addCompressedEvent(event, sessionId);\n }\n }\n\n // Process the task queue during idle time\n public processQueue(idleDeadline: IdleDeadline): void {\n // Process tasks while there's idle time or until the max number of tasks is reached\n while (this.taskQueue.length > 0 && (idleDeadline.timeRemaining() > 0 || idleDeadline.didTimeout)) {\n const task = this.taskQueue.shift();\n if (task) {\n const { event, sessionId } = task;\n this.addCompressedEvent(event, sessionId);\n }\n }\n\n // If there are still tasks in the queue, schedule the next idle callback\n if (this.taskQueue.length > 0) {\n requestIdleCallback(\n (idleDeadline) => {\n this.processQueue(idleDeadline);\n },\n { timeout: this.timeout },\n );\n } else {\n this.isProcessing = false;\n }\n }\n\n compressEvent = (event: eventWithTime) => {\n const packedEvent = pack(event);\n return JSON.stringify(packedEvent);\n };\n\n private addCompressedEventToManager = (compressedEvent: string, sessionId: string | number) => {\n if (this.eventsManager && this.deviceId) {\n this.eventsManager.addEvent({\n event: { type: 'replay', data: compressedEvent },\n sessionId,\n deviceId: this.deviceId,\n });\n }\n };\n\n public addCompressedEvent = (event: eventWithTime, sessionId: string | number) => {\n if (this.worker) {\n // This indirectly compresses the event.\n this.worker.postMessage({ event, sessionId });\n } else {\n const compressedEvent = this.compressEvent(event);\n this.addCompressedEventToManager(compressedEvent, sessionId);\n }\n };\n\n public terminate = () => {\n this.worker?.terminate();\n };\n}\n","import {\n Logger,\n returnWrapper,\n getAnalyticsConnector,\n getGlobalScope,\n ILogger,\n LogLevel,\n} from '@amplitude/analytics-core';\n\n// Import only specific types to avoid pulling in the entire rrweb-types package\nimport { EventType as RRWebEventType, scrollCallback, eventWithTime } from '@amplitude/rrweb-types';\nimport { createSessionReplayJoinedConfigGenerator } from './config/joined-config';\nimport {\n LoggingConfig,\n SessionReplayJoinedConfig,\n SessionReplayJoinedConfigGenerator,\n SessionReplayMetadata,\n SessionReplayLocalConfig,\n SessionReplayRemoteConfig,\n} from './config/types';\nimport {\n BLOCK_CLASS,\n CustomRRwebEvent,\n DEFAULT_SESSION_REPLAY_PROPERTY,\n INTERACTION_MAX_INTERVAL,\n INTERACTION_MIN_INTERVAL,\n MASK_TEXT_CLASS,\n SESSION_REPLAY_DEBUG_PROPERTY,\n} from './constants';\nimport { createEventsManager } from './events/events-manager';\nimport { MultiEventManager } from './events/multi-manager';\nimport { generateHashCode, getDebugConfig, getPageUrl, getStorageSize, isSessionInSample, maskFn } from './helpers';\nimport { clickBatcher, clickHook, clickNonBatcher } from './hooks/click';\nimport { ScrollWatcher } from './hooks/scroll';\nimport { SessionIdentifiers } from './identifiers';\nimport {\n AmplitudeSessionReplay,\n SessionReplayEventsManager as AmplitudeSessionReplayEventsManager,\n DebugInfo,\n EventType,\n EventsManagerWithType,\n SessionIdentifiers as ISessionIdentifiers,\n SessionReplayOptions,\n} from './typings/session-replay';\nimport { VERSION } from './version';\nimport { EventCompressor } from './events/event-compressor';\nimport { SafeLoggerProvider } from './logger';\n\n// Import only the type for NetworkRequestEvent to keep type safety\nimport type { NetworkRequestEvent, NetworkObservers } from './observers';\nimport type { RecordFunction } from './utils/rrweb';\n\ntype PageLeaveFn = (e: PageTransitionEvent | Event) => void;\n\nexport class SessionReplay implements AmplitudeSessionReplay {\n name = '@amplitude/session-replay-browser';\n config: SessionReplayJoinedConfig | undefined;\n joinedConfigGenerator: SessionReplayJoinedConfigGenerator | undefined;\n identifiers: ISessionIdentifiers | undefined;\n eventsManager?: AmplitudeSessionReplayEventsManager<'replay' | 'interaction', string>;\n loggerProvider: ILogger;\n recordCancelCallback: ReturnType<RecordFunction> | null = null;\n eventCount = 0;\n eventCompressor: EventCompressor | undefined;\n\n // Visible for testing only\n pageLeaveFns: PageLeaveFn[] = [];\n private scrollHook?: scrollCallback;\n private networkObservers?: NetworkObservers;\n private metadata: SessionReplayMetadata | undefined;\n\n // Cache the dynamically imported record function\n private recordFunction: RecordFunction | null = null;\n\n constructor() {\n this.loggerProvider = new SafeLoggerProvider(new Logger());\n }\n\n init(apiKey: string, options: SessionReplayOptions) {\n return returnWrapper(this._init(apiKey, options));\n }\n\n private teardownEventListeners = (teardown: boolean) => {\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.removeEventListener('blur', this.blurListener);\n globalScope.removeEventListener('focus', this.focusListener);\n !teardown && globalScope.addEventListener('blur', this.blurListener);\n !teardown && globalScope.addEventListener('focus', this.focusListener);\n // prefer pagehide to unload events, this is the standard going forward. it is not\n // 100% reliable, but is bfcache-compatible.\n if (globalScope.self && 'onpagehide' in globalScope.self) {\n globalScope.removeEventListener('pagehide', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('pagehide', this.pageLeaveListener);\n } else {\n // this has performance implications, but is the only way we can reliably send events\n // in browser that don't support pagehide.\n globalScope.removeEventListener('beforeunload', this.pageLeaveListener);\n !teardown && globalScope.addEventListener('beforeunload', this.pageLeaveListener);\n }\n }\n };\n\n protected async _init(apiKey: string, options: SessionReplayOptions) {\n this.loggerProvider = new SafeLoggerProvider(options.loggerProvider || new Logger());\n Object.prototype.hasOwnProperty.call(options, 'logLevel') &&\n this.loggerProvider.enable(options.logLevel as LogLevel);\n this.identifiers = new SessionIdentifiers({ sessionId: options.sessionId, deviceId: options.deviceId });\n this.joinedConfigGenerator = await createSessionReplayJoinedConfigGenerator(apiKey, options);\n const { joinedConfig, localConfig, remoteConfig } = await this.joinedConfigGenerator.generateJoinedConfig(\n this.identifiers.sessionId,\n );\n this.config = joinedConfig;\n\n this.setMetadata(\n options.sessionId,\n joinedConfig,\n localConfig,\n remoteConfig,\n options.version?.version,\n VERSION,\n options.version?.type,\n );\n\n if (options.sessionId && this.config.interactionConfig?.enabled) {\n const scrollWatcher = ScrollWatcher.default(\n {\n sessionId: options.sessionId,\n type: 'interaction',\n },\n this.config,\n );\n this.pageLeaveFns = [scrollWatcher.send(this.getDeviceId.bind(this)).bind(scrollWatcher)];\n this.scrollHook = scrollWatcher.hook.bind(scrollWatcher);\n }\n\n const managers: EventsManagerWithType<EventType, string>[] = [];\n let { storeType } = this.config;\n if (storeType === 'idb' && !getGlobalScope()?.indexedDB) {\n storeType = 'memory';\n this.loggerProvider.warn('Could not use preferred indexedDB storage, reverting to in memory option.');\n }\n this.loggerProvider.log(`Using ${storeType} for event storage.`);\n try {\n const rrwebEventManager = await createEventsManager<'replay'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'replay',\n storeType,\n });\n managers.push({ name: 'replay', manager: rrwebEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating replay events manager: ${typedError.toString()}`);\n }\n\n if (this.config.interactionConfig?.enabled) {\n const payloadBatcher = this.config.interactionConfig.batch ? clickBatcher : clickNonBatcher;\n try {\n const interactionEventManager = await createEventsManager<'interaction'>({\n config: this.config,\n sessionId: this.identifiers.sessionId,\n type: 'interaction',\n minInterval: this.config.interactionConfig.trackEveryNms ?? INTERACTION_MIN_INTERVAL,\n maxInterval: INTERACTION_MAX_INTERVAL,\n payloadBatcher,\n storeType,\n });\n managers.push({ name: 'interaction', manager: interactionEventManager });\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while creating interaction events manager: ${typedError.toString()}`);\n }\n }\n\n this.eventsManager = new MultiEventManager<'replay' | 'interaction', string>(...managers);\n // To prevent too many threads.\n if (this.eventCompressor) {\n this.eventCompressor.terminate();\n }\n this.eventCompressor = new EventCompressor(this.eventsManager, this.config, this.getDeviceId());\n\n await this.initializeNetworkObservers();\n\n this.loggerProvider.log('Installing @amplitude/session-replay-browser.');\n\n this.teardownEventListeners(false);\n\n void this.initialize(true);\n }\n\n setSessionId(sessionId: string | number, deviceId?: string) {\n return returnWrapper(this.asyncSetSessionId(sessionId, deviceId));\n }\n\n async asyncSetSessionId(sessionId: string | number, deviceId?: string) {\n const previousSessionId = this.identifiers && this.identifiers.sessionId;\n if (previousSessionId) {\n this.sendEvents(previousSessionId);\n }\n\n const deviceIdForReplayId = deviceId || this.getDeviceId();\n this.identifiers = new SessionIdentifiers({\n sessionId: sessionId,\n deviceId: deviceIdForReplayId,\n });\n\n // If there is no previous session id, SDK is being initialized for the first time,\n // and config was just fetched in initialization, so no need to fetch it a second time\n if (this.joinedConfigGenerator && previousSessionId) {\n const { joinedConfig } = await this.joinedConfigGenerator.generateJoinedConfig(this.identifiers.sessionId);\n this.config = joinedConfig;\n }\n void this.recordEvents();\n }\n\n getSessionReplayProperties() {\n const config = this.config;\n const identifiers = this.identifiers;\n if (!config || !identifiers) {\n this.loggerProvider.warn('Session replay init has not been called, cannot get session replay properties.');\n return {};\n }\n\n const shouldRecord = this.getShouldRecord();\n let eventProperties: { [key: string]: string | null } = {};\n\n if (shouldRecord) {\n eventProperties = {\n [DEFAULT_SESSION_REPLAY_PROPERTY]: identifiers.sessionReplayId ? identifiers.sessionReplayId : null,\n };\n if (config.debugMode) {\n eventProperties[SESSION_REPLAY_DEBUG_PROPERTY] = JSON.stringify({\n appHash: generateHashCode(config.apiKey).toString(),\n });\n }\n }\n\n void this.addCustomRRWebEvent(\n CustomRRwebEvent.GET_SR_PROPS,\n {\n shouldRecord,\n eventProperties: eventProperties,\n },\n this.eventCount === 10,\n );\n if (this.eventCount === 10) {\n this.eventCount = 0;\n }\n this.eventCount++;\n\n return eventProperties;\n }\n\n blurListener = () => {\n this.sendEvents();\n };\n\n focusListener = () => {\n // Restart recording on focus to ensure that when user\n // switches tabs, we take a full snapshot\n void this.recordEvents(false);\n };\n\n /**\n * This is an instance member so that if init is called multiple times\n * it doesn't add another listener to the page leave event. This is to\n * prevent duplicate listener actions from firing.\n */\n private pageLeaveListener = (e: PageTransitionEvent | Event) => {\n this.pageLeaveFns.forEach((fn) => {\n fn(e);\n });\n };\n\n sendEvents(sessionId?: string | number) {\n const sessionIdToSend = sessionId || this.identifiers?.sessionId;\n const deviceId = this.getDeviceId();\n this.eventsManager &&\n sessionIdToSend &&\n deviceId &&\n this.eventsManager.sendCurrentSequenceEvents({ sessionId: sessionIdToSend, deviceId });\n }\n\n async initialize(shouldSendStoredEvents = false) {\n if (!this.identifiers?.sessionId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of session id.`);\n return Promise.resolve();\n }\n\n const deviceId = this.getDeviceId();\n if (!deviceId) {\n this.loggerProvider.log(`Session is not being recorded due to lack of device id.`);\n return Promise.resolve();\n }\n this.eventsManager && shouldSendStoredEvents && void this.eventsManager.sendStoredEvents({ deviceId });\n\n return this.recordEvents();\n }\n\n shouldOptOut() {\n let identityStoreOptOut: boolean | undefined;\n if (this.config?.instanceName) {\n const identityStore = getAnalyticsConnector(this.config.instanceName).identityStore;\n identityStoreOptOut = identityStore.getIdentity().optOut;\n }\n\n return identityStoreOptOut !== undefined ? identityStoreOptOut : this.config?.optOut;\n }\n\n getShouldRecord() {\n if (!this.identifiers || !this.config || !this.identifiers.sessionId) {\n this.loggerProvider.warn(`Session is not being recorded due to lack of config, please call sessionReplay.init.`);\n return false;\n }\n if (!this.config.captureEnabled) {\n this.loggerProvider.log(\n `Session ${this.identifiers.sessionId} not being captured due to capture being disabled for project or because the remote config could not be fetched.`,\n );\n return false;\n }\n\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to optOut config.`);\n return false;\n }\n\n const isInSample = isSessionInSample(this.identifiers.sessionId, this.config.sampleRate);\n if (!isInSample) {\n this.loggerProvider.log(`Opting session ${this.identifiers.sessionId} out of recording due to sample rate.`);\n }\n return isInSample;\n }\n\n getBlockSelectors(): string | string[] | undefined {\n // For some reason, this defaults to empty array ([]) if undefined in the compiled script.\n // Empty arrays cause errors when being evaluated in Safari.\n // Force the selector to be undefined if it's an empty array.\n const blockSelector = this.config?.privacyConfig?.blockSelector ?? [];\n if (blockSelector.length === 0) {\n return undefined;\n }\n return blockSelector;\n }\n\n getMaskTextSelectors(): string | undefined {\n if (this.config?.privacyConfig?.defaultMaskLevel === 'conservative') {\n return '*';\n }\n\n const maskSelector = this.config?.privacyConfig?.maskSelector;\n if (!maskSelector) {\n return;\n }\n\n return maskSelector as unknown as string;\n }\n\n async getRecordingPlugins(loggingConfig: LoggingConfig | undefined) {\n const plugins = [];\n\n // Default plugin settings -\n // {\n // level: ['info', 'log', 'warn', 'error'],\n // lengthThreshold: 10000,\n // stringifyOptions: {\n // stringLengthLimit: undefined,\n // numOfKeysLimit: 50,\n // depthOfLimit: 4,\n // },\n // logger: window.console,\n // }\n if (loggingConfig?.console?.enabled) {\n try {\n // Dynamic import keeps console plugin separate and only loads when needed\n const { getRecordConsolePlugin } = await import('@amplitude/rrweb-plugin-console-record');\n plugins.push(getRecordConsolePlugin({ level: loggingConfig.console.levels }));\n } catch (error) {\n this.loggerProvider.warn('Failed to load console plugin:', error);\n }\n }\n\n return plugins.length > 0 ? plugins : undefined;\n }\n\n private async getRecordFunction(): Promise<RecordFunction | null> {\n if (this.recordFunction) {\n return this.recordFunction;\n }\n\n try {\n const { record } = await import('@amplitude/rrweb-record');\n this.recordFunction = record;\n return record;\n } catch (error) {\n this.loggerProvider.warn('Failed to load rrweb-record module:', error);\n return null;\n }\n }\n\n async recordEvents(shouldLogMetadata = true) {\n const config = this.config;\n const shouldRecord = this.getShouldRecord();\n const sessionId = this.identifiers?.sessionId;\n if (!shouldRecord || !sessionId || !config) {\n return;\n }\n this.stopRecordingEvents();\n\n const recordFunction = await this.getRecordFunction();\n\n // May be undefined if cannot import rrweb-record\n if (!recordFunction) {\n return;\n }\n\n await this.initializeNetworkObservers();\n\n this.networkObservers?.start((event: NetworkRequestEvent) => {\n void this.addCustomRRWebEvent(CustomRRwebEvent.FETCH_REQUEST, event);\n });\n const { privacyConfig, interactionConfig, loggingConfig } = config;\n\n const hooks = interactionConfig?.enabled\n ? {\n mouseInteraction:\n this.eventsManager &&\n clickHook(this.loggerProvider, {\n eventsManager: this.eventsManager,\n sessionId,\n deviceIdFn: this.getDeviceId.bind(this),\n mirror: recordFunction.mirror,\n ugcFilterRules: interactionConfig.ugcFilterRules ?? [],\n }),\n scroll: this.scrollHook,\n }\n : {};\n\n const ugcFilterRules =\n interactionConfig?.enabled && interactionConfig.ugcFilterRules ? interactionConfig.ugcFilterRules : [];\n\n this.loggerProvider.log(`Session Replay capture beginning for ${sessionId}.`);\n\n try {\n this.recordCancelCallback = recordFunction({\n emit: (event: eventWithTime) => {\n if (this.shouldOptOut()) {\n this.loggerProvider.log(`Opting session ${sessionId} out of recording due to optOut config.`);\n this.stopRecordingEvents();\n this.sendEvents();\n return;\n }\n\n if (event.type === RRWebEventType.Meta) {\n event.data.href = getPageUrl(event.data.href, ugcFilterRules);\n }\n\n if (this.eventCompressor) {\n // Schedule processing during idle time if the browser supports requestIdleCallback\n this.eventCompressor.enqueueEvent(event, sessionId);\n }\n },\n inlineStylesheet: config.shouldInlineStylesheet,\n hooks,\n maskAllInputs: true,\n maskTextClass: MASK_TEXT_CLASS,\n blockClass: BLOCK_CLASS,\n blockSelector: this.getBlockSelectors() as string | undefined,\n applyBackgroundColorToBlockedElements: config.applyBackgroundColorToBlockedElements,\n maskInputFn: maskFn('input', privacyConfig),\n maskTextFn: maskFn('text', privacyConfig),\n maskTextSelector: this.getMaskTextSelectors(),\n recordCanvas: false,\n errorHandler: (error: unknown) => {\n const typedError = error as Error & { _external_?: boolean };\n\n // styled-components relies on this error being thrown and bubbled up, rrweb is otherwise suppressing it\n if (typedError.message.includes('insertRule') && typedError.message.includes('CSSStyleSheet')) {\n throw typedError;\n }\n\n // rrweb does monkey patching on certain window functions such as CSSStyleSheet.proptype.insertRule,\n // and errors from external clients calling these functions can get suppressed. Styled components depend\n // on these errors being re-thrown.\n if (typedError._external_) {\n throw typedError;\n }\n\n this.loggerProvider.warn('Error while capturing replay: ', typedError.toString());\n // Return true so that we don't clutter user's consoles with internal rrweb errors\n return true;\n },\n plugins: await this.getRecordingPlugins(loggingConfig),\n });\n\n void this.addCustomRRWebEvent(CustomRRwebEvent.DEBUG_INFO);\n if (shouldLogMetadata) {\n void this.addCustomRRWebEvent(CustomRRwebEvent.METADATA, this.metadata);\n }\n } catch (error) {\n this.loggerProvider.warn('Failed to initialize session replay:', error);\n }\n }\n\n addCustomRRWebEvent = async (\n eventName: CustomRRwebEvent,\n eventData: { [key: string]: any } = {},\n addStorageInfo = true,\n ) => {\n try {\n let debugInfo: DebugInfo | undefined = undefined;\n const config = this.config;\n // Only add debug info for non-metadata events\n if (config && eventName !== CustomRRwebEvent.METADATA) {\n debugInfo = {\n config: getDebugConfig(config),\n version: VERSION,\n };\n if (addStorageInfo) {\n const storageSizeData = await getStorageSize();\n debugInfo = {\n ...storageSizeData,\n ...debugInfo,\n };\n }\n }\n // Check first to ensure we are recording\n if (this.recordCancelCallback && this.recordFunction) {\n this.recordFunction.addCustomEvent(eventName, {\n ...eventData,\n ...debugInfo,\n });\n } else {\n this.loggerProvider.debug(\n `Not able to add custom replay capture event ${eventName} due to no ongoing recording.`,\n );\n }\n } catch (e) {\n this.loggerProvider.debug('Error while adding custom replay capture event: ', e);\n }\n };\n\n stopRecordingEvents = () => {\n try {\n this.loggerProvider.log('Session Replay capture stopping.');\n this.recordCancelCallback && this.recordCancelCallback();\n this.recordCancelCallback = null;\n this.networkObservers?.stop();\n } catch (error) {\n const typedError = error as Error;\n this.loggerProvider.warn(`Error occurred while stopping replay capture: ${typedError.toString()}`);\n }\n };\n\n getDeviceId() {\n return this.identifiers?.deviceId;\n }\n\n getSessionId() {\n return this.identifiers?.sessionId;\n }\n\n async flush(useRetry = false) {\n return this.eventsManager?.flush(useRetry);\n }\n\n shutdown() {\n this.teardownEventListeners(true);\n this.stopRecordingEvents();\n this.sendEvents();\n }\n\n private mapSDKType(sdkType: string | undefined) {\n if (sdkType === 'plugin') {\n return '@amplitude/plugin-session-replay-browser';\n }\n\n if (sdkType === 'segment') {\n return '@amplitude/segment-session-replay-plugin';\n }\n\n return null;\n }\n\n private setMetadata(\n sessionId: string | number | undefined,\n joinedConfig: SessionReplayJoinedConfig,\n localConfig: SessionReplayLocalConfig,\n remoteConfig: SessionReplayRemoteConfig | undefined,\n replaySDKVersion: string | undefined,\n standaloneSDKVersion: string | undefined,\n sdkType: string | undefined,\n ) {\n const hashValue = sessionId?.toString() ? generateHashCode(sessionId.toString()) : undefined;\n\n this.metadata = {\n joinedConfig,\n localConfig,\n remoteConfig,\n sessionId,\n hashValue,\n sampleRate: joinedConfig.sampleRate,\n replaySDKType: this.mapSDKType(sdkType),\n replaySDKVersion,\n standaloneSDKType: '@amplitude/session-replay-browser',\n standaloneSDKVersion,\n };\n }\n\n private async initializeNetworkObservers(): Promise<void> {\n if (this.config?.loggingConfig?.network?.enabled && !this.networkObservers) {\n try {\n const { NetworkObservers: NetworkObserversClass } = await import('./observers');\n this.networkObservers = new NetworkObserversClass();\n } catch (error) {\n this.loggerProvider.warn('Failed to import or instantiate NetworkObservers:', error);\n }\n }\n }\n}\n","import { AnalyticsConnector } from '@amplitude/analytics-connector';\nexport var getAnalyticsConnector = function (instanceName) {\n if (instanceName === void 0) { instanceName = '$default_instance'; }\n return AnalyticsConnector.getInstance(instanceName);\n};\nexport var setConnectorUserId = function (userId, instanceName) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setUserId(userId).commit();\n};\nexport var setConnectorDeviceId = function (deviceId, instanceName) {\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setDeviceId(deviceId).commit();\n};\n//# sourceMappingURL=analytics-connector.js.map"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__assign","assign","t","s","i","n","arguments","length","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","create","Iterator","verb","Symbol","iterator","v","op","TypeError","pop","push","SuppressedError","Status","STORAGE_PREFIX","concat","AMPLITUDE_SERVER_URL","LogLevel","getGlobalScope","ampIntegrationContextName","globalThis","window","self","global","returnWrapper","awaitable","promise","PREFIX","Logger","logLevel","None","disable","enable","Warn","log","args","_i","Verbose","console","join","warn","error","Error","debug","Debug","getDefaultConfig","flushMaxRetries","flushQueueSize","flushIntervalMillis","instanceName","loggerProvider","offline","optOut","serverUrl","serverZone","useBatch","Config","options","_a","_b","_c","_d","_optOut","defaultConfig","apiKey","minIdLength","plan","ingestionMetadata","undefined","storageProvider","transportProvider","serverConfig","createServerConfig","defineProperty","get","set","enumerable","configurable","getServerUrl","_serverZone","includes","ApplicationContextProviderImpl","getApplicationContext","versionName","language","getLanguage","platform","os","deviceModel","navigator","languages","EventBridgeImpl","queue","logEvent","event","receiver","setEventReceiver","forEach","__values","o","m","__read","r","ar","isEqual","obj1","obj2","e_1","typeA","primitive_1","primitive_1_1","e_1_1","return","isArrayA","isArray","isArrayB","sorted1","keys","sort","sorted2","result_1","key","entries","obj","ownProps","resArray","ServerZone","IdentityStoreImpl","identity","userProperties","listeners","Set","editIdentity","actingUserProperties","actingIdentity","setUserId","userId","setDeviceId","deviceId","setUserProperties","setOptOut","updateUserProperties","actions","e_2","e_3","actingProperties","_e","_f","action","properties","_g","_h","_j","e_2_1","_k","_l","e_3_1","commit","setIdentity","getIdentity","originalIdentity","listener","addIdentityListener","add","removeIdentityListener","delete","safeGlobal","AnalyticsConnector","identityStore","eventBridge","applicationContextProvider","getInstance","BaseTransport","send","_serverUrl","_payload","buildResponse","responseJSON","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","statusCode","code","status","buildStatus","Success","eventsIngested","events_ingested","payloadSizeBytes","payload_size_bytes","serverUploadTime","server_upload_time","Invalid","missingField","missing_field","eventsWithInvalidFields","events_with_invalid_fields","eventsWithMissingFields","events_with_missing_fields","eventsWithInvalidIdLengths","events_with_invalid_id_lengths","epsThreshold","eps_threshold","exceededDailyQuotaDevices","exceeded_daily_quota_devices","silencedDevices","silenced_devices","silencedEvents","silenced_events","throttledDevices","throttled_devices","throttledEvents","throttled_events","PayloadTooLarge","RateLimit","throttledUsers","throttled_users","exceededDailyQuotaUsers","exceeded_daily_quota_users","Timeout","Failed","Unknown","FetchTransport","_super","String","__","constructor","__extends","payload","response","responseText","fetch","headers","Accept","JSON","stringify","method","text","parse","EventType","EventType2","MouseInteractions","MouseInteractions2","TIMEOUT_MESSAGE","UNEXPECTED_ERROR_MESSAGE","RemoteConfigFetch","localConfig","configKeys","_this","retryTimeout","attempts","sessionTargetingMatch","metrics","getRemoteConfig","configNamespace","sessionId","fetchStartTime","configAPIResponse","remoteConfig","Date","now","fetchWithTimeout","configs","fetchTimeAPISuccess","fetchTimeAPIFail","controller","timeoutId","AbortController","setTimeout","abort","fetchRemoteConfig","signal","clearTimeout","urlParams","configKey","res","knownError","lastFetchedSessionId","completeRequest","err","aborted","URLSearchParams","api_key","append","toString","parseAndStoreConfig","retryFetch","message","json","success","configServerUrl","STAGING","EU","createRemoteConfigFetch","DEFAULT_MASK_LEVEL","DEFAULT_EVENT_PROPERTY_PREFIX","DEFAULT_SESSION_REPLAY_PROPERTY","DEFAULT_SERVER_ZONE","US","SESSION_REPLAY_DEBUG_PROPERTY","MASK_TEXT_CLASS","CustomRRwebEvent","isMaskedForLevel","elementType","level","element","inputType","type","hasAttribute","toLowerCase","getInputType","autocomplete","startsWith","maskFn","config","defaultMaskLevel","closest","shouldMask","maskSelector","some","selector","shouldUnmask","unmaskSelector","isMasked","replace","generateHashCode","str","hash","charCodeAt","trackServerUrl","globToRegex","glob","escaped","RegExp","getPageUrl","pageUrl","ugcFilterRules","rule","regex","test","replacement","getStorageSize","globalScope","usage","quota","usageDetails","storage","estimate","totalStorageSize","Math","round","percentOfQuota","Number","EPSILON","getDebugConfig","debugConfig","substring","SafeLoggerProvider","logger","getSafeMethod","fn","__rrweb_original__","bind","SessionReplayLocalConfig","super","sampleRate","shouldInlineStylesheet","version","performanceConfig","storeType","applyBackgroundColorToBlockedElements","privacyConfig","interactionConfig","every","isValidGlobUrl","globUrl","trim","validateUGCFilterRules","debugMode","experimental","SessionReplayJoinedConfigGenerator","remoteConfigFetch","generateJoinedConfig","captureEnabled","samplingConfig","loggingConfig","sr_sampling_config","sr_privacy_config","joinedConfig","remotePrivacyConfig","capture_enabled","sample_rate","localPrivacyConfig","joinedPrivacyConfig","blockSelector","privacyConfigSelectorMap","selectorMap","selectorType","fragment","document","createDocumentFragment","dropInvalidSelectors","selectors","filter","querySelector","removeInvalidSelectorsFromPrivacyConfig","name","STORAGE_FAILURE","VERSION","SessionReplayTrackDestination","payloadBatcher","storageKey","scheduled","sendEventsList","destinationData","addToQueue","timeout","list","context","schedule","flush","useRetry","later","all","map","url","location","href","getCurrentUrl","device_id","session_id","sessionReplayLibrary","events","Authorization","handleReponse","responseBody","handleSuccessResponse","handleOtherResponse","sizeOfEventsList","Blob","size","onComplete","instanceOfAny","object","constructors","c","idbProxyableTypes","cursorAdvanceMethods","transactionDoneMap","WeakMap","transformCache","reverseTransformCache","idbProxyTraps","target","prop","IDBTransaction","objectStoreNames","objectStore","wrap","has","replaceTraps","callback","wrapFunction","func","IDBCursor","advance","continue","continuePrimaryKey","unwrap","request","transformCachableValue","tx","unlisten","removeEventListener","complete","DOMException","addEventListener","cacheDonePromiseForTransaction","IDBDatabase","IDBObjectStore","IDBIndex","Proxy","IDBRequest","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","useIndex","isWrite","async","storeName","transaction","store","index","shift","oldTraps","advanceMethodProps","methodMap","advanceResults","ittrProxiedCursorToOriginalProxy","cursorIteratorTraps","cachedFunc","iterate","cursor","openCursor","proxiedCursor","isIteratorProp","asyncIterator","BaseEventsStore","timeAtLastSplit","_timeAtLastSplit","minInterval","maxInterval","maxPersistedEventsSize","interval","shouldSplitEventsList","nextEventString","sizeOfNextEvent","min","RecordingStatus","currentSequenceKey","sequencesToSendKey","batchPromiseAll","promiseBatch","chunkSize","batch","splice","defineObjectStores","db","sequencesStore","currentSequenceStore","contains","createObjectStore","keyPath","autoIncrement","createIndex","createStore","dbName","blocked","upgrade","blocking","terminated","indexedDB","open","openPromise","oldVersion","newVersion","catch","openDB","SessionReplayEventsIDBStore","getSequencesToSend","sequences","sequenceId","storeCurrentSequence","currentSequenceData","put","addEventToCurrentSequence","sequenceEvents","eventsToSend","updatedEvents","storeSendingEvents","cleanUpSessionEventsStore","_sessionId","transitionFromKeyValStore","keyValDb","onupgradeneeded","close","deleteDatabase","onsuccess","onerror","keyValDatabaseExists","transitionCurrentSessionSequences","numericSessionId","sessionStore","currentSessionSequences","sessionSequences","promisesToBatch","numericSequenceId","parseInt","sequence","currentSequenceId","eventAddPromises","SENT","getAllRequest","getAll","transitionPromise","storedReplaySessionContextList","storedReplaySessionContexts","storedSessionId","oldSessionStore","oldSessionSequences","dbSuffix","eventsIDBStore","getCurrentSequenceEvents","allEvents","InMemoryEventsStore","finalizedSequences","resetCurrentSequence","addSequence","sequenceReturn","createEventsManager","trackDestination","getMemoryStore","new","sendCurrentSequenceEvents","currentSequence","addEvent","data","sequenceToSend","sendStoredEvents","sequencesToSend","MultiEventManager","managers","managersMap","manager","opts","promises","testableAccessors","Node","ShadowRoot","Element","MutationObserver","testableMethods","untaintedBasePrototype","getUntaintedPrototype","defaultObj","defaultPrototype","accessorNames","isUntaintedAccessors","Boolean","accessor","getOwnPropertyDescriptor","methodNames","isUntaintedMethods","Zone","iframeEl","createElement","appendChild","win","contentWindow","untaintedObject","removeChild","untaintedAccessorCache","getUntaintedAccessor","instance","cacheKey","untaintedPrototype","untaintedAccessor","untaintedMethodCache","getUntaintedMethod","untaintedMethod","childNodes","parentNode","parentElement","textContent","other","getRootNode","host","styleSheets","shadowRoot","querySelectorAll","mutationObserver","getWindowHeight","innerHeight","documentElement","clientHeight","getWindowWidth","innerWidth","clientWidth","rootDocument","start","finder","input","nodeType","ELEMENT_NODE","tagName","defaults","root","idName","_name","className","attr","_value","seedMinLength","optimizedMinLength","threshold","maxNumberOfTries","timeoutMs","rootNode","DOCUMENT_NODE","ownerDocument","findRootDocument","path","bottomUpSearch","optimized","optimize","limit","fallback","stack","current","elapsedTime","getTime","maybe","id","classNames","penalty","nth","dispensableNth","node","nthChild","slice","findUniquePath","paths","combinations","candidate","unique","query","reduce","acc","css","elementId","getAttribute","CSS","escape","attrs","from","attributes","classList","parent","child","firstChild","nextSibling","notEmpty","a","scope","counter","visited","newPath","newPathKey","same","clickNonBatcher","clickEvents","evt","record","count","clickBatcher","reduced","prev","curr","x","timestamp","hour","k","values","clickHook","eventsManager","deviceIdFn","mirror","Click","getNode","left","scrollX","top","scrollY","doc","scrollingElement","scrollLeft","pageXOffset","dom","scrollTop","pageYOffset","getWindowScroll","viewportHeight","viewportWidth","BeaconTransport","sendBeacon","sendXhr","xhr","XMLHttpRequest","setRequestHeader","basePageUrl","ScrollWatcher","transport","hook","update","maxScrollX","_maxScrollX","maxScrollY","_maxScrollY","maxScrollWidth","_maxScrollWidth","maxScrollHeight","_maxScrollHeight","width","height","SessionIdentifiers","sessionReplayId","generateSessionReplayId","u8","Uint8Array","u16","Uint16Array","u32","Uint32Array","fleb","fdeb","clim","freb","eb","j","fl","revfl","revfd","rev","hMap","cd","mb","l","co","le","rvb","sv","r_1","flt","fdt","flm","fdm","shft","slc","subarray","wbits","wbits16","hTree","t2","i0","i1","i2","maxSym","tr","mbt","ln","dt","lft","cst","i2_1","i2_2","i2_3","max","lc","cl","cli","cln","cls","w","clen","cf","wfblk","out","pos","dat","wblk","final","syms","lf","df","li","bs","bl","_a2","dlt","mlb","_b2","ddt","mdb","lclt","nlc","lcdt","ndc","lcfreq","lct","mlcb","nlcc","lm","ll","dm","dl","flen","ftlen","dtlen","llm","lcts","it","clct","len","dst","deo","dopt","opt","pre","post","st","lvl","plvl","lst","floor","msk_1","head","bs1_1","ceil","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","dflt","mem","zlibSync","adler","lv","fl2","wbytes","pack","latin1","TextDecoder","decode","fromCharCode","strFromU8","TextEncoder","encode","ai","strToU8","EventCompressor","workerScriptInternal","taskQueue","isProcessing","compressEvent","packedEvent","addCompressedEventToManager","compressedEvent","addCompressedEvent","worker","postMessage","terminate","canUseIdleCallback","workerScript","useWebWorker","Worker","URL","createObjectURL","onmessage","scheduleIdleProcessing","requestIdleCallback","idleDeadline","processQueue","enqueueEvent","enabled","timeRemaining","didTimeout","task","SessionReplay","recordCancelCallback","eventCount","pageLeaveFns","recordFunction","teardownEventListeners","teardown","blurListener","focusListener","pageLeaveListener","sendEvents","recordEvents","addCustomRRWebEvent","eventName","eventData","addStorageInfo","debugInfo","METADATA","storageSizeData","addCustomEvent","stopRecordingEvents","networkObservers","stop","typedError","init","_init","identifiers","joinedConfigGenerator","createSessionReplayJoinedConfigGenerator","setMetadata","scrollWatcher","default","getDeviceId","scrollHook","rrwebEventManager","interactionEventManager","trackEveryNms","eventCompressor","initializeNetworkObservers","initialize","setSessionId","asyncSetSessionId","previousSessionId","deviceIdForReplayId","getSessionReplayProperties","shouldRecord","getShouldRecord","eventProperties","appHash","GET_SR_PROPS","sessionIdToSend","shouldSendStoredEvents","shouldOptOut","identityStoreOptOut","isInSample","hashNumber","abs","isSessionInSample","getBlockSelectors","getMaskTextSelectors","getRecordingPlugins","plugins","getRecordConsolePlugin","import","levels","getRecordFunction","shouldLogMetadata","FETCH_REQUEST","hooks","mouseInteraction","scroll","emit","RRWebEventType","Meta","inlineStylesheet","maskAllInputs","maskTextClass","blockClass","maskInputFn","maskTextFn","maskTextSelector","recordCanvas","errorHandler","_external_","DEBUG_INFO","metadata","getSessionId","shutdown","mapSDKType","sdkType","replaySDKVersion","standaloneSDKVersion","hashValue","replaySDKType","standaloneSDKType","network","NetworkObservers","NetworkObserversClass"],"mappings":"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"}