rnxsim 0.1.419 → 0.1.420
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/cli/cloud-client.ts +164 -12
- package/cli/cloud-dispatch.ts +7 -2
- package/cli/commands/box/checkout-plane.ts +78 -40
- package/cli/commands/platform.ts +30 -9
- package/cli/outbound-endpoints.ts +6 -0
- package/cli/shell-init.ts +1 -1
- package/cli/ws-bridge.ts +7 -5
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +1 -1
- package/dist-lib/bridge-contract-input.mjs +1 -1
- package/dist-lib/bridge-contract.cjs +1 -1
- package/dist-lib/bridge-contract.mjs +1 -1
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +6 -4
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +55 -28
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +7 -5
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +4 -3
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +9 -6
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +64 -34
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/scripts/dev-server-scanner.ts +9 -5
- package/src/dev-bundle-resolution.ts +6 -3
- package/src/dev-server-open.ts +3 -2
|
@@ -53,7 +53,7 @@ const EXEC_EXIT_GRACE_MS = 2_000
|
|
|
53
53
|
* `/__server-scan` stops answering at all instead of answering "could not
|
|
54
54
|
* look". so we race the child against a real wall-clock deadline and reject
|
|
55
55
|
* with `killed`, which callers already read as could-not-look. */
|
|
56
|
-
function execGuarded(
|
|
56
|
+
async function execGuarded(
|
|
57
57
|
command: string,
|
|
58
58
|
timeout: number,
|
|
59
59
|
extra: { maxBuffer?: number } = {},
|
|
@@ -65,8 +65,9 @@ function execGuarded(
|
|
|
65
65
|
else resolve({ stdout })
|
|
66
66
|
})
|
|
67
67
|
})
|
|
68
|
+
let deadlineTimer: ReturnType<typeof setTimeout> | undefined
|
|
68
69
|
const deadline = new Promise<never>((_resolve, reject) => {
|
|
69
|
-
|
|
70
|
+
deadlineTimer = setTimeout(() => {
|
|
70
71
|
child?.kill('SIGKILL')
|
|
71
72
|
const err = new Error(`\`${command}\` did not exit within ${timeout}ms`)
|
|
72
73
|
// matches the shape `wasKilledByTimeout` reads off a real exec timeout, so
|
|
@@ -74,9 +75,13 @@ function execGuarded(
|
|
|
74
75
|
Object.assign(err, { killed: true })
|
|
75
76
|
reject(err)
|
|
76
77
|
}, timeout + EXEC_EXIT_GRACE_MS)
|
|
77
|
-
timer.unref?.()
|
|
78
78
|
})
|
|
79
|
-
|
|
79
|
+
try {
|
|
80
|
+
return await Promise.race([ran, deadline])
|
|
81
|
+
} finally {
|
|
82
|
+
// the race is settled, so drop the deadline rather than leaving it pending.
|
|
83
|
+
clearTimeout(deadlineTimer)
|
|
84
|
+
}
|
|
80
85
|
}
|
|
81
86
|
|
|
82
87
|
export interface DiscoveredServer {
|
|
@@ -234,7 +239,6 @@ function httpGet(
|
|
|
234
239
|
// the only thing that ever destroys a connection here. by BODY_TIMEOUT_MS a
|
|
235
240
|
// server has long since answered or died, so there is no live write to cut.
|
|
236
241
|
const abandon = setTimeout(() => req.destroy(), BODY_TIMEOUT_MS)
|
|
237
|
-
abandon.unref?.()
|
|
238
242
|
req.on('close', () => {
|
|
239
243
|
clearTimeout(giveUp)
|
|
240
244
|
clearTimeout(abandon)
|
|
@@ -179,12 +179,15 @@ async function probeExpoManifest(
|
|
|
179
179
|
async (res) => (res.ok ? { ok: true as const, body: await res.text() } : null),
|
|
180
180
|
() => undefined,
|
|
181
181
|
)
|
|
182
|
+
let probeDeadline: ReturnType<typeof setTimeout> | undefined
|
|
182
183
|
const answered = await Promise.race([
|
|
183
184
|
pending,
|
|
184
|
-
new Promise<'timeout'>((resolve) =>
|
|
185
|
-
setTimeout(() => resolve('timeout'), MANIFEST_PROBE_TIMEOUT_MS)
|
|
186
|
-
),
|
|
185
|
+
new Promise<'timeout'>((resolve) => {
|
|
186
|
+
probeDeadline = setTimeout(() => resolve('timeout'), MANIFEST_PROBE_TIMEOUT_MS)
|
|
187
|
+
}),
|
|
187
188
|
])
|
|
189
|
+
// the race is settled, so drop the deadline rather than leaving it pending.
|
|
190
|
+
clearTimeout(probeDeadline)
|
|
188
191
|
if (answered === 'timeout' || answered === undefined) return { state: 'no-answer' }
|
|
189
192
|
if (answered === null) return { state: 'no-manifest' }
|
|
190
193
|
body = answered.body
|
package/src/dev-server-open.ts
CHANGED
|
@@ -129,9 +129,11 @@ export function openRnxDesktopWhenMetroIsReady({
|
|
|
129
129
|
|
|
130
130
|
return new Promise((resolve) => {
|
|
131
131
|
let finished = false
|
|
132
|
+
let retryTimer: ReturnType<typeof setTimeout> | undefined
|
|
132
133
|
const finish = (opened: boolean) => {
|
|
133
134
|
if (finished) return
|
|
134
135
|
finished = true
|
|
136
|
+
clearTimeout(retryTimer)
|
|
135
137
|
scheduledMetroOpens.delete(key)
|
|
136
138
|
resolve(opened)
|
|
137
139
|
}
|
|
@@ -144,8 +146,7 @@ export function openRnxDesktopWhenMetroIsReady({
|
|
|
144
146
|
finish(false)
|
|
145
147
|
return
|
|
146
148
|
}
|
|
147
|
-
|
|
148
|
-
timer.unref()
|
|
149
|
+
retryTimer = setTimeout(check, intervalMs)
|
|
149
150
|
}
|
|
150
151
|
const check = () => {
|
|
151
152
|
const request = http.get(
|