react-native-debug-toolkit 2.3.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/bin/debug-toolkit.js +114 -0
- package/lib/commonjs/features/network/index.js +28 -2
- package/lib/commonjs/features/network/index.js.map +1 -1
- package/lib/commonjs/features/network/networkInterceptor.js +14 -6
- 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 +25 -1
- package/lib/module/features/network/index.js.map +1 -1
- package/lib/module/features/network/networkInterceptor.js +14 -6
- 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 -0
- package/lib/typescript/src/features/network/index.d.ts.map +1 -1
- package/lib/typescript/src/features/network/networkInterceptor.d.ts +1 -1
- package/lib/typescript/src/features/network/networkInterceptor.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +10 -0
- 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 +7 -2
- package/src/features/network/index.ts +30 -3
- package/src/features/network/networkInterceptor.ts +19 -6
- package/src/index.ts +14 -0
- 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,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useTabAnimation = useTabAnimation;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
function useTabAnimation({
|
|
10
|
+
activeTab,
|
|
11
|
+
tabCount,
|
|
12
|
+
onTabChange
|
|
13
|
+
}) {
|
|
14
|
+
const contentOpacity = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
|
|
15
|
+
const contentTranslateX = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
|
|
16
|
+
const isSwitchingTab = (0, _react.useRef)(false);
|
|
17
|
+
const activeTabRef = (0, _react.useRef)(activeTab);
|
|
18
|
+
activeTabRef.current = activeTab;
|
|
19
|
+
const tabCountRef = (0, _react.useRef)(tabCount);
|
|
20
|
+
tabCountRef.current = tabCount;
|
|
21
|
+
const switchTabRef = (0, _react.useRef)(() => {});
|
|
22
|
+
const swipeResponder = (0, _react.useRef)(_reactNative.PanResponder.create({
|
|
23
|
+
onStartShouldSetPanResponder: () => false,
|
|
24
|
+
onMoveShouldSetPanResponder: (_, gs) => {
|
|
25
|
+
if (isSwitchingTab.current) return false;
|
|
26
|
+
return Math.abs(gs.dx) > 25 && Math.abs(gs.dx) > Math.abs(gs.dy) * 2.5;
|
|
27
|
+
},
|
|
28
|
+
onPanResponderRelease: (_, gs) => {
|
|
29
|
+
const tab = activeTabRef.current;
|
|
30
|
+
if (gs.dx < -40 && tab < tabCountRef.current - 1) switchTabRef.current(tab + 1);else if (gs.dx > 40 && tab > 0) switchTabRef.current(tab - 1);
|
|
31
|
+
},
|
|
32
|
+
onPanResponderTerminationRequest: () => true
|
|
33
|
+
})).current;
|
|
34
|
+
const switchTab = (0, _react.useCallback)(index => {
|
|
35
|
+
if (isSwitchingTab.current || index === activeTabRef.current) return;
|
|
36
|
+
isSwitchingTab.current = true;
|
|
37
|
+
const direction = index > activeTabRef.current ? 1 : -1;
|
|
38
|
+
_reactNative.Animated.parallel([_reactNative.Animated.timing(contentOpacity, {
|
|
39
|
+
toValue: 0,
|
|
40
|
+
duration: 80,
|
|
41
|
+
useNativeDriver: true
|
|
42
|
+
}), _reactNative.Animated.timing(contentTranslateX, {
|
|
43
|
+
toValue: -direction * 40,
|
|
44
|
+
duration: 80,
|
|
45
|
+
useNativeDriver: true
|
|
46
|
+
})]).start(() => {
|
|
47
|
+
onTabChange(index);
|
|
48
|
+
contentTranslateX.setValue(direction * 40);
|
|
49
|
+
_reactNative.Animated.parallel([_reactNative.Animated.timing(contentOpacity, {
|
|
50
|
+
toValue: 1,
|
|
51
|
+
duration: 150,
|
|
52
|
+
useNativeDriver: true
|
|
53
|
+
}), _reactNative.Animated.timing(contentTranslateX, {
|
|
54
|
+
toValue: 0,
|
|
55
|
+
duration: 200,
|
|
56
|
+
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
57
|
+
useNativeDriver: true
|
|
58
|
+
})]).start(() => {
|
|
59
|
+
isSwitchingTab.current = false;
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
}, [contentOpacity, contentTranslateX, onTabChange]);
|
|
63
|
+
switchTabRef.current = switchTab;
|
|
64
|
+
return {
|
|
65
|
+
contentOpacity,
|
|
66
|
+
contentTranslateX,
|
|
67
|
+
panHandlers: swipeResponder.panHandlers,
|
|
68
|
+
switchTab
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=useTabAnimation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","useTabAnimation","activeTab","tabCount","onTabChange","contentOpacity","useRef","Animated","Value","current","contentTranslateX","isSwitchingTab","activeTabRef","tabCountRef","switchTabRef","swipeResponder","PanResponder","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","_","gs","Math","abs","dx","dy","onPanResponderRelease","tab","onPanResponderTerminationRequest","switchTab","useCallback","index","direction","parallel","timing","toValue","duration","useNativeDriver","start","setValue","easing","Easing","out","cubic","panHandlers"],"sourceRoot":"../../../../src","sources":["ui/panel/useTabAnimation.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.autoDetectDaemonIp = autoDetectDaemonIp;
|
|
7
|
+
exports.getMetroHost = getMetroHost;
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
const DEFAULT_PORT = 3799;
|
|
10
|
+
const PROBE_TIMEOUT_MS = 1500;
|
|
11
|
+
const DEFAULT_BATCH_SIZE = 20;
|
|
12
|
+
const COMMON_SUBNETS = ['192.168.0', '192.168.1', '192.168.2', '192.168.3', '192.168.4', '192.168.31', '192.168.43', '192.168.50', '192.168.68', '192.168.100', '10.0.0', '10.0.1', '10.0.2', '172.16.0'];
|
|
13
|
+
const SIMULATOR_HOSTS = ['localhost', '127.0.0.1', '10.0.2.2'];
|
|
14
|
+
function getMetroHost() {
|
|
15
|
+
try {
|
|
16
|
+
const scriptURL = _reactNative.NativeModules?.SourceCode?.scriptURL;
|
|
17
|
+
if (typeof scriptURL !== 'string') return null;
|
|
18
|
+
const url = new URL(scriptURL);
|
|
19
|
+
if (SIMULATOR_HOSTS.includes(url.hostname)) return null;
|
|
20
|
+
return url.hostname;
|
|
21
|
+
} catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function getNetworkInfo() {
|
|
26
|
+
try {
|
|
27
|
+
const mod = require('react-native-network-info');
|
|
28
|
+
return mod.default || mod;
|
|
29
|
+
} catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function getSubnetPrefix(ip) {
|
|
34
|
+
const parts = ip.split('.');
|
|
35
|
+
if (parts.length !== 4) return null;
|
|
36
|
+
return parts.slice(0, 3).join('.');
|
|
37
|
+
}
|
|
38
|
+
function buildCandidates(prefix) {
|
|
39
|
+
const candidates = [];
|
|
40
|
+
for (let i = 1; i <= 255; i++) {
|
|
41
|
+
candidates.push(`${prefix}.${i}`);
|
|
42
|
+
}
|
|
43
|
+
return candidates;
|
|
44
|
+
}
|
|
45
|
+
async function probeIp(ip, port, timeoutMs, signal) {
|
|
46
|
+
if (signal?.aborted) return false;
|
|
47
|
+
const fetchImpl = globalThis.fetch;
|
|
48
|
+
if (!fetchImpl) return false;
|
|
49
|
+
const controller = new AbortController();
|
|
50
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
51
|
+
const onAbort = () => controller.abort();
|
|
52
|
+
signal?.addEventListener('abort', onAbort, {
|
|
53
|
+
once: true
|
|
54
|
+
});
|
|
55
|
+
try {
|
|
56
|
+
const response = await fetchImpl(`http://${ip}:${port}/health`, {
|
|
57
|
+
method: 'GET',
|
|
58
|
+
signal: controller.signal
|
|
59
|
+
});
|
|
60
|
+
if (!response.ok) return false;
|
|
61
|
+
try {
|
|
62
|
+
const body = await response.json();
|
|
63
|
+
return body != null && typeof body === 'object' && body.ok === true;
|
|
64
|
+
} catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
} catch {
|
|
68
|
+
return false;
|
|
69
|
+
} finally {
|
|
70
|
+
clearTimeout(timeout);
|
|
71
|
+
signal?.removeEventListener('abort', onAbort);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function probeBatch(candidates, port, timeoutMs, batchSize, signal) {
|
|
75
|
+
for (let i = 0; i < candidates.length; i += batchSize) {
|
|
76
|
+
if (signal?.aborted) return null;
|
|
77
|
+
const batch = candidates.slice(i, i + batchSize);
|
|
78
|
+
const results = await Promise.all(batch.map(ip => probeIp(ip, port, timeoutMs, signal)));
|
|
79
|
+
const idx = results.findIndex(Boolean);
|
|
80
|
+
if (idx !== -1) return batch[idx] ?? null;
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
async function autoDetectDaemonIp(options = {}) {
|
|
85
|
+
const port = options.port ?? DEFAULT_PORT;
|
|
86
|
+
const timeoutMs = options.timeoutMs ?? PROBE_TIMEOUT_MS;
|
|
87
|
+
const batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE;
|
|
88
|
+
const scanSubnets = options.scanSubnets ?? true;
|
|
89
|
+
const {
|
|
90
|
+
signal
|
|
91
|
+
} = options;
|
|
92
|
+
|
|
93
|
+
// Strategy 0: extract Mac IP from Metro bundle URL (zero-dep, instant)
|
|
94
|
+
const metroHost = getMetroHost();
|
|
95
|
+
if (metroHost) {
|
|
96
|
+
const alive = await probeIp(metroHost, port, timeoutMs, signal);
|
|
97
|
+
if (alive) return {
|
|
98
|
+
ip: metroHost,
|
|
99
|
+
method: 'metro-bundle'
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (!scanSubnets) {
|
|
103
|
+
return {
|
|
104
|
+
ip: null,
|
|
105
|
+
method: 'none'
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Strategy 1: react-native-network-info → device IP → subnet scan
|
|
110
|
+
const networkInfo = getNetworkInfo();
|
|
111
|
+
if (networkInfo?.getIPAddress) {
|
|
112
|
+
try {
|
|
113
|
+
const deviceIp = await networkInfo.getIPAddress();
|
|
114
|
+
const prefix = getSubnetPrefix(deviceIp);
|
|
115
|
+
if (prefix) {
|
|
116
|
+
const found = await probeBatch(buildCandidates(prefix), port, timeoutMs, batchSize, signal);
|
|
117
|
+
if (found) return {
|
|
118
|
+
ip: found,
|
|
119
|
+
method: 'network-info'
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
} catch {
|
|
123
|
+
// fall through
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Strategy 2: common subnet probe
|
|
128
|
+
for (const prefix of COMMON_SUBNETS) {
|
|
129
|
+
if (signal?.aborted) break;
|
|
130
|
+
const found = await probeBatch(buildCandidates(prefix), port, timeoutMs, batchSize, signal);
|
|
131
|
+
if (found) return {
|
|
132
|
+
ip: found,
|
|
133
|
+
method: 'subnet-common'
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
ip: null,
|
|
138
|
+
method: 'none'
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=autoDetectDaemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","DEFAULT_PORT","PROBE_TIMEOUT_MS","DEFAULT_BATCH_SIZE","COMMON_SUBNETS","SIMULATOR_HOSTS","getMetroHost","scriptURL","NativeModules","SourceCode","url","URL","includes","hostname","getNetworkInfo","mod","default","getSubnetPrefix","ip","parts","split","length","slice","join","buildCandidates","prefix","candidates","i","push","probeIp","port","timeoutMs","signal","aborted","fetchImpl","globalThis","fetch","controller","AbortController","timeout","setTimeout","abort","onAbort","addEventListener","once","response","method","ok","body","json","clearTimeout","removeEventListener","probeBatch","batchSize","batch","results","Promise","all","map","idx","findIndex","Boolean","autoDetectDaemonIp","options","scanSubnets","metroHost","alive","networkInfo","getIPAddress","deviceIp","found"],"sourceRoot":"../../../src","sources":["utils/autoDetectDaemon.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,13 +16,23 @@ function createPersistedObservableStore(options) {
|
|
|
16
16
|
const store = (0, _createObservableStore.createObservableStore)();
|
|
17
17
|
let writeTimer = null;
|
|
18
18
|
let idCounter = 0;
|
|
19
|
+
let resolveReady;
|
|
20
|
+
const ready = new Promise(resolve => {
|
|
21
|
+
resolveReady = resolve;
|
|
22
|
+
});
|
|
19
23
|
|
|
20
24
|
// Restore from storage (single notify via pushBatch)
|
|
21
25
|
(0, _debugPreferences.getPreference)(storageKey).then(raw => {
|
|
22
|
-
if (!raw)
|
|
26
|
+
if (!raw) {
|
|
27
|
+
resolveReady();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
23
30
|
try {
|
|
24
31
|
const entries = JSON.parse(raw);
|
|
25
|
-
if (!Array.isArray(entries))
|
|
32
|
+
if (!Array.isArray(entries)) {
|
|
33
|
+
resolveReady();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
26
36
|
const restored = entries.slice(-maxPersist);
|
|
27
37
|
store.pushBatch(restored);
|
|
28
38
|
// Fix ID counter to avoid collision with restored entries
|
|
@@ -35,6 +45,7 @@ function createPersistedObservableStore(options) {
|
|
|
35
45
|
} catch {
|
|
36
46
|
// ignore corrupt data
|
|
37
47
|
}
|
|
48
|
+
resolveReady();
|
|
38
49
|
});
|
|
39
50
|
function scheduleWrite() {
|
|
40
51
|
if (writeTimer !== null) clearTimeout(writeTimer);
|
|
@@ -65,7 +76,16 @@ function createPersistedObservableStore(options) {
|
|
|
65
76
|
(0, _debugPreferences.setPreference)(storageKey, '[]');
|
|
66
77
|
},
|
|
67
78
|
subscribe: store.subscribe,
|
|
68
|
-
nextId: () => String(idCounter++)
|
|
79
|
+
nextId: () => String(idCounter++),
|
|
80
|
+
ready,
|
|
81
|
+
destroy: () => {
|
|
82
|
+
if (writeTimer !== null) {
|
|
83
|
+
clearTimeout(writeTimer);
|
|
84
|
+
writeTimer = null;
|
|
85
|
+
}
|
|
86
|
+
store.clear();
|
|
87
|
+
(0, _debugPreferences.setPreference)(storageKey, '[]');
|
|
88
|
+
}
|
|
69
89
|
};
|
|
70
90
|
}
|
|
71
91
|
//# sourceMappingURL=createPersistedObservableStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_createObservableStore","require","_debugPreferences","createPersistedObservableStore","options","storageKey","maxPersist","debounceMs","serialize","store","createObservableStore","writeTimer","idCounter","getPreference","then","raw","entries","JSON","parse","Array","isArray","restored","slice","pushBatch","max","e","n","parseInt","id","isNaN","scheduleWrite","clearTimeout","setTimeout","data","getData","toStore","map","setPreference","stringify","push","item","maxEntries","clear","subscribe","nextId","String"],"sourceRoot":"../../../src","sources":["utils/createPersistedObservableStore.ts"],"mappings":";;;;;;AAAA,IAAAA,sBAAA,GAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;
|
|
1
|
+
{"version":3,"names":["_createObservableStore","require","_debugPreferences","createPersistedObservableStore","options","storageKey","maxPersist","debounceMs","serialize","store","createObservableStore","writeTimer","idCounter","resolveReady","ready","Promise","resolve","getPreference","then","raw","entries","JSON","parse","Array","isArray","restored","slice","pushBatch","max","e","n","parseInt","id","isNaN","scheduleWrite","clearTimeout","setTimeout","data","getData","toStore","map","setPreference","stringify","push","item","maxEntries","clear","subscribe","nextId","String","destroy"],"sourceRoot":"../../../src","sources":["utils/createPersistedObservableStore.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.checkDaemonConnection = checkDaemonConnection;
|
|
7
|
+
var _reportToDaemon = require("./reportToDaemon");
|
|
8
|
+
const DEFAULT_HEALTH_TIMEOUT_MS = 2000;
|
|
9
|
+
function createAbortController() {
|
|
10
|
+
const AbortControllerCtor = globalThis.AbortController;
|
|
11
|
+
return AbortControllerCtor ? new AbortControllerCtor() : undefined;
|
|
12
|
+
}
|
|
13
|
+
async function readHealthBody(response) {
|
|
14
|
+
try {
|
|
15
|
+
const body = response.json ? await response.json() : null;
|
|
16
|
+
return body && typeof body === 'object' && !Array.isArray(body) ? body : null;
|
|
17
|
+
} catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function checkDaemonConnection(options = {}) {
|
|
22
|
+
const endpoint = options.endpoint ?? (0, _reportToDaemon.getDefaultDaemonEndpoint)();
|
|
23
|
+
const healthUrl = (0, _reportToDaemon.buildDaemonUrl)(endpoint, '/health');
|
|
24
|
+
const fetchImpl = (0, _reportToDaemon.getGlobalFetch)();
|
|
25
|
+
if (!fetchImpl) {
|
|
26
|
+
return {
|
|
27
|
+
ok: false,
|
|
28
|
+
endpoint,
|
|
29
|
+
reason: 'fetch_unavailable',
|
|
30
|
+
error: 'global fetch is not available'
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const timeoutMs = Math.max(0, options.timeoutMs ?? DEFAULT_HEALTH_TIMEOUT_MS);
|
|
34
|
+
const controller = createAbortController();
|
|
35
|
+
let timedOut = false;
|
|
36
|
+
const timeout = controller && timeoutMs > 0 ? setTimeout(() => {
|
|
37
|
+
timedOut = true;
|
|
38
|
+
controller.abort();
|
|
39
|
+
}, timeoutMs) : undefined;
|
|
40
|
+
try {
|
|
41
|
+
const response = await fetchImpl(healthUrl, {
|
|
42
|
+
method: 'GET',
|
|
43
|
+
headers: {},
|
|
44
|
+
signal: controller?.signal
|
|
45
|
+
});
|
|
46
|
+
const body = await readHealthBody(response);
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
return {
|
|
49
|
+
ok: false,
|
|
50
|
+
endpoint,
|
|
51
|
+
reason: 'http',
|
|
52
|
+
status: response.status
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (body?.ok !== true) {
|
|
56
|
+
return {
|
|
57
|
+
ok: false,
|
|
58
|
+
endpoint,
|
|
59
|
+
reason: 'invalid_response',
|
|
60
|
+
status: response.status
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
ok: true,
|
|
65
|
+
endpoint,
|
|
66
|
+
status: response.status
|
|
67
|
+
};
|
|
68
|
+
} catch (error) {
|
|
69
|
+
return {
|
|
70
|
+
ok: false,
|
|
71
|
+
endpoint,
|
|
72
|
+
reason: timedOut ? 'timeout' : 'network',
|
|
73
|
+
error: error instanceof Error ? error.message : String(error)
|
|
74
|
+
};
|
|
75
|
+
} finally {
|
|
76
|
+
if (timeout) {
|
|
77
|
+
clearTimeout(timeout);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=daemonConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reportToDaemon","require","DEFAULT_HEALTH_TIMEOUT_MS","createAbortController","AbortControllerCtor","globalThis","AbortController","undefined","readHealthBody","response","body","json","Array","isArray","checkDaemonConnection","options","endpoint","getDefaultDaemonEndpoint","healthUrl","buildDaemonUrl","fetchImpl","getGlobalFetch","ok","reason","error","timeoutMs","Math","max","controller","timedOut","timeout","setTimeout","abort","method","headers","signal","status","Error","message","String","clearTimeout"],"sourceRoot":"../../../src","sources":["utils/daemonConnection.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.DAEMON_TOKEN_STORAGE_KEY = exports.DAEMON_ENDPOINT_STORAGE_KEY = exports.DAEMON_DEVICE_HOST_STORAGE_KEY = exports.DAEMON_CONNECTION_MODE_STORAGE_KEY = void 0;
|
|
7
|
+
exports.buildDeviceDaemonEndpoint = buildDeviceDaemonEndpoint;
|
|
8
|
+
exports.loadDaemonSettings = loadDaemonSettings;
|
|
9
|
+
exports.normalizeDaemonSettings = normalizeDaemonSettings;
|
|
10
|
+
exports.saveDaemonSettings = saveDaemonSettings;
|
|
11
|
+
const DAEMON_ENDPOINT_STORAGE_KEY = exports.DAEMON_ENDPOINT_STORAGE_KEY = 'debugToolkit_streamEndpoint';
|
|
12
|
+
const DAEMON_TOKEN_STORAGE_KEY = exports.DAEMON_TOKEN_STORAGE_KEY = 'debugToolkit_streamToken';
|
|
13
|
+
const DAEMON_CONNECTION_MODE_STORAGE_KEY = exports.DAEMON_CONNECTION_MODE_STORAGE_KEY = 'debugToolkit_connectionMode';
|
|
14
|
+
const DAEMON_DEVICE_HOST_STORAGE_KEY = exports.DAEMON_DEVICE_HOST_STORAGE_KEY = 'debugToolkit_deviceHost';
|
|
15
|
+
function getAsyncStorage() {
|
|
16
|
+
try {
|
|
17
|
+
const asyncStorageModule = require('@react-native-async-storage/async-storage');
|
|
18
|
+
return asyncStorageModule.default || asyncStorageModule;
|
|
19
|
+
} catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function loadDaemonSettings() {
|
|
24
|
+
const AsyncStorage = getAsyncStorage();
|
|
25
|
+
if (!AsyncStorage) {
|
|
26
|
+
return {
|
|
27
|
+
mode: 'simulator',
|
|
28
|
+
endpoint: '',
|
|
29
|
+
deviceHost: '',
|
|
30
|
+
token: ''
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const [mode, endpoint, deviceHost, token] = await Promise.all([AsyncStorage.getItem(DAEMON_CONNECTION_MODE_STORAGE_KEY), AsyncStorage.getItem(DAEMON_ENDPOINT_STORAGE_KEY), AsyncStorage.getItem(DAEMON_DEVICE_HOST_STORAGE_KEY), AsyncStorage.getItem(DAEMON_TOKEN_STORAGE_KEY)]);
|
|
35
|
+
const inferredMode = readMode(mode, endpoint || '');
|
|
36
|
+
const inferredHost = deviceHost || extractDeviceHost(endpoint || '');
|
|
37
|
+
return {
|
|
38
|
+
mode: inferredMode,
|
|
39
|
+
endpoint: endpoint || '',
|
|
40
|
+
deviceHost: inferredMode === 'device' ? inferredHost : '',
|
|
41
|
+
token: token || ''
|
|
42
|
+
};
|
|
43
|
+
} catch {
|
|
44
|
+
return {
|
|
45
|
+
mode: 'simulator',
|
|
46
|
+
endpoint: '',
|
|
47
|
+
deviceHost: '',
|
|
48
|
+
token: ''
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function saveDaemonSettings(settings) {
|
|
53
|
+
const AsyncStorage = getAsyncStorage();
|
|
54
|
+
if (!AsyncStorage) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const normalized = normalizeDaemonSettings(settings);
|
|
58
|
+
try {
|
|
59
|
+
await Promise.all([AsyncStorage.setItem(DAEMON_CONNECTION_MODE_STORAGE_KEY, settings.mode), AsyncStorage.setItem(DAEMON_DEVICE_HOST_STORAGE_KEY, settings.deviceHost.trim()), AsyncStorage.setItem(DAEMON_ENDPOINT_STORAGE_KEY, normalized.endpoint || ''), AsyncStorage.setItem(DAEMON_TOKEN_STORAGE_KEY, settings.token.trim())]);
|
|
60
|
+
} catch {
|
|
61
|
+
// AsyncStorage unavailable or rejected: keep runtime behavior unchanged.
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function readMode(value, endpoint) {
|
|
65
|
+
if (value === 'device' || value === 'simulator') {
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
return endpoint && !isSimulatorEndpoint(endpoint) ? 'device' : 'simulator';
|
|
69
|
+
}
|
|
70
|
+
function isSimulatorEndpoint(endpoint) {
|
|
71
|
+
try {
|
|
72
|
+
const url = new URL(endpoint);
|
|
73
|
+
return ['localhost', '127.0.0.1', '10.0.2.2'].includes(url.hostname);
|
|
74
|
+
} catch {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function extractDeviceHost(endpoint) {
|
|
79
|
+
try {
|
|
80
|
+
const url = new URL(endpoint);
|
|
81
|
+
return url.port && url.port !== '3799' ? `${url.hostname}:${url.port}` : url.hostname;
|
|
82
|
+
} catch {
|
|
83
|
+
return '';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function buildDeviceDaemonEndpoint(host) {
|
|
87
|
+
const trimmed = host.trim().replace(/\/+$/, '');
|
|
88
|
+
if (!trimmed) {
|
|
89
|
+
return '';
|
|
90
|
+
}
|
|
91
|
+
const withProtocol = /^[a-zA-Z][a-zA-Z\d+.-]*:\/\//.test(trimmed) ? trimmed : `http://${trimmed}`;
|
|
92
|
+
try {
|
|
93
|
+
const url = new URL(withProtocol);
|
|
94
|
+
if (!url.port) {
|
|
95
|
+
url.port = '3799';
|
|
96
|
+
}
|
|
97
|
+
return url.toString().replace(/\/$/, '');
|
|
98
|
+
} catch {
|
|
99
|
+
return withProtocol;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function normalizeDaemonSettings(settings) {
|
|
103
|
+
const endpoint = settings.mode === 'device' ? buildDeviceDaemonEndpoint(settings.deviceHost) : '';
|
|
104
|
+
const token = settings.token.trim();
|
|
105
|
+
return {
|
|
106
|
+
endpoint: endpoint || undefined,
|
|
107
|
+
token: token || undefined
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=daemonSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DAEMON_ENDPOINT_STORAGE_KEY","exports","DAEMON_TOKEN_STORAGE_KEY","DAEMON_CONNECTION_MODE_STORAGE_KEY","DAEMON_DEVICE_HOST_STORAGE_KEY","getAsyncStorage","asyncStorageModule","require","default","loadDaemonSettings","AsyncStorage","mode","endpoint","deviceHost","token","Promise","all","getItem","inferredMode","readMode","inferredHost","extractDeviceHost","saveDaemonSettings","settings","normalized","normalizeDaemonSettings","setItem","trim","value","isSimulatorEndpoint","url","URL","includes","hostname","port","buildDeviceDaemonEndpoint","host","trimmed","replace","withProtocol","test","toString","undefined"],"sourceRoot":"../../../src","sources":["utils/daemonSettings.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildDaemonUrl = buildDaemonUrl;
|
|
7
|
+
exports.getDefaultDaemonEndpoint = getDefaultDaemonEndpoint;
|
|
8
|
+
exports.getGlobalFetch = getGlobalFetch;
|
|
9
|
+
exports.reportDebugSessionToDaemon = reportDebugSessionToDaemon;
|
|
10
|
+
var _reactNative = require("react-native");
|
|
11
|
+
var _network = require("../features/network");
|
|
12
|
+
var _sessionReport = require("./sessionReport");
|
|
13
|
+
const DEFAULT_TIMEOUT_MS = 3000;
|
|
14
|
+
function getGlobalFetch() {
|
|
15
|
+
return globalThis.fetch;
|
|
16
|
+
}
|
|
17
|
+
function createAbortController() {
|
|
18
|
+
const AbortControllerCtor = globalThis.AbortController;
|
|
19
|
+
return AbortControllerCtor ? new AbortControllerCtor() : undefined;
|
|
20
|
+
}
|
|
21
|
+
function getDefaultDaemonEndpoint() {
|
|
22
|
+
if (_reactNative.Platform.OS === 'android') {
|
|
23
|
+
return 'http://10.0.2.2:3799';
|
|
24
|
+
}
|
|
25
|
+
return 'http://localhost:3799';
|
|
26
|
+
}
|
|
27
|
+
function buildDaemonUrl(endpoint, path) {
|
|
28
|
+
const trimmed = endpoint.replace(/\/+$/, '');
|
|
29
|
+
return trimmed.endsWith(path) ? trimmed : `${trimmed}${path}`;
|
|
30
|
+
}
|
|
31
|
+
async function readResponseBody(response) {
|
|
32
|
+
try {
|
|
33
|
+
if (response.json) {
|
|
34
|
+
return await response.json();
|
|
35
|
+
}
|
|
36
|
+
if (response.text) {
|
|
37
|
+
const text = await response.text();
|
|
38
|
+
return text ? JSON.parse(text) : null;
|
|
39
|
+
}
|
|
40
|
+
} catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
function readLogCount(value) {
|
|
46
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
return Object.entries(value).reduce((acc, [key, count]) => {
|
|
50
|
+
if (typeof count === 'number') {
|
|
51
|
+
acc[key] = count;
|
|
52
|
+
}
|
|
53
|
+
return acc;
|
|
54
|
+
}, {});
|
|
55
|
+
}
|
|
56
|
+
async function reportDebugSessionToDaemon(options = {}) {
|
|
57
|
+
const endpoint = options.endpoint ?? getDefaultDaemonEndpoint();
|
|
58
|
+
const reportUrl = buildDaemonUrl(endpoint, '/report');
|
|
59
|
+
const report = (0, _sessionReport.createDebugSessionReport)(options);
|
|
60
|
+
const fetchImpl = getGlobalFetch();
|
|
61
|
+
(0, _network._addDaemonEndpointToNetworkBlacklist)(endpoint);
|
|
62
|
+
(0, _network._addDaemonEndpointToNetworkBlacklist)(reportUrl);
|
|
63
|
+
if (!fetchImpl) {
|
|
64
|
+
return {
|
|
65
|
+
ok: false,
|
|
66
|
+
endpoint,
|
|
67
|
+
report,
|
|
68
|
+
error: 'global fetch is not available'
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const timeoutMs = Math.max(0, options.timeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
72
|
+
const controller = createAbortController();
|
|
73
|
+
const timeout = controller && timeoutMs > 0 ? setTimeout(() => controller.abort(), timeoutMs) : undefined;
|
|
74
|
+
try {
|
|
75
|
+
const headers = {
|
|
76
|
+
'Content-Type': 'application/json'
|
|
77
|
+
};
|
|
78
|
+
if (options.token) {
|
|
79
|
+
headers.Authorization = `Bearer ${options.token}`;
|
|
80
|
+
}
|
|
81
|
+
const response = await fetchImpl(reportUrl, {
|
|
82
|
+
method: 'POST',
|
|
83
|
+
headers,
|
|
84
|
+
body: JSON.stringify(report),
|
|
85
|
+
signal: controller?.signal
|
|
86
|
+
});
|
|
87
|
+
const responseBody = await readResponseBody(response);
|
|
88
|
+
const bodyObject = responseBody && typeof responseBody === 'object' ? responseBody : {};
|
|
89
|
+
return {
|
|
90
|
+
ok: response.ok && bodyObject.ok === true,
|
|
91
|
+
endpoint,
|
|
92
|
+
report,
|
|
93
|
+
status: response.status,
|
|
94
|
+
sessionId: typeof bodyObject.sessionId === 'string' ? bodyObject.sessionId : undefined,
|
|
95
|
+
receivedAt: typeof bodyObject.receivedAt === 'string' ? bodyObject.receivedAt : undefined,
|
|
96
|
+
logCount: readLogCount(bodyObject.logCount),
|
|
97
|
+
error: response.ok ? undefined : typeof bodyObject.error === 'string' ? bodyObject.error : 'Report failed'
|
|
98
|
+
};
|
|
99
|
+
} catch (error) {
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
endpoint,
|
|
103
|
+
report,
|
|
104
|
+
error: error instanceof Error ? error.message : String(error)
|
|
105
|
+
};
|
|
106
|
+
} finally {
|
|
107
|
+
if (timeout) {
|
|
108
|
+
clearTimeout(timeout);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=reportToDaemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_network","_sessionReport","DEFAULT_TIMEOUT_MS","getGlobalFetch","globalThis","fetch","createAbortController","AbortControllerCtor","AbortController","undefined","getDefaultDaemonEndpoint","Platform","OS","buildDaemonUrl","endpoint","path","trimmed","replace","endsWith","readResponseBody","response","json","text","JSON","parse","readLogCount","value","Array","isArray","Object","entries","reduce","acc","key","count","reportDebugSessionToDaemon","options","reportUrl","report","createDebugSessionReport","fetchImpl","_addDaemonEndpointToNetworkBlacklist","ok","error","timeoutMs","Math","max","controller","timeout","setTimeout","abort","headers","token","Authorization","method","body","stringify","signal","responseBody","bodyObject","status","sessionId","receivedAt","logCount","Error","message","String","clearTimeout"],"sourceRoot":"../../../src","sources":["utils/reportToDaemon.ts"],"mappings":"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","ignoreList":[]}
|