ray-logger-core 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/collectors/console.d.ts +9 -0
  2. package/collectors/console.d.ts.map +1 -0
  3. package/collectors/console.js +51 -0
  4. package/collectors/console.js.map +1 -0
  5. package/collectors/cookie.d.ts +9 -0
  6. package/collectors/cookie.d.ts.map +1 -0
  7. package/collectors/cookie.js +162 -0
  8. package/collectors/cookie.js.map +1 -0
  9. package/collectors/error.d.ts +8 -0
  10. package/collectors/error.d.ts.map +1 -0
  11. package/collectors/error.js +47 -0
  12. package/collectors/error.js.map +1 -0
  13. package/collectors/network/fetch.d.ts +9 -0
  14. package/collectors/network/fetch.d.ts.map +1 -0
  15. package/collectors/network/fetch.js +182 -0
  16. package/collectors/network/fetch.js.map +1 -0
  17. package/collectors/network/xhr.d.ts +8 -0
  18. package/collectors/network/xhr.d.ts.map +1 -0
  19. package/collectors/network/xhr.js +187 -0
  20. package/collectors/network/xhr.js.map +1 -0
  21. package/collectors/rrweb.d.ts +8 -0
  22. package/collectors/rrweb.d.ts.map +1 -0
  23. package/collectors/rrweb.js +41 -0
  24. package/collectors/rrweb.js.map +1 -0
  25. package/collectors/storage.d.ts +9 -0
  26. package/collectors/storage.d.ts.map +1 -0
  27. package/collectors/storage.js +139 -0
  28. package/collectors/storage.js.map +1 -0
  29. package/collectors/types.d.ts +2 -0
  30. package/collectors/types.d.ts.map +1 -0
  31. package/collectors/types.js +2 -0
  32. package/collectors/types.js.map +1 -0
  33. package/controller.d.ts +22 -0
  34. package/controller.d.ts.map +1 -0
  35. package/controller.js +218 -0
  36. package/controller.js.map +1 -0
  37. package/index.d.ts +10 -0
  38. package/index.d.ts.map +1 -0
  39. package/index.js +1559 -0
  40. package/index.js.map +1 -0
  41. package/package.json +20 -0
  42. package/session.d.ts +13 -0
  43. package/session.d.ts.map +1 -0
  44. package/session.js +77 -0
  45. package/session.js.map +1 -0
  46. package/storage/idb.d.ts +40 -0
  47. package/storage/idb.d.ts.map +1 -0
  48. package/storage/idb.js +182 -0
  49. package/storage/idb.js.map +1 -0
  50. package/timeline.d.ts +23 -0
  51. package/timeline.d.ts.map +1 -0
  52. package/timeline.js +64 -0
  53. package/timeline.js.map +1 -0
  54. package/types.d.ts +181 -0
  55. package/types.d.ts.map +1 -0
  56. package/types.js +28 -0
  57. package/types.js.map +1 -0
  58. package/utils/console-stack.d.ts +12 -0
  59. package/utils/console-stack.d.ts.map +1 -0
  60. package/utils/console-stack.js +141 -0
  61. package/utils/console-stack.js.map +1 -0
  62. package/utils/serialize.d.ts +4 -0
  63. package/utils/serialize.d.ts.map +1 -0
  64. package/utils/serialize.js +57 -0
  65. package/utils/serialize.js.map +1 -0
@@ -0,0 +1,9 @@
1
+ import type { NewWebLoggerEvent } from '../types';
2
+ import type { CollectorDispose } from './types';
3
+ export interface ConsoleCollectorOptions {
4
+ record(event: NewWebLoggerEvent): void;
5
+ consoleRef?: Console;
6
+ recordConsoleCallSite?: boolean;
7
+ }
8
+ export declare function installConsoleCollector(options: ConsoleCollectorOptions): CollectorDispose;
9
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/collectors/console.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAIlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,GAAG,gBAAgB,CA6C1F"}
@@ -0,0 +1,51 @@
1
+ import { CONSOLE_CAPTURE_METHODS } from '../types';
2
+ import { serializeArgs } from '../utils/serialize';
3
+ import { deriveConsoleLocationFields } from '../utils/console-stack';
4
+ export function installConsoleCollector(options) {
5
+ const consoleRef = options.consoleRef ?? globalThis.console;
6
+ if (!consoleRef) {
7
+ return noop;
8
+ }
9
+ const sink = consoleRef;
10
+ const originals = new Map();
11
+ for (const method of CONSOLE_CAPTURE_METHODS) {
12
+ const native = sink[method];
13
+ if (typeof native !== 'function') {
14
+ continue;
15
+ }
16
+ const impl = native;
17
+ originals.set(method, impl);
18
+ sink[method] = (...args) => {
19
+ const stack = options.recordConsoleCallSite !== false ? captureStackString() : undefined;
20
+ void impl.apply(consoleRef, args);
21
+ try {
22
+ const locationFields = stack !== undefined ? deriveConsoleLocationFields({ stack, method }) : {};
23
+ options.record({
24
+ type: 'console',
25
+ payload: {
26
+ level: method,
27
+ args: serializeArgs(args),
28
+ ...locationFields,
29
+ },
30
+ });
31
+ }
32
+ catch {
33
+ // Console 行为不应因采集失败而受影响。
34
+ }
35
+ };
36
+ }
37
+ return () => {
38
+ for (const [method, impl] of originals) {
39
+ sink[method] = impl;
40
+ }
41
+ };
42
+ }
43
+ function noop() {
44
+ // noop
45
+ }
46
+ /** 在调用原生 console 方法**之前**截取栈,才能包含业务调用者;实现需极轻量。 */
47
+ function captureStackString() {
48
+ const err = new Error();
49
+ return err.stack;
50
+ }
51
+ //# sourceMappingURL=console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/collectors/console.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAA6B,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AASrE,MAAM,UAAU,uBAAuB,CAAC,OAAgC;IACtE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,UAAgD,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyD,CAAC;IAEnF,KAAK,MAAM,MAAM,IAAI,uBAAuB,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,MAAyC,CAAC;QACvD,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,OAAO,CAAC,qBAAqB,KAAK,KAAK,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACzF,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAElC,IAAI,CAAC;gBACH,MAAM,cAAc,GAClB,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,2BAA2B,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAE5E,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE;wBACP,KAAK,EAAE,MAAM;wBACb,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;wBACzB,GAAG,cAAc;qBAClB;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,EAAE;QACV,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,IAAI;IACX,OAAO;AACT,CAAC;AAED,kDAAkD;AAClD,SAAS,kBAAkB;IACzB,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IACxB,OAAO,GAAG,CAAC,KAAK,CAAC;AACnB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { NewWebLoggerEvent, WebLoggerConfig } from '../types';
2
+ import type { CollectorDispose } from './types';
3
+ export interface CookieCollectorOptions {
4
+ config: WebLoggerConfig;
5
+ record(event: NewWebLoggerEvent): void;
6
+ documentRef?: Document;
7
+ }
8
+ export declare function installCookieCollector(options: CookieCollectorOptions): CollectorDispose;
9
+ //# sourceMappingURL=cookie.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../../src/collectors/cookie.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,iBAAiB,EACjB,eAAe,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,QAAQ,CAAC;CACxB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,gBAAgB,CA+BxF"}
@@ -0,0 +1,162 @@
1
+ export function installCookieCollector(options) {
2
+ const documentRef = options.documentRef ?? (typeof document !== 'undefined' ? document : undefined);
3
+ if (!documentRef) {
4
+ return noop;
5
+ }
6
+ recordCookieSnapshot(options.record, documentRef, options.config);
7
+ const descriptorOwner = findCookieDescriptorOwner(documentRef);
8
+ const descriptor = descriptorOwner
9
+ ? Object.getOwnPropertyDescriptor(descriptorOwner, 'cookie')
10
+ : undefined;
11
+ if (!descriptorOwner || !descriptor?.set || !descriptor.configurable) {
12
+ return noop;
13
+ }
14
+ Object.defineProperty(descriptorOwner, 'cookie', {
15
+ configurable: descriptor.configurable,
16
+ enumerable: descriptor.enumerable,
17
+ get: descriptor.get,
18
+ set(value) {
19
+ descriptor.set?.call(this, value);
20
+ recordCookieWrite(options.record, value, options.config);
21
+ },
22
+ });
23
+ return () => {
24
+ Object.defineProperty(descriptorOwner, 'cookie', descriptor);
25
+ };
26
+ }
27
+ function recordCookieSnapshot(record, documentRef, config) {
28
+ const snapshot = readCookieSnapshot(documentRef, config);
29
+ if (!snapshot || (snapshot.cookies.length === 0 && snapshot.skipped.length === 0)) {
30
+ return;
31
+ }
32
+ record({
33
+ type: 'cookie',
34
+ payload: {
35
+ op: 'snapshot',
36
+ cookies: snapshot.cookies,
37
+ ...(snapshot.skipped.length > 0 ? { skipped: snapshot.skipped } : {}),
38
+ },
39
+ });
40
+ }
41
+ function readCookieSnapshot(documentRef, config) {
42
+ let rawCookie = '';
43
+ try {
44
+ rawCookie = documentRef.cookie;
45
+ }
46
+ catch {
47
+ return undefined;
48
+ }
49
+ if (!rawCookie) {
50
+ return { cookies: [], skipped: [] };
51
+ }
52
+ const cookies = [];
53
+ const skipped = [];
54
+ for (const rawPair of rawCookie.split(';')) {
55
+ const pair = rawPair.trim();
56
+ const separatorIndex = pair.indexOf('=');
57
+ if (separatorIndex <= 0) {
58
+ continue;
59
+ }
60
+ const name = pair.slice(0, separatorIndex).trim();
61
+ const value = pair.slice(separatorIndex + 1).trim();
62
+ if (!name) {
63
+ continue;
64
+ }
65
+ if (shouldSkipCookie(name, config)) {
66
+ skipped.push({ name, reason: 'disallowed' });
67
+ continue;
68
+ }
69
+ cookies.push({ name, value });
70
+ }
71
+ return { cookies, skipped };
72
+ }
73
+ function recordCookieWrite(record, rawCookie, config) {
74
+ const parsed = parseCookieWrite(rawCookie);
75
+ if (!parsed || shouldSkipCookie(parsed.name, config)) {
76
+ return;
77
+ }
78
+ record({
79
+ type: 'cookie',
80
+ payload: {
81
+ name: parsed.name,
82
+ value: parsed.value,
83
+ op: parsed.isDelete ? 'delete' : 'set',
84
+ ...(parsed.domain ? { domain: parsed.domain } : {}),
85
+ ...(parsed.expires ? { expires: parsed.expires } : {}),
86
+ ...(parsed.maxAge ? { maxAge: parsed.maxAge } : {}),
87
+ },
88
+ });
89
+ }
90
+ function parseCookieWrite(rawCookie) {
91
+ const [pair = '', ...attrs] = rawCookie.split(';');
92
+ const separatorIndex = pair.indexOf('=');
93
+ if (separatorIndex <= 0) {
94
+ return undefined;
95
+ }
96
+ const name = pair.slice(0, separatorIndex).trim();
97
+ const value = pair.slice(separatorIndex + 1).trim();
98
+ if (!name) {
99
+ return undefined;
100
+ }
101
+ return {
102
+ name,
103
+ value,
104
+ isDelete: isDeleteCookie(value, attrs),
105
+ ...parseCookieAttrs(attrs),
106
+ };
107
+ }
108
+ function parseCookieAttrs(attrs) {
109
+ const parsed = {};
110
+ for (const attr of attrs) {
111
+ const separatorIndex = attr.indexOf('=');
112
+ const rawKey = separatorIndex >= 0 ? attr.slice(0, separatorIndex) : attr;
113
+ const rawValue = separatorIndex >= 0 ? attr.slice(separatorIndex + 1) : '';
114
+ const key = rawKey.trim().toLowerCase();
115
+ const value = rawValue.trim();
116
+ if (key === 'domain' && value) {
117
+ parsed.domain = value;
118
+ }
119
+ else if (key === 'expires' && value) {
120
+ parsed.expires = value;
121
+ }
122
+ else if (key === 'max-age' && value) {
123
+ parsed.maxAge = value;
124
+ }
125
+ }
126
+ return parsed;
127
+ }
128
+ function isDeleteCookie(value, attrs) {
129
+ for (const attr of attrs) {
130
+ const [rawKey = '', rawValue = ''] = attr.split('=');
131
+ const key = rawKey.trim().toLowerCase();
132
+ const attrValue = rawValue.trim();
133
+ if (key === 'max-age' && Number(attrValue) <= 0) {
134
+ return true;
135
+ }
136
+ if (key === 'expires') {
137
+ const expiresAt = Date.parse(attrValue);
138
+ if (Number.isFinite(expiresAt) && expiresAt <= Date.now()) {
139
+ return true;
140
+ }
141
+ }
142
+ }
143
+ return value === '' && attrs.length > 0;
144
+ }
145
+ function shouldSkipCookie(name, config) {
146
+ return new Set(config.disallowRecordCookieKeys ?? []).has(name);
147
+ }
148
+ function findCookieDescriptorOwner(documentRef) {
149
+ let proto = Object.getPrototypeOf(documentRef);
150
+ while (proto) {
151
+ const descriptor = Object.getOwnPropertyDescriptor(proto, 'cookie');
152
+ if (descriptor) {
153
+ return proto;
154
+ }
155
+ proto = Object.getPrototypeOf(proto);
156
+ }
157
+ return undefined;
158
+ }
159
+ function noop() {
160
+ // noop
161
+ }
162
+ //# sourceMappingURL=cookie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../src/collectors/cookie.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { NewWebLoggerEvent } from '../types';
2
+ import type { CollectorDispose } from './types';
3
+ export interface ErrorCollectorOptions {
4
+ record(event: NewWebLoggerEvent): void;
5
+ windowRef?: Window;
6
+ }
7
+ export declare function installErrorCollector(options: ErrorCollectorOptions): CollectorDispose;
8
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/collectors/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,gBAAgB,CAkCtF"}
@@ -0,0 +1,47 @@
1
+ export function installErrorCollector(options) {
2
+ const windowRef = options.windowRef ?? (typeof window !== 'undefined' ? window : undefined);
3
+ if (!windowRef) {
4
+ return noop;
5
+ }
6
+ const previousOnError = windowRef.onerror;
7
+ const onErrorEvent = (event) => {
8
+ recordError(options.record, event.error, event.message, event.filename);
9
+ };
10
+ const onUnhandledRejection = (event) => {
11
+ recordError(options.record, event.reason, 'Unhandled promise rejection');
12
+ };
13
+ windowRef.onerror = (message, source, lineno, colno, error) => {
14
+ recordError(options.record, error, String(message), source ? String(source) : undefined);
15
+ if (typeof previousOnError === 'function') {
16
+ return previousOnError.call(windowRef, message, source, lineno, colno, error);
17
+ }
18
+ return previousOnError ?? false;
19
+ };
20
+ windowRef.addEventListener('error', onErrorEvent);
21
+ windowRef.addEventListener('unhandledrejection', onUnhandledRejection);
22
+ return () => {
23
+ windowRef.onerror = previousOnError;
24
+ windowRef.removeEventListener('error', onErrorEvent);
25
+ windowRef.removeEventListener('unhandledrejection', onUnhandledRejection);
26
+ };
27
+ }
28
+ function recordError(record, errorLike, fallbackMessage, source) {
29
+ try {
30
+ const error = errorLike instanceof Error ? errorLike : undefined;
31
+ record({
32
+ type: 'error',
33
+ payload: {
34
+ message: error?.message || fallbackMessage,
35
+ ...(error?.stack ? { stack: error.stack } : {}),
36
+ ...(source ? { source } : {}),
37
+ },
38
+ });
39
+ }
40
+ catch {
41
+ // 全局错误处理不能再抛异常,避免影响宿主错误链路。
42
+ }
43
+ }
44
+ function noop() {
45
+ // noop
46
+ }
47
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/collectors/error.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,qBAAqB,CAAC,OAA8B;IAClE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5F,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC;IAE1C,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,EAAE;QACzC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1E,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,CAAC,KAA4B,EAAE,EAAE;QAC5D,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;IAC3E,CAAC,CAAC;IAEF,SAAS,CAAC,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC5D,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEzF,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE,CAAC;YAC1C,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,eAAe,IAAI,KAAK,CAAC;IAClC,CAAC,CAAC;IAEF,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAClD,SAAS,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;IAEvE,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,OAAO,GAAG,eAAe,CAAC;QACpC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACrD,SAAS,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;IAC5E,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,MAA0C,EAC1C,SAAkB,EAClB,eAAuB,EACvB,MAAe;IAEf,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,MAAM,CAAC;YACL,IAAI,EAAE,OAAO;YACb,OAAO,EAAE;gBACP,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,eAAe;gBAC1C,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9B;SACF,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,OAAO;AACT,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { NewWebLoggerEvent, WebLoggerConfig } from '../../types';
2
+ import type { CollectorDispose } from '../types';
3
+ export interface FetchCollectorOptions {
4
+ config: WebLoggerConfig;
5
+ record(event: NewWebLoggerEvent): void;
6
+ fetchRef?: typeof fetch;
7
+ }
8
+ export declare function installFetchCollector(options: FetchCollectorOptions): CollectorDispose;
9
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/collectors/network/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,KAAK,CAAC;CACzB;AAID,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,gBAAgB,CA2CtF"}
@@ -0,0 +1,182 @@
1
+ export function installFetchCollector(options) {
2
+ const originalFetch = options.fetchRef ?? globalThis.fetch;
3
+ if (typeof originalFetch !== 'function' || typeof globalThis.fetch !== 'function') {
4
+ return noop;
5
+ }
6
+ globalThis.fetch = (async (input, init) => {
7
+ const startedAt = Date.now();
8
+ const requestInfo = await createRequestInfo(input, init, options.config);
9
+ try {
10
+ const response = await originalFetch.call(globalThis, input, init);
11
+ const durationMs = Date.now() - startedAt;
12
+ void recordSuccess(options.record, requestInfo, response, durationMs, options.config);
13
+ return response;
14
+ }
15
+ catch (error) {
16
+ options.record({
17
+ type: 'network',
18
+ payload: {
19
+ outcome: 'failed',
20
+ url: requestInfo.url,
21
+ method: requestInfo.method,
22
+ durationMs: Date.now() - startedAt,
23
+ error: normalizeNetworkError(error),
24
+ ...(requestInfo.bodySkippedReason
25
+ ? { bodySkippedReason: requestInfo.bodySkippedReason }
26
+ : {}),
27
+ },
28
+ });
29
+ throw error;
30
+ }
31
+ });
32
+ return () => {
33
+ if (globalThis.fetch === originalFetch) {
34
+ return;
35
+ }
36
+ globalThis.fetch = originalFetch;
37
+ };
38
+ }
39
+ async function createRequestInfo(input, init, config) {
40
+ const request = input instanceof Request ? input : undefined;
41
+ const method = normalizeMethod(init?.method ?? request?.method ?? 'GET');
42
+ const url = sanitizeUrl(getInputUrl(input), config.disallowRecordSearches);
43
+ const headers = config.enableRecordRequestHeaders === false
44
+ ? undefined
45
+ : headersToRecord(init?.headers ?? request?.headers, config.disallowRecordRequestHeaders);
46
+ const bodyInfo = await readRequestBody(input, init, config);
47
+ return {
48
+ url,
49
+ method,
50
+ ...(headers ? { headers } : {}),
51
+ ...bodyInfo,
52
+ };
53
+ }
54
+ async function recordSuccess(record, requestInfo, response, durationMs, config) {
55
+ const responseBody = await readResponseBody(response, config);
56
+ const bodySkippedReason = requestInfo.bodySkippedReason ?? responseBody.bodySkippedReason;
57
+ record({
58
+ type: 'network',
59
+ payload: {
60
+ outcome: 'success',
61
+ url: requestInfo.url,
62
+ method: requestInfo.method,
63
+ status: response.status,
64
+ durationMs,
65
+ ...(requestInfo.headers ? { requestHeaders: requestInfo.headers } : {}),
66
+ ...(config.enableRecordResponseHeaders === false
67
+ ? {}
68
+ : {
69
+ responseHeaders: headersToRecord(response.headers, config.disallowRecordResponseHeaders),
70
+ }),
71
+ ...(requestInfo.body !== undefined ? { requestBody: requestInfo.body } : {}),
72
+ ...(responseBody.body !== undefined ? { responseBody: responseBody.body } : {}),
73
+ ...(bodySkippedReason ? { bodySkippedReason } : {}),
74
+ },
75
+ });
76
+ }
77
+ function getInputUrl(input) {
78
+ if (typeof input === 'string') {
79
+ return input;
80
+ }
81
+ if (input instanceof URL) {
82
+ return input.toString();
83
+ }
84
+ return input.url;
85
+ }
86
+ function sanitizeUrl(url, disallowSearches) {
87
+ if (!disallowSearches?.length) {
88
+ return url;
89
+ }
90
+ try {
91
+ const parsed = new URL(url, globalThis.location?.href);
92
+ for (const key of disallowSearches) {
93
+ parsed.searchParams.delete(key);
94
+ }
95
+ return parsed.toString();
96
+ }
97
+ catch {
98
+ return url;
99
+ }
100
+ }
101
+ function headersToRecord(headersInit, disallowHeaders) {
102
+ if (!headersInit) {
103
+ return undefined;
104
+ }
105
+ const disallowed = new Set((disallowHeaders ?? []).map((header) => header.toLowerCase()));
106
+ const headers = new Headers(headersInit);
107
+ const result = {};
108
+ headers.forEach((value, key) => {
109
+ if (!disallowed.has(key.toLowerCase())) {
110
+ result[key] = value;
111
+ }
112
+ });
113
+ return result;
114
+ }
115
+ async function readRequestBody(input, init, config) {
116
+ if (config.enableRecordRequestBody === false) {
117
+ return { bodySkippedReason: 'request-body-disabled' };
118
+ }
119
+ if (init?.body) {
120
+ return bodyInitToString(init.body);
121
+ }
122
+ if (input instanceof Request && input.body) {
123
+ try {
124
+ return { body: await input.clone().text() };
125
+ }
126
+ catch {
127
+ return { bodySkippedReason: 'request-body-unreadable' };
128
+ }
129
+ }
130
+ return { body: null };
131
+ }
132
+ async function readResponseBody(response, config) {
133
+ if (config.enableRecordResponseBody === false) {
134
+ return { bodySkippedReason: 'response-body-disabled' };
135
+ }
136
+ try {
137
+ return { body: await response.clone().text() };
138
+ }
139
+ catch {
140
+ return { bodySkippedReason: 'response-body-unreadable' };
141
+ }
142
+ }
143
+ async function bodyInitToString(body) {
144
+ if (typeof body === 'string') {
145
+ return { body };
146
+ }
147
+ if (body instanceof URLSearchParams) {
148
+ return { body: body.toString() };
149
+ }
150
+ if (body instanceof Blob) {
151
+ return { body: await body.text() };
152
+ }
153
+ if (body instanceof FormData) {
154
+ return { bodySkippedReason: 'request-body-form-data' };
155
+ }
156
+ if (body instanceof ArrayBuffer) {
157
+ return { bodySkippedReason: 'request-body-binary' };
158
+ }
159
+ if (ArrayBuffer.isView(body)) {
160
+ return { bodySkippedReason: 'request-body-binary' };
161
+ }
162
+ if (body instanceof ReadableStream) {
163
+ return { bodySkippedReason: 'request-body-stream' };
164
+ }
165
+ return { bodySkippedReason: 'request-body-unknown' };
166
+ }
167
+ function normalizeMethod(method) {
168
+ return method.toUpperCase();
169
+ }
170
+ function normalizeNetworkError(error) {
171
+ if (error instanceof DOMException) {
172
+ return { message: error.message, name: error.name, code: error.code };
173
+ }
174
+ if (error instanceof Error) {
175
+ return { message: error.message, name: error.name };
176
+ }
177
+ return { message: String(error) };
178
+ }
179
+ function noop() {
180
+ // noop
181
+ }
182
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/collectors/network/fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { NewWebLoggerEvent, WebLoggerConfig } from '../../types';
2
+ import type { CollectorDispose } from '../types';
3
+ export interface XhrCollectorOptions {
4
+ config: WebLoggerConfig;
5
+ record(event: NewWebLoggerEvent): void;
6
+ }
7
+ export declare function installXhrCollector(options: XhrCollectorOptions): CollectorDispose;
8
+ //# sourceMappingURL=xhr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhr.d.ts","sourceRoot":"","sources":["../../../src/collectors/network/xhr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACxC;AAaD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,gBAAgB,CA0FlF"}