@amplitude/analytics-core 2.12.0 → 2.13.0-networkcaptureprerelease.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,141 @@
1
+ type BlobSafe = {
2
+ size: number;
3
+ };
4
+ type ArrayBufferSafe = {
5
+ byteLength: number;
6
+ };
7
+ type ArrayBufferViewSafe = {
8
+ byteLength: number;
9
+ };
10
+ type URLSearchParamsSafe = {
11
+ toString(): string;
12
+ };
13
+ type FormDataEntryValueSafe = string | BlobSafe | null;
14
+ type BodyInitSafe = string | Blob | ArrayBufferSafe | FormDataSafe | URLSearchParamsSafe | ArrayBufferViewSafe | null | undefined;
15
+ type HeadersRequestSafe = {
16
+ entries(): IterableIterator<[string, string]>;
17
+ forEach(callbackfn: (value: string, key: string) => void): void;
18
+ };
19
+ type HeadersResponseSafe = {
20
+ get(name: string): string | null;
21
+ forEach(callbackfn: (value: string, key: string) => void): void;
22
+ };
23
+ type HeadersInitSafe = HeadersRequestSafe | Record<string, string> | string[][];
24
+ type ResponseSafe = {
25
+ status: number;
26
+ headers: HeadersResponseSafe | undefined;
27
+ };
28
+ export type RequestInitSafe = {
29
+ method?: string;
30
+ headers?: HeadersInitSafe;
31
+ body?: BodyInitSafe;
32
+ };
33
+ export interface FormDataSafe {
34
+ entries(): IterableIterator<[string, FormDataEntryValueSafe]>;
35
+ }
36
+ export type XMLHttpRequestBodyInitSafe = BlobSafe | FormDataSafe | URLSearchParamsSafe | string;
37
+ export type FetchRequestBody = string | BlobSafe | ArrayBufferSafe | FormDataSafe | URLSearchParamsSafe | ArrayBufferViewSafe | null | undefined;
38
+ export interface IRequestWrapper {
39
+ headers?: Record<string, string>;
40
+ bodySize?: number;
41
+ method?: string;
42
+ body?: FetchRequestBody | XMLHttpRequestBodyInitSafe | null;
43
+ }
44
+ export declare const MAXIMUM_ENTRIES = 100;
45
+ /**
46
+ * This class encapsulates the RequestInit (https://developer.mozilla.org/en-US/docs/Web/API/RequestInit)
47
+ * object so that the consumer can only get access to the headers, method and body size.
48
+ *
49
+ * This is to prevent consumers from directly accessing the Request object
50
+ * and mutating it or running costly operations on it.
51
+ *
52
+ * IMPORTANT:
53
+ * * Do not make changes to this class without careful consideration
54
+ * of performance implications, memory usage and potential to mutate the customer's
55
+ * request.
56
+ * * NEVER .clone() the RequestInit object. This will 2x's the memory overhead of the request
57
+ * * NEVER: call .arrayBuffer(), text(), json() or any other method on the body that
58
+ * consumes the body's stream. This will cause the response to be consumed
59
+ * meaning the body will be empty when the customer tries to access it.
60
+ * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream
61
+ * never call any of the methods on it)
62
+ */
63
+ export declare class RequestWrapperFetch implements IRequestWrapper {
64
+ private request;
65
+ private _headers;
66
+ private _bodySize;
67
+ constructor(request: RequestInitSafe);
68
+ get headers(): Record<string, string> | undefined;
69
+ get bodySize(): number | undefined;
70
+ get method(): string | undefined;
71
+ }
72
+ export declare class RequestWrapperXhr implements IRequestWrapper {
73
+ readonly body: XMLHttpRequestBodyInitSafe | null;
74
+ constructor(body: XMLHttpRequestBodyInitSafe | null);
75
+ get bodySize(): number | undefined;
76
+ }
77
+ export interface IResponseWrapper {
78
+ headers?: Record<string, string>;
79
+ bodySize?: number;
80
+ status?: number;
81
+ body?: string | Blob | ReadableStream | ArrayBuffer | FormDataSafe | URLSearchParams | ArrayBufferView | null;
82
+ }
83
+ /**
84
+ * This class encapsulates the Fetch API Response object
85
+ * (https://developer.mozilla.org/en-US/docs/Web/API/Response) so that the consumer can
86
+ * only get access to the headers and body size.
87
+ *
88
+ * This is to prevent consumers from directly accessing the Response object
89
+ * and mutating it or running costly operations on it.
90
+ *
91
+ * IMPORTANT:
92
+ * * Do not make changes to this class without careful consideration
93
+ * of performance implications, memory usage and potential to mutate the customer's
94
+ * response.
95
+ * * NEVER .clone() the Response object. This will 2x's the memory overhead of the response
96
+ * * NEVER consume the body's stream. This will cause the response to be consumed
97
+ * meaning the body will be empty when the customer tries to access it.
98
+ * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream
99
+ * never call any of the methods on it)
100
+ */
101
+ export declare class ResponseWrapperFetch implements IResponseWrapper {
102
+ private response;
103
+ private _headers;
104
+ private _bodySize;
105
+ constructor(response: ResponseSafe);
106
+ get headers(): Record<string, string> | undefined;
107
+ get bodySize(): number | undefined;
108
+ get status(): number;
109
+ }
110
+ export declare class ResponseWrapperXhr implements IResponseWrapper {
111
+ readonly statusCode: number;
112
+ readonly headersString: string;
113
+ readonly size: number | undefined;
114
+ constructor(statusCode: number, headersString: string, size: number | undefined);
115
+ get bodySize(): number | undefined;
116
+ get status(): number;
117
+ get headers(): Record<string, string> | undefined;
118
+ }
119
+ export declare class NetworkRequestEvent {
120
+ readonly type: 'xhr' | 'fetch';
121
+ readonly method: string;
122
+ readonly timestamp: number;
123
+ readonly startTime: number;
124
+ readonly url?: string | undefined;
125
+ readonly requestWrapper?: IRequestWrapper | undefined;
126
+ readonly status?: number | undefined;
127
+ readonly duration?: number | undefined;
128
+ readonly responseWrapper?: IResponseWrapper | undefined;
129
+ readonly error?: {
130
+ name: string;
131
+ message: string;
132
+ } | undefined;
133
+ readonly endTime?: number | undefined;
134
+ constructor(type: 'xhr' | 'fetch', method: string, timestamp: number, startTime: number, url?: string | undefined, requestWrapper?: IRequestWrapper | undefined, status?: number | undefined, duration?: number | undefined, responseWrapper?: IResponseWrapper | undefined, error?: {
135
+ name: string;
136
+ message: string;
137
+ } | undefined, endTime?: number | undefined);
138
+ toSerializable(): Record<string, any>;
139
+ }
140
+ export {};
141
+ //# sourceMappingURL=network-request-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-request-event.d.ts","sourceRoot":"","sources":["../../src/network-request-event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,329 @@
1
+ import { __read, __values } from "tslib";
2
+ import { getGlobalScope } from './global-scope';
3
+ export var MAXIMUM_ENTRIES = 100;
4
+ /**
5
+ * This class encapsulates the RequestInit (https://developer.mozilla.org/en-US/docs/Web/API/RequestInit)
6
+ * object so that the consumer can only get access to the headers, method and body size.
7
+ *
8
+ * This is to prevent consumers from directly accessing the Request object
9
+ * and mutating it or running costly operations on it.
10
+ *
11
+ * IMPORTANT:
12
+ * * Do not make changes to this class without careful consideration
13
+ * of performance implications, memory usage and potential to mutate the customer's
14
+ * request.
15
+ * * NEVER .clone() the RequestInit object. This will 2x's the memory overhead of the request
16
+ * * NEVER: call .arrayBuffer(), text(), json() or any other method on the body that
17
+ * consumes the body's stream. This will cause the response to be consumed
18
+ * meaning the body will be empty when the customer tries to access it.
19
+ * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream
20
+ * never call any of the methods on it)
21
+ */
22
+ var RequestWrapperFetch = /** @class */ (function () {
23
+ function RequestWrapperFetch(request) {
24
+ this.request = request;
25
+ }
26
+ Object.defineProperty(RequestWrapperFetch.prototype, "headers", {
27
+ get: function () {
28
+ if (this._headers)
29
+ return this._headers;
30
+ var headersUnsafe = this.request.headers;
31
+ if (Array.isArray(headersUnsafe)) {
32
+ var headers = headersUnsafe;
33
+ this._headers = headers.reduce(function (acc, _a) {
34
+ var _b = __read(_a, 2), key = _b[0], value = _b[1];
35
+ acc[key] = value;
36
+ return acc;
37
+ }, {});
38
+ }
39
+ else if (headersUnsafe instanceof Headers) {
40
+ var headersSafe = headersUnsafe;
41
+ var headersObj_1 = {};
42
+ headersSafe.forEach(function (value, key) {
43
+ headersObj_1[key] = value;
44
+ });
45
+ this._headers = headersObj_1;
46
+ }
47
+ else if (typeof headersUnsafe === 'object') {
48
+ this._headers = headersUnsafe;
49
+ }
50
+ return this._headers;
51
+ },
52
+ enumerable: false,
53
+ configurable: true
54
+ });
55
+ Object.defineProperty(RequestWrapperFetch.prototype, "bodySize", {
56
+ get: function () {
57
+ if (typeof this._bodySize === 'number')
58
+ return this._bodySize;
59
+ var global = getGlobalScope();
60
+ /* istanbul ignore if */
61
+ if (!(global === null || global === void 0 ? void 0 : global.TextEncoder)) {
62
+ return;
63
+ }
64
+ var body = this.request.body;
65
+ this._bodySize = getBodySize(body, MAXIMUM_ENTRIES);
66
+ return this._bodySize;
67
+ },
68
+ enumerable: false,
69
+ configurable: true
70
+ });
71
+ Object.defineProperty(RequestWrapperFetch.prototype, "method", {
72
+ get: function () {
73
+ return this.request.method;
74
+ },
75
+ enumerable: false,
76
+ configurable: true
77
+ });
78
+ return RequestWrapperFetch;
79
+ }());
80
+ export { RequestWrapperFetch };
81
+ var RequestWrapperXhr = /** @class */ (function () {
82
+ function RequestWrapperXhr(body) {
83
+ this.body = body;
84
+ }
85
+ Object.defineProperty(RequestWrapperXhr.prototype, "bodySize", {
86
+ get: function () {
87
+ return getBodySize(this.body, MAXIMUM_ENTRIES);
88
+ },
89
+ enumerable: false,
90
+ configurable: true
91
+ });
92
+ return RequestWrapperXhr;
93
+ }());
94
+ export { RequestWrapperXhr };
95
+ function getBodySize(bodyUnsafe, maxEntries) {
96
+ var e_1, _a;
97
+ var bodySize;
98
+ var global = getGlobalScope();
99
+ /* istanbul ignore next */
100
+ var TextEncoder = global === null || global === void 0 ? void 0 : global.TextEncoder;
101
+ /* istanbul ignore next */
102
+ if (!TextEncoder) {
103
+ return;
104
+ }
105
+ var bodySafe;
106
+ if (typeof bodyUnsafe === 'string') {
107
+ bodySafe = bodyUnsafe;
108
+ bodySize = new TextEncoder().encode(bodySafe).length;
109
+ }
110
+ else if (bodyUnsafe instanceof Blob) {
111
+ bodySafe = bodyUnsafe;
112
+ bodySize = bodySafe.size;
113
+ }
114
+ else if (bodyUnsafe instanceof URLSearchParams) {
115
+ bodySafe = bodyUnsafe;
116
+ bodySize = new TextEncoder().encode(bodySafe.toString()).length;
117
+ }
118
+ else if (ArrayBuffer.isView(bodyUnsafe)) {
119
+ bodySafe = bodyUnsafe;
120
+ bodySize = bodySafe.byteLength;
121
+ }
122
+ else if (bodyUnsafe instanceof ArrayBuffer) {
123
+ bodySafe = bodyUnsafe;
124
+ bodySize = bodySafe.byteLength;
125
+ }
126
+ else if (bodyUnsafe instanceof FormData) {
127
+ // Estimating only for text parts; not accurate for files
128
+ var formData = bodyUnsafe;
129
+ var total = 0;
130
+ var count = 0;
131
+ try {
132
+ for (var _b = __values(formData.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
133
+ var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
134
+ total += key.length;
135
+ if (typeof value === 'string') {
136
+ total += new TextEncoder().encode(value).length;
137
+ }
138
+ else if (value instanceof Blob) {
139
+ total += value.size;
140
+ }
141
+ else {
142
+ // encountered an unknown type
143
+ // we can't estimate the size of this entry
144
+ return;
145
+ }
146
+ // terminate if we reach the maximum number of entries
147
+ // to avoid performance issues in case of very large FormData
148
+ if (++count >= maxEntries) {
149
+ return;
150
+ }
151
+ }
152
+ }
153
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
154
+ finally {
155
+ try {
156
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
157
+ }
158
+ finally { if (e_1) throw e_1.error; }
159
+ }
160
+ bodySize = total;
161
+ }
162
+ else if (bodyUnsafe instanceof ReadableStream) {
163
+ // If bodyUnsafe is an instanceof ReadableStream, we can't determine the size,
164
+ // without consuming it, so we return undefined.
165
+ // Never ever consume ReadableStream! DO NOT DO IT!!!
166
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
167
+ bodySafe = bodyUnsafe;
168
+ return;
169
+ }
170
+ return bodySize;
171
+ }
172
+ /**
173
+ * This class encapsulates the Fetch API Response object
174
+ * (https://developer.mozilla.org/en-US/docs/Web/API/Response) so that the consumer can
175
+ * only get access to the headers and body size.
176
+ *
177
+ * This is to prevent consumers from directly accessing the Response object
178
+ * and mutating it or running costly operations on it.
179
+ *
180
+ * IMPORTANT:
181
+ * * Do not make changes to this class without careful consideration
182
+ * of performance implications, memory usage and potential to mutate the customer's
183
+ * response.
184
+ * * NEVER .clone() the Response object. This will 2x's the memory overhead of the response
185
+ * * NEVER consume the body's stream. This will cause the response to be consumed
186
+ * meaning the body will be empty when the customer tries to access it.
187
+ * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream
188
+ * never call any of the methods on it)
189
+ */
190
+ var ResponseWrapperFetch = /** @class */ (function () {
191
+ function ResponseWrapperFetch(response) {
192
+ this.response = response;
193
+ }
194
+ Object.defineProperty(ResponseWrapperFetch.prototype, "headers", {
195
+ get: function () {
196
+ var _a;
197
+ if (this._headers)
198
+ return this._headers;
199
+ if (this.response.headers instanceof Headers) {
200
+ var headersSafe = this.response.headers;
201
+ var headersOut_1 = {};
202
+ /* istanbul ignore next */
203
+ (_a = headersSafe === null || headersSafe === void 0 ? void 0 : headersSafe.forEach) === null || _a === void 0 ? void 0 : _a.call(headersSafe, function (value, key) {
204
+ headersOut_1[key] = value;
205
+ });
206
+ this._headers = headersOut_1;
207
+ return headersOut_1;
208
+ }
209
+ return;
210
+ },
211
+ enumerable: false,
212
+ configurable: true
213
+ });
214
+ Object.defineProperty(ResponseWrapperFetch.prototype, "bodySize", {
215
+ get: function () {
216
+ var _a, _b;
217
+ if (this._bodySize !== undefined)
218
+ return this._bodySize;
219
+ /* istanbul ignore next */
220
+ 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');
221
+ var bodySize = contentLength ? parseInt(contentLength, 10) : undefined;
222
+ this._bodySize = bodySize;
223
+ return bodySize;
224
+ },
225
+ enumerable: false,
226
+ configurable: true
227
+ });
228
+ Object.defineProperty(ResponseWrapperFetch.prototype, "status", {
229
+ get: function () {
230
+ return this.response.status;
231
+ },
232
+ enumerable: false,
233
+ configurable: true
234
+ });
235
+ return ResponseWrapperFetch;
236
+ }());
237
+ export { ResponseWrapperFetch };
238
+ var ResponseWrapperXhr = /** @class */ (function () {
239
+ function ResponseWrapperXhr(statusCode, headersString, size) {
240
+ this.statusCode = statusCode;
241
+ this.headersString = headersString;
242
+ this.size = size;
243
+ }
244
+ Object.defineProperty(ResponseWrapperXhr.prototype, "bodySize", {
245
+ get: function () {
246
+ return this.size;
247
+ },
248
+ enumerable: false,
249
+ configurable: true
250
+ });
251
+ Object.defineProperty(ResponseWrapperXhr.prototype, "status", {
252
+ get: function () {
253
+ return this.statusCode;
254
+ },
255
+ enumerable: false,
256
+ configurable: true
257
+ });
258
+ Object.defineProperty(ResponseWrapperXhr.prototype, "headers", {
259
+ get: function () {
260
+ var e_2, _a;
261
+ if (!this.headersString) {
262
+ return;
263
+ }
264
+ var headers = {};
265
+ var headerLines = this.headersString.split('\r\n');
266
+ try {
267
+ for (var headerLines_1 = __values(headerLines), headerLines_1_1 = headerLines_1.next(); !headerLines_1_1.done; headerLines_1_1 = headerLines_1.next()) {
268
+ var line = headerLines_1_1.value;
269
+ var _b = __read(line.split(': '), 2), key = _b[0], value = _b[1];
270
+ if (key && value) {
271
+ headers[key] = value;
272
+ }
273
+ }
274
+ }
275
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
276
+ finally {
277
+ try {
278
+ if (headerLines_1_1 && !headerLines_1_1.done && (_a = headerLines_1.return)) _a.call(headerLines_1);
279
+ }
280
+ finally { if (e_2) throw e_2.error; }
281
+ }
282
+ return headers;
283
+ },
284
+ enumerable: false,
285
+ configurable: true
286
+ });
287
+ return ResponseWrapperXhr;
288
+ }());
289
+ export { ResponseWrapperXhr };
290
+ var NetworkRequestEvent = /** @class */ (function () {
291
+ function NetworkRequestEvent(type, method, timestamp, startTime, url, requestWrapper, status, duration, responseWrapper, error, endTime) {
292
+ this.type = type;
293
+ this.method = method;
294
+ this.timestamp = timestamp;
295
+ this.startTime = startTime;
296
+ this.url = url;
297
+ this.requestWrapper = requestWrapper;
298
+ this.status = status;
299
+ this.duration = duration;
300
+ this.responseWrapper = responseWrapper;
301
+ this.error = error;
302
+ this.endTime = endTime;
303
+ }
304
+ NetworkRequestEvent.prototype.toSerializable = function () {
305
+ var _a, _b, _c, _d;
306
+ var serialized = {
307
+ type: this.type,
308
+ method: this.method,
309
+ url: this.url,
310
+ timestamp: this.timestamp,
311
+ status: this.status,
312
+ duration: this.duration,
313
+ error: this.error,
314
+ startTime: this.startTime,
315
+ endTime: this.endTime,
316
+ requestHeaders: (_a = this.requestWrapper) === null || _a === void 0 ? void 0 : _a.headers,
317
+ requestBodySize: (_b = this.requestWrapper) === null || _b === void 0 ? void 0 : _b.bodySize,
318
+ responseHeaders: (_c = this.responseWrapper) === null || _c === void 0 ? void 0 : _c.headers,
319
+ responseBodySize: (_d = this.responseWrapper) === null || _d === void 0 ? void 0 : _d.bodySize,
320
+ };
321
+ return Object.fromEntries(Object.entries(serialized).filter(function (_a) {
322
+ var _b = __read(_a, 2), _ = _b[0], v = _b[1];
323
+ return v !== undefined;
324
+ }));
325
+ };
326
+ return NetworkRequestEvent;
327
+ }());
328
+ export { NetworkRequestEvent };
329
+ //# sourceMappingURL=network-request-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-request-event.js","sourceRoot":"","sources":["../../src/network-request-event.ts"],"names":[],"mappings":"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","sourcesContent":["import { getGlobalScope } from './global-scope';\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};\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 headers?: Record<string, string>;\n bodySize?: number;\n method?: string;\n body?: FetchRequestBody | XMLHttpRequestBodyInitSafe | 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 _headers: Record<string, string> | undefined;\n private _bodySize: number | undefined;\n constructor(private request: RequestInitSafe) {}\n\n get headers(): Record<string, string> | undefined {\n if (this._headers) return this._headers;\n\n const headersUnsafe = this.request.headers;\n if (Array.isArray(headersUnsafe)) {\n const headers = headersUnsafe;\n this._headers = headers.reduce((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {} as Record<string, string>);\n } else if (headersUnsafe instanceof Headers) {\n const headersSafe = headersUnsafe as HeadersRequestSafe;\n const headersObj: Record<string, string> = {};\n headersSafe.forEach((value, key) => {\n headersObj[key] = value;\n });\n this._headers = headersObj;\n } else if (typeof headersUnsafe === 'object') {\n this._headers = headersUnsafe as Record<string, string>;\n }\n\n return this._headers;\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\nexport class RequestWrapperXhr implements IRequestWrapper {\n constructor(readonly body: XMLHttpRequestBodyInitSafe | null) {}\n\n get bodySize(): number | undefined {\n return getBodySize(this.body as FetchRequestBody, MAXIMUM_ENTRIES);\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 interface IResponseWrapper {\n headers?: Record<string, string>;\n bodySize?: number;\n status?: number;\n body?: string | Blob | ReadableStream | ArrayBuffer | FormDataSafe | URLSearchParams | ArrayBufferView | 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 * * NEVER .clone() the Response object. This will 2x's 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 _headers: Record<string, string> | undefined;\n private _bodySize: number | undefined;\n constructor(private response: ResponseSafe) {}\n\n get headers(): Record<string, string> | undefined {\n if (this._headers) return this._headers;\n\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 this._headers = headersOut;\n return headersOut;\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\nexport class ResponseWrapperXhr implements IResponseWrapper {\n constructor(readonly statusCode: number, readonly headersString: string, readonly size: number | undefined) {}\n\n get bodySize(): number | undefined {\n return this.size;\n }\n\n get status(): number {\n return this.statusCode;\n }\n\n get headers(): 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 headers;\n }\n}\n\nexport class NetworkRequestEvent {\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,\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,\n requestBodySize: this.requestWrapper?.bodySize,\n responseHeaders: this.responseWrapper?.headers,\n responseBodySize: this.responseWrapper?.bodySize,\n };\n\n return Object.fromEntries(Object.entries(serialized).filter(([_, v]) => v !== undefined));\n }\n}\n"]}
@@ -83,6 +83,7 @@ export interface ExternalBrowserConfig extends IConfig {
83
83
  fetchRemoteConfig?: boolean;
84
84
  /**
85
85
  * Captures network requests and responses.
86
+ * @deprecated This property is deprecated. Use `autocapture.networkTracking` instead.
86
87
  * @defaultValue `undefined`
87
88
  */
88
89
  networkTrackingOptions?: NetworkTrackingOptions;
@@ -156,10 +157,10 @@ export interface AutocaptureOptions {
156
157
  */
157
158
  elementInteractions?: boolean | ElementInteractionsOptions;
158
159
  /**
159
- * Enables/disables network request tracking.
160
+ * Enables/disables network request tracking or config with detailed network tracking options.
160
161
  * @defaultValue `false`
161
162
  */
162
- networkTracking?: boolean;
163
+ networkTracking?: boolean | NetworkTrackingOptions;
163
164
  }
164
165
  export interface TrackingOptions {
165
166
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"browser-config.d.ts","sourceRoot":"","sources":["../../../src/types/browser-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-config.d.ts","sourceRoot":"","sources":["../../../src/types/browser-config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"browser-config.js","sourceRoot":"","sources":["../../../src/types/browser-config.ts"],"names":[],"mappings":"","sourcesContent":["import { UserSession } from './user-session';\nimport { IdentityStorageType, Storage } from './storage';\nimport { Transport } from './transport';\nimport { IConfig } from '../config';\nimport { ElementInteractionsOptions } from './element-interactions';\nimport { PageTrackingOptions } from './page-view-tracking';\nimport { NetworkTrackingOptions } from './network-tracking';\n\nexport interface BrowserConfig extends ExternalBrowserConfig, InternalBrowserConfig {}\n\nexport interface ExternalBrowserConfig extends IConfig {\n /**\n * An app version for events tracked. This can be the version of your application.\n * @defaultValue `undefined`\n */\n appVersion?: string;\n /**\n * @deprecated This property is deprecated and will be removed in future versions. Please migrate to using `autocapture` instead.\n * The default event tracking configuration.\n * See {@link https://www.docs.developers.amplitude.com/data/sdks/browser-2/#tracking-default-events}.\n * @defaultValue `true`\n */\n defaultTracking?: boolean | DefaultTrackingOptions;\n /**\n * The configurations for auto-captured events.\n * See {@link https://www.docs.developers.amplitude.com/data/sdks/browser-2/autocapture/}.\n */\n autocapture?: boolean | AutocaptureOptions;\n /**\n * The identifier for the device running your application.\n * @defaultValue `UUID()`\n */\n deviceId?: string;\n /**\n * Configuration for cookie.\n */\n cookieOptions?: CookieOptions;\n /**\n * The storage for user identify.\n * @defaultValue `\"cookie\"`\n */\n identityStorage?: IdentityStorageType;\n /**\n * The partner identifier.\n * Amplitude requires the customer who built an event ingestion integration to add the partner identifier to partner_id.\n * @defaultValue `undefined`\n */\n partnerId?: string;\n /**\n * The custom Session ID for the current session.\n * @defaultValue `timestamp`\n */\n sessionId?: number;\n /**\n * The period of inactivity from the last tracked event before a session expires in milliseconds.\n * @defaultValue `1,800,000` (30 minutes)\n */\n sessionTimeout: number;\n /**\n * The configurations for tracking additional properties.\n * See {@link https://www.docs.developers.amplitude.com/data/sdks/browser-2/#optional-tracking}.\n */\n trackingOptions: TrackingOptions;\n /**\n * Network transport mechanism used to send events.\n * @defaultValue `\"fetch\"`\n */\n transport?: 'fetch' | 'xhr' | 'beacon';\n /**\n * The identifier for the user being tracked.\n * @defaultValue `undefined`\n */\n userId?: string;\n /**\n * User's Nth instance of performing a default Page Viewed event within a session.\n * Used for landing page analysis.\n */\n pageCounter?: number;\n /**\n * Whether to fetch remote configuration. The remote configuration can be updated in the Amplitude platform here:\n * https://app.amplitude.com/data/amplitude/{your_org_name}/settings/autocapture\n * @defaultValue `true`\n */\n fetchRemoteConfig?: boolean;\n /**\n * Captures network requests and responses.\n * @defaultValue `undefined`\n */\n networkTrackingOptions?: NetworkTrackingOptions;\n}\n\ninterface InternalBrowserConfig {\n cookieStorage: Storage<UserSession>;\n lastEventTime?: number;\n lastEventId?: number;\n transportProvider: Transport;\n version?: string;\n}\n\n/**\n * @deprecated This interface is deprecated and will be removed in future versions. Please migrate to using `AutocaptureOptions` instead.\n */\nexport interface DefaultTrackingOptions {\n /**\n * Enables/disables marketing attribution tracking or config with detailed attribution options.\n * @defaultValue `true`\n */\n attribution?: boolean | AttributionOptions;\n /**\n * Enables/disables form downloads tracking.\n * @defaultValue `true`\n */\n fileDownloads?: boolean;\n /**\n * Enables/disables form interaction tracking.\n * @defaultValue `true`\n */\n formInteractions?: boolean;\n /**\n * Enables/disables default page view tracking.\n * @defaultValue `true`\n */\n pageViews?: boolean | PageTrackingOptions;\n /**\n * Enables/disables session tracking.\n * @defaultValue `true`\n */\n sessions?: boolean;\n}\n\nexport interface AutocaptureOptions {\n /**\n * Enables/disables marketing attribution tracking or config with detailed attribution options.\n * @defaultValue `true`\n */\n attribution?: boolean | AttributionOptions;\n /**\n * Enables/disables form downloads tracking.\n * @defaultValue `true`\n */\n fileDownloads?: boolean;\n /**\n * Enables/disables form interaction tracking.\n * @defaultValue `true`\n */\n formInteractions?: boolean;\n /**\n * Enables/disables default page view tracking.\n * @defaultValue `true`\n */\n pageViews?: boolean | PageTrackingOptions;\n /**\n * Enables/disables session tracking.\n * @defaultValue `true`\n */\n sessions?: boolean;\n /**\n * Enables/disables user interactions tracking.\n * @defaultValue `false`\n */\n elementInteractions?: boolean | ElementInteractionsOptions;\n /**\n * Enables/disables network request tracking.\n * @defaultValue `false`\n */\n networkTracking?: boolean;\n}\n\nexport interface TrackingOptions {\n /**\n * Enables/disables ip address tracking.\n * @defaultValue `true`\n */\n ipAddress?: boolean;\n /**\n * Enables/disables language tracking.\n * @defaultValue `true`\n */\n language?: boolean;\n /**\n * Enables/disables plantform tracking.\n * @defaultValue `true`\n */\n platform?: boolean;\n}\n\nexport interface AttributionOptions {\n /**\n * The rules to determine which referrers are excluded from being tracked as traffic source.\n * @defaultValue `[/your-domain\\.com$/]`\n */\n excludeReferrers?: (string | RegExp)[];\n /**\n * The value to represent undefined/no initial campaign parameter for first-touch attribution.\n * @defaultValue `\"EMPTY\"`\n */\n initialEmptyValue?: string;\n /**\n * The flag of if Amplitude to start a new session if any campaign parameter changes.\n * @defaultValue `false`\n */\n resetSessionOnNewCampaign?: boolean;\n}\n\nexport interface CookieOptions {\n /**\n * The domain property of cookies created.\n * @defaultValue `Your top level domain`\n */\n domain?: string;\n /**\n * The expiration of cookies created in days.\n * @defaultValue `365`\n */\n expiration?: number;\n /**\n * How cookies are sent with cross-site requests.\n * @defaultValue `\"Lax\"`\n */\n sameSite?: 'Strict' | 'Lax' | 'None';\n /**\n * The flag of if send cookies over secure protocols.\n * @defaultValue `false`\n */\n secure?: boolean;\n /**\n * The flag of if upgrade the cookies created by maintenance Browser SDK.\n * @defaultValue `true`\n */\n upgrade?: boolean;\n}\n\ntype HiddenOptions = 'apiKey' | 'transportProvider' | 'requestMetadata';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface BrowserOptions extends Omit<Partial<ExternalBrowserConfig>, HiddenOptions> {}\n"]}
1
+ {"version":3,"file":"browser-config.js","sourceRoot":"","sources":["../../../src/types/browser-config.ts"],"names":[],"mappings":"","sourcesContent":["import { UserSession } from './user-session';\nimport { IdentityStorageType, Storage } from './storage';\nimport { Transport } from './transport';\nimport { IConfig } from '../config';\nimport { ElementInteractionsOptions } from './element-interactions';\nimport { PageTrackingOptions } from './page-view-tracking';\nimport { NetworkTrackingOptions } from './network-tracking';\n\nexport interface BrowserConfig extends ExternalBrowserConfig, InternalBrowserConfig {}\n\nexport interface ExternalBrowserConfig extends IConfig {\n /**\n * An app version for events tracked. This can be the version of your application.\n * @defaultValue `undefined`\n */\n appVersion?: string;\n /**\n * @deprecated This property is deprecated and will be removed in future versions. Please migrate to using `autocapture` instead.\n * The default event tracking configuration.\n * See {@link https://www.docs.developers.amplitude.com/data/sdks/browser-2/#tracking-default-events}.\n * @defaultValue `true`\n */\n defaultTracking?: boolean | DefaultTrackingOptions;\n /**\n * The configurations for auto-captured events.\n * See {@link https://www.docs.developers.amplitude.com/data/sdks/browser-2/autocapture/}.\n */\n autocapture?: boolean | AutocaptureOptions;\n /**\n * The identifier for the device running your application.\n * @defaultValue `UUID()`\n */\n deviceId?: string;\n /**\n * Configuration for cookie.\n */\n cookieOptions?: CookieOptions;\n /**\n * The storage for user identify.\n * @defaultValue `\"cookie\"`\n */\n identityStorage?: IdentityStorageType;\n /**\n * The partner identifier.\n * Amplitude requires the customer who built an event ingestion integration to add the partner identifier to partner_id.\n * @defaultValue `undefined`\n */\n partnerId?: string;\n /**\n * The custom Session ID for the current session.\n * @defaultValue `timestamp`\n */\n sessionId?: number;\n /**\n * The period of inactivity from the last tracked event before a session expires in milliseconds.\n * @defaultValue `1,800,000` (30 minutes)\n */\n sessionTimeout: number;\n /**\n * The configurations for tracking additional properties.\n * See {@link https://www.docs.developers.amplitude.com/data/sdks/browser-2/#optional-tracking}.\n */\n trackingOptions: TrackingOptions;\n /**\n * Network transport mechanism used to send events.\n * @defaultValue `\"fetch\"`\n */\n transport?: 'fetch' | 'xhr' | 'beacon';\n /**\n * The identifier for the user being tracked.\n * @defaultValue `undefined`\n */\n userId?: string;\n /**\n * User's Nth instance of performing a default Page Viewed event within a session.\n * Used for landing page analysis.\n */\n pageCounter?: number;\n /**\n * Whether to fetch remote configuration. The remote configuration can be updated in the Amplitude platform here:\n * https://app.amplitude.com/data/amplitude/{your_org_name}/settings/autocapture\n * @defaultValue `true`\n */\n fetchRemoteConfig?: boolean;\n /**\n * Captures network requests and responses.\n * @deprecated This property is deprecated. Use `autocapture.networkTracking` instead.\n * @defaultValue `undefined`\n */\n networkTrackingOptions?: NetworkTrackingOptions;\n}\n\ninterface InternalBrowserConfig {\n cookieStorage: Storage<UserSession>;\n lastEventTime?: number;\n lastEventId?: number;\n transportProvider: Transport;\n version?: string;\n}\n\n/**\n * @deprecated This interface is deprecated and will be removed in future versions. Please migrate to using `AutocaptureOptions` instead.\n */\nexport interface DefaultTrackingOptions {\n /**\n * Enables/disables marketing attribution tracking or config with detailed attribution options.\n * @defaultValue `true`\n */\n attribution?: boolean | AttributionOptions;\n /**\n * Enables/disables form downloads tracking.\n * @defaultValue `true`\n */\n fileDownloads?: boolean;\n /**\n * Enables/disables form interaction tracking.\n * @defaultValue `true`\n */\n formInteractions?: boolean;\n /**\n * Enables/disables default page view tracking.\n * @defaultValue `true`\n */\n pageViews?: boolean | PageTrackingOptions;\n /**\n * Enables/disables session tracking.\n * @defaultValue `true`\n */\n sessions?: boolean;\n}\n\nexport interface AutocaptureOptions {\n /**\n * Enables/disables marketing attribution tracking or config with detailed attribution options.\n * @defaultValue `true`\n */\n attribution?: boolean | AttributionOptions;\n /**\n * Enables/disables form downloads tracking.\n * @defaultValue `true`\n */\n fileDownloads?: boolean;\n /**\n * Enables/disables form interaction tracking.\n * @defaultValue `true`\n */\n formInteractions?: boolean;\n /**\n * Enables/disables default page view tracking.\n * @defaultValue `true`\n */\n pageViews?: boolean | PageTrackingOptions;\n /**\n * Enables/disables session tracking.\n * @defaultValue `true`\n */\n sessions?: boolean;\n /**\n * Enables/disables user interactions tracking.\n * @defaultValue `false`\n */\n elementInteractions?: boolean | ElementInteractionsOptions;\n /**\n * Enables/disables network request tracking or config with detailed network tracking options.\n * @defaultValue `false`\n */\n networkTracking?: boolean | NetworkTrackingOptions;\n}\n\nexport interface TrackingOptions {\n /**\n * Enables/disables ip address tracking.\n * @defaultValue `true`\n */\n ipAddress?: boolean;\n /**\n * Enables/disables language tracking.\n * @defaultValue `true`\n */\n language?: boolean;\n /**\n * Enables/disables plantform tracking.\n * @defaultValue `true`\n */\n platform?: boolean;\n}\n\nexport interface AttributionOptions {\n /**\n * The rules to determine which referrers are excluded from being tracked as traffic source.\n * @defaultValue `[/your-domain\\.com$/]`\n */\n excludeReferrers?: (string | RegExp)[];\n /**\n * The value to represent undefined/no initial campaign parameter for first-touch attribution.\n * @defaultValue `\"EMPTY\"`\n */\n initialEmptyValue?: string;\n /**\n * The flag of if Amplitude to start a new session if any campaign parameter changes.\n * @defaultValue `false`\n */\n resetSessionOnNewCampaign?: boolean;\n}\n\nexport interface CookieOptions {\n /**\n * The domain property of cookies created.\n * @defaultValue `Your top level domain`\n */\n domain?: string;\n /**\n * The expiration of cookies created in days.\n * @defaultValue `365`\n */\n expiration?: number;\n /**\n * How cookies are sent with cross-site requests.\n * @defaultValue `\"Lax\"`\n */\n sameSite?: 'Strict' | 'Lax' | 'None';\n /**\n * The flag of if send cookies over secure protocols.\n * @defaultValue `false`\n */\n secure?: boolean;\n /**\n * The flag of if upgrade the cookies created by maintenance Browser SDK.\n * @defaultValue `true`\n */\n upgrade?: boolean;\n}\n\ntype HiddenOptions = 'apiKey' | 'transportProvider' | 'requestMetadata';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface BrowserOptions extends Omit<Partial<ExternalBrowserConfig>, HiddenOptions> {}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amplitude/analytics-core",
3
- "version": "2.12.0",
3
+ "version": "2.13.0-networkcaptureprerelease.0",
4
4
  "description": "",
5
5
  "author": "Amplitude Inc",
6
6
  "homepage": "https://github.com/amplitude/Amplitude-TypeScript",
@@ -42,5 +42,5 @@
42
42
  "files": [
43
43
  "lib"
44
44
  ],
45
- "gitHead": "86f3d3dc2abc3494a3d5a65aa6bcd33c2061f04e"
45
+ "gitHead": "bb2f049b249553e15adeb37ba2d5406ca7e57625"
46
46
  }