react-native-debug-toolkit 2.2.0 → 3.0.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.
- package/README.md +5 -8
- package/README.zh-CN.md +5 -8
- package/bin/debug-toolkit.js +114 -0
- package/lib/commonjs/features/network/index.js +32 -12
- package/lib/commonjs/features/network/index.js.map +1 -1
- package/lib/commonjs/features/network/networkInterceptor.js +164 -201
- package/lib/commonjs/features/network/networkInterceptor.js.map +1 -1
- package/lib/commonjs/index.js +59 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/panel/DebugPanel.js +25 -0
- package/lib/commonjs/ui/panel/DebugPanel.js.map +1 -1
- package/lib/commonjs/ui/panel/FloatPanelView.js +15 -62
- package/lib/commonjs/ui/panel/FloatPanelView.js.map +1 -1
- package/lib/commonjs/ui/panel/StreamingSettingsModal.js +529 -0
- package/lib/commonjs/ui/panel/StreamingSettingsModal.js.map +1 -0
- package/lib/commonjs/ui/panel/useTabAnimation.js +71 -0
- package/lib/commonjs/ui/panel/useTabAnimation.js.map +1 -0
- package/lib/commonjs/utils/autoDetectDaemon.js +141 -0
- package/lib/commonjs/utils/autoDetectDaemon.js.map +1 -0
- package/lib/commonjs/utils/createPersistedObservableStore.js +23 -3
- package/lib/commonjs/utils/createPersistedObservableStore.js.map +1 -1
- package/lib/commonjs/utils/daemonConnection.js +81 -0
- package/lib/commonjs/utils/daemonConnection.js.map +1 -0
- package/lib/commonjs/utils/daemonSettings.js +110 -0
- package/lib/commonjs/utils/daemonSettings.js.map +1 -0
- package/lib/commonjs/utils/reportToDaemon.js +112 -0
- package/lib/commonjs/utils/reportToDaemon.js.map +1 -0
- package/lib/commonjs/utils/sessionReport.js +132 -0
- package/lib/commonjs/utils/sessionReport.js.map +1 -0
- package/lib/commonjs/utils/streamToDaemon.js +334 -0
- package/lib/commonjs/utils/streamToDaemon.js.map +1 -0
- package/lib/module/features/network/index.js +30 -12
- package/lib/module/features/network/index.js.map +1 -1
- package/lib/module/features/network/networkInterceptor.js +163 -200
- package/lib/module/features/network/networkInterceptor.js.map +1 -1
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/panel/DebugPanel.js +26 -1
- package/lib/module/ui/panel/DebugPanel.js.map +1 -1
- package/lib/module/ui/panel/FloatPanelView.js +16 -63
- package/lib/module/ui/panel/FloatPanelView.js.map +1 -1
- package/lib/module/ui/panel/StreamingSettingsModal.js +524 -0
- package/lib/module/ui/panel/StreamingSettingsModal.js.map +1 -0
- package/lib/module/ui/panel/useTabAnimation.js +67 -0
- package/lib/module/ui/panel/useTabAnimation.js.map +1 -0
- package/lib/module/utils/autoDetectDaemon.js +136 -0
- package/lib/module/utils/autoDetectDaemon.js.map +1 -0
- package/lib/module/utils/createPersistedObservableStore.js +23 -3
- package/lib/module/utils/createPersistedObservableStore.js.map +1 -1
- package/lib/module/utils/daemonConnection.js +77 -0
- package/lib/module/utils/daemonConnection.js.map +1 -0
- package/lib/module/utils/daemonSettings.js +102 -0
- package/lib/module/utils/daemonSettings.js.map +1 -0
- package/lib/module/utils/reportToDaemon.js +105 -0
- package/lib/module/utils/reportToDaemon.js.map +1 -0
- package/lib/module/utils/sessionReport.js +128 -0
- package/lib/module/utils/sessionReport.js.map +1 -0
- package/lib/module/utils/streamToDaemon.js +328 -0
- package/lib/module/utils/streamToDaemon.js.map +1 -0
- package/lib/typescript/src/features/network/index.d.ts +2 -4
- package/lib/typescript/src/features/network/index.d.ts.map +1 -1
- package/lib/typescript/src/features/network/networkInterceptor.d.ts +2 -15
- package/lib/typescript/src/features/network/networkInterceptor.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +11 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/ui/panel/DebugPanel.d.ts.map +1 -1
- package/lib/typescript/src/ui/panel/FloatPanelView.d.ts.map +1 -1
- package/lib/typescript/src/ui/panel/StreamingSettingsModal.d.ts +8 -0
- package/lib/typescript/src/ui/panel/StreamingSettingsModal.d.ts.map +1 -0
- package/lib/typescript/src/ui/panel/useTabAnimation.d.ts +14 -0
- package/lib/typescript/src/ui/panel/useTabAnimation.d.ts.map +1 -0
- package/lib/typescript/src/utils/autoDetectDaemon.d.ts +15 -0
- package/lib/typescript/src/utils/autoDetectDaemon.d.ts.map +1 -0
- package/lib/typescript/src/utils/createPersistedObservableStore.d.ts +2 -1
- package/lib/typescript/src/utils/createPersistedObservableStore.d.ts.map +1 -1
- package/lib/typescript/src/utils/daemonConnection.d.ts +18 -0
- package/lib/typescript/src/utils/daemonConnection.d.ts.map +1 -0
- package/lib/typescript/src/utils/daemonSettings.d.ts +19 -0
- package/lib/typescript/src/utils/daemonSettings.d.ts.map +1 -0
- package/lib/typescript/src/utils/reportToDaemon.d.ts +34 -0
- package/lib/typescript/src/utils/reportToDaemon.d.ts.map +1 -0
- package/lib/typescript/src/utils/sessionReport.d.ts +18 -0
- package/lib/typescript/src/utils/sessionReport.d.ts.map +1 -0
- package/lib/typescript/src/utils/streamToDaemon.d.ts +23 -0
- package/lib/typescript/src/utils/streamToDaemon.d.ts.map +1 -0
- package/node/daemon/src/cli.js +75 -0
- package/node/daemon/src/console/console.html +936 -0
- package/node/daemon/src/console/index.js +47 -0
- package/node/daemon/src/constants.js +32 -0
- package/node/daemon/src/index.js +11 -0
- package/node/daemon/src/server.js +365 -0
- package/node/daemon/src/store.js +110 -0
- package/node/mcp/src/cli.js +31 -0
- package/node/mcp/src/constants.js +13 -0
- package/node/mcp/src/daemonClient.js +132 -0
- package/node/mcp/src/httpClient.js +49 -0
- package/node/mcp/src/index.js +15 -0
- package/node/mcp/src/logs.js +95 -0
- package/node/mcp/src/server.js +144 -0
- package/node/mcp/src/tools.js +84 -0
- package/package.json +10 -5
- package/src/features/network/index.ts +35 -19
- package/src/features/network/networkInterceptor.ts +224 -236
- package/src/index.ts +15 -1
- package/src/ui/panel/DebugPanel.tsx +23 -1
- package/src/ui/panel/FloatPanelView.tsx +10 -68
- package/src/ui/panel/StreamingSettingsModal.tsx +566 -0
- package/src/ui/panel/useTabAnimation.ts +77 -0
- package/src/utils/autoDetectDaemon.ts +175 -0
- package/src/utils/createPersistedObservableStore.ts +16 -3
- package/src/utils/daemonConnection.ts +133 -0
- package/src/utils/daemonSettings.ts +134 -0
- package/src/utils/reportToDaemon.ts +172 -0
- package/src/utils/sessionReport.ts +203 -0
- package/src/utils/streamToDaemon.ts +419 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createDebugSessionReport = createDebugSessionReport;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _DebugToolkit = require("../core/DebugToolkit");
|
|
9
|
+
var _safeStringify = require("./safeStringify");
|
|
10
|
+
const DEFAULT_MAX_PER_TYPE = 50;
|
|
11
|
+
const DEFAULT_MAX_BODY_BYTES = 16 * 1024;
|
|
12
|
+
const MAX_DEPTH = 8;
|
|
13
|
+
function utf8ByteLength(value) {
|
|
14
|
+
let bytes = 0;
|
|
15
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
16
|
+
const code = value.charCodeAt(index);
|
|
17
|
+
if (code <= 0x7f) {
|
|
18
|
+
bytes += 1;
|
|
19
|
+
} else if (code <= 0x7ff) {
|
|
20
|
+
bytes += 2;
|
|
21
|
+
} else if (code >= 0xd800 && code <= 0xdbff) {
|
|
22
|
+
bytes += 4;
|
|
23
|
+
index += 1;
|
|
24
|
+
} else {
|
|
25
|
+
bytes += 3;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return bytes;
|
|
29
|
+
}
|
|
30
|
+
function truncateUtf8(value, maxBytes) {
|
|
31
|
+
if (utf8ByteLength(value) <= maxBytes) {
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
let bytes = 0;
|
|
35
|
+
let result = '';
|
|
36
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
37
|
+
const code = value.charCodeAt(index);
|
|
38
|
+
const char = value[index];
|
|
39
|
+
const charBytes = code <= 0x7f ? 1 : code <= 0x7ff ? 2 : code >= 0xd800 && code <= 0xdbff ? 4 : 3;
|
|
40
|
+
if (bytes + charBytes > maxBytes) {
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
result += char;
|
|
44
|
+
bytes += charBytes;
|
|
45
|
+
if (charBytes === 4) {
|
|
46
|
+
index += 1;
|
|
47
|
+
result += value[index] ?? '';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return `${result}...[truncated]`;
|
|
51
|
+
}
|
|
52
|
+
function truncateLargeValue(value, maxBytes) {
|
|
53
|
+
const serialized = (0, _safeStringify.safeStringify)(value);
|
|
54
|
+
const originalBytes = utf8ByteLength(serialized);
|
|
55
|
+
if (originalBytes <= maxBytes) {
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
__debugToolkitTruncated: true,
|
|
60
|
+
originalBytes,
|
|
61
|
+
preview: truncateUtf8(serialized, maxBytes)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function sanitizeValue(value, maxBodyBytes, depth = 0, seen = new WeakSet(), key = '') {
|
|
65
|
+
if (typeof value === 'string') {
|
|
66
|
+
return truncateUtf8(value, maxBodyBytes);
|
|
67
|
+
}
|
|
68
|
+
if (value === null || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'undefined') {
|
|
69
|
+
return value;
|
|
70
|
+
}
|
|
71
|
+
if (typeof value === 'function' || typeof value === 'symbol' || typeof value === 'bigint') {
|
|
72
|
+
return String(value);
|
|
73
|
+
}
|
|
74
|
+
if (value instanceof Date) {
|
|
75
|
+
return value.toISOString();
|
|
76
|
+
}
|
|
77
|
+
if (typeof value !== 'object') {
|
|
78
|
+
return value;
|
|
79
|
+
}
|
|
80
|
+
const normalizedKey = key.toLowerCase();
|
|
81
|
+
if (normalizedKey === 'body' || normalizedKey === 'data') {
|
|
82
|
+
const normalized = sanitizeValue(value, maxBodyBytes, depth + 1, seen);
|
|
83
|
+
return truncateLargeValue(normalized, maxBodyBytes);
|
|
84
|
+
}
|
|
85
|
+
if (seen.has(value)) {
|
|
86
|
+
return '[Circular]';
|
|
87
|
+
}
|
|
88
|
+
if (depth >= MAX_DEPTH) {
|
|
89
|
+
return '[MaxDepth]';
|
|
90
|
+
}
|
|
91
|
+
seen.add(value);
|
|
92
|
+
if (Array.isArray(value)) {
|
|
93
|
+
return value.map(item => sanitizeValue(item, maxBodyBytes, depth + 1, seen));
|
|
94
|
+
}
|
|
95
|
+
return Object.entries(value).reduce((acc, [entryKey, entryValue]) => {
|
|
96
|
+
acc[entryKey] = sanitizeValue(entryValue, maxBodyBytes, depth + 1, seen, entryKey);
|
|
97
|
+
return acc;
|
|
98
|
+
}, {});
|
|
99
|
+
}
|
|
100
|
+
function createDebugSessionReport(options = {}) {
|
|
101
|
+
const maxPerType = Math.max(1, Math.floor(options.maxPerType ?? DEFAULT_MAX_PER_TYPE));
|
|
102
|
+
const maxBodyBytes = Math.max(256, Math.floor(options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES));
|
|
103
|
+
const includeTypes = options.includeTypes?.length ? new Set(options.includeTypes) : null;
|
|
104
|
+
const logs = {};
|
|
105
|
+
_DebugToolkit.DebugToolkit.features.forEach(feature => {
|
|
106
|
+
if (includeTypes && !includeTypes.has(feature.name)) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
let snapshot;
|
|
110
|
+
try {
|
|
111
|
+
snapshot = feature.getSnapshot();
|
|
112
|
+
} catch {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (!Array.isArray(snapshot)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
logs[feature.name] = snapshot.slice(-maxPerType).map(entry => sanitizeValue(entry, maxBodyBytes));
|
|
119
|
+
});
|
|
120
|
+
const constants = _reactNative.Platform.constants;
|
|
121
|
+
return {
|
|
122
|
+
version: 2,
|
|
123
|
+
device: {
|
|
124
|
+
platform: _reactNative.Platform.OS,
|
|
125
|
+
model: constants?.model || 'unknown',
|
|
126
|
+
osVersion: _reactNative.Platform.Version == null ? 'unknown' : String(_reactNative.Platform.Version),
|
|
127
|
+
appVersion: constants?.appVersion || 'unknown'
|
|
128
|
+
},
|
|
129
|
+
logs
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=sessionReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_DebugToolkit","_safeStringify","DEFAULT_MAX_PER_TYPE","DEFAULT_MAX_BODY_BYTES","MAX_DEPTH","utf8ByteLength","value","bytes","index","length","code","charCodeAt","truncateUtf8","maxBytes","result","char","charBytes","truncateLargeValue","serialized","safeStringify","originalBytes","__debugToolkitTruncated","preview","sanitizeValue","maxBodyBytes","depth","seen","WeakSet","key","String","Date","toISOString","normalizedKey","toLowerCase","normalized","has","add","Array","isArray","map","item","Object","entries","reduce","acc","entryKey","entryValue","createDebugSessionReport","options","maxPerType","Math","max","floor","includeTypes","Set","logs","DebugToolkit","features","forEach","feature","name","snapshot","getSnapshot","slice","entry","constants","Platform","version","device","platform","OS","model","osVersion","Version","appVersion"],"sourceRoot":"../../../src","sources":["utils/sessionReport.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isStreaming = isStreaming;
|
|
7
|
+
exports.startStreaming = startStreaming;
|
|
8
|
+
exports.stopStreaming = stopStreaming;
|
|
9
|
+
var _reactNative = require("react-native");
|
|
10
|
+
var _DebugToolkit = require("../core/DebugToolkit");
|
|
11
|
+
var _network = require("../features/network");
|
|
12
|
+
var _sessionReport = require("./sessionReport");
|
|
13
|
+
var _reportToDaemon = require("./reportToDaemon");
|
|
14
|
+
var _safeStringify = require("./safeStringify");
|
|
15
|
+
const DEFAULT_DEBOUNCE_MS = 200;
|
|
16
|
+
const DEFAULT_TIMEOUT_MS = 3000;
|
|
17
|
+
const RETRY_BASE_MS = 1000;
|
|
18
|
+
const MAX_RETRY_DELAY_MS = 30000;
|
|
19
|
+
const MAX_RETRY_ATTEMPTS = 10;
|
|
20
|
+
const BACKGROUND_RESYNC_THRESHOLD_MS = 5 * 60 * 1000;
|
|
21
|
+
let active = null;
|
|
22
|
+
function createAbortController() {
|
|
23
|
+
const AbortControllerCtor = globalThis.AbortController;
|
|
24
|
+
return AbortControllerCtor ? new AbortControllerCtor() : undefined;
|
|
25
|
+
}
|
|
26
|
+
function getEntryId(entry) {
|
|
27
|
+
if (!entry || typeof entry !== 'object') {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const id = entry.id;
|
|
31
|
+
return typeof id === 'string' || typeof id === 'number' ? id : null;
|
|
32
|
+
}
|
|
33
|
+
function snapshotToIds(snapshot) {
|
|
34
|
+
return new Set(snapshot.map(getEntryId).filter(id => id != null));
|
|
35
|
+
}
|
|
36
|
+
function fetchHeaders(state) {
|
|
37
|
+
const headers = {
|
|
38
|
+
'Content-Type': 'application/json'
|
|
39
|
+
};
|
|
40
|
+
if (state.token) headers.Authorization = `Bearer ${state.token}`;
|
|
41
|
+
return headers;
|
|
42
|
+
}
|
|
43
|
+
function emitStatus(state, status) {
|
|
44
|
+
try {
|
|
45
|
+
state.onStatus?.(status);
|
|
46
|
+
} catch {
|
|
47
|
+
// Consumer status callbacks should not affect log delivery.
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function isAuthFailure(status) {
|
|
51
|
+
return status === 401 || status === 403;
|
|
52
|
+
}
|
|
53
|
+
function failStreaming(state, reason) {
|
|
54
|
+
if (active !== state) return;
|
|
55
|
+
emitStatus(state, {
|
|
56
|
+
state: 'failed',
|
|
57
|
+
reason
|
|
58
|
+
});
|
|
59
|
+
stopStreaming();
|
|
60
|
+
}
|
|
61
|
+
async function doPost(url, headers, body, timeoutMs) {
|
|
62
|
+
const fetchImpl = (0, _reportToDaemon.getGlobalFetch)();
|
|
63
|
+
if (!fetchImpl) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
const controller = createAbortController();
|
|
67
|
+
const timeout = controller && timeoutMs > 0 ? setTimeout(() => controller.abort(), timeoutMs) : undefined;
|
|
68
|
+
try {
|
|
69
|
+
return await fetchImpl(url, {
|
|
70
|
+
method: 'POST',
|
|
71
|
+
headers,
|
|
72
|
+
body: (0, _safeStringify.safeStringify)(body),
|
|
73
|
+
signal: controller?.signal
|
|
74
|
+
});
|
|
75
|
+
} catch {
|
|
76
|
+
return null;
|
|
77
|
+
} finally {
|
|
78
|
+
if (timeout) {
|
|
79
|
+
clearTimeout(timeout);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function resetRetry(state) {
|
|
84
|
+
state.retryAttempt = 0;
|
|
85
|
+
if (state.retryTimer) {
|
|
86
|
+
clearTimeout(state.retryTimer);
|
|
87
|
+
state.retryTimer = null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function scheduleRetry(state) {
|
|
91
|
+
if (state.retryTimer) return;
|
|
92
|
+
if (state.retryAttempt >= MAX_RETRY_ATTEMPTS) {
|
|
93
|
+
failStreaming(state, 'retry_limit');
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const delay = Math.min(RETRY_BASE_MS * 2 ** state.retryAttempt, MAX_RETRY_DELAY_MS);
|
|
97
|
+
state.retryAttempt += 1;
|
|
98
|
+
emitStatus(state, {
|
|
99
|
+
state: 'retrying',
|
|
100
|
+
retryInMs: delay
|
|
101
|
+
});
|
|
102
|
+
state.retryTimer = setTimeout(() => {
|
|
103
|
+
state.retryTimer = null;
|
|
104
|
+
if (active !== state) return;
|
|
105
|
+
if (state.sessionId) {
|
|
106
|
+
sendDelta(state);
|
|
107
|
+
} else {
|
|
108
|
+
sendFullReport(state);
|
|
109
|
+
}
|
|
110
|
+
}, delay);
|
|
111
|
+
}
|
|
112
|
+
async function sendFullReport(state) {
|
|
113
|
+
if (state.sending) return;
|
|
114
|
+
state.sending = true;
|
|
115
|
+
let result = 'ok';
|
|
116
|
+
try {
|
|
117
|
+
result = await doSendFullReport(state);
|
|
118
|
+
if (result === 'ok') resetRetry(state);
|
|
119
|
+
} finally {
|
|
120
|
+
state.sending = false;
|
|
121
|
+
if (active !== state) return;
|
|
122
|
+
if (result === 'auth_failed') {
|
|
123
|
+
failStreaming(state, 'auth');
|
|
124
|
+
} else if (result === 'retry') {
|
|
125
|
+
scheduleRetry(state);
|
|
126
|
+
} else if (state.dirtyFeatures.size > 0 && !state.debounceTimer) {
|
|
127
|
+
scheduleDelta(state);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
async function doSendFullReport(state) {
|
|
132
|
+
const report = (0, _sessionReport.createDebugSessionReport)();
|
|
133
|
+
const response = await doPost(state.reportUrl, fetchHeaders(state), report, state.timeoutMs);
|
|
134
|
+
if (!response) return 'retry';
|
|
135
|
+
if (isAuthFailure(response.status)) return 'auth_failed';
|
|
136
|
+
if (response.status < 200 || response.status >= 300) return 'retry';
|
|
137
|
+
try {
|
|
138
|
+
const body = response.json ? await response.json() : null;
|
|
139
|
+
if (body?.ok !== true || typeof body.sessionId !== 'string') return 'retry';
|
|
140
|
+
state.sessionId = body.sessionId;
|
|
141
|
+
emitStatus(state, {
|
|
142
|
+
state: 'connected',
|
|
143
|
+
sessionId: body.sessionId
|
|
144
|
+
});
|
|
145
|
+
} catch {
|
|
146
|
+
return 'retry';
|
|
147
|
+
}
|
|
148
|
+
state.lastSentIds.clear();
|
|
149
|
+
for (const feature of _DebugToolkit.DebugToolkit.features) {
|
|
150
|
+
try {
|
|
151
|
+
const snapshot = feature.getSnapshot();
|
|
152
|
+
if (Array.isArray(snapshot)) state.lastSentIds.set(feature.name, snapshotToIds(snapshot));
|
|
153
|
+
} catch {
|
|
154
|
+
// skip
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return 'ok';
|
|
158
|
+
}
|
|
159
|
+
async function sendDelta(state) {
|
|
160
|
+
if (state.sending || state.dirtyFeatures.size === 0) return;
|
|
161
|
+
state.sending = true;
|
|
162
|
+
let retry = false;
|
|
163
|
+
try {
|
|
164
|
+
const delta = {};
|
|
165
|
+
const nextSentIds = new Map();
|
|
166
|
+
const features = _DebugToolkit.DebugToolkit.features;
|
|
167
|
+
for (const featureName of state.dirtyFeatures) {
|
|
168
|
+
const feature = features.find(f => f.name === featureName);
|
|
169
|
+
if (!feature) continue;
|
|
170
|
+
let snapshot;
|
|
171
|
+
try {
|
|
172
|
+
snapshot = feature.getSnapshot();
|
|
173
|
+
} catch {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (!Array.isArray(snapshot)) continue;
|
|
177
|
+
const prevIds = state.lastSentIds.get(featureName) || new Set();
|
|
178
|
+
const newEntries = snapshot.filter(entry => {
|
|
179
|
+
const id = getEntryId(entry);
|
|
180
|
+
return id != null && !prevIds.has(id);
|
|
181
|
+
});
|
|
182
|
+
if (newEntries.length > 0) {
|
|
183
|
+
delta[featureName] = newEntries;
|
|
184
|
+
nextSentIds.set(featureName, snapshotToIds(snapshot));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
state.dirtyFeatures.clear();
|
|
188
|
+
state.debounceTimer = null;
|
|
189
|
+
if (Object.keys(delta).length === 0) return;
|
|
190
|
+
if (!state.sessionId) {
|
|
191
|
+
const result = await doSendFullReport(state);
|
|
192
|
+
retry = result === 'retry';
|
|
193
|
+
if (result !== 'ok') Object.keys(delta).forEach(featureName => state.dirtyFeatures.add(featureName));
|
|
194
|
+
if (result === 'auth_failed') failStreaming(state, 'auth');
|
|
195
|
+
if (result === 'ok') resetRetry(state);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const response = await doPost(state.ingestUrl, fetchHeaders(state), {
|
|
199
|
+
sessionId: state.sessionId,
|
|
200
|
+
delta: {
|
|
201
|
+
logs: delta
|
|
202
|
+
}
|
|
203
|
+
}, state.timeoutMs);
|
|
204
|
+
if (!response) {
|
|
205
|
+
Object.keys(delta).forEach(featureName => state.dirtyFeatures.add(featureName));
|
|
206
|
+
retry = true;
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
if (response.status === 404) {
|
|
210
|
+
state.sessionId = null;
|
|
211
|
+
state.lastSentIds.clear();
|
|
212
|
+
const result = await doSendFullReport(state);
|
|
213
|
+
retry = result === 'retry';
|
|
214
|
+
if (result !== 'ok') Object.keys(delta).forEach(featureName => state.dirtyFeatures.add(featureName));
|
|
215
|
+
if (result === 'auth_failed') failStreaming(state, 'auth');
|
|
216
|
+
if (result === 'ok') resetRetry(state);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (isAuthFailure(response.status)) {
|
|
220
|
+
Object.keys(delta).forEach(featureName => state.dirtyFeatures.add(featureName));
|
|
221
|
+
failStreaming(state, 'auth');
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (response.status < 200 || response.status >= 300) {
|
|
225
|
+
Object.keys(delta).forEach(featureName => state.dirtyFeatures.add(featureName));
|
|
226
|
+
retry = true;
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
nextSentIds.forEach((ids, featureName) => {
|
|
230
|
+
state.lastSentIds.set(featureName, ids);
|
|
231
|
+
});
|
|
232
|
+
resetRetry(state);
|
|
233
|
+
if (state.sessionId) {
|
|
234
|
+
emitStatus(state, {
|
|
235
|
+
state: 'connected',
|
|
236
|
+
sessionId: state.sessionId
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
} finally {
|
|
240
|
+
state.sending = false;
|
|
241
|
+
if (active !== state) return;
|
|
242
|
+
if (retry && state.dirtyFeatures.size > 0) {
|
|
243
|
+
scheduleRetry(state);
|
|
244
|
+
} else if (state.dirtyFeatures.size > 0 && !state.debounceTimer) {
|
|
245
|
+
scheduleDelta(state);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function scheduleDelta(state) {
|
|
250
|
+
if (state.debounceTimer) clearTimeout(state.debounceTimer);
|
|
251
|
+
state.debounceTimer = setTimeout(() => {
|
|
252
|
+
state.debounceTimer = null;
|
|
253
|
+
if (active === state) sendDelta(state);
|
|
254
|
+
}, state.debounceMs);
|
|
255
|
+
}
|
|
256
|
+
function onFeatureChange(featureName) {
|
|
257
|
+
if (!active) return;
|
|
258
|
+
active.dirtyFeatures.add(featureName);
|
|
259
|
+
if (active.retryTimer) return;
|
|
260
|
+
scheduleDelta(active);
|
|
261
|
+
}
|
|
262
|
+
function handleAppStateChange(nextState) {
|
|
263
|
+
if (!active) return;
|
|
264
|
+
if (nextState === 'background') {
|
|
265
|
+
active.backgroundedAt = Date.now();
|
|
266
|
+
if (active.debounceTimer) {
|
|
267
|
+
clearTimeout(active.debounceTimer);
|
|
268
|
+
active.debounceTimer = null;
|
|
269
|
+
}
|
|
270
|
+
sendDelta(active);
|
|
271
|
+
} else if (nextState === 'active') {
|
|
272
|
+
const wasAway = active.backgroundedAt ? Date.now() - active.backgroundedAt : 0;
|
|
273
|
+
active.backgroundedAt = null;
|
|
274
|
+
if (wasAway > BACKGROUND_RESYNC_THRESHOLD_MS || !active.sessionId) {
|
|
275
|
+
active.sessionId = null;
|
|
276
|
+
active.lastSentIds.clear();
|
|
277
|
+
sendFullReport(active);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
function startStreaming(options = {}) {
|
|
282
|
+
if (active) return;
|
|
283
|
+
const endpoint = options.endpoint || (0, _reportToDaemon.getDefaultDaemonEndpoint)();
|
|
284
|
+
const reportUrl = (0, _reportToDaemon.buildDaemonUrl)(endpoint, '/report');
|
|
285
|
+
const ingestUrl = (0, _reportToDaemon.buildDaemonUrl)(endpoint, '/ingest');
|
|
286
|
+
(0, _network._addDaemonEndpointToNetworkBlacklist)(endpoint);
|
|
287
|
+
(0, _network._addDaemonEndpointToNetworkBlacklist)(reportUrl);
|
|
288
|
+
(0, _network._addDaemonEndpointToNetworkBlacklist)(ingestUrl);
|
|
289
|
+
const state = {
|
|
290
|
+
endpoint,
|
|
291
|
+
reportUrl,
|
|
292
|
+
ingestUrl,
|
|
293
|
+
token: options.token,
|
|
294
|
+
debounceMs: options.debounceMs || DEFAULT_DEBOUNCE_MS,
|
|
295
|
+
timeoutMs: Math.max(0, options.timeoutMs ?? DEFAULT_TIMEOUT_MS),
|
|
296
|
+
sessionId: null,
|
|
297
|
+
sending: false,
|
|
298
|
+
debounceTimer: null,
|
|
299
|
+
retryTimer: null,
|
|
300
|
+
retryAttempt: 0,
|
|
301
|
+
dirtyFeatures: new Set(),
|
|
302
|
+
lastSentIds: new Map(),
|
|
303
|
+
featureUnsubscribes: [],
|
|
304
|
+
appStateUnsubscribe: null,
|
|
305
|
+
backgroundedAt: null,
|
|
306
|
+
onStatus: options.onStatus
|
|
307
|
+
};
|
|
308
|
+
for (const feature of _DebugToolkit.DebugToolkit.features) {
|
|
309
|
+
if (!feature.subscribe) continue;
|
|
310
|
+
const unsub = feature.subscribe(() => {
|
|
311
|
+
onFeatureChange(feature.name);
|
|
312
|
+
});
|
|
313
|
+
state.featureUnsubscribes.push(unsub);
|
|
314
|
+
}
|
|
315
|
+
state.appStateUnsubscribe = _reactNative.AppState.addEventListener('change', handleAppStateChange).remove;
|
|
316
|
+
active = state;
|
|
317
|
+
emitStatus(active, {
|
|
318
|
+
state: 'connecting'
|
|
319
|
+
});
|
|
320
|
+
sendFullReport(active);
|
|
321
|
+
}
|
|
322
|
+
function stopStreaming() {
|
|
323
|
+
if (!active) return;
|
|
324
|
+
const state = active;
|
|
325
|
+
active = null;
|
|
326
|
+
if (state.debounceTimer) clearTimeout(state.debounceTimer);
|
|
327
|
+
if (state.retryTimer) clearTimeout(state.retryTimer);
|
|
328
|
+
state.featureUnsubscribes.forEach(fn => fn());
|
|
329
|
+
state.appStateUnsubscribe?.();
|
|
330
|
+
}
|
|
331
|
+
function isStreaming() {
|
|
332
|
+
return active !== null;
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=streamToDaemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_DebugToolkit","_network","_sessionReport","_reportToDaemon","_safeStringify","DEFAULT_DEBOUNCE_MS","DEFAULT_TIMEOUT_MS","RETRY_BASE_MS","MAX_RETRY_DELAY_MS","MAX_RETRY_ATTEMPTS","BACKGROUND_RESYNC_THRESHOLD_MS","active","createAbortController","AbortControllerCtor","globalThis","AbortController","undefined","getEntryId","entry","id","snapshotToIds","snapshot","Set","map","filter","fetchHeaders","state","headers","token","Authorization","emitStatus","status","onStatus","isAuthFailure","failStreaming","reason","stopStreaming","doPost","url","body","timeoutMs","fetchImpl","getGlobalFetch","controller","timeout","setTimeout","abort","method","safeStringify","signal","clearTimeout","resetRetry","retryAttempt","retryTimer","scheduleRetry","delay","Math","min","retryInMs","sessionId","sendDelta","sendFullReport","sending","result","doSendFullReport","dirtyFeatures","size","debounceTimer","scheduleDelta","report","createDebugSessionReport","response","reportUrl","json","ok","lastSentIds","clear","feature","DebugToolkit","features","getSnapshot","Array","isArray","set","name","retry","delta","nextSentIds","Map","featureName","find","f","prevIds","get","newEntries","has","length","Object","keys","forEach","add","ingestUrl","logs","ids","debounceMs","onFeatureChange","handleAppStateChange","nextState","backgroundedAt","Date","now","wasAway","startStreaming","options","endpoint","getDefaultDaemonEndpoint","buildDaemonUrl","_addDaemonEndpointToNetworkBlacklist","max","featureUnsubscribes","appStateUnsubscribe","subscribe","unsub","push","AppState","addEventListener","remove","fn","isStreaming"],"sourceRoot":"../../../src","sources":["utils/streamToDaemon.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,7 +5,7 @@ import { createEventChannel } from '../../utils/createEventChannel';
|
|
|
5
5
|
import { createPersistedObservableStore } from '../../utils/createPersistedObservableStore';
|
|
6
6
|
import { KEYS } from '../../utils/debugPreferences';
|
|
7
7
|
import { urlRewriter } from '../../utils/urlRewriterRegistry';
|
|
8
|
-
import {
|
|
8
|
+
import { startXMLHttpRequest, resetInterceptors } from './networkInterceptor';
|
|
9
9
|
// ─── Utilities ────────────────────────────────────────
|
|
10
10
|
|
|
11
11
|
function isUrlBlacklisted(url, blacklist) {
|
|
@@ -25,6 +25,7 @@ function emitNetworkLog(entry) {
|
|
|
25
25
|
// ─── Feature factory ──────────────────────────────────
|
|
26
26
|
|
|
27
27
|
const DEFAULT_MAX_LOGS = 200;
|
|
28
|
+
const daemonEndpointBlacklist = [];
|
|
28
29
|
export const createNetworkFeature = config => {
|
|
29
30
|
const maxLogs = config?.maxLogs ?? DEFAULT_MAX_LOGS;
|
|
30
31
|
const blacklist = config?.blacklist ? [...config.blacklist] : [];
|
|
@@ -34,10 +35,9 @@ export const createNetworkFeature = config => {
|
|
|
34
35
|
});
|
|
35
36
|
let initialized = false;
|
|
36
37
|
let unsubscribeLogs = null;
|
|
37
|
-
let
|
|
38
|
-
let stopAxiosFn = null;
|
|
38
|
+
let stopXhrFn = null;
|
|
39
39
|
const handleLog = entry => {
|
|
40
|
-
if (isUrlBlacklisted(entry.request.url, blacklist)) {
|
|
40
|
+
if (isUrlBlacklisted(entry.request.url, [...blacklist, ...daemonEndpointBlacklist])) {
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
43
|
logStore.push({
|
|
@@ -54,10 +54,7 @@ export const createNetworkFeature = config => {
|
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
56
|
unsubscribeLogs = networkChannel.subscribe(handleLog);
|
|
57
|
-
|
|
58
|
-
if (config?.axiosInstance) {
|
|
59
|
-
stopAxiosFn = startAxios(config.axiosInstance, emitNetworkLog);
|
|
60
|
-
}
|
|
57
|
+
stopXhrFn = startXMLHttpRequest(emitNetworkLog);
|
|
61
58
|
initialized = true;
|
|
62
59
|
},
|
|
63
60
|
getSnapshot: () => logStore.getData(),
|
|
@@ -71,20 +68,41 @@ export const createNetworkFeature = config => {
|
|
|
71
68
|
urlRewriter.set(null);
|
|
72
69
|
unsubscribeLogs?.();
|
|
73
70
|
unsubscribeLogs = null;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
stopAxiosFn?.();
|
|
77
|
-
stopAxiosFn = null;
|
|
71
|
+
stopXhrFn?.();
|
|
72
|
+
stopXhrFn = null;
|
|
78
73
|
logStore.clear();
|
|
79
74
|
initialized = false;
|
|
80
75
|
},
|
|
81
76
|
subscribe: listener => logStore.subscribe(listener)
|
|
82
77
|
};
|
|
83
78
|
};
|
|
79
|
+
function normalizeDaemonEndpoint(endpoint) {
|
|
80
|
+
const trimmed = endpoint.trim().replace(/\/+$/, '');
|
|
81
|
+
if (!trimmed) {
|
|
82
|
+
return trimmed;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const url = new URL(trimmed);
|
|
86
|
+
return `${url.origin}${url.pathname === '/' ? '' : url.pathname}`;
|
|
87
|
+
} catch {
|
|
88
|
+
return trimmed;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export function _addDaemonEndpointToNetworkBlacklist(endpoint) {
|
|
92
|
+
const normalized = normalizeDaemonEndpoint(endpoint);
|
|
93
|
+
if (!normalized || daemonEndpointBlacklist.includes(normalized)) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
daemonEndpointBlacklist.push(normalized);
|
|
97
|
+
}
|
|
98
|
+
export function _isNetworkUrlBlacklistedForTesting(url) {
|
|
99
|
+
return isUrlBlacklisted(url, daemonEndpointBlacklist);
|
|
100
|
+
}
|
|
84
101
|
|
|
85
102
|
/** Reset module-level state for testing */
|
|
86
103
|
export function _resetNetworkForTesting() {
|
|
87
104
|
networkChannel = createEventChannel();
|
|
105
|
+
daemonEndpointBlacklist.splice(0, daemonEndpointBlacklist.length);
|
|
88
106
|
resetInterceptors();
|
|
89
107
|
}
|
|
90
108
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NetworkLogTab","createEventChannel","createPersistedObservableStore","KEYS","urlRewriter","
|
|
1
|
+
{"version":3,"names":["NetworkLogTab","createEventChannel","createPersistedObservableStore","KEYS","urlRewriter","startXMLHttpRequest","resetInterceptors","isUrlBlacklisted","url","blacklist","some","pattern","RegExp","test","includes","networkChannel","emitNetworkLog","entry","emit","DEFAULT_MAX_LOGS","daemonEndpointBlacklist","createNetworkFeature","config","maxLogs","logStore","storageKey","networkLogs","maxPersist","initialized","unsubscribeLogs","stopXhrFn","handleLog","request","push","id","nextId","name","label","renderContent","setup","subscribe","getSnapshot","getData","clear","cleanup","set","listener","normalizeDaemonEndpoint","endpoint","trimmed","trim","replace","URL","origin","pathname","_addDaemonEndpointToNetworkBlacklist","normalized","_isNetworkUrlBlacklistedForTesting","_resetNetworkForTesting","splice","length"],"sourceRoot":"../../../../src","sources":["features/network/index.ts"],"mappings":"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","ignoreList":[]}
|