@sudo-ping-pong/prism-expo-client 0.1.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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +182 -0
  3. package/dist/buffer.d.ts +8 -0
  4. package/dist/buffer.d.ts.map +1 -0
  5. package/dist/buffer.js +19 -0
  6. package/dist/buffer.js.map +1 -0
  7. package/dist/capture.d.ts +5 -0
  8. package/dist/capture.d.ts.map +1 -0
  9. package/dist/capture.js +36 -0
  10. package/dist/capture.js.map +1 -0
  11. package/dist/command-handler.d.ts +2 -0
  12. package/dist/command-handler.d.ts.map +1 -0
  13. package/dist/command-handler.js +14 -0
  14. package/dist/command-handler.js.map +1 -0
  15. package/dist/config.d.ts +22 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +15 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/index.d.ts +38 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +103 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/middleware/redux.d.ts +28 -0
  24. package/dist/middleware/redux.d.ts.map +1 -0
  25. package/dist/middleware/redux.js +94 -0
  26. package/dist/middleware/redux.js.map +1 -0
  27. package/dist/middleware/zustand.d.ts +11 -0
  28. package/dist/middleware/zustand.d.ts.map +1 -0
  29. package/dist/middleware/zustand.js +37 -0
  30. package/dist/middleware/zustand.js.map +1 -0
  31. package/dist/patches/axios.d.ts +4 -0
  32. package/dist/patches/axios.d.ts.map +1 -0
  33. package/dist/patches/axios.js +140 -0
  34. package/dist/patches/axios.js.map +1 -0
  35. package/dist/patches/capture-guard.d.ts +5 -0
  36. package/dist/patches/capture-guard.d.ts.map +1 -0
  37. package/dist/patches/capture-guard.js +24 -0
  38. package/dist/patches/capture-guard.js.map +1 -0
  39. package/dist/patches/console.d.ts +2 -0
  40. package/dist/patches/console.d.ts.map +1 -0
  41. package/dist/patches/console.js +21 -0
  42. package/dist/patches/console.js.map +1 -0
  43. package/dist/patches/fetch.d.ts +4 -0
  44. package/dist/patches/fetch.d.ts.map +1 -0
  45. package/dist/patches/fetch.js +106 -0
  46. package/dist/patches/fetch.js.map +1 -0
  47. package/dist/patches/xhr.d.ts +2 -0
  48. package/dist/patches/xhr.d.ts.map +1 -0
  49. package/dist/patches/xhr.js +74 -0
  50. package/dist/patches/xhr.js.map +1 -0
  51. package/dist/profiler.d.ts +9 -0
  52. package/dist/profiler.d.ts.map +1 -0
  53. package/dist/profiler.js +19 -0
  54. package/dist/profiler.js.map +1 -0
  55. package/dist/transport-registry.d.ts +8 -0
  56. package/dist/transport-registry.d.ts.map +1 -0
  57. package/dist/transport-registry.js +11 -0
  58. package/dist/transport-registry.js.map +1 -0
  59. package/dist/transport.d.ts +38 -0
  60. package/dist/transport.d.ts.map +1 -0
  61. package/dist/transport.js +153 -0
  62. package/dist/transport.js.map +1 -0
  63. package/package.json +111 -0
  64. package/src/buffer.ts +23 -0
  65. package/src/capture.ts +40 -0
  66. package/src/command-handler.ts +15 -0
  67. package/src/config.ts +29 -0
  68. package/src/env.d.ts +1 -0
  69. package/src/index.ts +148 -0
  70. package/src/middleware/redux.ts +126 -0
  71. package/src/middleware/zustand.ts +58 -0
  72. package/src/patches/axios.ts +182 -0
  73. package/src/patches/capture-guard.ts +24 -0
  74. package/src/patches/console.ts +27 -0
  75. package/src/patches/fetch.ts +118 -0
  76. package/src/patches/xhr.ts +103 -0
  77. package/src/profiler.tsx +36 -0
  78. package/src/transport-registry.ts +20 -0
  79. package/src/transport.ts +198 -0
@@ -0,0 +1,11 @@
1
+ export interface PrismZustandOptions {
2
+ storeId?: string;
3
+ }
4
+ type SetState<T> = (partial: T | Partial<T> | ((state: T) => T | Partial<T>), replace?: boolean, actionName?: string) => void;
5
+ type StateCreator<T> = (set: SetState<T>, get: () => T, api: unknown) => T;
6
+ /**
7
+ * Wrap a Zustand StateCreator to capture state mutations in Prism.
8
+ */
9
+ export declare function prismZustandMiddleware<T>(storeIdOrOptions?: string | PrismZustandOptions): (creator: StateCreator<T>) => StateCreator<T>;
10
+ export {};
11
+ //# sourceMappingURL=zustand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zustand.d.ts","sourceRoot":"","sources":["../../src/middleware/zustand.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,QAAQ,CAAC,CAAC,IAAI,CACjB,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EACxD,OAAO,CAAC,EAAE,OAAO,EACjB,UAAU,CAAC,EAAE,MAAM,KAChB,IAAI,CAAC;AAEV,KAAK,YAAY,CAAC,CAAC,IAAI,CACrB,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,CAAC,EACZ,GAAG,EAAE,OAAO,KACT,CAAC,CAAC;AAEP;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,mBAAmB,IAM/E,SAAS,YAAY,CAAC,CAAC,CAAC,KAAG,YAAY,CAAC,CAAC,CAAC,CAqBnD"}
@@ -0,0 +1,37 @@
1
+ import { captureStateEvent } from '../capture';
2
+ /**
3
+ * Wrap a Zustand StateCreator to capture state mutations in Prism.
4
+ */
5
+ export function prismZustandMiddleware(storeIdOrOptions) {
6
+ const storeId = typeof storeIdOrOptions === 'string'
7
+ ? storeIdOrOptions
8
+ : (storeIdOrOptions?.storeId ?? 'default');
9
+ return (creator) => {
10
+ return (set, get, api) => {
11
+ const wrappedSet = (partial, replace, actionName) => {
12
+ const prevState = get();
13
+ set(partial, replace);
14
+ const nextState = get();
15
+ const payload = {
16
+ actionLabel: actionName ?? 'anonymous',
17
+ payload: typeof partial === 'function' ? '(function)' : partial,
18
+ prevState: structuredCloneSafe(prevState),
19
+ nextState: structuredCloneSafe(nextState),
20
+ storeId,
21
+ source: 'zustand',
22
+ };
23
+ captureStateEvent(payload);
24
+ };
25
+ return creator(wrappedSet, get, api);
26
+ };
27
+ };
28
+ }
29
+ function structuredCloneSafe(value) {
30
+ try {
31
+ return JSON.parse(JSON.stringify(value));
32
+ }
33
+ catch {
34
+ return value;
35
+ }
36
+ }
37
+ //# sourceMappingURL=zustand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zustand.js","sourceRoot":"","sources":["../../src/middleware/zustand.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAkB/C;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAI,gBAA+C;IACvF,MAAM,OAAO,GACX,OAAO,gBAAgB,KAAK,QAAQ;QAClC,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,CAAC,gBAAgB,EAAE,OAAO,IAAI,SAAS,CAAC,CAAC;IAE/C,OAAO,CAAC,OAAwB,EAAmB,EAAE;QACnD,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACvB,MAAM,UAAU,GAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;gBAC/D,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;gBACxB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACtB,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC;gBAExB,MAAM,OAAO,GAAiB;oBAC5B,WAAW,EAAE,UAAU,IAAI,WAAW;oBACtC,OAAO,EAAE,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO;oBAC/D,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC;oBACzC,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC;oBACzC,OAAO;oBACP,MAAM,EAAE,SAAS;iBAClB,CAAC;gBACF,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC,CAAC;YAEF,OAAO,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAI,KAAQ;IACtC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAM,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AxiosStatic } from 'axios';
2
+ export declare function installAxiosPatch(axiosModule?: AxiosStatic): () => void;
3
+ export declare function isAxiosNetworkCaptureActive(): boolean;
4
+ //# sourceMappingURL=axios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios.d.ts","sourceRoot":"","sources":["../../src/patches/axios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,WAAW,EAEZ,MAAM,OAAO,CAAC;AA0Jf,wBAAgB,iBAAiB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,MAAM,IAAI,CAiBvE;AAED,wBAAgB,2BAA2B,IAAI,OAAO,CAErD"}
@@ -0,0 +1,140 @@
1
+ import { captureNetworkEvent } from '../capture';
2
+ import { runWithoutNetworkCaptureAsync, shouldSkipNetworkCapture } from './capture-guard';
3
+ import { headersToRecord } from './fetch';
4
+ const patchedInstances = new WeakSet();
5
+ const requestMeta = new WeakMap();
6
+ function serializeBody(data) {
7
+ if (data == null)
8
+ return undefined;
9
+ if (typeof data === 'string')
10
+ return data;
11
+ if (typeof URLSearchParams !== 'undefined' && data instanceof URLSearchParams) {
12
+ return data.toString();
13
+ }
14
+ if (typeof FormData !== 'undefined' && data instanceof FormData) {
15
+ const parts = [];
16
+ data.forEach((value, key) => parts.push(`${key}=${String(value)}`));
17
+ return parts.join('&');
18
+ }
19
+ try {
20
+ return JSON.stringify(data);
21
+ }
22
+ catch {
23
+ return String(data);
24
+ }
25
+ }
26
+ function flattenHeaders(headers) {
27
+ if (!headers)
28
+ return {};
29
+ if (typeof headers.toJSON === 'function') {
30
+ return headers.toJSON();
31
+ }
32
+ return headersToRecord(headers);
33
+ }
34
+ function resolveUrl(config) {
35
+ const url = config.url ?? '';
36
+ if (/^https?:\/\//i.test(url))
37
+ return url;
38
+ const base = config.baseURL ?? '';
39
+ if (!base)
40
+ return url;
41
+ return `${base.replace(/\/$/, '')}/${url.replace(/^\//, '')}`;
42
+ }
43
+ function captureFromMeta(meta, status, statusText, responseHeaders, responseBody) {
44
+ const payload = {
45
+ method: meta.method,
46
+ url: meta.url,
47
+ status,
48
+ statusText,
49
+ requestHeaders: meta.requestHeaders,
50
+ responseHeaders,
51
+ requestBody: meta.requestBody,
52
+ responseBody,
53
+ durationMs: Date.now() - meta.start,
54
+ initiator: 'axios',
55
+ };
56
+ captureNetworkEvent(payload);
57
+ }
58
+ function captureFromResponse(response) {
59
+ const meta = requestMeta.get(response.config);
60
+ if (!meta)
61
+ return;
62
+ const responseHeaders = flattenHeaders(response.headers);
63
+ const responseBody = serializeBody(response.data);
64
+ captureFromMeta(meta, response.status, response.statusText, responseHeaders, responseBody);
65
+ requestMeta.delete(response.config);
66
+ }
67
+ function captureFromError(error) {
68
+ const config = error.config;
69
+ if (!config)
70
+ return;
71
+ const meta = requestMeta.get(config);
72
+ if (!meta)
73
+ return;
74
+ if (error.response) {
75
+ const responseHeaders = flattenHeaders(error.response.headers);
76
+ captureFromMeta(meta, error.response.status, error.response.statusText, responseHeaders, serializeBody(error.response.data));
77
+ }
78
+ else {
79
+ captureFromMeta(meta, 0, error.message || 'Network Error', {}, undefined);
80
+ }
81
+ requestMeta.delete(config);
82
+ }
83
+ function patchAxiosInstance(instance) {
84
+ if (patchedInstances.has(instance))
85
+ return;
86
+ patchedInstances.add(instance);
87
+ instance.interceptors.request.use((config) => {
88
+ requestMeta.set(config, {
89
+ start: Date.now(),
90
+ method: (config.method ?? 'get').toUpperCase(),
91
+ url: resolveUrl(config),
92
+ requestHeaders: flattenHeaders(config.headers),
93
+ requestBody: serializeBody(config.data),
94
+ });
95
+ return config;
96
+ });
97
+ instance.interceptors.response.use((response) => {
98
+ captureFromResponse(response);
99
+ return response;
100
+ }, (error) => {
101
+ captureFromError(error);
102
+ return Promise.reject(error);
103
+ });
104
+ const originalRequest = instance.request.bind(instance);
105
+ instance.request = ((config) => runWithoutNetworkCaptureAsync(() => originalRequest(config)));
106
+ }
107
+ function resolveAxiosModule(axiosModule) {
108
+ if (axiosModule)
109
+ return axiosModule;
110
+ const req = globalThis.require;
111
+ if (!req)
112
+ return null;
113
+ try {
114
+ const mod = req('axios');
115
+ return ('default' in mod ? mod.default : mod);
116
+ }
117
+ catch {
118
+ return null;
119
+ }
120
+ }
121
+ export function installAxiosPatch(axiosModule) {
122
+ const axios = resolveAxiosModule(axiosModule);
123
+ if (!axios)
124
+ return () => { };
125
+ patchAxiosInstance(axios);
126
+ const originalCreate = axios.create.bind(axios);
127
+ axios.create = ((...args) => {
128
+ const instance = originalCreate(...args);
129
+ patchAxiosInstance(instance);
130
+ return instance;
131
+ });
132
+ return () => {
133
+ // Axios has no public API to remove interceptors from the default instance;
134
+ // patch is idempotent per instance for the app lifetime.
135
+ };
136
+ }
137
+ export function isAxiosNetworkCaptureActive() {
138
+ return shouldSkipNetworkCapture();
139
+ }
140
+ //# sourceMappingURL=axios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios.js","sourceRoot":"","sources":["../../src/patches/axios.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Suppress fetch/XHR patches while axios handles capture (avoids duplicate events). */
2
+ export declare function runWithoutNetworkCapture<T>(fn: () => T): T;
3
+ export declare function runWithoutNetworkCaptureAsync<T>(fn: () => Promise<T>): Promise<T>;
4
+ export declare function shouldSkipNetworkCapture(): boolean;
5
+ //# sourceMappingURL=capture-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-guard.d.ts","sourceRoot":"","sources":["../../src/patches/capture-guard.ts"],"names":[],"mappings":"AAEA,wFAAwF;AACxF,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAO1D;AAED,wBAAsB,6BAA6B,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOvF;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAElD"}
@@ -0,0 +1,24 @@
1
+ let depth = 0;
2
+ /** Suppress fetch/XHR patches while axios handles capture (avoids duplicate events). */
3
+ export function runWithoutNetworkCapture(fn) {
4
+ depth += 1;
5
+ try {
6
+ return fn();
7
+ }
8
+ finally {
9
+ depth -= 1;
10
+ }
11
+ }
12
+ export async function runWithoutNetworkCaptureAsync(fn) {
13
+ depth += 1;
14
+ try {
15
+ return await fn();
16
+ }
17
+ finally {
18
+ depth -= 1;
19
+ }
20
+ }
21
+ export function shouldSkipNetworkCapture() {
22
+ return depth > 0;
23
+ }
24
+ //# sourceMappingURL=capture-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-guard.js","sourceRoot":"","sources":["../../src/patches/capture-guard.ts"],"names":[],"mappings":"AAAA,IAAI,KAAK,GAAG,CAAC,CAAC;AAEd,wFAAwF;AACxF,MAAM,UAAU,wBAAwB,CAAI,EAAW;IACrD,KAAK,IAAI,CAAC,CAAC;IACX,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAI,EAAoB;IACzE,KAAK,IAAI,CAAC,CAAC;IACX,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,KAAK,GAAG,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function installConsolePatch(): () => void;
2
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/patches/console.ts"],"names":[],"mappings":"AAOA,wBAAgB,mBAAmB,IAAI,MAAM,IAAI,CAmBhD"}
@@ -0,0 +1,21 @@
1
+ import { captureLogEvent } from '../capture';
2
+ const LEVELS = ['log', 'warn', 'error'];
3
+ export function installConsolePatch() {
4
+ const originals = new Map();
5
+ for (const level of LEVELS) {
6
+ const original = console[level].bind(console);
7
+ originals.set(level, original);
8
+ console[level] = (...args) => {
9
+ original(...args);
10
+ captureLogEvent(level, args);
11
+ };
12
+ }
13
+ return () => {
14
+ for (const level of LEVELS) {
15
+ const original = originals.get(level);
16
+ if (original)
17
+ console[level] = original;
18
+ }
19
+ };
20
+ }
21
+ //# sourceMappingURL=console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/patches/console.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,MAAM,GAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,MAAM,UAAU,mBAAmB;IACjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAc,CAAC;QAC3D,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE/B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE;YACtC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YAClB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,EAAE;QACV,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,QAA8B,CAAC;QAChE,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function headersToRecord(headers: Headers | Record<string, string> | undefined): Record<string, string>;
2
+ export declare function bodyToString(body: unknown): Promise<string | undefined>;
3
+ export declare function installFetchPatch(): () => void;
4
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/patches/fetch.ts"],"names":[],"mappings":"AAIA,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GACpD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB7E;AAED,wBAAgB,iBAAiB,IAAI,MAAM,IAAI,CAiF9C"}
@@ -0,0 +1,106 @@
1
+ import { captureNetworkEvent } from '../capture';
2
+ import { shouldSkipNetworkCapture } from './capture-guard';
3
+ export function headersToRecord(headers) {
4
+ if (!headers)
5
+ return {};
6
+ if (headers instanceof Headers) {
7
+ const record = {};
8
+ headers.forEach((value, key) => {
9
+ record[key] = value;
10
+ });
11
+ return record;
12
+ }
13
+ return { ...headers };
14
+ }
15
+ export async function bodyToString(body) {
16
+ if (body == null)
17
+ return undefined;
18
+ if (typeof body === 'string')
19
+ return body;
20
+ if (body instanceof FormData) {
21
+ const parts = [];
22
+ body.forEach((value, key) => {
23
+ parts.push(`${key}=${String(value)}`);
24
+ });
25
+ return parts.join('&');
26
+ }
27
+ if (body instanceof URLSearchParams)
28
+ return body.toString();
29
+ try {
30
+ return JSON.stringify(body);
31
+ }
32
+ catch {
33
+ return String(body);
34
+ }
35
+ }
36
+ export function installFetchPatch() {
37
+ const originalFetch = globalThis.fetch;
38
+ globalThis.fetch = async function patchedFetch(input, init) {
39
+ if (shouldSkipNetworkCapture()) {
40
+ return originalFetch(input, init);
41
+ }
42
+ const start = Date.now();
43
+ const url = typeof input === 'string'
44
+ ? input
45
+ : input instanceof URL
46
+ ? input.href
47
+ : input.url;
48
+ const method = init?.method ?? (input instanceof Request ? input.method : 'GET');
49
+ let requestHeaders = {};
50
+ let requestBody;
51
+ if (input instanceof Request) {
52
+ requestHeaders = headersToRecord(input.headers);
53
+ }
54
+ if (init?.headers) {
55
+ requestHeaders = { ...requestHeaders, ...headersToRecord(init.headers) };
56
+ }
57
+ requestBody = await bodyToString(init?.body);
58
+ let response;
59
+ let error;
60
+ try {
61
+ response = await originalFetch(input, init);
62
+ }
63
+ catch (err) {
64
+ error = err;
65
+ const payload = {
66
+ method: method.toUpperCase(),
67
+ url,
68
+ status: 0,
69
+ statusText: 'Network Error',
70
+ requestHeaders,
71
+ responseHeaders: {},
72
+ requestBody,
73
+ durationMs: Date.now() - start,
74
+ initiator: 'fetch',
75
+ };
76
+ captureNetworkEvent(payload);
77
+ throw err;
78
+ }
79
+ const cloned = response.clone();
80
+ let responseBody;
81
+ try {
82
+ responseBody = await cloned.text();
83
+ }
84
+ catch {
85
+ responseBody = undefined;
86
+ }
87
+ const payload = {
88
+ method: method.toUpperCase(),
89
+ url,
90
+ status: response.status,
91
+ statusText: response.statusText,
92
+ requestHeaders,
93
+ responseHeaders: headersToRecord(response.headers),
94
+ requestBody,
95
+ responseBody,
96
+ durationMs: Date.now() - start,
97
+ initiator: 'fetch',
98
+ };
99
+ captureNetworkEvent(payload);
100
+ return response;
101
+ };
102
+ return () => {
103
+ globalThis.fetch = originalFetch;
104
+ };
105
+ }
106
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/patches/fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function installXhrPatch(): () => void;
2
+ //# sourceMappingURL=xhr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhr.d.ts","sourceRoot":"","sources":["../../src/patches/xhr.ts"],"names":[],"mappings":"AAQA,wBAAgB,eAAe,IAAI,MAAM,IAAI,CA8F5C"}
@@ -0,0 +1,74 @@
1
+ import { captureNetworkEvent } from '../capture';
2
+ import { shouldSkipNetworkCapture } from './capture-guard';
3
+ export function installXhrPatch() {
4
+ const originalOpen = XMLHttpRequest.prototype.open;
5
+ const originalSend = XMLHttpRequest.prototype.send;
6
+ const originalSetHeader = XMLHttpRequest.prototype.setRequestHeader;
7
+ XMLHttpRequest.prototype.open = function (method, url, async, username, password) {
8
+ this._prism = {
9
+ method: method.toUpperCase(),
10
+ url: typeof url === 'string' ? url : url.href,
11
+ headers: {},
12
+ start: 0,
13
+ };
14
+ return originalOpen.call(this, method, url, async ?? true, username, password);
15
+ };
16
+ XMLHttpRequest.prototype.setRequestHeader = function (name, value) {
17
+ const prism = this._prism;
18
+ if (prism)
19
+ prism.headers[name] = value;
20
+ return originalSetHeader.call(this, name, value);
21
+ };
22
+ XMLHttpRequest.prototype.send = function (body) {
23
+ if (shouldSkipNetworkCapture()) {
24
+ return originalSend.call(this, body);
25
+ }
26
+ const prism = this._prism;
27
+ if (prism) {
28
+ prism.start = Date.now();
29
+ }
30
+ const requestBody = body == null
31
+ ? undefined
32
+ : typeof body === 'string'
33
+ ? body
34
+ : body instanceof URLSearchParams
35
+ ? body.toString()
36
+ : String(body);
37
+ const onLoadEnd = () => {
38
+ if (!prism)
39
+ return;
40
+ let responseHeaders = {};
41
+ const raw = this.getAllResponseHeaders();
42
+ if (raw) {
43
+ raw.split('\r\n').forEach((line) => {
44
+ const idx = line.indexOf(':');
45
+ if (idx > 0) {
46
+ responseHeaders[line.slice(0, idx).trim()] = line.slice(idx + 1).trim();
47
+ }
48
+ });
49
+ }
50
+ const payload = {
51
+ method: prism.method,
52
+ url: prism.url,
53
+ status: this.status,
54
+ statusText: this.statusText,
55
+ requestHeaders: prism.headers,
56
+ responseHeaders,
57
+ requestBody,
58
+ responseBody: this.responseType === '' || this.responseType === 'text' ? String(this.responseText ?? '') : undefined,
59
+ durationMs: Date.now() - prism.start,
60
+ initiator: 'xhr',
61
+ };
62
+ captureNetworkEvent(payload);
63
+ this.removeEventListener('loadend', onLoadEnd);
64
+ };
65
+ this.addEventListener('loadend', onLoadEnd);
66
+ return originalSend.call(this, body);
67
+ };
68
+ return () => {
69
+ XMLHttpRequest.prototype.open = originalOpen;
70
+ XMLHttpRequest.prototype.send = originalSend;
71
+ XMLHttpRequest.prototype.setRequestHeader = originalSetHeader;
72
+ };
73
+ }
74
+ //# sourceMappingURL=xhr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhr.js","sourceRoot":"","sources":["../../src/patches/xhr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface PrismProfilerProps {
3
+ /** Component label shown in the performance timeline */
4
+ id: string;
5
+ children: ReactNode;
6
+ }
7
+ /** Wrap a subtree to capture React render timings in Prism DevTools. */
8
+ export declare function PrismProfiler({ id, children }: PrismProfilerProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=profiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiler.d.ts","sourceRoot":"","sources":["../src/profiler.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,SAAS,CAAC;CACrB;AAkBD,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAMjE"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Profiler } from 'react';
3
+ import { createEnvelope } from '@sudo-ping-pong/prism-protocol';
4
+ import { sendToPrism } from './transport-registry';
5
+ const onRender = (id, phase, actualDuration, baseDuration) => {
6
+ const payload = {
7
+ type: 'render',
8
+ componentId: id,
9
+ phase: phase === 'mount' ? 'mount' : phase === 'update' ? 'update' : 'nested-update',
10
+ actualDurationMs: actualDuration,
11
+ baseDurationMs: baseDuration,
12
+ };
13
+ sendToPrism(createEnvelope('PERFORMANCE', payload));
14
+ };
15
+ /** Wrap a subtree to capture React render timings in Prism DevTools. */
16
+ export function PrismProfiler({ id, children }) {
17
+ return (_jsx(Profiler, { id: id, onRender: onRender, children: children }));
18
+ }
19
+ //# sourceMappingURL=profiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiler.js","sourceRoot":"","sources":["../src/profiler.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAiC,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAQnD,MAAM,QAAQ,GAA6B,CACzC,EAAE,EACF,KAAK,EACL,cAAc,EACd,YAAY,EACZ,EAAE;IACF,MAAM,OAAO,GAAuB;QAClC,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe;QACpF,gBAAgB,EAAE,cAAc;QAChC,cAAc,EAAE,YAAY;KAC7B,CAAC;IACF,WAAW,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,wEAAwE;AACxE,MAAM,UAAU,aAAa,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAsB;IAChE,OAAO,CACL,KAAC,QAAQ,IAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,YACjC,QAAQ,GACA,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { PrismEnvelope } from '@sudo-ping-pong/prism-protocol';
2
+ export interface PrismTransportSink {
3
+ send(envelope: PrismEnvelope): void;
4
+ }
5
+ export declare function setActiveTransport(transport: PrismTransportSink | null): void;
6
+ export declare function getActiveTransport(): PrismTransportSink | null;
7
+ export declare function sendToPrism(envelope: PrismEnvelope): void;
8
+ //# sourceMappingURL=transport-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-registry.d.ts","sourceRoot":"","sources":["../src/transport-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAGpE,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;CACrC;AAID,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAE7E;AAED,wBAAgB,kBAAkB,IAAI,kBAAkB,GAAG,IAAI,CAE9D;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAEzD"}
@@ -0,0 +1,11 @@
1
+ let activeTransport = null;
2
+ export function setActiveTransport(transport) {
3
+ activeTransport = transport;
4
+ }
5
+ export function getActiveTransport() {
6
+ return activeTransport;
7
+ }
8
+ export function sendToPrism(envelope) {
9
+ activeTransport?.send(envelope);
10
+ }
11
+ //# sourceMappingURL=transport-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-registry.js","sourceRoot":"","sources":["../src/transport-registry.ts"],"names":[],"mappings":"AAOA,IAAI,eAAe,GAA8B,IAAI,CAAC;AAEtD,MAAM,UAAU,kBAAkB,CAAC,SAAoC;IACrE,eAAe,GAAG,SAAS,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAuB;IACjD,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { PrismEnvelope } from '@sudo-ping-pong/prism-protocol';
2
+ export interface TransportOptions {
3
+ host: string;
4
+ port: number;
5
+ onConnect?: () => void;
6
+ onDisconnect?: () => void;
7
+ onError?: (error: PrismTransportError) => void;
8
+ }
9
+ export type PrismTransportError = {
10
+ type: 'auth';
11
+ message: string;
12
+ } | {
13
+ type: 'network';
14
+ message: string;
15
+ } | {
16
+ type: 'unavailable';
17
+ message: string;
18
+ };
19
+ export declare class PrismTransport {
20
+ private ws;
21
+ private readonly buffer;
22
+ private reconnectTimer;
23
+ private readonly options;
24
+ private connected;
25
+ private destroyed;
26
+ private authFailed;
27
+ private reconnectAttempts;
28
+ constructor(options: TransportOptions);
29
+ connect(): void;
30
+ send(envelope: PrismEnvelope): void;
31
+ disconnect(): void;
32
+ resetAuthFailure(): void;
33
+ get isConnected(): boolean;
34
+ get hasAuthFailed(): boolean;
35
+ private flushBuffer;
36
+ private scheduleReconnect;
37
+ }
38
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,gCAAgC,CAAC;AAKvF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAe7C,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAK;gBAElB,OAAO,EAAE,gBAAgB;IAIrC,OAAO,IAAI,IAAI;IAoFf,IAAI,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAcnC,UAAU,IAAI,IAAI;IAelB,gBAAgB,IAAI,IAAI;IAMxB,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,iBAAiB;CAW1B"}