@amplitude/plugin-network-capture-browser 1.7.6 → 1.7.8

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,2 +1,2 @@
1
- export declare const VERSION = "1.7.6";
1
+ export declare const VERSION = "1.7.8";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '1.7.6';
4
+ exports.VERSION = '1.7.8';
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const VERSION = '1.7.6';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const VERSION = '1.7.8';\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.7.6";
1
+ export declare const VERSION = "1.7.8";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,2 +1,2 @@
1
- export var VERSION = '1.7.6';
1
+ export var VERSION = '1.7.8';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const VERSION = '1.7.6';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const VERSION = '1.7.8';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"amplitude-min.js","sources":["../../../../node_modules/.pnpm/@rollup+plugin-typescript@10.0.1_rollup@2.79.2_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js","../../../analytics-core/lib/esm/types/constants.js","../../../analytics-core/lib/esm/global-scope.js","../../../analytics-core/lib/esm/utils/uuid.js","../../../analytics-core/lib/esm/utils/json-query.js","../../../analytics-core/lib/esm/network-request-event.js","../../../analytics-core/lib/esm/network-observer.js","../../../../node_modules/.pnpm/zen-observable-ts@1.1.0/node_modules/zen-observable-ts/module.js","../../../src/constants.ts","../../../src/network-capture-plugin.ts","../../../src/track-network-event.ts","../../../analytics-core/lib/esm/utils/url-utils.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 DEFAULT_INSTANCE_NAME = '$default_instance';\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// Campaign constants\nexport var UTM_CAMPAIGN = 'utm_campaign';\nexport var UTM_CONTENT = 'utm_content';\nexport var UTM_ID = 'utm_id';\nexport var UTM_MEDIUM = 'utm_medium';\nexport var UTM_SOURCE = 'utm_source';\nexport var UTM_TERM = 'utm_term';\nexport var DCLID = 'dclid';\nexport var FBCLID = 'fbclid';\nexport var GBRAID = 'gbraid';\nexport var GCLID = 'gclid';\nexport var KO_CLICK_ID = 'ko_click_id';\nexport var LI_FAT_ID = 'li_fat_id';\nexport var MSCLKID = 'msclkid';\nexport var RDT_CID = 'rdt_cid';\nexport var TTCLID = 'ttclid';\nexport var TWCLID = 'twclid';\nexport var WBRAID = 'wbraid';\nexport var EMPTY_VALUE = 'EMPTY';\nexport var BASE_CAMPAIGN = {\n utm_campaign: undefined,\n utm_content: undefined,\n utm_id: undefined,\n utm_medium: undefined,\n utm_source: undefined,\n utm_term: undefined,\n referrer: undefined,\n referring_domain: undefined,\n dclid: undefined,\n gbraid: undefined,\n gclid: undefined,\n fbclid: undefined,\n ko_click_id: undefined,\n li_fat_id: undefined,\n msclkid: undefined,\n rdt_cid: undefined,\n ttclid: undefined,\n twclid: undefined,\n wbraid: undefined,\n};\nexport var MKTG = 'MKTG';\n// list of Network headers that are safe to capture\nexport var SAFE_HEADERS = [\n 'access-control-allow-origin',\n 'access-control-allow-credentials',\n 'access-control-expose-headers',\n 'access-control-max-age',\n 'access-control-allow-methods',\n 'access-control-allow-headers',\n 'accept-patch',\n 'accept-ranges',\n 'age',\n 'allow',\n 'alt-svc',\n 'cache-control',\n 'connection',\n 'content-disposition',\n 'content-encoding',\n 'content-language',\n 'content-length',\n 'content-location',\n 'content-md5',\n 'content-range',\n 'content-type',\n 'date',\n 'delta-base',\n 'etag',\n 'expires',\n 'im',\n 'last-modified',\n 'link',\n 'location',\n 'permanent',\n 'p3p',\n 'pragma',\n 'proxy-authenticate',\n 'public-key-pins',\n 'retry-after',\n 'server',\n 'status',\n 'strict-transport-security',\n 'trailer',\n 'transfer-encoding',\n 'tk',\n 'upgrade',\n 'vary',\n 'via',\n 'warning',\n 'www-authenticate',\n 'x-b3-traceid',\n 'x-frame-options',\n];\n// list of Network headers to never capture\nexport var FORBIDDEN_HEADERS = ['authorization', 'cookie', 'set-cookie'];\n//# sourceMappingURL=constants.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","/**\n * Source: [jed's gist's comment]{@link https://gist.github.com/jed/982883?permalink_comment_id=3223002#gistcomment-3223002}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\nimport { __read, __spreadArray } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nvar legacyUUID = function (a) {\n return a // if the placeholder was passed, return\n ? // a random number from 0 to 15\n (a ^ // unless b is 8,\n ((Math.random() * // in which case\n 16) >> // a random number from\n (a / 4))) // 8 to 11\n .toString(16) // in hexadecimal\n : // or otherwise a concatenated string:\n (String(1e7) + // 10000000 +\n String(-1e3) + // -1000 +\n String(-4e3) + // -4000 +\n String(-8e3) + // -80000000 +\n String(-1e11)) // -100000000000,\n .replace(\n // replacing\n /[018]/g, // zeroes, ones, and eights with\n UUID);\n};\nvar hex = __spreadArray([], __read(Array(256).keys()), false).map(function (index) { return index.toString(16).padStart(2, '0'); });\nexport var UUID = function (a) {\n var _a;\n var globalScope = getGlobalScope();\n /* istanbul ignore next */\n if (!((_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.crypto) === null || _a === void 0 ? void 0 : _a.getRandomValues)) {\n // Fallback to legacy UUID generation if crypto is not available\n return legacyUUID(a);\n }\n var r = globalScope.crypto.getRandomValues(new Uint8Array(16));\n r[6] = (r[6] & 0x0f) | 0x40;\n r[8] = (r[8] & 0x3f) | 0x80;\n return __spreadArray([], __read(r.entries()), false).map(function (_a) {\n var _b = __read(_a, 2), index = _b[0], int = _b[1];\n return ([4, 6, 8, 10].includes(index) ? \"-\".concat(hex[int]) : hex[int]);\n }).join('');\n};\n//# sourceMappingURL=uuid.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nfunction isJsonPrimitive(json) {\n return (typeof json === 'string' ||\n typeof json === 'number' ||\n typeof json === 'boolean' ||\n json === null ||\n json === undefined);\n}\n/**\n * Prune a JSON object to only include the keys in the allowlist and excludes the keys\n * in the exclude list.\n *\n * This function is a mutative function that will modify the original JSON object.\n * This is done to avoid creating a new JSON object and copying the data.\n *\n * @param json - The JSON object to prune.\n * @param allowlist - The keys to include in the pruned JSON object.\n * @param excludelist - The keys to exclude from the pruned JSON object.\n */\nexport function pruneJson(json, allowlist, excludelist) {\n if (!json)\n return;\n // tokenize the allowlist and excludelist\n var allowlistTokens = allowlist.map(tokenizeJsonPath);\n var excludelistTokens = excludelist.map(tokenizeJsonPath);\n _pruneJson({\n json: json,\n allowlist: allowlistTokens,\n excludelist: excludelistTokens,\n ancestors: [],\n });\n}\nexport function _pruneJson(_a) {\n var e_1, _b;\n var json = _a.json, targetObject = _a.targetObject, allowlist = _a.allowlist, excludelist = _a.excludelist, ancestors = _a.ancestors, parentObject = _a.parentObject, targetKey = _a.targetKey;\n if (!targetObject) {\n targetObject = json;\n }\n var keys = Object.keys(targetObject);\n try {\n for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {\n var key = keys_1_1.value;\n var path = __spreadArray(__spreadArray([], __read(ancestors), false), [key], false);\n if (isJsonPrimitive(targetObject[key])) {\n // if the value does not match allowlist or matches exclude list, delete it\n if (!hasPathMatchInList(path, allowlist) || hasPathMatchInList(path, excludelist)) {\n delete targetObject[key];\n }\n }\n else {\n _pruneJson({\n json: json,\n targetObject: targetObject[key],\n allowlist: allowlist,\n excludelist: excludelist,\n ancestors: path,\n parentObject: targetObject,\n targetKey: key,\n });\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (keys_1_1 && !keys_1_1.done && (_b = keys_1.return)) _b.call(keys_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // if this object is empty now, delete the whole object\n if (Object.keys(targetObject).length === 0 && parentObject && targetKey) {\n delete parentObject[targetKey];\n }\n}\n/**\n * Tokenize a JSON path string into an array of strings.\n * Escapes ~0 and ~1 to ~ and / respectively.\n *\n * e.g.) turns string \"a/b/c\" into [\"a\", \"b\", \"c\"]\n *\n * @param path - The JSON path to tokenize.\n * @returns The tokenized JSON path.\n */\nexport function tokenizeJsonPath(path) {\n if (path.startsWith('/')) {\n path = path.slice(1);\n }\n return path.split('/').map(function (token) { return token.replace(/~0/g, '~').replace(/~1/g, '/'); });\n}\n/**\n * Check if a JSON path matches a path matcher.\n *\n * Rules:\n * 1. If a key in a path and a matcher are the same, then they match, move to the next\n * 2. If the matcher is a *, then it matches the key, move to the next\n * 3. If the matcher is a **, then it matches >=0 keys\n *\n * @param path - The path to check.\n * @param pathMatcher - The path matcher to check against.\n * @param i - The current index of the path.\n * @param j - The current index of the path matcher.\n * @returns True if the path matches the path matcher, false otherwise.\n */\nexport function isPathMatch(path, pathMatcher, i, j) {\n if (i === void 0) { i = 0; }\n if (j === void 0) { j = 0; }\n if (j === pathMatcher.length) {\n return i === path.length;\n }\n if (i === path.length) {\n while (j < pathMatcher.length && pathMatcher[j] === '**') {\n j++;\n }\n return j === pathMatcher.length;\n }\n var currentMatcher = pathMatcher[j];\n if (currentMatcher === '**') {\n if (j + 1 === pathMatcher.length) {\n return true;\n }\n for (var k = i; k <= path.length; k++) {\n if (isPathMatch(path, pathMatcher, k, j + 1)) {\n return true;\n }\n }\n return false;\n }\n else if (currentMatcher === '*' || currentMatcher === path[i]) {\n return isPathMatch(path, pathMatcher, i + 1, j + 1);\n }\n else {\n return false;\n }\n}\n/**\n * Check if a JSON path matches any of the path matchers in the allow or exclude list.\n *\n * @param path - The JSON path to check.\n * @param allowOrExcludeList - The allow or exclude list to check against.\n * @returns True if the path matches any of the path matchers in the allow or exclude list, false otherwise.\n */\nfunction hasPathMatchInList(path, allowOrExcludeList) {\n return allowOrExcludeList.some(function (l) { return isPathMatch(path, l); });\n}\n//# sourceMappingURL=json-query.js.map","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { getGlobalScope } from './global-scope';\nimport { pruneJson } from './utils/json-query';\nimport { SAFE_HEADERS, FORBIDDEN_HEADERS } from './';\nvar TEXT_READ_TIMEOUT = 500;\nexport var MAXIMUM_ENTRIES = 100;\n/**\n * This class encapsulates the RequestInit (https://developer.mozilla.org/en-US/docs/Web/API/RequestInit)\n * object so that the consumer can only get access to the headers, method and body size.\n *\n * This is to prevent consumers from directly accessing the Request object\n * and mutating it or running costly operations on it.\n *\n * IMPORTANT:\n * * Do not make changes to this class without careful consideration\n * of performance implications, memory usage and potential to mutate the customer's\n * request.\n * * NEVER .clone() the RequestInit object. This will 2x's the memory overhead of the request\n * * NEVER: call .arrayBuffer(), text(), json() or any other method on the body that\n * consumes the body's stream. This will cause the response to be consumed\n * meaning the body will be empty when the customer tries to access it.\n * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * never call any of the methods on it)\n */\nvar RequestWrapperFetch = /** @class */ (function () {\n function RequestWrapperFetch(request) {\n this.request = request;\n }\n RequestWrapperFetch.prototype.headers = function (allow) {\n var e_1, _a;\n if (allow === void 0) { allow = []; }\n var headersUnsafe = this.request.headers;\n // copy the headers into a new object\n var headersSafeCopy = {};\n if (Array.isArray(headersUnsafe)) {\n headersUnsafe.forEach(function (_a) {\n var _b = __read(_a, 2), headerName = _b[0], headerValue = _b[1];\n headersSafeCopy[headerName] = headerValue;\n });\n }\n else if (headersUnsafe instanceof Headers) {\n headersUnsafe.forEach(function (value, key) {\n headersSafeCopy[key] = value;\n });\n }\n else if (typeof headersUnsafe === 'object' && headersUnsafe !== null) {\n try {\n for (var _b = __values(Object.entries(headersUnsafe)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n headersSafeCopy[key] = value;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n return pruneHeaders(headersSafeCopy, { allow: allow });\n };\n Object.defineProperty(RequestWrapperFetch.prototype, \"bodySize\", {\n get: function () {\n if (typeof this._bodySize === 'number')\n return this._bodySize;\n var global = getGlobalScope();\n /* istanbul ignore if */\n if (!(global === null || global === void 0 ? void 0 : global.TextEncoder)) {\n return;\n }\n var body = this.request.body;\n this._bodySize = getBodySize(body, MAXIMUM_ENTRIES);\n return this._bodySize;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperFetch.prototype, \"method\", {\n get: function () {\n return this.request.method;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperFetch.prototype, \"body\", {\n get: function () {\n if (typeof this.request.body === 'string') {\n return this.request.body;\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n RequestWrapperFetch.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n text = this.body;\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n });\n });\n };\n return RequestWrapperFetch;\n}());\nexport { RequestWrapperFetch };\nvar RequestWrapperXhr = /** @class */ (function () {\n function RequestWrapperXhr(bodyRaw, requestHeaders) {\n this.bodyRaw = bodyRaw;\n this.requestHeaders = requestHeaders;\n }\n RequestWrapperXhr.prototype.headers = function (allow) {\n if (allow === void 0) { allow = []; }\n return pruneHeaders(this.requestHeaders, { allow: allow });\n };\n Object.defineProperty(RequestWrapperXhr.prototype, \"bodySize\", {\n get: function () {\n return getBodySize(this.bodyRaw, MAXIMUM_ENTRIES);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperXhr.prototype, \"body\", {\n get: function () {\n if (typeof this.bodyRaw === 'string') {\n return this.bodyRaw;\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n RequestWrapperXhr.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n text = this.body;\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n });\n });\n };\n return RequestWrapperXhr;\n}());\nexport { RequestWrapperXhr };\nfunction getBodySize(bodyUnsafe, maxEntries) {\n var e_2, _a;\n var bodySize;\n var global = getGlobalScope();\n /* istanbul ignore next */\n var TextEncoder = global === null || global === void 0 ? void 0 : global.TextEncoder;\n /* istanbul ignore next */\n if (!TextEncoder) {\n return;\n }\n var bodySafe;\n if (typeof bodyUnsafe === 'string') {\n bodySafe = bodyUnsafe;\n bodySize = new TextEncoder().encode(bodySafe).length;\n }\n else if (bodyUnsafe instanceof Blob) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.size;\n }\n else if (bodyUnsafe instanceof URLSearchParams) {\n bodySafe = bodyUnsafe;\n bodySize = new TextEncoder().encode(bodySafe.toString()).length;\n }\n else if (ArrayBuffer.isView(bodyUnsafe)) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.byteLength;\n }\n else if (bodyUnsafe instanceof ArrayBuffer) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.byteLength;\n }\n else if (bodyUnsafe instanceof FormData) {\n // Estimating only for text parts; not accurate for files\n var formData = bodyUnsafe;\n var total = 0;\n var count = 0;\n try {\n for (var _b = __values(formData.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n total += key.length;\n if (typeof value === 'string') {\n total += new TextEncoder().encode(value).length;\n }\n else if (value instanceof Blob) {\n total += value.size;\n }\n else {\n // encountered an unknown type\n // we can't estimate the size of this entry\n return;\n }\n // terminate if we reach the maximum number of entries\n // to avoid performance issues in case of very large FormData\n if (++count >= maxEntries) {\n return;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n bodySize = total;\n }\n else if (bodyUnsafe instanceof ReadableStream) {\n // If bodyUnsafe is an instanceof ReadableStream, we can't determine the size,\n // without consuming it, so we return undefined.\n // Never ever consume ReadableStream! DO NOT DO IT!!!\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n bodySafe = bodyUnsafe;\n return;\n }\n return bodySize;\n}\n/**\n * This class encapsulates the Fetch API Response object\n * (https://developer.mozilla.org/en-US/docs/Web/API/Response) so that the consumer can\n * only get access to the headers and body size.\n *\n * This is to prevent consumers from directly accessing the Response object\n * and mutating it or running costly operations on it.\n *\n * IMPORTANT:\n * * Do not make changes to this class without careful consideration\n * of performance implications, memory usage and potential to mutate the customer's\n * response.\n * * Do not .clone() the Response object unless you need to access the body.\n * Cloning will 2x the memory overhead of the response.\n * * NEVER consume the body's stream. This will cause the response to be consumed\n * meaning the body will be empty when the customer tries to access it.\n * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * never call any of the methods on it)\n */\nvar ResponseWrapperFetch = /** @class */ (function () {\n function ResponseWrapperFetch(response) {\n this.response = response;\n }\n ResponseWrapperFetch.prototype.headers = function (allow) {\n var _a;\n if (allow === void 0) { allow = []; }\n if (this.response.headers instanceof Headers) {\n var headersSafe = this.response.headers;\n var headersOut_1 = {};\n /* istanbul ignore next */\n (_a = headersSafe === null || headersSafe === void 0 ? void 0 : headersSafe.forEach) === null || _a === void 0 ? void 0 : _a.call(headersSafe, function (value, key) {\n headersOut_1[key] = value;\n });\n return pruneHeaders(headersOut_1, { allow: allow });\n }\n return;\n };\n Object.defineProperty(ResponseWrapperFetch.prototype, \"bodySize\", {\n get: function () {\n var _a, _b;\n if (this._bodySize !== undefined)\n return this._bodySize;\n /* istanbul ignore next */\n var contentLength = (_b = (_a = this.response.headers) === null || _a === void 0 ? void 0 : _a.get) === null || _b === void 0 ? void 0 : _b.call(_a, 'content-length');\n var bodySize = contentLength ? parseInt(contentLength, 10) : undefined;\n this._bodySize = bodySize;\n return bodySize;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ResponseWrapperFetch.prototype, \"status\", {\n get: function () {\n return this.response.status;\n },\n enumerable: false,\n configurable: true\n });\n ResponseWrapperFetch.prototype.text = function () {\n return __awaiter(this, void 0, void 0, function () {\n var textPromise, timer, text, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // !!!IMPORTANT: we clone the response to avoid mutating the original response\n // never call .text(), .json(), etc.. on the original response always clone it first\n if (!this.clonedResponse) {\n this.clonedResponse = this.response.clone();\n }\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n textPromise = this.clonedResponse.text();\n timer = new Promise(function (resolve) {\n return setTimeout(\n /* istanbul ignore next */\n function () { return resolve(null); }, TEXT_READ_TIMEOUT);\n });\n return [4 /*yield*/, Promise.race([textPromise, timer])];\n case 2:\n text = _a.sent();\n return [2 /*return*/, text];\n case 3:\n error_1 = _a.sent();\n return [2 /*return*/, null];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n ResponseWrapperFetch.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n return [4 /*yield*/, this.text()];\n case 1:\n text = _a.sent();\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n }\n });\n });\n };\n return ResponseWrapperFetch;\n}());\nexport { ResponseWrapperFetch };\nvar ResponseWrapperXhr = /** @class */ (function () {\n function ResponseWrapperXhr(statusCode, headersString, size, getJson) {\n this.statusCode = statusCode;\n this.headersString = headersString;\n this.size = size;\n this.getJson = getJson;\n }\n Object.defineProperty(ResponseWrapperXhr.prototype, \"bodySize\", {\n get: function () {\n return this.size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ResponseWrapperXhr.prototype, \"status\", {\n get: function () {\n return this.statusCode;\n },\n enumerable: false,\n configurable: true\n });\n ResponseWrapperXhr.prototype.headers = function (allow) {\n var e_3, _a;\n if (allow === void 0) { allow = []; }\n if (!this.headersString) {\n return {};\n }\n var headers = {};\n var headerLines = this.headersString.split('\\r\\n');\n try {\n for (var headerLines_1 = __values(headerLines), headerLines_1_1 = headerLines_1.next(); !headerLines_1_1.done; headerLines_1_1 = headerLines_1.next()) {\n var line = headerLines_1_1.value;\n var _b = __read(line.split(': '), 2), key = _b[0], value = _b[1];\n if (key && value) {\n headers[key] = value;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (headerLines_1_1 && !headerLines_1_1.done && (_a = headerLines_1.return)) _a.call(headerLines_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return pruneHeaders(headers, { allow: allow });\n };\n ResponseWrapperXhr.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var jsonBody;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n jsonBody = this.getJson();\n if (jsonBody) {\n pruneJson(jsonBody, allow, exclude);\n return [2 /*return*/, jsonBody];\n }\n return [2 /*return*/, null];\n });\n });\n };\n return ResponseWrapperXhr;\n}());\nexport { ResponseWrapperXhr };\nfunction safeParseAndPruneBody(text, allow, exclude) {\n if (!text)\n return null;\n try {\n var json = JSON.parse(text);\n pruneJson(json, allow, exclude);\n return json;\n }\n catch (error) {\n return null;\n }\n}\nexport var PRUNE_STRATEGY;\n(function (PRUNE_STRATEGY) {\n PRUNE_STRATEGY[\"REDACT\"] = \"redact\";\n PRUNE_STRATEGY[\"REMOVE\"] = \"remove\";\n})(PRUNE_STRATEGY || (PRUNE_STRATEGY = {}));\nvar REDACTED_VALUE = '[REDACTED]';\n/**\n * Prune headers from a headers record object.\n * @param headers - The headers to prune.\n * @param options - The options to prune the headers.\n * @param options.exclude - List of headers to delete from headers\n * @param options.include - List of headers to keep in headers, if not provided, all headers are kept by default\n * @returns The pruned headers.\n */\nexport var pruneHeaders = function (headers, options) {\n var e_4, _a;\n var _b = options.allow, allow = _b === void 0 ? [] : _b, _c = options.strategy, strategy = _c === void 0 ? PRUNE_STRATEGY.REMOVE : _c;\n var exclude = __spreadArray([], __read(FORBIDDEN_HEADERS), false);\n var headersPruned = {};\n var _loop_1 = function (key) {\n var lowerKey = key.toLowerCase();\n if (exclude.find(function (e) { return e.toLowerCase() === lowerKey; })) {\n if (strategy === PRUNE_STRATEGY.REDACT) {\n headersPruned[key] = REDACTED_VALUE;\n }\n }\n else if (!allow.find(function (i) { return i.toLowerCase() === lowerKey; })) {\n if (strategy === PRUNE_STRATEGY.REDACT) {\n headersPruned[key] = REDACTED_VALUE;\n }\n }\n else {\n headersPruned[key] = headers[key];\n }\n };\n try {\n for (var _d = __values(Object.keys(headers)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var key = _e.value;\n _loop_1(key);\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_4) throw e_4.error; }\n }\n return headersPruned;\n};\nvar NetworkRequestEvent = /** @class */ (function () {\n function NetworkRequestEvent(type, method, timestamp, startTime, url, requestWrapper, status, duration, responseWrapper, error, endTime) {\n if (status === void 0) { status = 0; }\n this.type = type;\n this.method = method;\n this.timestamp = timestamp;\n this.startTime = startTime;\n this.url = url;\n this.requestWrapper = requestWrapper;\n this.status = status;\n this.duration = duration;\n this.responseWrapper = responseWrapper;\n this.error = error;\n this.endTime = endTime;\n }\n NetworkRequestEvent.prototype.toSerializable = function () {\n var _a, _b, _c, _d;\n var serialized = {\n type: this.type,\n method: this.method,\n url: this.url,\n timestamp: this.timestamp,\n status: this.status,\n duration: this.duration,\n error: this.error,\n startTime: this.startTime,\n endTime: this.endTime,\n requestHeaders: (_a = this.requestWrapper) === null || _a === void 0 ? void 0 : _a.headers(__spreadArray([], __read(SAFE_HEADERS), false)),\n requestBodySize: (_b = this.requestWrapper) === null || _b === void 0 ? void 0 : _b.bodySize,\n responseHeaders: (_c = this.responseWrapper) === null || _c === void 0 ? void 0 : _c.headers(__spreadArray([], __read(SAFE_HEADERS), false)),\n responseBodySize: (_d = this.responseWrapper) === null || _d === void 0 ? void 0 : _d.bodySize,\n };\n return Object.fromEntries(Object.entries(serialized).filter(function (_a) {\n var _b = __read(_a, 2), _ = _b[0], v = _b[1];\n return v !== undefined;\n }));\n };\n return NetworkRequestEvent;\n}());\nexport { NetworkRequestEvent };\n//# sourceMappingURL=network-request-event.js.map","import { __assign, __awaiter, __generator, __read } from \"tslib\";\nimport { getGlobalScope } from './';\nimport { UUID } from './utils/uuid';\nimport { NetworkRequestEvent, RequestWrapperFetch, ResponseWrapperFetch, RequestWrapperXhr, ResponseWrapperXhr, } from './network-request-event';\n/**\n * Typeguard function checks if an input is a Request object.\n */\nfunction isRequest(requestInfo) {\n return typeof requestInfo === 'object' && requestInfo !== null && 'url' in requestInfo && 'method' in requestInfo;\n}\nvar NetworkEventCallback = /** @class */ (function () {\n function NetworkEventCallback(callback, id) {\n if (id === void 0) { id = UUID(); }\n this.callback = callback;\n this.id = id;\n }\n return NetworkEventCallback;\n}());\nexport { NetworkEventCallback };\nvar NetworkObserver = /** @class */ (function () {\n function NetworkObserver(logger) {\n this.eventCallbacks = new Map();\n this.isObserving = false;\n this.logger = logger;\n var globalScope = getGlobalScope();\n if (!NetworkObserver.isSupported()) {\n /* istanbul ignore next */\n return;\n }\n this.globalScope = globalScope;\n }\n NetworkObserver.isSupported = function () {\n var globalScope = getGlobalScope();\n return !!globalScope && !!globalScope.fetch;\n };\n NetworkObserver.prototype.subscribe = function (eventCallback, logger) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n if (!this.logger) {\n this.logger = logger;\n }\n this.eventCallbacks.set(eventCallback.id, eventCallback);\n if (!this.isObserving) {\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrOpen = (_c = (_b = (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.XMLHttpRequest) === null || _b === void 0 ? void 0 : _b.prototype) === null || _c === void 0 ? void 0 : _c.open;\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrSend = (_f = (_e = (_d = this.globalScope) === null || _d === void 0 ? void 0 : _d.XMLHttpRequest) === null || _e === void 0 ? void 0 : _e.prototype) === null || _f === void 0 ? void 0 : _f.send;\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrSetRequestHeader = (_j = (_h = (_g = this.globalScope) === null || _g === void 0 ? void 0 : _g.XMLHttpRequest) === null || _h === void 0 ? void 0 : _h.prototype) === null || _j === void 0 ? void 0 : _j.setRequestHeader;\n if (originalXhrOpen && originalXhrSend && originalXhrSetRequestHeader) {\n this.observeXhr(originalXhrOpen, originalXhrSend, originalXhrSetRequestHeader);\n }\n /* istanbul ignore next */\n var originalFetch = (_k = this.globalScope) === null || _k === void 0 ? void 0 : _k.fetch;\n /* istanbul ignore next */\n if (originalFetch) {\n this.observeFetch(originalFetch);\n }\n /* istanbul ignore next */\n this.isObserving = true;\n }\n };\n NetworkObserver.prototype.unsubscribe = function (eventCallback) {\n this.eventCallbacks.delete(eventCallback.id);\n };\n NetworkObserver.prototype.triggerEventCallbacks = function (event) {\n var _this = this;\n this.eventCallbacks.forEach(function (callback) {\n var _a;\n try {\n callback.callback(event);\n }\n catch (err) {\n // if the callback throws an error, we should catch it\n // to avoid breaking the fetch promise chain\n /* istanbul ignore next */\n (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while triggering event callbacks', err);\n }\n });\n };\n NetworkObserver.prototype.handleNetworkRequestEvent = function (requestType, requestInfo, requestWrapper, responseWrapper, typedError, startTime, durationStart) {\n var _a;\n /* istanbul ignore next */\n if (startTime === undefined || durationStart === undefined) {\n // if we reach this point, it means that the performance API is not supported\n // so we can't construct a NetworkRequestEvent\n return;\n }\n // parse the URL and Method\n var url;\n var method = 'GET';\n if (isRequest(requestInfo)) {\n url = requestInfo['url'];\n method = requestInfo['method'];\n }\n else {\n url = (_a = requestInfo === null || requestInfo === void 0 ? void 0 : requestInfo.toString) === null || _a === void 0 ? void 0 : _a.call(requestInfo);\n }\n // strip basic auth from the URL\n if (url) {\n try {\n var parsedUrl = new URL(url);\n // reconstruct the URL without the basic auth\n url = \"\".concat(parsedUrl.protocol, \"//\").concat(parsedUrl.host).concat(parsedUrl.pathname).concat(parsedUrl.search).concat(parsedUrl.hash);\n // eslint-disable-next-line no-empty\n }\n catch (err) { }\n }\n method = (requestWrapper === null || requestWrapper === void 0 ? void 0 : requestWrapper.method) || method;\n var status, error;\n if (responseWrapper) {\n status = responseWrapper.status;\n }\n if (typedError) {\n error = {\n name: typedError.name || 'UnknownError',\n message: typedError.message || 'An unknown error occurred',\n };\n status = 0;\n }\n var duration = Math.floor(performance.now() - durationStart);\n var endTime = Math.floor(startTime + duration);\n var requestEvent = new NetworkRequestEvent(requestType, method, startTime, // timestamp and startTime are aliases\n startTime, url, requestWrapper, status, duration, responseWrapper, error, endTime);\n this.triggerEventCallbacks(requestEvent);\n };\n NetworkObserver.prototype.getTimestamps = function () {\n var _a, _b;\n /* istanbul ignore next */\n return {\n startTime: (_a = Date.now) === null || _a === void 0 ? void 0 : _a.call(Date),\n durationStart: (_b = performance === null || performance === void 0 ? void 0 : performance.now) === null || _b === void 0 ? void 0 : _b.call(performance),\n };\n };\n NetworkObserver.prototype.observeFetch = function (originalFetch) {\n var _this = this;\n /* istanbul ignore next */\n if (!this.globalScope || !originalFetch) {\n return;\n }\n /**\n * IMPORTANT: This overrides window.fetch in browsers.\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of fetch\n * and make sure another developer who is an expert reviews this change throughly\n */\n this.globalScope.fetch = function (requestInfo, requestInit) { return __awaiter(_this, void 0, void 0, function () {\n var timestamps, originalResponse, originalError, err_1;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n try {\n timestamps = this.getTimestamps();\n }\n catch (error) {\n /* istanbul ignore next */\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while retrieving timestamps', error);\n }\n _c.label = 1;\n case 1:\n _c.trys.push([1, 3, , 4]);\n return [4 /*yield*/, originalFetch(requestInfo, requestInit)];\n case 2:\n originalResponse = _c.sent();\n return [3 /*break*/, 4];\n case 3:\n err_1 = _c.sent();\n // Capture error information\n originalError = err_1;\n return [3 /*break*/, 4];\n case 4:\n // 3. call the handler after the fetch call is done\n try {\n this.handleNetworkRequestEvent('fetch', requestInfo, requestInit ? new RequestWrapperFetch(requestInit) : undefined, originalResponse ? new ResponseWrapperFetch(originalResponse) : undefined, originalError, \n /* istanbul ignore next */\n timestamps === null || timestamps === void 0 ? void 0 : timestamps.startTime, \n /* istanbul ignore next */\n timestamps === null || timestamps === void 0 ? void 0 : timestamps.durationStart);\n }\n catch (err) {\n // this catch shouldn't be reachable, but keep it here for safety\n // because we're overriding the fetch function and better to be safe than sorry\n /* istanbul ignore next */\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.debug('an unexpected error occurred while handling fetch', err);\n }\n // 4. return the original response or throw the original error\n if (originalResponse) {\n // if the response is not undefined, return it\n return [2 /*return*/, originalResponse];\n }\n else {\n throw originalError;\n }\n return [2 /*return*/];\n }\n });\n }); };\n };\n /**\n * Creates a function that parses the response of an XMLHttpRequest as JSON.\n *\n * Returns function instead of JSON object to avoid unnecessary parsing if the\n * body is not being captured.\n *\n * @param xhrSafe - The XMLHttpRequest object.\n * @param context - The NetworkObserver instance.\n * @returns A function that parses the response of an XMLHttpRequest as JSON.\n */\n NetworkObserver.createXhrJsonParser = function (xhrUnsafe, context) {\n return function () {\n var _a, _b;\n try {\n if (xhrUnsafe.responseType === 'json') {\n // if response is a JS object, clone it so that subscribers can't mutate it\n if ((_a = context.globalScope) === null || _a === void 0 ? void 0 : _a.structuredClone) {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return */\n return context.globalScope.structuredClone(xhrUnsafe.response);\n }\n }\n else if (['text', ''].includes(xhrUnsafe.responseType)) {\n // if response is a string, parse it as JSON\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return */\n return JSON.parse(xhrUnsafe.responseText);\n }\n }\n catch (err) {\n /* istanbul ignore if */\n if (err instanceof Error && err.name === 'InvalidStateError') {\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseText#exceptions\n // if we reach here, it means we don't handle responseType correctly\n (_b = context.logger) === null || _b === void 0 ? void 0 : _b.error(\"unexpected error when retrieving responseText. responseType='\".concat(xhrUnsafe.responseType, \"'\"));\n }\n // the other possible error is Json Parse error which we fail silently\n return null;\n }\n return null;\n };\n };\n NetworkObserver.prototype.observeXhr = function (originalXhrOpen, originalXhrSend, originalXhrSetRequestHeader) {\n /* istanbul ignore next */\n if (!this.globalScope || !originalXhrOpen || !originalXhrSend) {\n return;\n }\n var xhrProto = this.globalScope.XMLHttpRequest.prototype;\n var networkObserverContext = this;\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.open\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.open\n * and make sure another developer who is an expert reviews this change throughly\n */\n xhrProto.open = function () {\n var _a, _b;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var xhrSafe = this;\n var _c = __read(args, 2), method = _c[0], url = _c[1];\n try {\n /* istanbul ignore next */\n xhrSafe.$$AmplitudeAnalyticsEvent = __assign({ method: method, url: (_a = url === null || url === void 0 ? void 0 : url.toString) === null || _a === void 0 ? void 0 : _a.call(url), headers: {} }, networkObserverContext.getTimestamps());\n }\n catch (err) {\n /* istanbul ignore next */\n (_b = networkObserverContext.logger) === null || _b === void 0 ? void 0 : _b.error('an unexpected error occurred while calling xhr open', err);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return originalXhrOpen.apply(xhrSafe, args);\n };\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.send\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.send\n * and make sure another developer who is an expert reviews this change throughly\n */\n // allow \"any\" type for args to reflect how it's used in the browser\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n xhrProto.send = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var xhrUnsafe = this;\n var xhrSafe = xhrUnsafe;\n var getJson = NetworkObserver.createXhrJsonParser(xhrUnsafe, networkObserverContext);\n var body = args[0];\n var requestEvent = xhrSafe.$$AmplitudeAnalyticsEvent;\n xhrSafe.addEventListener('loadend', function () {\n var _a;\n try {\n var responseHeaders = xhrSafe.getAllResponseHeaders();\n var responseBodySize = xhrSafe.getResponseHeader('content-length');\n var responseWrapper = new ResponseWrapperXhr(xhrSafe.status, responseHeaders, \n /* istanbul ignore next */\n responseBodySize ? parseInt(responseBodySize, 10) : undefined, getJson);\n var requestHeaders = xhrSafe.$$AmplitudeAnalyticsEvent.headers;\n var requestWrapper = new RequestWrapperXhr(body, requestHeaders);\n requestEvent.status = xhrSafe.status;\n networkObserverContext.handleNetworkRequestEvent('xhr', { url: requestEvent.url, method: requestEvent.method }, requestWrapper, responseWrapper, undefined, requestEvent.startTime, requestEvent.durationStart);\n }\n catch (err) {\n /* istanbul ignore next */\n (_a = networkObserverContext.logger) === null || _a === void 0 ? void 0 : _a.error('an unexpected error occurred while handling xhr send', err);\n }\n });\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n return originalXhrSend.apply(xhrSafe, args);\n };\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.setRequestHeader\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.setRequestHeader\n * and make sure another developer who is an expert reviews this change throughly\n */\n // allow \"any\" type for args to reflect how it's used in the browser\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n xhrProto.setRequestHeader = function (headerName, headerValue) {\n var _a;\n var xhrSafe = this;\n try {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment */\n xhrSafe.$$AmplitudeAnalyticsEvent.headers[headerName] = headerValue;\n }\n catch (err) {\n /* istanbul ignore next */\n (_a = networkObserverContext.logger) === null || _a === void 0 ? void 0 : _a.error('an unexpected error occurred while calling xhr setRequestHeader', err);\n }\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n originalXhrSetRequestHeader.apply(xhrSafe, [headerName, headerValue]);\n };\n };\n return NetworkObserver;\n}());\nexport { NetworkObserver };\n// singleton instance of NetworkObserver\nexport var networkObserver = new NetworkObserver();\n//# sourceMappingURL=network-observer.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// === Symbol Support ===\nvar hasSymbols = function () {\n return typeof Symbol === 'function';\n};\n\nvar hasSymbol = function (name) {\n return hasSymbols() && Boolean(Symbol[name]);\n};\n\nvar getSymbol = function (name) {\n return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n var value = obj[key];\n if (value == null) return undefined;\n if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n return value;\n}\n\nfunction getSpecies(obj) {\n var ctor = obj.constructor;\n\n if (ctor !== undefined) {\n ctor = ctor[SymbolSpecies];\n\n if (ctor === null) {\n ctor = undefined;\n }\n }\n\n return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n if (hostReportError.log) {\n hostReportError.log(e);\n } else {\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nfunction enqueue(fn) {\n Promise.resolve().then(function () {\n try {\n fn();\n } catch (e) {\n hostReportError(e);\n }\n });\n}\n\nfunction cleanupSubscription(subscription) {\n var cleanup = subscription._cleanup;\n if (cleanup === undefined) return;\n subscription._cleanup = undefined;\n\n if (!cleanup) {\n return;\n }\n\n try {\n if (typeof cleanup === 'function') {\n cleanup();\n } else {\n var unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n if (unsubscribe) {\n unsubscribe.call(cleanup);\n }\n }\n } catch (e) {\n hostReportError(e);\n }\n}\n\nfunction closeSubscription(subscription) {\n subscription._observer = undefined;\n subscription._queue = undefined;\n subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n var queue = subscription._queue;\n\n if (!queue) {\n return;\n }\n\n subscription._queue = undefined;\n subscription._state = 'ready';\n\n for (var i = 0; i < queue.length; ++i) {\n notifySubscription(subscription, queue[i].type, queue[i].value);\n if (subscription._state === 'closed') break;\n }\n}\n\nfunction notifySubscription(subscription, type, value) {\n subscription._state = 'running';\n var observer = subscription._observer;\n\n try {\n var m = getMethod(observer, type);\n\n switch (type) {\n case 'next':\n if (m) m.call(observer, value);\n break;\n\n case 'error':\n closeSubscription(subscription);\n if (m) m.call(observer, value);else throw value;\n break;\n\n case 'complete':\n closeSubscription(subscription);\n if (m) m.call(observer);\n break;\n }\n } catch (e) {\n hostReportError(e);\n }\n\n if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n if (subscription._state === 'closed') return;\n\n if (subscription._state === 'buffering') {\n subscription._queue.push({\n type: type,\n value: value\n });\n\n return;\n }\n\n if (subscription._state !== 'ready') {\n subscription._state = 'buffering';\n subscription._queue = [{\n type: type,\n value: value\n }];\n enqueue(function () {\n return flushSubscription(subscription);\n });\n return;\n }\n\n notifySubscription(subscription, type, value);\n}\n\nvar Subscription = /*#__PURE__*/function () {\n function Subscription(observer, subscriber) {\n // ASSERT: observer is an object\n // ASSERT: subscriber is callable\n this._cleanup = undefined;\n this._observer = observer;\n this._queue = undefined;\n this._state = 'initializing';\n var subscriptionObserver = new SubscriptionObserver(this);\n\n try {\n this._cleanup = subscriber.call(undefined, subscriptionObserver);\n } catch (e) {\n subscriptionObserver.error(e);\n }\n\n if (this._state === 'initializing') this._state = 'ready';\n }\n\n var _proto = Subscription.prototype;\n\n _proto.unsubscribe = function unsubscribe() {\n if (this._state !== 'closed') {\n closeSubscription(this);\n cleanupSubscription(this);\n }\n };\n\n _createClass(Subscription, [{\n key: \"closed\",\n get: function () {\n return this._state === 'closed';\n }\n }]);\n\n return Subscription;\n}();\n\nvar SubscriptionObserver = /*#__PURE__*/function () {\n function SubscriptionObserver(subscription) {\n this._subscription = subscription;\n }\n\n var _proto2 = SubscriptionObserver.prototype;\n\n _proto2.next = function next(value) {\n onNotify(this._subscription, 'next', value);\n };\n\n _proto2.error = function error(value) {\n onNotify(this._subscription, 'error', value);\n };\n\n _proto2.complete = function complete() {\n onNotify(this._subscription, 'complete');\n };\n\n _createClass(SubscriptionObserver, [{\n key: \"closed\",\n get: function () {\n return this._subscription._state === 'closed';\n }\n }]);\n\n return SubscriptionObserver;\n}();\n\nvar Observable = /*#__PURE__*/function () {\n function Observable(subscriber) {\n if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n this._subscriber = subscriber;\n }\n\n var _proto3 = Observable.prototype;\n\n _proto3.subscribe = function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n observer = {\n next: observer,\n error: arguments[1],\n complete: arguments[2]\n };\n }\n\n return new Subscription(observer, this._subscriber);\n };\n\n _proto3.forEach = function forEach(fn) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n if (typeof fn !== 'function') {\n reject(new TypeError(fn + ' is not a function'));\n return;\n }\n\n function done() {\n subscription.unsubscribe();\n resolve();\n }\n\n var subscription = _this.subscribe({\n next: function (value) {\n try {\n fn(value, done);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n };\n\n _proto3.map = function map(fn) {\n var _this2 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this2.subscribe({\n next: function (value) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.filter = function filter(fn) {\n var _this3 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this3.subscribe({\n next: function (value) {\n try {\n if (!fn(value)) return;\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.reduce = function reduce(fn) {\n var _this4 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n var hasSeed = arguments.length > 1;\n var hasValue = false;\n var seed = arguments[1];\n var acc = seed;\n return new C(function (observer) {\n return _this4.subscribe({\n next: function (value) {\n var first = !hasValue;\n hasValue = true;\n\n if (!first || hasSeed) {\n try {\n acc = fn(acc, value);\n } catch (e) {\n return observer.error(e);\n }\n } else {\n acc = value;\n }\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n observer.next(acc);\n observer.complete();\n }\n });\n });\n };\n\n _proto3.concat = function concat() {\n var _this5 = this;\n\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscription;\n var index = 0;\n\n function startNext(next) {\n subscription = next.subscribe({\n next: function (v) {\n observer.next(v);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (index === sources.length) {\n subscription = undefined;\n observer.complete();\n } else {\n startNext(C.from(sources[index++]));\n }\n }\n });\n }\n\n startNext(_this5);\n return function () {\n if (subscription) {\n subscription.unsubscribe();\n subscription = undefined;\n }\n };\n });\n };\n\n _proto3.flatMap = function flatMap(fn) {\n var _this6 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscriptions = [];\n\n var outer = _this6.subscribe({\n next: function (value) {\n if (fn) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n }\n\n var inner = C.from(value).subscribe({\n next: function (value) {\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n var i = subscriptions.indexOf(inner);\n if (i >= 0) subscriptions.splice(i, 1);\n completeIfDone();\n }\n });\n subscriptions.push(inner);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n completeIfDone();\n }\n });\n\n function completeIfDone() {\n if (outer.closed && subscriptions.length === 0) observer.complete();\n }\n\n return function () {\n subscriptions.forEach(function (s) {\n return s.unsubscribe();\n });\n outer.unsubscribe();\n };\n });\n };\n\n _proto3[SymbolObservable] = function () {\n return this;\n };\n\n Observable.from = function from(x) {\n var C = typeof this === 'function' ? this : Observable;\n if (x == null) throw new TypeError(x + ' is not an object');\n var method = getMethod(x, SymbolObservable);\n\n if (method) {\n var observable = method.call(x);\n if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n if (isObservable(observable) && observable.constructor === C) return observable;\n return new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n\n if (hasSymbol('iterator')) {\n method = getMethod(x, SymbolIterator);\n\n if (method) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var _iterator = _createForOfIteratorHelperLoose(method.call(x)), _step; !(_step = _iterator()).done;) {\n var item = _step.value;\n observer.next(item);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n }\n\n if (Array.isArray(x)) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < x.length; ++i) {\n observer.next(x[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n\n throw new TypeError(x + ' is not observable');\n };\n\n Observable.of = function of() {\n for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n items[_key2] = arguments[_key2];\n }\n\n var C = typeof this === 'function' ? this : Observable;\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < items.length; ++i) {\n observer.next(items[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n };\n\n _createClass(Observable, null, [{\n key: SymbolSpecies,\n get: function () {\n return this;\n }\n }]);\n\n return Observable;\n}();\n\nif (hasSymbols()) {\n Object.defineProperty(Observable, Symbol('extensions'), {\n value: {\n symbol: SymbolObservable,\n hostReportError: hostReportError\n },\n configurable: true\n });\n}\n\nexport { Observable };\n","export const PLUGIN_NAME = '@amplitude/plugin-network-capture-browser';\n\nexport const AMPLITUDE_NETWORK_REQUEST_EVENT = '[Amplitude] Network Request';\n\n// TODO: when @experimental is removed from responseHeaders and requestHeaders,\n// remove this constant or set it to false\nexport const IS_HEADER_CAPTURE_EXPERIMENTAL = true;\n","/* eslint-disable no-restricted-globals */\nimport {\n BrowserClient,\n BrowserConfig,\n EnrichmentPlugin,\n NetworkRequestEvent,\n networkObserver,\n NetworkEventCallback,\n NetworkTrackingOptions,\n ILogger,\n} from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { Observable, Unsubscribable } from '@amplitude/analytics-core';\nimport { trackNetworkEvents } from './track-network-event';\n\nexport type BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport enum ObservablesEnum {\n NetworkObservable = 'networkObservable',\n}\n\n// Base TimestampedEvent type\ntype BaseTimestampedEvent<T> = {\n event: T;\n timestamp: number;\n type: 'rage' | 'click' | 'change' | 'error' | 'navigate' | 'mutation' | 'network';\n};\n\n// Specific types for events with targetElementProperties\nexport type ElementBasedEvent = MouseEvent | Event;\nexport type ElementBasedTimestampedEvent<T> = BaseTimestampedEvent<T> & {\n event: MouseEvent | Event;\n type: 'click' | 'change';\n closestTrackedAncestor: Element;\n targetElementProperties: Record<string, any>;\n};\n\n// Union type for all possible TimestampedEvents\nexport type TimestampedEvent<T> = BaseTimestampedEvent<T> | ElementBasedTimestampedEvent<T>;\n\nexport interface AllWindowObservables {\n [ObservablesEnum.NetworkObservable]: Observable<TimestampedEvent<NetworkRequestEvent>>;\n}\n\nlet subscription: Unsubscribable;\n\nexport const networkCapturePlugin = (options: NetworkTrackingOptions = {}): BrowserEnrichmentPlugin => {\n const name = constants.PLUGIN_NAME;\n const type = 'enrichment';\n let logger: ILogger;\n\n const addAdditionalEventProperties = <T>(\n event: T,\n type: TimestampedEvent<T>['type'],\n ): TimestampedEvent<T> | ElementBasedTimestampedEvent<T> => {\n const baseEvent: BaseTimestampedEvent<T> | ElementBasedTimestampedEvent<T> = {\n event,\n timestamp: Date.now(),\n type,\n };\n\n return baseEvent;\n };\n\n // Create observables on events on the window\n const createObservables = (): AllWindowObservables => {\n const networkObservable = new Observable<TimestampedEvent<NetworkRequestEvent>>((observer) => {\n const callback = new NetworkEventCallback((event) => {\n const eventWithProperties = addAdditionalEventProperties(event, 'network');\n observer.next(eventWithProperties);\n });\n networkObserver.subscribe(callback, logger);\n return () => {\n networkObserver.unsubscribe(callback);\n };\n });\n\n return {\n [ObservablesEnum.NetworkObservable]: networkObservable,\n };\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n // Create observables for events on the window\n const allObservables = createObservables();\n\n /* istanbul ignore next */\n logger = config?.loggerProvider;\n\n subscription = trackNetworkEvents({\n allObservables,\n networkTrackingOptions: options,\n amplitude,\n loggerProvider: logger,\n });\n\n /* istanbul ignore next */\n logger?.log(`${name} has been successfully added.`);\n };\n\n /* istanbul ignore next */\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n subscription.unsubscribe();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n","import {\n BrowserClient,\n NetworkRequestEvent,\n NetworkCaptureRule,\n NetworkTrackingOptions,\n getGlobalScope,\n isUrlMatchAllowlist,\n SAFE_HEADERS,\n ILogger,\n IRequestWrapper,\n Unsubscribable,\n} from '@amplitude/analytics-core';\nimport { AllWindowObservables, TimestampedEvent } from './network-capture-plugin';\nimport { AMPLITUDE_NETWORK_REQUEST_EVENT, IS_HEADER_CAPTURE_EXPERIMENTAL } from './constants';\nimport { BodyCaptureRule } from '@amplitude/analytics-core/lib/esm/types/network-tracking';\n\nconst DEFAULT_STATUS_CODE_RANGE = '500-599';\n\nfunction wildcardMatch(str: string, pattern: string) {\n // Escape all regex special characters except for *\n const escapedPattern = pattern.replace(/[-[\\]{}()+?.,\\\\^$|#\\s]/g, '\\\\$&');\n // Replace * with .*\n const regexPattern = '^' + escapedPattern.replace(/\\*/g, '.*') + '$';\n const regex = new RegExp(regexPattern);\n return regex.test(str);\n}\n\nfunction isStatusCodeInRange(statusCode: number, range: string) {\n const ranges = range.split(',');\n for (const r of ranges) {\n const [start, end] = r.split('-').map(Number);\n if (statusCode === start && end === undefined) {\n return true;\n }\n if (statusCode >= start && statusCode <= end) {\n return true;\n }\n }\n return false;\n}\n\nfunction isCaptureRuleMatch(\n rule: NetworkCaptureRule,\n hostname: string,\n status?: number,\n url?: string,\n method?: string,\n) {\n // check if the host is in the allowed hosts\n if (rule.hosts && !rule.hosts.find((host: string) => wildcardMatch(hostname, host))) {\n return;\n }\n\n // check if the URL is in the allowed URL patterns\n if (url && rule.urls && !isUrlMatchAllowlist(url, rule.urls)) {\n return;\n }\n\n // check if the method is in the allowed methods\n if (\n method &&\n rule.methods &&\n !rule.methods.find(\n (allowedMethod: string) => method.toLowerCase() === allowedMethod.toLowerCase() || allowedMethod === '*',\n )\n ) {\n return;\n }\n\n // check if the status code is in the allowed range\n if (status || status === 0) {\n const statusCodeRange = rule.statusCodeRange || DEFAULT_STATUS_CODE_RANGE;\n if (!isStatusCodeInRange(status, statusCodeRange)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction parseUrl(url: string | undefined) {\n if (!url) {\n return;\n }\n try {\n /* istanbul ignore next */\n const currentHref = getGlobalScope()?.location.href;\n const urlObj = new URL(url, currentHref);\n const query = urlObj.searchParams.toString();\n const fragment = urlObj.hash.replace('#', '');\n const href = urlObj.href;\n const host = urlObj.host;\n urlObj.hash = '';\n urlObj.search = '';\n const hrefWithoutQueryOrHash = urlObj.href;\n return { query, fragment, href, hrefWithoutQueryOrHash, host };\n } catch (e) {\n /* istanbul ignore next */\n return;\n }\n}\n\nfunction isAmplitudeNetworkRequestEvent(host: string, requestWrapper: IRequestWrapper): boolean {\n if (host.includes('amplitude.com')) {\n try {\n const body = requestWrapper.body;\n if (typeof body !== 'string') {\n return false;\n }\n const bodyObj = JSON.parse(body) as { events: any[] };\n const { events } = bodyObj;\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access */\n if (events.find((event: any) => event.event_type === AMPLITUDE_NETWORK_REQUEST_EVENT)) {\n return true;\n }\n } catch (e) {\n // do nothing\n }\n }\n return false;\n}\n\n/**\n * Takes a user provided header capture rule and returns a\n * HeaderCaptureRule object that sets proper default values.\n *\n * @param rule - The header capture rule to parse.\n * @returns A HeaderCaptureRule object.\n */\nexport function parseHeaderCaptureRule(rule: string[] | boolean | undefined | null): string[] | undefined {\n if (typeof rule !== 'object' || rule === null) {\n // if rule is truthy or undefined, return SAFE_HEADERS\n if (rule) {\n return [...SAFE_HEADERS];\n } else if (rule === undefined) {\n /* istanbul ignore next */\n const res = IS_HEADER_CAPTURE_EXPERIMENTAL ? undefined : [...SAFE_HEADERS];\n return res;\n }\n return;\n }\n\n // if the rule is defined but empty, return undefined\n if (rule.length === 0) {\n return;\n }\n\n return rule;\n}\n\nfunction isBodyCaptureRuleEmpty(rule: BodyCaptureRule) {\n /* istanbul ignore next */\n return !rule?.allowlist?.length && !rule?.blocklist?.length;\n}\n\nexport function shouldTrackNetworkEvent(networkEvent: NetworkRequestEvent, options: NetworkTrackingOptions = {}) {\n const urlObj = parseUrl(networkEvent.url);\n /* istanbul ignore if */\n if (!urlObj) {\n // if the URL failed to parse, do not track the event\n // this is a probably impossible case that would only happen if the URL is malformed\n /* istanbul ignore next */\n return false;\n }\n const { host } = urlObj;\n\n // false if is amplitude request and not configured to track amplitude requests\n if (\n options.ignoreAmplitudeRequests !== false &&\n (wildcardMatch(host, '*.amplitude.com') || wildcardMatch(host, 'amplitude.com'))\n ) {\n return false;\n }\n\n // false if the host is in the ignore list\n if (options.ignoreHosts?.find((ignoreHost: string) => wildcardMatch(host, ignoreHost))) {\n return false;\n }\n\n // false if the status code is not 500-599 and there are no captureRules\n if (\n !options.captureRules &&\n networkEvent.status !== undefined &&\n !isStatusCodeInRange(networkEvent.status, DEFAULT_STATUS_CODE_RANGE)\n ) {\n return false;\n }\n\n if (options.captureRules) {\n // find the first capture rule, in reverse-order,\n // that is a match (true) or a miss (false)\n let isMatch: boolean | undefined;\n [...options.captureRules].reverse().find((rule) => {\n isMatch = isCaptureRuleMatch(rule, host, networkEvent.status, networkEvent.url, networkEvent.method);\n\n if (isMatch) {\n const responseHeadersRule = parseHeaderCaptureRule(rule.responseHeaders);\n if (networkEvent.responseWrapper && responseHeadersRule) {\n const responseHeaders = networkEvent.responseWrapper.headers(responseHeadersRule);\n if (responseHeaders) {\n networkEvent.responseHeaders = responseHeaders;\n }\n }\n\n // if requestHeaders rule is specified, enrich the event with the request headers\n const requestHeadersRule = parseHeaderCaptureRule(rule.requestHeaders);\n if (networkEvent.requestWrapper && requestHeadersRule) {\n const requestHeaders = networkEvent.requestWrapper.headers(requestHeadersRule);\n if (requestHeaders) {\n networkEvent.requestHeaders = requestHeaders;\n }\n }\n\n // if responseBody rule is specified, enrich the event with the response body\n if (networkEvent.responseWrapper && rule.responseBody && !isBodyCaptureRuleEmpty(rule.responseBody)) {\n networkEvent.responseBodyJson = networkEvent.responseWrapper.json(\n rule.responseBody.allowlist,\n rule.responseBody.blocklist,\n );\n }\n\n // if requestBody rule is specified, enrich the event with the request body\n if (networkEvent.requestWrapper && rule.requestBody && !isBodyCaptureRuleEmpty(rule.requestBody)) {\n networkEvent.requestBodyJson = networkEvent.requestWrapper.json(\n rule.requestBody.allowlist,\n rule.requestBody.blocklist,\n );\n }\n }\n\n return isMatch !== undefined;\n });\n\n // if we found a miss (false) or no match (undefined),\n // then do not track the event\n if (!isMatch) {\n return false;\n }\n }\n\n // skip Amplitude network requests to \"[Amplitude] Network Request\" to avoid infinite loop\n if (networkEvent.requestWrapper && isAmplitudeNetworkRequestEvent(host, networkEvent.requestWrapper)) {\n return false;\n }\n\n return true;\n}\n\nexport type NetworkAnalyticsEvent = {\n ['[Amplitude] URL']: string;\n ['[Amplitude] URL Query']?: string;\n ['[Amplitude] URL Fragment']?: string;\n ['[Amplitude] Request Method']: string;\n ['[Amplitude] Status Code']?: number;\n ['[Amplitude] Start Time']?: number; // unix timestamp\n ['[Amplitude] Completion Time']?: number; // unix timestamp\n ['[Amplitude] Duration']?: number; // completionTime - startTime (millis)\n ['[Amplitude] Request Body Size']?: number;\n ['[Amplitude] Request Headers']?: Record<string, string>;\n ['[Amplitude] Request Body']?: string;\n ['[Amplitude] Response Body Size']?: number;\n ['[Amplitude] Response Headers']?: Record<string, string>;\n ['[Amplitude] Response Body']?: string;\n ['[Amplitude] Request Type']?: 'xhr' | 'fetch';\n};\n\nexport async function logNetworkAnalyticsEvent(\n networkAnalyticsEvent: NetworkAnalyticsEvent,\n request: NetworkRequestEvent,\n amplitude: BrowserClient,\n loggerProvider?: ILogger,\n) {\n if (request.requestBodyJson || request.responseBodyJson) {\n const [requestBody, responseBody] = await Promise.all([request.requestBodyJson, request.responseBodyJson]);\n if (requestBody) {\n try {\n networkAnalyticsEvent['[Amplitude] Request Body'] = JSON.stringify(requestBody);\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.debug('Failed to stringify request body', e);\n }\n }\n if (responseBody) {\n try {\n networkAnalyticsEvent['[Amplitude] Response Body'] = JSON.stringify(responseBody);\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.debug('Failed to stringify response body');\n }\n }\n }\n /* istanbul ignore next */\n amplitude?.track(AMPLITUDE_NETWORK_REQUEST_EVENT, networkAnalyticsEvent);\n}\n\nexport function trackNetworkEvents({\n allObservables,\n networkTrackingOptions,\n amplitude,\n loggerProvider,\n}: {\n allObservables: AllWindowObservables;\n networkTrackingOptions: NetworkTrackingOptions;\n amplitude: BrowserClient;\n loggerProvider?: ILogger;\n}): Unsubscribable {\n const { networkObservable } = allObservables;\n\n const filteredNetworkObservable = networkObservable.filter((event: TimestampedEvent<NetworkRequestEvent>) => {\n // Only track network events that should be tracked\n return shouldTrackNetworkEvent(event.event as NetworkRequestEvent, networkTrackingOptions);\n });\n\n return filteredNetworkObservable.subscribe((networkEvent) => {\n const request = networkEvent.event;\n\n // convert to NetworkAnalyticsEvent\n const urlObj = parseUrl(request.url);\n /* istanbul ignore if */\n if (!urlObj) {\n // if the URL failed to parse, do not track the event\n // this is a very unlikely case, because URL() shouldn't throw an exception\n // when the URL is a valid URL\n /* istanbul ignore next */\n return;\n }\n\n const responseBodySize = request.responseWrapper?.bodySize;\n /* istanbul ignore next */\n const requestBodySize = request.requestWrapper?.bodySize;\n\n const networkAnalyticsEvent: NetworkAnalyticsEvent = {\n ['[Amplitude] URL']: urlObj.hrefWithoutQueryOrHash,\n ['[Amplitude] URL Query']: urlObj.query,\n ['[Amplitude] URL Fragment']: urlObj.fragment,\n ['[Amplitude] Request Method']: request.method,\n ['[Amplitude] Status Code']: request.status,\n ['[Amplitude] Start Time']: request.startTime,\n ['[Amplitude] Completion Time']: request.endTime,\n ['[Amplitude] Duration']: request.duration,\n ['[Amplitude] Request Body Size']: requestBodySize,\n ['[Amplitude] Response Body Size']: responseBodySize,\n ['[Amplitude] Request Type']: request.type,\n ['[Amplitude] Request Headers']: request.requestHeaders,\n ['[Amplitude] Response Headers']: request.responseHeaders,\n };\n\n // fire-and-forget promise that tracks the event\n void logNetworkAnalyticsEvent(networkAnalyticsEvent, request, amplitude, loggerProvider);\n });\n}\n","/**\n * Checks if a given URL matches any pattern in an allowlist of URLs or regex patterns.\n * @param url - The URL to check\n * @param allowlist - Array of allowed URLs (strings) or regex patterns\n * @returns true if the URL matches any pattern in the allowlist, false otherwise\n */\nexport var isUrlMatchAllowlist = function (url, allowlist) {\n if (!allowlist || !allowlist.length) {\n return true;\n }\n return allowlist.some(function (allowedUrl) {\n if (typeof allowedUrl === 'string') {\n return url === allowedUrl;\n }\n return url.match(allowedUrl);\n });\n};\nexport var getDecodeURI = function (locationStr, loggerProvider) {\n var decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Malformed URI sequence: ', e);\n }\n return decodedLocationStr;\n};\n//# sourceMappingURL=url-utils.js.map"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","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","__values","o","m","__read","r","ar","error","__spreadArray","to","from","pack","l","Array","slice","concat","SuppressedError","SAFE_HEADERS","FORBIDDEN_HEADERS","getGlobalScope","ampIntegrationContextName","globalThis","window","self","global","hex","keys","map","index","toString","padStart","UUID","a","_a","globalScope","crypto","getRandomValues","Math","random","String","replace","legacyUUID","Uint8Array","entries","_b","int","includes","join","isJsonPrimitive","json","pruneJson","allowlist","excludelist","_pruneJson","tokenizeJsonPath","ancestors","e_1","targetObject","parentObject","targetKey","keys_1","keys_1_1","key","path","hasPathMatchInList","e_1_1","return","startsWith","split","token","isPathMatch","pathMatcher","j","currentMatcher","k","allowOrExcludeList","some","RequestWrapperFetch","request","headers","allow","headersUnsafe","headersSafeCopy","isArray","forEach","headerName","headerValue","Headers","_c","_d","pruneHeaders","defineProperty","get","_bodySize","TextEncoder","getBodySize","enumerable","configurable","method","exclude","safeParseAndPruneBody","RequestWrapperXhr","bodyRaw","requestHeaders","bodyUnsafe","maxEntries","e_2","bodySize","bodySafe","encode","Blob","size","URLSearchParams","ArrayBuffer","isView","byteLength","FormData","formData","total","count","e_2_1","ReadableStream","PRUNE_STRATEGY","ResponseWrapperFetch","response","headersSafe","headersOut_1","undefined","contentLength","parseInt","status","text","textPromise","timer","clonedResponse","clone","setTimeout","race","ResponseWrapperXhr","statusCode","headersString","getJson","e_3","headerLines","headerLines_1","headerLines_1_1","e_3_1","jsonBody","JSON","parse","REDACTED_VALUE","options","e_4","strategy","REMOVE","headersPruned","_loop_1","lowerKey","toLowerCase","find","REDACT","_e","e_4_1","NetworkRequestEvent","type","timestamp","startTime","url","requestWrapper","duration","responseWrapper","endTime","toSerializable","serialized","requestBodySize","responseHeaders","responseBodySize","fromEntries","filter","NetworkEventCallback","callback","id","NetworkObserver","logger","eventCallbacks","Map","isObserving","isSupported","fetch","subscribe","eventCallback","_f","_g","_h","_j","_k","set","originalXhrOpen","XMLHttpRequest","open","originalXhrSend","send","originalXhrSetRequestHeader","setRequestHeader","observeXhr","originalFetch","observeFetch","unsubscribe","delete","triggerEventCallbacks","event","_this","err","debug","handleNetworkRequestEvent","requestType","requestInfo","typedError","durationStart","isRequest","parsedUrl","URL","protocol","host","pathname","search","hash","name","message","floor","performance","now","requestEvent","getTimestamps","Date","requestInit","timestamps","originalResponse","originalError","err_1","createXhrJsonParser","xhrUnsafe","context","responseType","structuredClone","responseText","Error","xhrProto","networkObserverContext","args","_i","$$AmplitudeAnalyticsEvent","xhrSafe","addEventListener","getAllResponseHeaders","getResponseHeader","networkObserver","_createForOfIteratorHelperLoose","allowArrayLike","it","bind","minLen","_arrayLikeToArray","constructor","test","_unsupportedIterableToArray","arr","len","arr2","_defineProperties","target","props","descriptor","writable","_createClass","Constructor","protoProps","staticProps","hasSymbols","hasSymbol","Boolean","getSymbol","observable","SymbolIterator","SymbolObservable","SymbolSpecies","getMethod","obj","getSpecies","ctor","Observable","isObservable","x","hostReportError","log","enqueue","fn","cleanupSubscription","subscription","cleanup","_cleanup","closeSubscription","_observer","_queue","_state","notifySubscription","observer","onNotify","queue","flushSubscription","Subscription","subscriber","subscriptionObserver","SubscriptionObserver","_subscription","_proto2","complete","_subscriber","_proto3","_this2","_this3","reduce","_this4","C","hasSeed","hasValue","acc","first","_this5","_len","sources","_key","startNext","flatMap","_this6","subscriptions","outer","inner","indexOf","splice","completeIfDone","closed","_step","_iterator","item","of","_len2","items","_key2","symbol","ObservablesEnum","AMPLITUDE_NETWORK_REQUEST_EVENT","DEFAULT_STATUS_CODE_RANGE","wildcardMatch","str","pattern","regexPattern","RegExp","isStatusCodeInRange","range","ranges","ranges_1","ranges_1_1","Number","start","end","parseUrl","currentHref","location","href","urlObj","query","searchParams","fragment","hrefWithoutQueryOrHash","parseHeaderCaptureRule","rule","isBodyCaptureRuleEmpty","blocklist","shouldTrackNetworkEvent","networkEvent","isMatch_1","ignoreAmplitudeRequests","ignoreHosts","ignoreHost","captureRules","reverse","hostname","hosts","urls","allowedUrl","match","isUrlMatchAllowlist","methods","allowedMethod","statusCodeRange","isCaptureRuleMatch","responseHeadersRule","requestHeadersRule","responseBody","responseBodyJson","requestBody","requestBodyJson","events","event_type","isAmplitudeNetworkRequestEvent","trackNetworkEvents","allObservables","networkTrackingOptions","amplitude","loggerProvider","networkObservable","networkAnalyticsEvent","all","stringify","track","logNetworkAnalyticsEvent","networkCapturePlugin","createObservables","eventWithProperties","addAdditionalEventProperties","NetworkObservable","setup","config","document","execute","teardown"],"mappings":"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"}
1
+ {"version":3,"file":"amplitude-min.js","sources":["../../../../node_modules/.pnpm/@rollup+plugin-typescript@10.0.1_rollup@2.79.2_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js","../../../analytics-core/src/types/constants.ts","../../../analytics-core/src/global-scope.ts","../../../analytics-core/src/utils/uuid.ts","../../../analytics-core/src/utils/json-query.ts","../../../analytics-core/src/network-request-event.ts","../../../analytics-core/src/observers/network.ts","../../../../node_modules/.pnpm/zen-observable-ts@1.1.0/node_modules/zen-observable-ts/module.js","../../../src/constants.ts","../../../src/network-capture-plugin.ts","../../../src/track-network-event.ts","../../../analytics-core/src/utils/url-utils.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { Campaign } from './campaign';\n\nexport const UNSET_VALUE = '-';\nexport const AMPLITUDE_PREFIX = 'AMP';\nexport const STORAGE_PREFIX = `${AMPLITUDE_PREFIX}_unsent`;\nexport const DEFAULT_INSTANCE_NAME = '$default_instance';\nexport const AMPLITUDE_SERVER_URL = 'https://api2.amplitude.com/2/httpapi';\nexport const EU_AMPLITUDE_SERVER_URL = 'https://api.eu.amplitude.com/2/httpapi';\nexport const AMPLITUDE_BATCH_SERVER_URL = 'https://api2.amplitude.com/batch';\nexport const EU_AMPLITUDE_BATCH_SERVER_URL = 'https://api.eu.amplitude.com/batch';\n\n// Campaign constants\nexport const UTM_CAMPAIGN = 'utm_campaign';\nexport const UTM_CONTENT = 'utm_content';\nexport const UTM_ID = 'utm_id';\nexport const UTM_MEDIUM = 'utm_medium';\nexport const UTM_SOURCE = 'utm_source';\nexport const UTM_TERM = 'utm_term';\n\nexport const DCLID = 'dclid';\nexport const FBCLID = 'fbclid';\nexport const GBRAID = 'gbraid';\nexport const GCLID = 'gclid';\nexport const KO_CLICK_ID = 'ko_click_id';\nexport const LI_FAT_ID = 'li_fat_id';\nexport const MSCLKID = 'msclkid';\nexport const RDT_CID = 'rdt_cid';\nexport const TTCLID = 'ttclid';\nexport const TWCLID = 'twclid';\nexport const WBRAID = 'wbraid';\n\nexport const EMPTY_VALUE = 'EMPTY';\n\nexport const BASE_CAMPAIGN: Campaign = {\n utm_campaign: undefined,\n utm_content: undefined,\n utm_id: undefined,\n utm_medium: undefined,\n utm_source: undefined,\n utm_term: undefined,\n referrer: undefined,\n referring_domain: undefined,\n dclid: undefined,\n gbraid: undefined,\n gclid: undefined,\n fbclid: undefined,\n ko_click_id: undefined,\n li_fat_id: undefined,\n msclkid: undefined,\n rdt_cid: undefined,\n ttclid: undefined,\n twclid: undefined,\n wbraid: undefined,\n};\n\nexport const MKTG = 'MKTG';\n\n// list of Network headers that are safe to capture\nexport const SAFE_HEADERS = [\n 'access-control-allow-origin',\n 'access-control-allow-credentials',\n 'access-control-expose-headers',\n 'access-control-max-age',\n 'access-control-allow-methods',\n 'access-control-allow-headers',\n 'accept-patch',\n 'accept-ranges',\n 'age',\n 'allow',\n 'alt-svc',\n 'cache-control',\n 'connection',\n 'content-disposition',\n 'content-encoding',\n 'content-language',\n 'content-length',\n 'content-location',\n 'content-md5',\n 'content-range',\n 'content-type',\n 'date',\n 'delta-base',\n 'etag',\n 'expires',\n 'im',\n 'last-modified',\n 'link',\n 'location',\n 'permanent',\n 'p3p',\n 'pragma',\n 'proxy-authenticate',\n 'public-key-pins',\n 'retry-after',\n 'server',\n 'status',\n 'strict-transport-security',\n 'trailer',\n 'transfer-encoding',\n 'tk',\n 'upgrade',\n 'vary',\n 'via',\n 'warning',\n 'www-authenticate',\n 'x-b3-traceid',\n 'x-frame-options',\n];\n\n// list of Network headers to never capture\nexport const FORBIDDEN_HEADERS = ['authorization', 'cookie', 'set-cookie'];\n","/* eslint-disable no-restricted-globals */\n/* Only file allowed to access to globalThis, window, self */\n\nexport const getGlobalScope = (): typeof globalThis | undefined => {\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 const ampIntegrationContextName = 'ampIntegrationContext' as keyof typeof globalThis;\n if (typeof globalThis !== 'undefined' && typeof globalThis[ampIntegrationContextName] !== 'undefined') {\n return globalThis[ampIntegrationContextName] as typeof globalThis;\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","/**\n * Source: [jed's gist's comment]{@link https://gist.github.com/jed/982883?permalink_comment_id=3223002#gistcomment-3223002}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\n\nimport { getGlobalScope } from '../global-scope';\n\nconst legacyUUID = function (a?: any): string {\n return a // if the placeholder was passed, return\n ? // a random number from 0 to 15\n (\n a ^ // unless b is 8,\n ((Math.random() * // in which case\n 16) >> // a random number from\n (a / 4))\n ) // 8 to 11\n .toString(16) // in hexadecimal\n : // or otherwise a concatenated string:\n (\n String(1e7) + // 10000000 +\n String(-1e3) + // -1000 +\n String(-4e3) + // -4000 +\n String(-8e3) + // -80000000 +\n String(-1e11)\n ) // -100000000000,\n .replace(\n // replacing\n /[018]/g, // zeroes, ones, and eights with\n UUID, // random hex digits\n );\n};\n\nconst hex: string[] = [...Array(256).keys()].map((index) => index.toString(16).padStart(2, '0'));\n\nexport const UUID = (a?: any): string => {\n const globalScope = getGlobalScope();\n\n /* istanbul ignore next */\n if (!globalScope?.crypto?.getRandomValues) {\n // Fallback to legacy UUID generation if crypto is not available\n return legacyUUID(a);\n }\n\n const r = globalScope.crypto.getRandomValues(new Uint8Array(16));\n\n r[6] = (r[6] & 0x0f) | 0x40;\n r[8] = (r[8] & 0x3f) | 0x80;\n\n return [...r.entries()].map(([index, int]) => ([4, 6, 8, 10].includes(index) ? `-${hex[int]}` : hex[int])).join('');\n};\n","type Json = Record<string, any>;\n\nfunction isJsonPrimitive(json?: Json): boolean {\n return (\n typeof json === 'string' ||\n typeof json === 'number' ||\n typeof json === 'boolean' ||\n json === null ||\n json === undefined\n );\n}\n\n/**\n * Prune a JSON object to only include the keys in the allowlist and excludes the keys\n * in the exclude list.\n *\n * This function is a mutative function that will modify the original JSON object.\n * This is done to avoid creating a new JSON object and copying the data.\n *\n * @param json - The JSON object to prune.\n * @param allowlist - The keys to include in the pruned JSON object.\n * @param excludelist - The keys to exclude from the pruned JSON object.\n */\nexport function pruneJson(json: Json | null | undefined, allowlist: string[], excludelist: string[]) {\n if (!json) return;\n // tokenize the allowlist and excludelist\n const allowlistTokens = allowlist.map(tokenizeJsonPath);\n const excludelistTokens = excludelist.map(tokenizeJsonPath);\n\n _pruneJson({\n json,\n allowlist: allowlistTokens,\n excludelist: excludelistTokens,\n ancestors: [],\n });\n}\n\nexport function _pruneJson({\n json,\n targetObject,\n allowlist,\n excludelist,\n ancestors,\n parentObject,\n targetKey,\n}: {\n json: Json;\n targetObject?: Json;\n allowlist: string[][];\n excludelist: string[][];\n ancestors: string[];\n parentObject?: Json;\n targetKey?: string;\n}) {\n if (!targetObject) {\n targetObject = json;\n }\n\n const keys = Object.keys(targetObject);\n for (const key of keys) {\n const path = [...ancestors, key];\n if (isJsonPrimitive(targetObject[key] as Json)) {\n // if the value does not match allowlist or matches exclude list, delete it\n if (!hasPathMatchInList(path, allowlist) || hasPathMatchInList(path, excludelist)) {\n delete targetObject[key];\n }\n } else {\n _pruneJson({\n json,\n targetObject: targetObject[key] as Json,\n allowlist,\n excludelist,\n ancestors: path,\n parentObject: targetObject,\n targetKey: key,\n });\n }\n }\n\n // if this object is empty now, delete the whole object\n if (Object.keys(targetObject).length === 0 && parentObject && targetKey) {\n delete parentObject[targetKey];\n }\n}\n\n/**\n * Tokenize a JSON path string into an array of strings.\n * Escapes ~0 and ~1 to ~ and / respectively.\n *\n * e.g.) turns string \"a/b/c\" into [\"a\", \"b\", \"c\"]\n *\n * @param path - The JSON path to tokenize.\n * @returns The tokenized JSON path.\n */\nexport function tokenizeJsonPath(path: string): string[] {\n if (path.startsWith('/')) {\n path = path.slice(1);\n }\n return path.split('/').map((token) => token.replace(/~0/g, '~').replace(/~1/g, '/'));\n}\n\n/**\n * Check if a JSON path matches a path matcher.\n *\n * Rules:\n * 1. If a key in a path and a matcher are the same, then they match, move to the next\n * 2. If the matcher is a *, then it matches the key, move to the next\n * 3. If the matcher is a **, then it matches >=0 keys\n *\n * @param path - The path to check.\n * @param pathMatcher - The path matcher to check against.\n * @param i - The current index of the path.\n * @param j - The current index of the path matcher.\n * @returns True if the path matches the path matcher, false otherwise.\n */\nexport function isPathMatch(path: string[], pathMatcher: string[], i = 0, j = 0): boolean {\n if (j === pathMatcher.length) {\n return i === path.length;\n }\n\n if (i === path.length) {\n while (j < pathMatcher.length && pathMatcher[j] === '**') {\n j++;\n }\n return j === pathMatcher.length;\n }\n\n const currentMatcher = pathMatcher[j];\n\n if (currentMatcher === '**') {\n if (j + 1 === pathMatcher.length) {\n return true;\n }\n for (let k = i; k <= path.length; k++) {\n if (isPathMatch(path, pathMatcher, k, j + 1)) {\n return true;\n }\n }\n return false;\n } else if (currentMatcher === '*' || currentMatcher === path[i]) {\n return isPathMatch(path, pathMatcher, i + 1, j + 1);\n } else {\n return false;\n }\n}\n\n/**\n * Check if a JSON path matches any of the path matchers in the allow or exclude list.\n *\n * @param path - The JSON path to check.\n * @param allowOrExcludeList - The allow or exclude list to check against.\n * @returns True if the path matches any of the path matchers in the allow or exclude list, false otherwise.\n */\nfunction hasPathMatchInList(path: string[], allowOrExcludeList: string[][]): boolean {\n return allowOrExcludeList.some((l) => isPathMatch(path, l));\n}\n","import { getGlobalScope } from './global-scope';\nimport { pruneJson } from './utils/json-query';\nimport { SAFE_HEADERS, FORBIDDEN_HEADERS } from './';\n\n/* SAFE TYPE DEFINITIONS\n These type definitions expose limited properties of the original types\n to prevent the consumer from mutating them or consuming them.\n*/\ntype BlobSafe = {\n size: number;\n};\n\ntype ArrayBufferSafe = {\n byteLength: number;\n};\n\ntype ArrayBufferViewSafe = {\n byteLength: number;\n};\n\ntype URLSearchParamsSafe = {\n toString(): string;\n};\n\n// no method on readablestream is safe to call\ntype ReadableStreamSafe = Record<string, never>;\n\ntype FormDataEntryValueSafe = string | BlobSafe | null;\n\ntype BodyInitSafe =\n | string\n | Blob\n | ArrayBufferSafe\n | FormDataSafe\n | URLSearchParamsSafe\n | ArrayBufferViewSafe\n | null\n | undefined;\n\ntype HeadersRequestSafe = {\n entries(): IterableIterator<[string, string]>;\n forEach(callbackfn: (value: string, key: string) => void): void;\n};\n\ntype HeadersResponseSafe = {\n get(name: string): string | null;\n forEach(callbackfn: (value: string, key: string) => void): void;\n};\n\ntype HeadersInitSafe = HeadersRequestSafe | Record<string, string> | string[][];\n\ntype ResponseSafe = {\n status: number;\n headers: HeadersResponseSafe | undefined;\n clone(): ResponseCloneSafe;\n};\n\ntype ResponseCloneSafe = {\n text(): Promise<string>;\n};\n\nconst TEXT_READ_TIMEOUT = 500;\n\nexport type RequestInitSafe = {\n method?: string;\n headers?: HeadersInitSafe;\n body?: BodyInitSafe;\n};\nexport interface FormDataSafe {\n entries(): IterableIterator<[string, FormDataEntryValueSafe]>;\n}\nexport type XMLHttpRequestBodyInitSafe = BlobSafe | FormDataSafe | URLSearchParamsSafe | string;\n\nexport type FetchRequestBody =\n | string\n | BlobSafe\n | ArrayBufferSafe\n | FormDataSafe\n | URLSearchParamsSafe\n | ArrayBufferViewSafe\n | null\n | undefined;\n\nexport interface IRequestWrapper {\n /**\n * Get the headers of the request.\n * @param allow - The headers to allow.\n * @returns The pruned headers\n */\n headers(allow?: string[]): Record<string, string> | undefined;\n bodySize?: number;\n method?: string;\n body?: FetchRequestBody | XMLHttpRequestBodyInitSafe | null;\n json: (allow?: string[], exclude?: string[]) => Promise<JsonObject | null>;\n}\n\nexport const MAXIMUM_ENTRIES = 100;\n\n/**\n * This class encapsulates the RequestInit (https://developer.mozilla.org/en-US/docs/Web/API/RequestInit)\n * object so that the consumer can only get access to the headers, method and body size.\n *\n * This is to prevent consumers from directly accessing the Request object\n * and mutating it or running costly operations on it.\n *\n * IMPORTANT:\n * * Do not make changes to this class without careful consideration\n * of performance implications, memory usage and potential to mutate the customer's\n * request.\n * * NEVER .clone() the RequestInit object. This will 2x's the memory overhead of the request\n * * NEVER: call .arrayBuffer(), text(), json() or any other method on the body that\n * consumes the body's stream. This will cause the response to be consumed\n * meaning the body will be empty when the customer tries to access it.\n * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * never call any of the methods on it)\n */\nexport class RequestWrapperFetch implements IRequestWrapper {\n private _bodySize: number | undefined;\n constructor(private request: RequestInitSafe) {}\n\n headers(allow: string[] = []): Record<string, string> | undefined {\n const headersUnsafe = this.request.headers;\n\n // copy the headers into a new object\n const headersSafeCopy: Record<string, string> = {};\n if (Array.isArray(headersUnsafe)) {\n headersUnsafe.forEach(([headerName, headerValue]) => {\n headersSafeCopy[headerName] = headerValue;\n });\n } else if (headersUnsafe instanceof Headers) {\n headersUnsafe.forEach((value: string, key: string) => {\n headersSafeCopy[key] = value;\n });\n } else if (typeof headersUnsafe === 'object' && headersUnsafe !== null) {\n for (const [key, value] of Object.entries(headersUnsafe as Record<string, string>)) {\n headersSafeCopy[key] = value;\n }\n }\n\n return pruneHeaders(headersSafeCopy, { allow });\n }\n\n get bodySize(): number | undefined {\n if (typeof this._bodySize === 'number') return this._bodySize;\n const global = getGlobalScope();\n\n /* istanbul ignore if */\n if (!global?.TextEncoder) {\n return;\n }\n const body = this.request.body as FetchRequestBody;\n this._bodySize = getBodySize(body, MAXIMUM_ENTRIES);\n return this._bodySize;\n }\n\n get method(): string | undefined {\n return this.request.method;\n }\n\n get body(): string | null {\n if (typeof this.request.body === 'string') {\n return this.request.body;\n }\n return null;\n }\n\n async json(allow: string[] = [], exclude: string[] = []): Promise<JsonObject | null> {\n if (allow.length === 0) {\n return null;\n }\n const text = this.body;\n return safeParseAndPruneBody(text, allow, exclude);\n }\n}\n\nexport class RequestWrapperXhr implements IRequestWrapper {\n constructor(readonly bodyRaw: XMLHttpRequestBodyInitSafe | null, readonly requestHeaders: Record<string, string>) {}\n\n headers(allow: string[] = []): Record<string, string> | undefined {\n return pruneHeaders(this.requestHeaders, { allow });\n }\n\n get bodySize(): number | undefined {\n return getBodySize(this.bodyRaw as FetchRequestBody, MAXIMUM_ENTRIES);\n }\n\n get body(): string | null {\n if (typeof this.bodyRaw === 'string') {\n return this.bodyRaw;\n }\n return null;\n }\n\n async json(allow: string[] = [], exclude: string[] = []): Promise<JsonObject | null> {\n if (allow.length === 0) {\n return null;\n }\n const text = this.body;\n return safeParseAndPruneBody(text, allow, exclude);\n }\n}\n\nfunction getBodySize(bodyUnsafe: FetchRequestBody, maxEntries: number): number | undefined {\n let bodySize: number | undefined;\n const global = getGlobalScope();\n /* istanbul ignore next */\n const TextEncoder = global?.TextEncoder;\n /* istanbul ignore next */\n if (!TextEncoder) {\n return;\n }\n let bodySafe;\n if (typeof bodyUnsafe === 'string') {\n bodySafe = bodyUnsafe;\n bodySize = new TextEncoder().encode(bodySafe).length;\n } else if (bodyUnsafe instanceof Blob) {\n bodySafe = bodyUnsafe as BlobSafe;\n bodySize = bodySafe.size;\n } else if (bodyUnsafe instanceof URLSearchParams) {\n bodySafe = bodyUnsafe as URLSearchParamsSafe;\n bodySize = new TextEncoder().encode(bodySafe.toString()).length;\n } else if (ArrayBuffer.isView(bodyUnsafe)) {\n bodySafe = bodyUnsafe as ArrayBufferViewSafe;\n bodySize = bodySafe.byteLength;\n } else if (bodyUnsafe instanceof ArrayBuffer) {\n bodySafe = bodyUnsafe as ArrayBufferSafe;\n bodySize = bodySafe.byteLength;\n } else if (bodyUnsafe instanceof FormData) {\n // Estimating only for text parts; not accurate for files\n const formData = bodyUnsafe as unknown as FormDataSafe;\n\n let total = 0;\n let count = 0;\n for (const [key, value] of formData.entries()) {\n total += key.length;\n if (typeof value === 'string') {\n total += new TextEncoder().encode(value).length;\n } else if (value instanceof Blob) {\n total += value.size;\n } else {\n // encountered an unknown type\n // we can't estimate the size of this entry\n return;\n }\n // terminate if we reach the maximum number of entries\n // to avoid performance issues in case of very large FormData\n if (++count >= maxEntries) {\n return;\n }\n }\n bodySize = total;\n } else if (bodyUnsafe instanceof ReadableStream) {\n // If bodyUnsafe is an instanceof ReadableStream, we can't determine the size,\n // without consuming it, so we return undefined.\n // Never ever consume ReadableStream! DO NOT DO IT!!!\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n bodySafe = bodyUnsafe as unknown as ReadableStreamSafe;\n return;\n }\n return bodySize;\n}\n\nexport type JsonObject = {\n [key: string]: JsonValue;\n};\n\nexport type JsonValue = string | number | boolean | null | JsonObject | JsonArray;\n\nexport type JsonArray = Array<JsonValue>;\n\nexport interface IResponseWrapper {\n /**\n * Get the headers of the response.\n * @param allow - The headers to allow.\n * @returns The pruned headers\n */\n headers(allow?: string[]): Record<string, string> | undefined;\n bodySize?: number;\n status?: number;\n body?: string | Blob | ReadableStream | ArrayBuffer | FormDataSafe | URLSearchParams | ArrayBufferView | null;\n json: (allow?: string[], exclude?: string[]) => Promise<JsonObject | null>;\n}\n\n/**\n * This class encapsulates the Fetch API Response object\n * (https://developer.mozilla.org/en-US/docs/Web/API/Response) so that the consumer can\n * only get access to the headers and body size.\n *\n * This is to prevent consumers from directly accessing the Response object\n * and mutating it or running costly operations on it.\n *\n * IMPORTANT:\n * * Do not make changes to this class without careful consideration\n * of performance implications, memory usage and potential to mutate the customer's\n * response.\n * * Do not .clone() the Response object unless you need to access the body.\n * Cloning will 2x the memory overhead of the response.\n * * NEVER consume the body's stream. This will cause the response to be consumed\n * meaning the body will be empty when the customer tries to access it.\n * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * never call any of the methods on it)\n */\nexport class ResponseWrapperFetch implements IResponseWrapper {\n private _bodySize: number | undefined;\n private clonedResponse?: ResponseCloneSafe;\n constructor(private response: ResponseSafe) {}\n\n headers(allow: string[] = []): Record<string, string> | undefined {\n if (this.response.headers instanceof Headers) {\n const headersSafe = this.response.headers as HeadersResponseSafe;\n const headersOut: Record<string, string> = {};\n /* istanbul ignore next */\n headersSafe?.forEach?.((value, key) => {\n headersOut[key] = value;\n });\n return pruneHeaders(headersOut, { allow });\n }\n\n return;\n }\n\n get bodySize(): number | undefined {\n if (this._bodySize !== undefined) return this._bodySize;\n /* istanbul ignore next */\n const contentLength = this.response.headers?.get?.('content-length');\n const bodySize = contentLength ? parseInt(contentLength, 10) : undefined;\n this._bodySize = bodySize;\n return bodySize;\n }\n\n get status(): number {\n return this.response.status;\n }\n\n async text(): Promise<string | null> {\n // !!!IMPORTANT: we clone the response to avoid mutating the original response\n // never call .text(), .json(), etc.. on the original response always clone it first\n if (!this.clonedResponse) {\n this.clonedResponse = this.response.clone();\n }\n try {\n const textPromise = this.clonedResponse.text();\n const timer = new Promise<null>((resolve) =>\n setTimeout(\n /* istanbul ignore next */\n () => resolve(null),\n TEXT_READ_TIMEOUT,\n ),\n );\n const text = await Promise.race<string | null>([textPromise, timer]);\n return text;\n } catch (error) {\n return null;\n }\n }\n\n async json(allow: string[] = [], exclude: string[] = []): Promise<JsonObject | null> {\n if (allow.length === 0) {\n return null;\n }\n const text = await this.text();\n return safeParseAndPruneBody(text, allow, exclude);\n }\n}\n\nexport class ResponseWrapperXhr implements IResponseWrapper {\n constructor(\n readonly statusCode: number,\n readonly headersString: string,\n readonly size: number | undefined,\n readonly getJson: () => any | null,\n ) {}\n\n get bodySize(): number | undefined {\n return this.size;\n }\n\n get status(): number {\n return this.statusCode;\n }\n\n headers(allow: string[] = []): Record<string, string> | undefined {\n if (!this.headersString) {\n return {};\n }\n const headers: Record<string, string> = {};\n const headerLines = this.headersString.split('\\r\\n');\n for (const line of headerLines) {\n const [key, value] = line.split(': ');\n if (key && value) {\n headers[key] = value;\n }\n }\n return pruneHeaders(headers, { allow });\n }\n\n async json(allow: string[] = [], exclude: string[] = []): Promise<JsonObject | null> {\n if (allow.length === 0) {\n return null;\n }\n const jsonBody = this.getJson() as JsonObject | null;\n if (jsonBody) {\n pruneJson(jsonBody, allow, exclude);\n return jsonBody;\n }\n return null;\n }\n}\n\nfunction safeParseAndPruneBody(text: string | null, allow: string[], exclude: string[]): JsonObject | null {\n if (!text) return null;\n try {\n const json = JSON.parse(text) as JsonObject;\n pruneJson(json, allow, exclude);\n return json;\n } catch (error) {\n return null;\n }\n}\n\nexport enum PRUNE_STRATEGY {\n REDACT = 'redact',\n REMOVE = 'remove',\n}\n\nconst REDACTED_VALUE = '[REDACTED]';\n\n/**\n * Prune headers from a headers record object.\n * @param headers - The headers to prune.\n * @param options - The options to prune the headers.\n * @param options.exclude - List of headers to delete from headers\n * @param options.include - List of headers to keep in headers, if not provided, all headers are kept by default\n * @returns The pruned headers.\n */\nexport const pruneHeaders = (\n headers: Record<string, string>,\n options: {\n allow?: string[];\n strategy?: PRUNE_STRATEGY;\n },\n): Record<string, string> => {\n const { allow = [], strategy = PRUNE_STRATEGY.REMOVE } = options;\n const exclude = [...FORBIDDEN_HEADERS];\n const headersPruned: Record<string, string> = {};\n\n for (const key of Object.keys(headers)) {\n const lowerKey = key.toLowerCase();\n\n if (exclude.find((e) => e.toLowerCase() === lowerKey)) {\n if (strategy === PRUNE_STRATEGY.REDACT) {\n headersPruned[key] = REDACTED_VALUE;\n }\n } else if (!allow.find((i) => i.toLowerCase() === lowerKey)) {\n if (strategy === PRUNE_STRATEGY.REDACT) {\n headersPruned[key] = REDACTED_VALUE;\n }\n } else {\n headersPruned[key] = headers[key];\n }\n }\n return headersPruned;\n};\nexport class NetworkRequestEvent {\n public requestHeaders?: Record<string, string>;\n public responseHeaders?: Record<string, string>;\n public requestBodyJson?: Promise<JsonObject | null>;\n public responseBodyJson?: Promise<JsonObject | null>;\n constructor(\n public readonly type: 'xhr' | 'fetch',\n public readonly method: string,\n public readonly timestamp: number,\n public readonly startTime: number,\n public readonly url?: string,\n public readonly requestWrapper?: IRequestWrapper,\n public readonly status: number = 0,\n public readonly duration?: number,\n public readonly responseWrapper?: IResponseWrapper,\n public readonly error?: {\n name: string;\n message: string;\n },\n public readonly endTime?: number,\n ) {}\n\n toSerializable(): Record<string, any> {\n const serialized: Record<string, any> = {\n type: this.type,\n method: this.method,\n url: this.url,\n timestamp: this.timestamp,\n status: this.status,\n duration: this.duration,\n error: this.error,\n startTime: this.startTime,\n endTime: this.endTime,\n requestHeaders: this.requestWrapper?.headers([...SAFE_HEADERS]),\n requestBodySize: this.requestWrapper?.bodySize,\n responseHeaders: this.responseWrapper?.headers([...SAFE_HEADERS]),\n responseBodySize: this.responseWrapper?.bodySize,\n };\n\n return Object.fromEntries(Object.entries(serialized).filter(([_, v]) => v !== undefined));\n }\n}\n","import { getGlobalScope } from '..';\nimport { UUID } from '../utils/uuid';\nimport { ILogger } from '../logger';\nimport {\n IRequestWrapper,\n NetworkRequestEvent,\n RequestWrapperFetch,\n ResponseWrapperFetch,\n RequestWrapperXhr,\n ResponseWrapperXhr,\n IResponseWrapper,\n RequestInitSafe,\n XMLHttpRequestBodyInitSafe,\n} from '../network-request-event';\n\n// object that is added to each XHR instance so\n// that info can be set in xhr.open and retrieved in xhr.send\ntype AmplitudeAnalyticsEvent = {\n method: string;\n url: string | URL;\n startTime: number;\n durationStart: number;\n status?: number;\n headers: Record<string, string>;\n};\n\n/**\n * Typeguard function checks if an input is a Request object.\n */\nfunction isRequest(requestInfo: any): requestInfo is Request {\n return typeof requestInfo === 'object' && requestInfo !== null && 'url' in requestInfo && 'method' in requestInfo;\n}\n\nexport type NetworkEventCallbackFn = (event: NetworkRequestEvent) => void;\n\nexport class NetworkEventCallback {\n constructor(public readonly callback: (event: NetworkRequestEvent) => void, public readonly id: string = UUID()) {}\n}\n\ntype RequestUrlAndMethod = {\n url: string | URL | undefined;\n method: string | undefined;\n};\n\n// A narrowed down [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) type\n// that only includes the properties we need to access and adds the $$AmplitudeAnalyticsEvent property\n// Use great care when modifying this type, make sure you only use read-only properties and only add\n// what you need to access, nothing more.\ntype AmplitudeXMLHttpRequestSafe = {\n $$AmplitudeAnalyticsEvent: AmplitudeAnalyticsEvent;\n status: number;\n responseText: string;\n responseType: XMLHttpRequestResponseType;\n getAllResponseHeaders: typeof XMLHttpRequest.prototype.getAllResponseHeaders;\n getResponseHeader: typeof XMLHttpRequest.prototype.getResponseHeader;\n addEventListener: (type: 'loadend', listener: () => void) => void;\n};\n\nexport class NetworkObserver {\n private eventCallbacks: Map<string, NetworkEventCallback> = new Map();\n // eslint-disable-next-line no-restricted-globals\n private globalScope?: typeof globalThis;\n private logger?: ILogger;\n private isObserving = false;\n constructor(logger?: ILogger) {\n this.logger = logger;\n const globalScope = getGlobalScope();\n if (!NetworkObserver.isSupported()) {\n /* istanbul ignore next */\n return;\n }\n this.globalScope = globalScope;\n }\n\n static isSupported(): boolean {\n const globalScope = getGlobalScope();\n return !!globalScope && !!globalScope.fetch;\n }\n\n subscribe(eventCallback: NetworkEventCallback, logger?: ILogger) {\n if (!this.logger) {\n this.logger = logger;\n }\n this.eventCallbacks.set(eventCallback.id, eventCallback);\n if (!this.isObserving) {\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalXhrOpen = this.globalScope?.XMLHttpRequest?.prototype?.open;\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalXhrSend = this.globalScope?.XMLHttpRequest?.prototype?.send;\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalXhrSetRequestHeader = this.globalScope?.XMLHttpRequest?.prototype?.setRequestHeader;\n if (originalXhrOpen && originalXhrSend && originalXhrSetRequestHeader) {\n this.observeXhr(originalXhrOpen, originalXhrSend, originalXhrSetRequestHeader);\n }\n\n /* istanbul ignore next */\n const originalFetch = this.globalScope?.fetch;\n /* istanbul ignore next */\n if (originalFetch) {\n this.observeFetch(originalFetch);\n }\n\n /* istanbul ignore next */\n this.isObserving = true;\n }\n }\n\n unsubscribe(eventCallback: NetworkEventCallback) {\n this.eventCallbacks.delete(eventCallback.id);\n }\n\n protected triggerEventCallbacks(event: NetworkRequestEvent) {\n this.eventCallbacks.forEach((callback) => {\n try {\n callback.callback(event);\n } catch (err) {\n // if the callback throws an error, we should catch it\n // to avoid breaking the fetch promise chain\n /* istanbul ignore next */\n this.logger?.debug('an unexpected error occurred while triggering event callbacks', err);\n }\n });\n }\n\n handleNetworkRequestEvent(\n requestType: 'fetch' | 'xhr',\n requestInfo: RequestInfo | URL | RequestUrlAndMethod | undefined,\n requestWrapper: IRequestWrapper | undefined,\n responseWrapper: IResponseWrapper | undefined,\n typedError: Error | undefined,\n startTime?: number,\n durationStart?: number,\n ) {\n /* istanbul ignore next */\n if (startTime === undefined || durationStart === undefined) {\n // if we reach this point, it means that the performance API is not supported\n // so we can't construct a NetworkRequestEvent\n return;\n }\n\n // parse the URL and Method\n let url: string | undefined;\n let method = 'GET';\n if (isRequest(requestInfo)) {\n url = requestInfo['url'];\n method = requestInfo['method'];\n } else {\n url = requestInfo?.toString?.();\n }\n\n // strip basic auth from the URL\n if (url) {\n try {\n const parsedUrl = new URL(url);\n // reconstruct the URL without the basic auth\n url = `${parsedUrl.protocol}//${parsedUrl.host}${parsedUrl.pathname}${parsedUrl.search}${parsedUrl.hash}`;\n // eslint-disable-next-line no-empty\n } catch (err) {}\n }\n method = requestWrapper?.method || method;\n\n let status, error;\n if (responseWrapper) {\n status = responseWrapper.status;\n }\n\n if (typedError) {\n error = {\n name: typedError.name || 'UnknownError',\n message: typedError.message || 'An unknown error occurred',\n };\n status = 0;\n }\n\n const duration = Math.floor(performance.now() - durationStart);\n const endTime = Math.floor(startTime + duration);\n\n const requestEvent = new NetworkRequestEvent(\n requestType,\n method,\n startTime, // timestamp and startTime are aliases\n startTime,\n url,\n requestWrapper,\n status,\n duration,\n responseWrapper,\n error,\n endTime,\n );\n\n this.triggerEventCallbacks(requestEvent);\n }\n\n private getTimestamps() {\n /* istanbul ignore next */\n return {\n startTime: Date.now?.(),\n durationStart: performance?.now?.(),\n };\n }\n\n private observeFetch(\n originalFetch: (requestInfo: RequestInfo | URL, requestInit?: RequestInit) => Promise<Response>,\n ) {\n /* istanbul ignore next */\n if (!this.globalScope || !originalFetch) {\n return;\n }\n /**\n * IMPORTANT: This overrides window.fetch in browsers.\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of fetch\n * and make sure another developer who is an expert reviews this change throughly\n */\n this.globalScope.fetch = async (requestInfo?: RequestInfo | URL, requestInit?: RequestInit) => {\n // 1: capture the start time and duration start time before the fetch call\n let timestamps;\n try {\n timestamps = this.getTimestamps();\n } catch (error) {\n /* istanbul ignore next */\n this.logger?.debug('an unexpected error occurred while retrieving timestamps', error);\n }\n\n // 2. make the call to the original fetch and preserve the response or error\n let originalResponse, originalError;\n try {\n originalResponse = await originalFetch(requestInfo as RequestInfo | URL, requestInit);\n } catch (err) {\n // Capture error information\n originalError = err;\n }\n\n // 3. call the handler after the fetch call is done\n try {\n this.handleNetworkRequestEvent(\n 'fetch',\n requestInfo,\n requestInit ? new RequestWrapperFetch(requestInit as RequestInitSafe) : undefined,\n originalResponse ? new ResponseWrapperFetch(originalResponse) : undefined,\n originalError as Error,\n /* istanbul ignore next */\n timestamps?.startTime,\n /* istanbul ignore next */\n timestamps?.durationStart,\n );\n } catch (err) {\n // this catch shouldn't be reachable, but keep it here for safety\n // because we're overriding the fetch function and better to be safe than sorry\n /* istanbul ignore next */\n this.logger?.debug('an unexpected error occurred while handling fetch', err);\n }\n\n // 4. return the original response or throw the original error\n if (originalResponse) {\n // if the response is not undefined, return it\n return originalResponse;\n } else {\n throw originalError;\n }\n };\n }\n\n /**\n * Creates a function that parses the response of an XMLHttpRequest as JSON.\n *\n * Returns function instead of JSON object to avoid unnecessary parsing if the\n * body is not being captured.\n *\n * @param xhrSafe - The XMLHttpRequest object.\n * @param context - The NetworkObserver instance.\n * @returns A function that parses the response of an XMLHttpRequest as JSON.\n */\n static createXhrJsonParser(xhrUnsafe: XMLHttpRequest, context: NetworkObserver) {\n return () => {\n try {\n if (xhrUnsafe.responseType === 'json') {\n // if response is a JS object, clone it so that subscribers can't mutate it\n if (context.globalScope?.structuredClone) {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return */\n return context.globalScope.structuredClone(xhrUnsafe.response);\n }\n } else if (['text', ''].includes(xhrUnsafe.responseType)) {\n // if response is a string, parse it as JSON\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return */\n return JSON.parse(xhrUnsafe.responseText);\n }\n } catch (err) {\n /* istanbul ignore if */\n if (err instanceof Error && err.name === 'InvalidStateError') {\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseText#exceptions\n // if we reach here, it means we don't handle responseType correctly\n context.logger?.error(\n `unexpected error when retrieving responseText. responseType='${xhrUnsafe.responseType}'`,\n );\n }\n // the other possible error is Json Parse error which we fail silently\n return null;\n }\n return null;\n };\n }\n\n private observeXhr(\n originalXhrOpen:\n | ((\n method: string,\n url: string | URL,\n async?: boolean,\n username?: string | null,\n password?: string | null,\n ) => void)\n | undefined,\n originalXhrSend: ((body?: Document | XMLHttpRequestBodyInit | null) => void) | undefined,\n originalXhrSetRequestHeader: (headerName: string, headerValue: string) => void,\n ) {\n /* istanbul ignore next */\n if (!this.globalScope || !originalXhrOpen || !originalXhrSend) {\n return;\n }\n\n const xhrProto = this.globalScope.XMLHttpRequest.prototype;\n\n const networkObserverContext = this as NetworkObserver;\n\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.open\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.open\n * and make sure another developer who is an expert reviews this change throughly\n */\n xhrProto.open = function (...args: any[]) {\n const xhrSafe = this as unknown as AmplitudeXMLHttpRequestSafe;\n const [method, url] = args as [string, string | URL];\n try {\n /* istanbul ignore next */\n xhrSafe.$$AmplitudeAnalyticsEvent = {\n method,\n url: url?.toString?.(),\n headers: {},\n ...networkObserverContext.getTimestamps(),\n } as AmplitudeAnalyticsEvent;\n } catch (err) {\n /* istanbul ignore next */\n networkObserverContext.logger?.error('an unexpected error occurred while calling xhr open', err);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return originalXhrOpen.apply(xhrSafe, args as any);\n };\n\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.send\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.send\n * and make sure another developer who is an expert reviews this change throughly\n */\n // allow \"any\" type for args to reflect how it's used in the browser\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n xhrProto.send = function (...args: any[]) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhrUnsafe = this;\n const xhrSafe = xhrUnsafe as unknown as AmplitudeXMLHttpRequestSafe;\n const getJson = NetworkObserver.createXhrJsonParser(xhrUnsafe, networkObserverContext);\n const body = args[0] as XMLHttpRequestBodyInitSafe;\n const requestEvent = xhrSafe.$$AmplitudeAnalyticsEvent;\n\n xhrSafe.addEventListener('loadend', function () {\n try {\n const responseHeaders = xhrSafe.getAllResponseHeaders();\n const responseBodySize = xhrSafe.getResponseHeader('content-length');\n\n const responseWrapper = new ResponseWrapperXhr(\n xhrSafe.status,\n responseHeaders,\n /* istanbul ignore next */\n responseBodySize ? parseInt(responseBodySize, 10) : undefined,\n getJson,\n );\n const requestHeaders = xhrSafe.$$AmplitudeAnalyticsEvent.headers;\n const requestWrapper = new RequestWrapperXhr(body, requestHeaders);\n requestEvent.status = xhrSafe.status;\n networkObserverContext.handleNetworkRequestEvent(\n 'xhr',\n { url: requestEvent.url, method: requestEvent.method },\n requestWrapper,\n responseWrapper,\n undefined,\n requestEvent.startTime,\n requestEvent.durationStart,\n );\n } catch (err) {\n /* istanbul ignore next */\n networkObserverContext.logger?.error('an unexpected error occurred while handling xhr send', err);\n }\n });\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n return originalXhrSend.apply(xhrSafe, args as any);\n };\n\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.setRequestHeader\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.setRequestHeader\n * and make sure another developer who is an expert reviews this change throughly\n */\n // allow \"any\" type for args to reflect how it's used in the browser\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n xhrProto.setRequestHeader = function (headerName: any, headerValue: any) {\n const xhrSafe = this as unknown as AmplitudeXMLHttpRequestSafe;\n try {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment */\n xhrSafe.$$AmplitudeAnalyticsEvent.headers[headerName as string] = headerValue as string;\n } catch (err) {\n /* istanbul ignore next */\n networkObserverContext.logger?.error('an unexpected error occurred while calling xhr setRequestHeader', err);\n }\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n originalXhrSetRequestHeader.apply(xhrSafe, [headerName, headerValue]);\n };\n }\n}\n\n// singleton instance of NetworkObserver\nexport const networkObserver = new NetworkObserver();\n","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// === Symbol Support ===\nvar hasSymbols = function () {\n return typeof Symbol === 'function';\n};\n\nvar hasSymbol = function (name) {\n return hasSymbols() && Boolean(Symbol[name]);\n};\n\nvar getSymbol = function (name) {\n return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n var value = obj[key];\n if (value == null) return undefined;\n if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n return value;\n}\n\nfunction getSpecies(obj) {\n var ctor = obj.constructor;\n\n if (ctor !== undefined) {\n ctor = ctor[SymbolSpecies];\n\n if (ctor === null) {\n ctor = undefined;\n }\n }\n\n return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n if (hostReportError.log) {\n hostReportError.log(e);\n } else {\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nfunction enqueue(fn) {\n Promise.resolve().then(function () {\n try {\n fn();\n } catch (e) {\n hostReportError(e);\n }\n });\n}\n\nfunction cleanupSubscription(subscription) {\n var cleanup = subscription._cleanup;\n if (cleanup === undefined) return;\n subscription._cleanup = undefined;\n\n if (!cleanup) {\n return;\n }\n\n try {\n if (typeof cleanup === 'function') {\n cleanup();\n } else {\n var unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n if (unsubscribe) {\n unsubscribe.call(cleanup);\n }\n }\n } catch (e) {\n hostReportError(e);\n }\n}\n\nfunction closeSubscription(subscription) {\n subscription._observer = undefined;\n subscription._queue = undefined;\n subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n var queue = subscription._queue;\n\n if (!queue) {\n return;\n }\n\n subscription._queue = undefined;\n subscription._state = 'ready';\n\n for (var i = 0; i < queue.length; ++i) {\n notifySubscription(subscription, queue[i].type, queue[i].value);\n if (subscription._state === 'closed') break;\n }\n}\n\nfunction notifySubscription(subscription, type, value) {\n subscription._state = 'running';\n var observer = subscription._observer;\n\n try {\n var m = getMethod(observer, type);\n\n switch (type) {\n case 'next':\n if (m) m.call(observer, value);\n break;\n\n case 'error':\n closeSubscription(subscription);\n if (m) m.call(observer, value);else throw value;\n break;\n\n case 'complete':\n closeSubscription(subscription);\n if (m) m.call(observer);\n break;\n }\n } catch (e) {\n hostReportError(e);\n }\n\n if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n if (subscription._state === 'closed') return;\n\n if (subscription._state === 'buffering') {\n subscription._queue.push({\n type: type,\n value: value\n });\n\n return;\n }\n\n if (subscription._state !== 'ready') {\n subscription._state = 'buffering';\n subscription._queue = [{\n type: type,\n value: value\n }];\n enqueue(function () {\n return flushSubscription(subscription);\n });\n return;\n }\n\n notifySubscription(subscription, type, value);\n}\n\nvar Subscription = /*#__PURE__*/function () {\n function Subscription(observer, subscriber) {\n // ASSERT: observer is an object\n // ASSERT: subscriber is callable\n this._cleanup = undefined;\n this._observer = observer;\n this._queue = undefined;\n this._state = 'initializing';\n var subscriptionObserver = new SubscriptionObserver(this);\n\n try {\n this._cleanup = subscriber.call(undefined, subscriptionObserver);\n } catch (e) {\n subscriptionObserver.error(e);\n }\n\n if (this._state === 'initializing') this._state = 'ready';\n }\n\n var _proto = Subscription.prototype;\n\n _proto.unsubscribe = function unsubscribe() {\n if (this._state !== 'closed') {\n closeSubscription(this);\n cleanupSubscription(this);\n }\n };\n\n _createClass(Subscription, [{\n key: \"closed\",\n get: function () {\n return this._state === 'closed';\n }\n }]);\n\n return Subscription;\n}();\n\nvar SubscriptionObserver = /*#__PURE__*/function () {\n function SubscriptionObserver(subscription) {\n this._subscription = subscription;\n }\n\n var _proto2 = SubscriptionObserver.prototype;\n\n _proto2.next = function next(value) {\n onNotify(this._subscription, 'next', value);\n };\n\n _proto2.error = function error(value) {\n onNotify(this._subscription, 'error', value);\n };\n\n _proto2.complete = function complete() {\n onNotify(this._subscription, 'complete');\n };\n\n _createClass(SubscriptionObserver, [{\n key: \"closed\",\n get: function () {\n return this._subscription._state === 'closed';\n }\n }]);\n\n return SubscriptionObserver;\n}();\n\nvar Observable = /*#__PURE__*/function () {\n function Observable(subscriber) {\n if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n this._subscriber = subscriber;\n }\n\n var _proto3 = Observable.prototype;\n\n _proto3.subscribe = function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n observer = {\n next: observer,\n error: arguments[1],\n complete: arguments[2]\n };\n }\n\n return new Subscription(observer, this._subscriber);\n };\n\n _proto3.forEach = function forEach(fn) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n if (typeof fn !== 'function') {\n reject(new TypeError(fn + ' is not a function'));\n return;\n }\n\n function done() {\n subscription.unsubscribe();\n resolve();\n }\n\n var subscription = _this.subscribe({\n next: function (value) {\n try {\n fn(value, done);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n };\n\n _proto3.map = function map(fn) {\n var _this2 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this2.subscribe({\n next: function (value) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.filter = function filter(fn) {\n var _this3 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this3.subscribe({\n next: function (value) {\n try {\n if (!fn(value)) return;\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.reduce = function reduce(fn) {\n var _this4 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n var hasSeed = arguments.length > 1;\n var hasValue = false;\n var seed = arguments[1];\n var acc = seed;\n return new C(function (observer) {\n return _this4.subscribe({\n next: function (value) {\n var first = !hasValue;\n hasValue = true;\n\n if (!first || hasSeed) {\n try {\n acc = fn(acc, value);\n } catch (e) {\n return observer.error(e);\n }\n } else {\n acc = value;\n }\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n observer.next(acc);\n observer.complete();\n }\n });\n });\n };\n\n _proto3.concat = function concat() {\n var _this5 = this;\n\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscription;\n var index = 0;\n\n function startNext(next) {\n subscription = next.subscribe({\n next: function (v) {\n observer.next(v);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (index === sources.length) {\n subscription = undefined;\n observer.complete();\n } else {\n startNext(C.from(sources[index++]));\n }\n }\n });\n }\n\n startNext(_this5);\n return function () {\n if (subscription) {\n subscription.unsubscribe();\n subscription = undefined;\n }\n };\n });\n };\n\n _proto3.flatMap = function flatMap(fn) {\n var _this6 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscriptions = [];\n\n var outer = _this6.subscribe({\n next: function (value) {\n if (fn) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n }\n\n var inner = C.from(value).subscribe({\n next: function (value) {\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n var i = subscriptions.indexOf(inner);\n if (i >= 0) subscriptions.splice(i, 1);\n completeIfDone();\n }\n });\n subscriptions.push(inner);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n completeIfDone();\n }\n });\n\n function completeIfDone() {\n if (outer.closed && subscriptions.length === 0) observer.complete();\n }\n\n return function () {\n subscriptions.forEach(function (s) {\n return s.unsubscribe();\n });\n outer.unsubscribe();\n };\n });\n };\n\n _proto3[SymbolObservable] = function () {\n return this;\n };\n\n Observable.from = function from(x) {\n var C = typeof this === 'function' ? this : Observable;\n if (x == null) throw new TypeError(x + ' is not an object');\n var method = getMethod(x, SymbolObservable);\n\n if (method) {\n var observable = method.call(x);\n if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n if (isObservable(observable) && observable.constructor === C) return observable;\n return new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n\n if (hasSymbol('iterator')) {\n method = getMethod(x, SymbolIterator);\n\n if (method) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var _iterator = _createForOfIteratorHelperLoose(method.call(x)), _step; !(_step = _iterator()).done;) {\n var item = _step.value;\n observer.next(item);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n }\n\n if (Array.isArray(x)) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < x.length; ++i) {\n observer.next(x[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n\n throw new TypeError(x + ' is not observable');\n };\n\n Observable.of = function of() {\n for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n items[_key2] = arguments[_key2];\n }\n\n var C = typeof this === 'function' ? this : Observable;\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < items.length; ++i) {\n observer.next(items[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n };\n\n _createClass(Observable, null, [{\n key: SymbolSpecies,\n get: function () {\n return this;\n }\n }]);\n\n return Observable;\n}();\n\nif (hasSymbols()) {\n Object.defineProperty(Observable, Symbol('extensions'), {\n value: {\n symbol: SymbolObservable,\n hostReportError: hostReportError\n },\n configurable: true\n });\n}\n\nexport { Observable };\n","export const PLUGIN_NAME = '@amplitude/plugin-network-capture-browser';\n\nexport const AMPLITUDE_NETWORK_REQUEST_EVENT = '[Amplitude] Network Request';\n\n// TODO: when @experimental is removed from responseHeaders and requestHeaders,\n// remove this constant or set it to false\nexport const IS_HEADER_CAPTURE_EXPERIMENTAL = true;\n","/* eslint-disable no-restricted-globals */\nimport {\n BrowserClient,\n BrowserConfig,\n EnrichmentPlugin,\n NetworkRequestEvent,\n networkObserver,\n NetworkEventCallback,\n NetworkTrackingOptions,\n ILogger,\n} from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { Observable, Unsubscribable } from '@amplitude/analytics-core';\nimport { trackNetworkEvents } from './track-network-event';\n\nexport type BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport enum ObservablesEnum {\n NetworkObservable = 'networkObservable',\n}\n\n// Base TimestampedEvent type\ntype BaseTimestampedEvent<T> = {\n event: T;\n timestamp: number;\n type: 'rage' | 'click' | 'change' | 'error' | 'navigate' | 'mutation' | 'network';\n};\n\n// Specific types for events with targetElementProperties\nexport type ElementBasedEvent = MouseEvent | Event;\nexport type ElementBasedTimestampedEvent<T> = BaseTimestampedEvent<T> & {\n event: MouseEvent | Event;\n type: 'click' | 'change';\n closestTrackedAncestor: Element;\n targetElementProperties: Record<string, any>;\n};\n\n// Union type for all possible TimestampedEvents\nexport type TimestampedEvent<T> = BaseTimestampedEvent<T> | ElementBasedTimestampedEvent<T>;\n\nexport interface AllWindowObservables {\n [ObservablesEnum.NetworkObservable]: Observable<TimestampedEvent<NetworkRequestEvent>>;\n}\n\nlet subscription: Unsubscribable;\n\nexport const networkCapturePlugin = (options: NetworkTrackingOptions = {}): BrowserEnrichmentPlugin => {\n const name = constants.PLUGIN_NAME;\n const type = 'enrichment';\n let logger: ILogger;\n\n const addAdditionalEventProperties = <T>(\n event: T,\n type: TimestampedEvent<T>['type'],\n ): TimestampedEvent<T> | ElementBasedTimestampedEvent<T> => {\n const baseEvent: BaseTimestampedEvent<T> | ElementBasedTimestampedEvent<T> = {\n event,\n timestamp: Date.now(),\n type,\n };\n\n return baseEvent;\n };\n\n // Create observables on events on the window\n const createObservables = (): AllWindowObservables => {\n const networkObservable = new Observable<TimestampedEvent<NetworkRequestEvent>>((observer) => {\n const callback = new NetworkEventCallback((event) => {\n const eventWithProperties = addAdditionalEventProperties(event, 'network');\n observer.next(eventWithProperties);\n });\n networkObserver.subscribe(callback, logger);\n return () => {\n networkObserver.unsubscribe(callback);\n };\n });\n\n return {\n [ObservablesEnum.NetworkObservable]: networkObservable,\n };\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n // Create observables for events on the window\n const allObservables = createObservables();\n\n /* istanbul ignore next */\n logger = config?.loggerProvider;\n\n subscription = trackNetworkEvents({\n allObservables,\n networkTrackingOptions: options,\n amplitude,\n loggerProvider: logger,\n });\n\n /* istanbul ignore next */\n logger?.log(`${name} has been successfully added.`);\n };\n\n /* istanbul ignore next */\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n subscription.unsubscribe();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n","import {\n BrowserClient,\n NetworkRequestEvent,\n NetworkCaptureRule,\n NetworkTrackingOptions,\n getGlobalScope,\n isUrlMatchAllowlist,\n SAFE_HEADERS,\n ILogger,\n IRequestWrapper,\n Unsubscribable,\n} from '@amplitude/analytics-core';\nimport { AllWindowObservables, TimestampedEvent } from './network-capture-plugin';\nimport { AMPLITUDE_NETWORK_REQUEST_EVENT, IS_HEADER_CAPTURE_EXPERIMENTAL } from './constants';\nimport { BodyCaptureRule } from '@amplitude/analytics-core/lib/esm/types/network-tracking';\n\nconst DEFAULT_STATUS_CODE_RANGE = '500-599';\n\nfunction wildcardMatch(str: string, pattern: string) {\n // Escape all regex special characters except for *\n const escapedPattern = pattern.replace(/[-[\\]{}()+?.,\\\\^$|#\\s]/g, '\\\\$&');\n // Replace * with .*\n const regexPattern = '^' + escapedPattern.replace(/\\*/g, '.*') + '$';\n const regex = new RegExp(regexPattern);\n return regex.test(str);\n}\n\nfunction isStatusCodeInRange(statusCode: number, range: string) {\n const ranges = range.split(',');\n for (const r of ranges) {\n const [start, end] = r.split('-').map(Number);\n if (statusCode === start && end === undefined) {\n return true;\n }\n if (statusCode >= start && statusCode <= end) {\n return true;\n }\n }\n return false;\n}\n\nfunction isCaptureRuleMatch(\n rule: NetworkCaptureRule,\n hostname: string,\n status?: number,\n url?: string,\n method?: string,\n) {\n // check if the host is in the allowed hosts\n if (rule.hosts && !rule.hosts.find((host: string) => wildcardMatch(hostname, host))) {\n return;\n }\n\n // check if the URL is in the allowed URL patterns\n if (url && rule.urls && !isUrlMatchAllowlist(url, rule.urls)) {\n return;\n }\n\n // check if the method is in the allowed methods\n if (\n method &&\n rule.methods &&\n !rule.methods.find(\n (allowedMethod: string) => method.toLowerCase() === allowedMethod.toLowerCase() || allowedMethod === '*',\n )\n ) {\n return;\n }\n\n // check if the status code is in the allowed range\n if (status || status === 0) {\n const statusCodeRange = rule.statusCodeRange || DEFAULT_STATUS_CODE_RANGE;\n if (!isStatusCodeInRange(status, statusCodeRange)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction parseUrl(url: string | undefined) {\n if (!url) {\n return;\n }\n try {\n /* istanbul ignore next */\n const currentHref = getGlobalScope()?.location.href;\n const urlObj = new URL(url, currentHref);\n const query = urlObj.searchParams.toString();\n const fragment = urlObj.hash.replace('#', '');\n const href = urlObj.href;\n const host = urlObj.host;\n urlObj.hash = '';\n urlObj.search = '';\n const hrefWithoutQueryOrHash = urlObj.href;\n return { query, fragment, href, hrefWithoutQueryOrHash, host };\n } catch (e) {\n /* istanbul ignore next */\n return;\n }\n}\n\nfunction isAmplitudeNetworkRequestEvent(host: string, requestWrapper: IRequestWrapper): boolean {\n if (host.includes('amplitude.com')) {\n try {\n const body = requestWrapper.body;\n if (typeof body !== 'string') {\n return false;\n }\n const bodyObj = JSON.parse(body) as { events: any[] };\n const { events } = bodyObj;\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access */\n if (events.find((event: any) => event.event_type === AMPLITUDE_NETWORK_REQUEST_EVENT)) {\n return true;\n }\n } catch (e) {\n // do nothing\n }\n }\n return false;\n}\n\n/**\n * Takes a user provided header capture rule and returns a\n * HeaderCaptureRule object that sets proper default values.\n *\n * @param rule - The header capture rule to parse.\n * @returns A HeaderCaptureRule object.\n */\nexport function parseHeaderCaptureRule(rule: string[] | boolean | undefined | null): string[] | undefined {\n if (typeof rule !== 'object' || rule === null) {\n // if rule is truthy or undefined, return SAFE_HEADERS\n if (rule) {\n return [...SAFE_HEADERS];\n } else if (rule === undefined) {\n /* istanbul ignore next */\n const res = IS_HEADER_CAPTURE_EXPERIMENTAL ? undefined : [...SAFE_HEADERS];\n return res;\n }\n return;\n }\n\n // if the rule is defined but empty, return undefined\n if (rule.length === 0) {\n return;\n }\n\n return rule;\n}\n\nfunction isBodyCaptureRuleEmpty(rule: BodyCaptureRule) {\n /* istanbul ignore next */\n return !rule?.allowlist?.length && !rule?.blocklist?.length;\n}\n\nexport function shouldTrackNetworkEvent(networkEvent: NetworkRequestEvent, options: NetworkTrackingOptions = {}) {\n const urlObj = parseUrl(networkEvent.url);\n /* istanbul ignore if */\n if (!urlObj) {\n // if the URL failed to parse, do not track the event\n // this is a probably impossible case that would only happen if the URL is malformed\n /* istanbul ignore next */\n return false;\n }\n const { host } = urlObj;\n\n // false if is amplitude request and not configured to track amplitude requests\n if (\n options.ignoreAmplitudeRequests !== false &&\n (wildcardMatch(host, '*.amplitude.com') || wildcardMatch(host, 'amplitude.com'))\n ) {\n return false;\n }\n\n // false if the host is in the ignore list\n if (options.ignoreHosts?.find((ignoreHost: string) => wildcardMatch(host, ignoreHost))) {\n return false;\n }\n\n // false if the status code is not 500-599 and there are no captureRules\n if (\n !options.captureRules &&\n networkEvent.status !== undefined &&\n !isStatusCodeInRange(networkEvent.status, DEFAULT_STATUS_CODE_RANGE)\n ) {\n return false;\n }\n\n if (options.captureRules) {\n // find the first capture rule, in reverse-order,\n // that is a match (true) or a miss (false)\n let isMatch: boolean | undefined;\n [...options.captureRules].reverse().find((rule) => {\n isMatch = isCaptureRuleMatch(rule, host, networkEvent.status, networkEvent.url, networkEvent.method);\n\n if (isMatch) {\n const responseHeadersRule = parseHeaderCaptureRule(rule.responseHeaders);\n if (networkEvent.responseWrapper && responseHeadersRule) {\n const responseHeaders = networkEvent.responseWrapper.headers(responseHeadersRule);\n if (responseHeaders) {\n networkEvent.responseHeaders = responseHeaders;\n }\n }\n\n // if requestHeaders rule is specified, enrich the event with the request headers\n const requestHeadersRule = parseHeaderCaptureRule(rule.requestHeaders);\n if (networkEvent.requestWrapper && requestHeadersRule) {\n const requestHeaders = networkEvent.requestWrapper.headers(requestHeadersRule);\n if (requestHeaders) {\n networkEvent.requestHeaders = requestHeaders;\n }\n }\n\n // if responseBody rule is specified, enrich the event with the response body\n if (networkEvent.responseWrapper && rule.responseBody && !isBodyCaptureRuleEmpty(rule.responseBody)) {\n networkEvent.responseBodyJson = networkEvent.responseWrapper.json(\n rule.responseBody.allowlist,\n rule.responseBody.blocklist,\n );\n }\n\n // if requestBody rule is specified, enrich the event with the request body\n if (networkEvent.requestWrapper && rule.requestBody && !isBodyCaptureRuleEmpty(rule.requestBody)) {\n networkEvent.requestBodyJson = networkEvent.requestWrapper.json(\n rule.requestBody.allowlist,\n rule.requestBody.blocklist,\n );\n }\n }\n\n return isMatch !== undefined;\n });\n\n // if we found a miss (false) or no match (undefined),\n // then do not track the event\n if (!isMatch) {\n return false;\n }\n }\n\n // skip Amplitude network requests to \"[Amplitude] Network Request\" to avoid infinite loop\n if (networkEvent.requestWrapper && isAmplitudeNetworkRequestEvent(host, networkEvent.requestWrapper)) {\n return false;\n }\n\n return true;\n}\n\nexport type NetworkAnalyticsEvent = {\n ['[Amplitude] URL']: string;\n ['[Amplitude] URL Query']?: string;\n ['[Amplitude] URL Fragment']?: string;\n ['[Amplitude] Request Method']: string;\n ['[Amplitude] Status Code']?: number;\n ['[Amplitude] Start Time']?: number; // unix timestamp\n ['[Amplitude] Completion Time']?: number; // unix timestamp\n ['[Amplitude] Duration']?: number; // completionTime - startTime (millis)\n ['[Amplitude] Request Body Size']?: number;\n ['[Amplitude] Request Headers']?: Record<string, string>;\n ['[Amplitude] Request Body']?: string;\n ['[Amplitude] Response Body Size']?: number;\n ['[Amplitude] Response Headers']?: Record<string, string>;\n ['[Amplitude] Response Body']?: string;\n ['[Amplitude] Request Type']?: 'xhr' | 'fetch';\n};\n\nexport async function logNetworkAnalyticsEvent(\n networkAnalyticsEvent: NetworkAnalyticsEvent,\n request: NetworkRequestEvent,\n amplitude: BrowserClient,\n loggerProvider?: ILogger,\n) {\n if (request.requestBodyJson || request.responseBodyJson) {\n const [requestBody, responseBody] = await Promise.all([request.requestBodyJson, request.responseBodyJson]);\n if (requestBody) {\n try {\n networkAnalyticsEvent['[Amplitude] Request Body'] = JSON.stringify(requestBody);\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.debug('Failed to stringify request body', e);\n }\n }\n if (responseBody) {\n try {\n networkAnalyticsEvent['[Amplitude] Response Body'] = JSON.stringify(responseBody);\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.debug('Failed to stringify response body');\n }\n }\n }\n /* istanbul ignore next */\n amplitude?.track(AMPLITUDE_NETWORK_REQUEST_EVENT, networkAnalyticsEvent);\n}\n\nexport function trackNetworkEvents({\n allObservables,\n networkTrackingOptions,\n amplitude,\n loggerProvider,\n}: {\n allObservables: AllWindowObservables;\n networkTrackingOptions: NetworkTrackingOptions;\n amplitude: BrowserClient;\n loggerProvider?: ILogger;\n}): Unsubscribable {\n const { networkObservable } = allObservables;\n\n const filteredNetworkObservable = networkObservable.filter((event: TimestampedEvent<NetworkRequestEvent>) => {\n // Only track network events that should be tracked\n return shouldTrackNetworkEvent(event.event as NetworkRequestEvent, networkTrackingOptions);\n });\n\n return filteredNetworkObservable.subscribe((networkEvent) => {\n const request = networkEvent.event;\n\n // convert to NetworkAnalyticsEvent\n const urlObj = parseUrl(request.url);\n /* istanbul ignore if */\n if (!urlObj) {\n // if the URL failed to parse, do not track the event\n // this is a very unlikely case, because URL() shouldn't throw an exception\n // when the URL is a valid URL\n /* istanbul ignore next */\n return;\n }\n\n const responseBodySize = request.responseWrapper?.bodySize;\n /* istanbul ignore next */\n const requestBodySize = request.requestWrapper?.bodySize;\n\n const networkAnalyticsEvent: NetworkAnalyticsEvent = {\n ['[Amplitude] URL']: urlObj.hrefWithoutQueryOrHash,\n ['[Amplitude] URL Query']: urlObj.query,\n ['[Amplitude] URL Fragment']: urlObj.fragment,\n ['[Amplitude] Request Method']: request.method,\n ['[Amplitude] Status Code']: request.status,\n ['[Amplitude] Start Time']: request.startTime,\n ['[Amplitude] Completion Time']: request.endTime,\n ['[Amplitude] Duration']: request.duration,\n ['[Amplitude] Request Body Size']: requestBodySize,\n ['[Amplitude] Response Body Size']: responseBodySize,\n ['[Amplitude] Request Type']: request.type,\n ['[Amplitude] Request Headers']: request.requestHeaders,\n ['[Amplitude] Response Headers']: request.responseHeaders,\n };\n\n // fire-and-forget promise that tracks the event\n void logNetworkAnalyticsEvent(networkAnalyticsEvent, request, amplitude, loggerProvider);\n });\n}\n","import { ILogger } from '../logger';\n\n/**\n * Checks if a given URL matches any pattern in an allowlist of URLs or regex patterns.\n * @param url - The URL to check\n * @param allowlist - Array of allowed URLs (strings) or regex patterns\n * @returns true if the URL matches any pattern in the allowlist, false otherwise\n */\nexport const isUrlMatchAllowlist = (url: string, allowlist: (string | RegExp)[] | undefined): boolean => {\n if (!allowlist || !allowlist.length) {\n return true;\n }\n return allowlist.some((allowedUrl) => {\n if (typeof allowedUrl === 'string') {\n return url === allowedUrl;\n }\n return url.match(allowedUrl);\n });\n};\n\nexport const getDecodeURI = (locationStr: string, loggerProvider?: ILogger): string => {\n let decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.error('Malformed URI sequence: ', e);\n }\n\n return decodedLocationStr;\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","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","__values","o","m","__read","r","ar","error","__spreadArray","to","from","pack","l","Array","slice","concat","SuppressedError","SAFE_HEADERS","FORBIDDEN_HEADERS","getGlobalScope","ampIntegrationContextName","globalThis","window","self","global","hex","keys","map","index","toString","padStart","UUID","a","globalScope","_a","crypto","getRandomValues","Math","random","String","replace","legacyUUID","Uint8Array","entries","_b","int","includes","join","isJsonPrimitive","json","pruneJson","allowlist","excludelist","_pruneJson","tokenizeJsonPath","ancestors","targetObject","parentObject","targetKey","keys_1","keys_1_1","key","path","hasPathMatchInList","startsWith","split","token","isPathMatch","pathMatcher","j","currentMatcher","k","allowOrExcludeList","some","RequestWrapperFetch","request","headers","allow","headersUnsafe","headersSafeCopy","isArray","forEach","headerName","headerValue","Headers","_c","_d","pruneHeaders","defineProperty","get","_bodySize","TextEncoder","getBodySize","method","exclude","safeParseAndPruneBody","RequestWrapperXhr","bodyRaw","requestHeaders","bodyUnsafe","maxEntries","bodySize","bodySafe","encode","Blob","size","URLSearchParams","ArrayBuffer","isView","byteLength","FormData","formData","total","count","ReadableStream","PRUNE_STRATEGY","ResponseWrapperFetch","response","headersSafe","headersOut_1","undefined","contentLength","parseInt","status","text","clonedResponse","clone","textPromise","timer","setTimeout","race","ResponseWrapperXhr","statusCode","headersString","getJson","headerLines","headerLines_1","headerLines_1_1","jsonBody","JSON","parse","REDACTED_VALUE","options","strategy","REMOVE","headersPruned","lowerKey","toLowerCase","find","REDACT","_e","NetworkRequestEvent","type","timestamp","startTime","url","requestWrapper","duration","responseWrapper","endTime","toSerializable","serialized","requestBodySize","responseHeaders","responseBodySize","fromEntries","filter","NetworkEventCallback","callback","id","NetworkObserver","logger","eventCallbacks","Map","isObserving","isSupported","fetch","subscribe","eventCallback","set","originalXhrOpen","XMLHttpRequest","open","originalXhrSend","_f","send","originalXhrSetRequestHeader","_j","_h","_g","setRequestHeader","observeXhr","originalFetch","_k","observeFetch","unsubscribe","delete","triggerEventCallbacks","event","_this","err","debug","handleNetworkRequestEvent","requestType","requestInfo","typedError","durationStart","isRequest","parsedUrl","URL","protocol","host","pathname","search","hash","name","message","floor","performance","now","requestEvent","getTimestamps","Date","requestInit","timestamps","originalResponse","originalError","err_1","createXhrJsonParser","xhrUnsafe","context","responseType","structuredClone","responseText","Error","xhrProto","networkObserverContext","args","_i","$$AmplitudeAnalyticsEvent","xhrSafe","addEventListener","getAllResponseHeaders","getResponseHeader","networkObserver","_createForOfIteratorHelperLoose","allowArrayLike","it","bind","minLen","_arrayLikeToArray","constructor","test","_unsupportedIterableToArray","arr","len","arr2","_defineProperties","target","props","descriptor","enumerable","configurable","writable","_createClass","Constructor","protoProps","staticProps","hasSymbols","hasSymbol","Boolean","getSymbol","observable","SymbolIterator","SymbolObservable","SymbolSpecies","getMethod","obj","getSpecies","ctor","Observable","isObservable","x","hostReportError","log","enqueue","fn","cleanupSubscription","subscription","cleanup","_cleanup","closeSubscription","_observer","_queue","_state","notifySubscription","observer","onNotify","queue","flushSubscription","Subscription","subscriber","subscriptionObserver","SubscriptionObserver","_subscription","_proto2","complete","_subscriber","_proto3","_this2","_this3","reduce","_this4","C","hasSeed","hasValue","acc","first","_this5","_len","sources","_key","startNext","flatMap","_this6","subscriptions","outer","inner","indexOf","splice","completeIfDone","closed","_step","_iterator","item","of","_len2","items","_key2","symbol","ObservablesEnum","AMPLITUDE_NETWORK_REQUEST_EVENT","DEFAULT_STATUS_CODE_RANGE","wildcardMatch","str","pattern","regexPattern","RegExp","isStatusCodeInRange","range","ranges","ranges_1","ranges_1_1","Number","start","end","parseUrl","currentHref","location","href","urlObj","query","searchParams","fragment","hrefWithoutQueryOrHash","parseHeaderCaptureRule","rule","isBodyCaptureRuleEmpty","blocklist","shouldTrackNetworkEvent","networkEvent","isMatch_1","ignoreAmplitudeRequests","ignoreHosts","ignoreHost","captureRules","reverse","hostname","hosts","urls","allowedUrl","match","isUrlMatchAllowlist","methods","allowedMethod","statusCodeRange","isCaptureRuleMatch","responseHeadersRule","requestHeadersRule","responseBody","responseBodyJson","requestBody","requestBodyJson","events","event_type","isAmplitudeNetworkRequestEvent","trackNetworkEvents","allObservables","networkTrackingOptions","amplitude","loggerProvider","networkObservable","networkAnalyticsEvent","all","stringify","track","logNetworkAnalyticsEvent","networkCapturePlugin","createObservables","eventWithProperties","addAdditionalEventProperties","NetworkObservable","setup","config","document","execute","teardown"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.7.6";
1
+ export declare const VERSION = "1.7.8";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amplitude/plugin-network-capture-browser",
3
- "version": "1.7.6",
3
+ "version": "1.7.8",
4
4
  "description": "",
5
5
  "author": "Amplitude Inc",
6
6
  "homepage": "https://github.com/amplitude/Amplitude-TypeScript",
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "tslib": "^2.4.1",
25
- "@amplitude/analytics-core": "2.36.0"
25
+ "@amplitude/analytics-core": "2.37.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@aws-sdk/client-s3": "^3.229.0",
@@ -33,6 +33,7 @@
33
33
  "rollup": "^2.79.1",
34
34
  "rollup-plugin-execute": "^1.1.1",
35
35
  "rollup-plugin-gzip": "^3.1.0",
36
+ "rollup-plugin-sourcemaps": "^0.6.3",
36
37
  "rollup-plugin-terser": "^7.0.2"
37
38
  },
38
39
  "files": [