rnxsim 0.1.409 → 0.1.411
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 +54 -32
- package/cli/cloud-dispatch.ts +2 -2
- package/cli/cloud-session.ts +23 -5
- package/cli/commands/platform.ts +7 -7
- package/cli/outbound-endpoints.ts +2 -2
- 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 +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +10 -6
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/src/cloud-contract.ts +11 -0
package/cli/cloud-client.ts
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
import {
|
|
13
13
|
isRnxCloudCommandType,
|
|
14
14
|
RNX_CLOUD_MAX_ARTIFACT_BYTES,
|
|
15
|
-
type
|
|
15
|
+
type RnxCloudBoxCreateReceipt,
|
|
16
16
|
} from '../src/cloud-contract'
|
|
17
17
|
import { rnxPublicBrand } from '../src/public-brand'
|
|
18
18
|
import {
|
|
@@ -31,7 +31,7 @@ import type {
|
|
|
31
31
|
export const DEFAULT_RNX_CLOUD_ORIGIN = rnxPublicBrand.origin
|
|
32
32
|
export const MAX_RNX_CLOUD_BUNDLE_BYTES = RNX_CLOUD_MAX_ARTIFACT_BYTES
|
|
33
33
|
|
|
34
|
-
interface
|
|
34
|
+
interface CreateCloudBoxOptions {
|
|
35
35
|
bundlePath: string
|
|
36
36
|
device: string
|
|
37
37
|
authorization: string
|
|
@@ -165,46 +165,64 @@ function readCreateResponse(
|
|
|
165
165
|
expectedBytes: number,
|
|
166
166
|
expectedSha256: string,
|
|
167
167
|
): {
|
|
168
|
-
receipt:
|
|
169
|
-
|
|
168
|
+
receipt: RnxCloudBoxCreateReceipt
|
|
169
|
+
boxToken: string
|
|
170
|
+
simulatorToken: string
|
|
170
171
|
} {
|
|
171
172
|
if (!isRecord(value)) throw new Error('RNX Cloud create returned invalid JSON')
|
|
172
|
-
const
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
173
|
+
const artifactId = `sha256:${expectedSha256}` as const
|
|
174
|
+
const isExpectedArtifact = (artifact: unknown): artifact is { bytes: number } =>
|
|
175
|
+
isRecord(artifact) &&
|
|
176
|
+
artifact.id === artifactId &&
|
|
177
|
+
typeof artifact.bytes === 'number' &&
|
|
178
|
+
Number.isInteger(artifact.bytes) &&
|
|
179
|
+
artifact.bytes === expectedBytes
|
|
180
|
+
const boxId = value.boxId
|
|
181
|
+
const boxToken = value.token
|
|
182
|
+
const simulator = value.simulator
|
|
183
|
+
const simId = isRecord(simulator) ? simulator.simId : null
|
|
184
|
+
const claim = isRecord(simulator) ? simulator.claim : null
|
|
185
|
+
const simulatorToken = isRecord(simulator) ? simulator.token : null
|
|
176
186
|
if (
|
|
187
|
+
typeof boxId !== 'string' ||
|
|
188
|
+
!boxId ||
|
|
189
|
+
value.size !== 'nano' ||
|
|
190
|
+
typeof boxToken !== 'string' ||
|
|
191
|
+
!boxToken ||
|
|
192
|
+
!isExpectedArtifact(value.artifact) ||
|
|
193
|
+
!isRecord(simulator) ||
|
|
177
194
|
typeof simId !== 'string' ||
|
|
178
195
|
!simId ||
|
|
179
|
-
!
|
|
180
|
-
typeof artifact.id !== 'string' ||
|
|
181
|
-
artifact.id !== `sha256:${expectedSha256}` ||
|
|
182
|
-
typeof artifact.bytes !== 'number' ||
|
|
183
|
-
!Number.isInteger(artifact.bytes) ||
|
|
184
|
-
artifact.bytes !== expectedBytes ||
|
|
196
|
+
!isExpectedArtifact(simulator.artifact) ||
|
|
185
197
|
!isRecord(claim) ||
|
|
186
198
|
typeof claim.id !== 'string' ||
|
|
187
199
|
!claim.id ||
|
|
188
200
|
typeof claim.expiresAt !== 'number' ||
|
|
189
|
-
typeof
|
|
190
|
-
!
|
|
201
|
+
typeof simulatorToken !== 'string' ||
|
|
202
|
+
!simulatorToken
|
|
191
203
|
) {
|
|
192
|
-
throw new Error('RNX Cloud create returned an invalid
|
|
204
|
+
throw new Error('RNX Cloud create returned an invalid box receipt')
|
|
193
205
|
}
|
|
194
206
|
return {
|
|
195
207
|
receipt: {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
208
|
+
boxId,
|
|
209
|
+
size: 'nano',
|
|
210
|
+
artifact: { id: artifactId, bytes: expectedBytes },
|
|
211
|
+
simulator: {
|
|
212
|
+
simId,
|
|
213
|
+
artifact: { id: artifactId, bytes: expectedBytes },
|
|
214
|
+
claim: { id: claim.id, expiresAt: claim.expiresAt },
|
|
215
|
+
},
|
|
199
216
|
},
|
|
200
|
-
|
|
217
|
+
boxToken,
|
|
218
|
+
simulatorToken,
|
|
201
219
|
}
|
|
202
220
|
}
|
|
203
221
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
): Promise<{
|
|
207
|
-
receipt:
|
|
222
|
+
// `rnx ios --cloud <bundle>` creates a nano box around the artifact with its
|
|
223
|
+
// first simulator in one request, and the shell then targets that box
|
|
224
|
+
export async function createCloudBox(options: CreateCloudBoxOptions): Promise<{
|
|
225
|
+
receipt: RnxCloudBoxCreateReceipt
|
|
208
226
|
session: CloudSession
|
|
209
227
|
artifact: RnxCloudArtifactReceipt
|
|
210
228
|
}> {
|
|
@@ -215,11 +233,12 @@ export async function createCloudSimulator(
|
|
|
215
233
|
)
|
|
216
234
|
let response: Response
|
|
217
235
|
try {
|
|
218
|
-
response = await fetch(`${apiOrigin}/v1/
|
|
236
|
+
response = await fetch(`${apiOrigin}/v1/boxes`, {
|
|
219
237
|
method: 'POST',
|
|
220
238
|
headers: {
|
|
221
239
|
authorization: options.authorization,
|
|
222
240
|
'content-type': 'application/javascript',
|
|
241
|
+
'x-rnx-box-size': 'nano',
|
|
223
242
|
'x-rnx-artifact-sha256': artifact.sha256,
|
|
224
243
|
'x-rnx-platform': 'ios',
|
|
225
244
|
'x-rnx-device': options.device,
|
|
@@ -243,10 +262,12 @@ export async function createCloudSimulator(
|
|
|
243
262
|
}
|
|
244
263
|
const created = readCreateResponse(parsed, artifact.bytes.length, artifact.sha256)
|
|
245
264
|
const session = createCloudSession({
|
|
246
|
-
|
|
265
|
+
boxId: created.receipt.boxId,
|
|
266
|
+
boxToken: created.boxToken,
|
|
267
|
+
simId: created.receipt.simulator.simId,
|
|
247
268
|
apiOrigin,
|
|
248
|
-
claimId: created.receipt.claim.id,
|
|
249
|
-
token: created.
|
|
269
|
+
claimId: created.receipt.simulator.claim.id,
|
|
270
|
+
token: created.simulatorToken,
|
|
250
271
|
})
|
|
251
272
|
return { receipt: created.receipt, session, artifact: artifact.receipt }
|
|
252
273
|
}
|
|
@@ -414,12 +435,13 @@ export async function confirmCloudSimulator(session: CloudSession): Promise<void
|
|
|
414
435
|
}
|
|
415
436
|
}
|
|
416
437
|
|
|
417
|
-
|
|
438
|
+
// deletes the box, which closes every simulator it holds
|
|
439
|
+
export async function closeCloudBox(session: CloudSession): Promise<void> {
|
|
418
440
|
const response = await fetch(
|
|
419
|
-
`${session.apiOrigin}/v1/
|
|
441
|
+
`${session.apiOrigin}/v1/boxes/${encodeURIComponent(session.boxId)}`,
|
|
420
442
|
{
|
|
421
443
|
method: 'DELETE',
|
|
422
|
-
headers: { authorization: `Bearer ${session.
|
|
444
|
+
headers: { authorization: `Bearer ${session.boxToken}` },
|
|
423
445
|
},
|
|
424
446
|
)
|
|
425
447
|
const text = await response.text()
|
package/cli/cloud-dispatch.ts
CHANGED
|
@@ -148,9 +148,9 @@ export async function dispatchCloudBoundary({
|
|
|
148
148
|
}
|
|
149
149
|
try {
|
|
150
150
|
const descriptor = cloudSession.requireCloudSessionShellUpdate()
|
|
151
|
-
await cloudClient.
|
|
151
|
+
await cloudClient.closeCloudBox(session)
|
|
152
152
|
cloudSession.publishCloudSessionToShell(null, descriptor)
|
|
153
|
-
console.log(` closed: ${session.simId}`)
|
|
153
|
+
console.log(` closed: box ${session.boxId} and simulator ${session.simId}`)
|
|
154
154
|
return { handled: true, code: 0 }
|
|
155
155
|
} catch (error) {
|
|
156
156
|
console.error(
|
package/cli/cloud-session.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { fstatSync, writeSync } from 'node:fs'
|
|
2
2
|
import { isLoopbackHost } from '../src/backend-origin'
|
|
3
3
|
|
|
4
|
-
const CLOUD_SESSION_VERSION =
|
|
4
|
+
const CLOUD_SESSION_VERSION = 2 as const
|
|
5
5
|
const SHELL_UPDATE_FD_ENV = 'RNX_SHELL_UPDATE_FD'
|
|
6
6
|
const MAX_ENCODED_SESSION_BYTES = 32 * 1024
|
|
7
7
|
|
|
@@ -10,8 +10,12 @@ export const RNX_SHELL_UPDATE_PREFIX = '__RNX_SHELL_UPDATE_V1__'
|
|
|
10
10
|
export const RNX_SHELL_UPDATE_SET_PREFIX = `${RNX_SHELL_UPDATE_PREFIX}set:`
|
|
11
11
|
export const RNX_SHELL_UPDATE_UNSET = `${RNX_SHELL_UPDATE_PREFIX}unset`
|
|
12
12
|
|
|
13
|
+
// the shell's target: one nano box, addressed by the box token, and the
|
|
14
|
+
// simulator inside it that ordinary commands reach with the simulator token
|
|
13
15
|
export interface CloudSession {
|
|
14
|
-
version:
|
|
16
|
+
version: 2
|
|
17
|
+
boxId: string
|
|
18
|
+
boxToken: string
|
|
15
19
|
simId: string
|
|
16
20
|
apiOrigin: string
|
|
17
21
|
claimId: string
|
|
@@ -46,6 +50,8 @@ export function normalizeCloudOrigin(source: string): string {
|
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
export function createCloudSession(input: {
|
|
53
|
+
boxId: string
|
|
54
|
+
boxToken: string
|
|
49
55
|
simId: string
|
|
50
56
|
apiOrigin: string
|
|
51
57
|
claimId: string
|
|
@@ -53,13 +59,21 @@ export function createCloudSession(input: {
|
|
|
53
59
|
}): CloudSession {
|
|
54
60
|
const session = {
|
|
55
61
|
version: CLOUD_SESSION_VERSION,
|
|
62
|
+
boxId: input.boxId.trim(),
|
|
63
|
+
boxToken: input.boxToken,
|
|
56
64
|
simId: input.simId.trim(),
|
|
57
65
|
apiOrigin: normalizeCloudOrigin(input.apiOrigin.trim()),
|
|
58
66
|
claimId: input.claimId.trim(),
|
|
59
67
|
token: input.token,
|
|
60
68
|
} satisfies CloudSession
|
|
61
|
-
if (
|
|
62
|
-
|
|
69
|
+
if (
|
|
70
|
+
!session.boxId ||
|
|
71
|
+
!session.boxToken ||
|
|
72
|
+
!session.simId ||
|
|
73
|
+
!session.claimId ||
|
|
74
|
+
!session.token
|
|
75
|
+
) {
|
|
76
|
+
throw new Error('cloud session requires box, simulator, origin, claim, and tokens')
|
|
63
77
|
}
|
|
64
78
|
return session
|
|
65
79
|
}
|
|
@@ -92,11 +106,15 @@ export function parseCloudSession(encoded: string): CloudSession {
|
|
|
92
106
|
if (!isRecord(parsed) || parsed.version !== CLOUD_SESSION_VERSION) {
|
|
93
107
|
throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`)
|
|
94
108
|
}
|
|
109
|
+
const boxId = parsed.boxId
|
|
110
|
+
const boxToken = parsed.boxToken
|
|
95
111
|
const simId = parsed.simId
|
|
96
112
|
const apiOrigin = parsed.apiOrigin
|
|
97
113
|
const claimId = parsed.claimId
|
|
98
114
|
const token = parsed.token
|
|
99
115
|
if (
|
|
116
|
+
typeof boxId !== 'string' ||
|
|
117
|
+
typeof boxToken !== 'string' ||
|
|
100
118
|
typeof simId !== 'string' ||
|
|
101
119
|
typeof apiOrigin !== 'string' ||
|
|
102
120
|
typeof claimId !== 'string' ||
|
|
@@ -105,7 +123,7 @@ export function parseCloudSession(encoded: string): CloudSession {
|
|
|
105
123
|
throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`)
|
|
106
124
|
}
|
|
107
125
|
try {
|
|
108
|
-
return createCloudSession({ simId, apiOrigin, claimId, token })
|
|
126
|
+
return createCloudSession({ boxId, boxToken, simId, apiOrigin, claimId, token })
|
|
109
127
|
} catch {
|
|
110
128
|
throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`)
|
|
111
129
|
}
|
package/cli/commands/platform.ts
CHANGED
|
@@ -130,15 +130,14 @@ export async function runPlatformCommand(
|
|
|
130
130
|
} = await import('../cloud-session')
|
|
131
131
|
if (readCloudSession()) {
|
|
132
132
|
throw new Error(
|
|
133
|
-
'this shell already
|
|
133
|
+
'this shell already targets an RNX Cloud box; run `rnx close` or create the next box in another shell',
|
|
134
134
|
)
|
|
135
135
|
}
|
|
136
136
|
const descriptor = requireCloudSessionShellUpdate()
|
|
137
137
|
const { authHeaderOrExit } = await import('../auth')
|
|
138
|
-
const {
|
|
139
|
-
await import('../cloud-client')
|
|
138
|
+
const { closeCloudBox, createCloudBox } = await import('../cloud-client')
|
|
140
139
|
const { header } = authHeaderOrExit('ios --cloud')
|
|
141
|
-
const created = await
|
|
140
|
+
const created = await createCloudBox({
|
|
142
141
|
bundlePath: input.bundlePath,
|
|
143
142
|
assetsPath: input.assetsPath ?? undefined,
|
|
144
143
|
device: selectedDevice,
|
|
@@ -147,12 +146,13 @@ export async function runPlatformCommand(
|
|
|
147
146
|
try {
|
|
148
147
|
publishCloudSessionToShell(created.session, descriptor)
|
|
149
148
|
} catch (error) {
|
|
150
|
-
await
|
|
149
|
+
await closeCloudBox(created.session)
|
|
151
150
|
throw error
|
|
152
151
|
}
|
|
153
152
|
const receipt = created.receipt
|
|
154
153
|
const produced = created.artifact
|
|
155
|
-
console.log(` cloud
|
|
154
|
+
console.log(` cloud box: ${receipt.boxId} (nano)`)
|
|
155
|
+
console.log(` simulator: ${receipt.simulator.simId}`)
|
|
156
156
|
console.log(` artifact: ${receipt.artifact.id} (${receipt.artifact.bytes} bytes)`)
|
|
157
157
|
console.log(
|
|
158
158
|
` source bundle: sha256:${produced.source.sha256} (${produced.source.bytes} bytes)`,
|
|
@@ -163,7 +163,7 @@ export async function runPlatformCommand(
|
|
|
163
163
|
console.log(
|
|
164
164
|
` embedded assets: ${produced.assets.descriptors} descriptors, ${produced.assets.variants} scales, ${produced.assets.bytes} bytes (${produced.assets.encodedBytes} encoded)`,
|
|
165
165
|
)
|
|
166
|
-
console.log(` claim expires: ${receipt.claim.expiresAt}`)
|
|
166
|
+
console.log(` claim expires: ${receipt.simulator.claim.expiresAt}`)
|
|
167
167
|
console.log(
|
|
168
168
|
' commands: describe, find, get tree|node|count|memory, wait ready|selector, do, reset, logs, state, screenshot',
|
|
169
169
|
)
|
|
@@ -121,13 +121,13 @@ export interface OutboundCallDeclaration {
|
|
|
121
121
|
// a new fetch, websocket, node HTTP request, or TCP connection has no entry and
|
|
122
122
|
// fails the package test until its destination and consent behavior are declared.
|
|
123
123
|
export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> = {
|
|
124
|
-
'packages/sootsim/cli/cloud-client.ts :: fetch :: `${apiOrigin}/v1/
|
|
124
|
+
'packages/sootsim/cli/cloud-client.ts :: fetch :: `${apiOrigin}/v1/boxes`': {
|
|
125
125
|
category: 'rnx_cloud_sim',
|
|
126
126
|
count: 1,
|
|
127
127
|
},
|
|
128
128
|
'packages/sootsim/cli/cloud-client.ts :: fetch :: `${session.apiOrigin}/v1/sims/${encodeURIComponent(session.simId)}/claim`':
|
|
129
129
|
{ category: 'rnx_cloud_sim', count: 1 },
|
|
130
|
-
'packages/sootsim/cli/cloud-client.ts :: fetch :: `${session.apiOrigin}/v1/
|
|
130
|
+
'packages/sootsim/cli/cloud-client.ts :: fetch :: `${session.apiOrigin}/v1/boxes/${encodeURIComponent(session.boxId)}`':
|
|
131
131
|
{ category: 'rnx_cloud_sim', count: 1 },
|
|
132
132
|
'packages/sootsim/cli/cloud-client.ts :: fetch :: `${this.session.apiOrigin}/v1/sims/${encodeURIComponent(this.session.simId)}/commands`':
|
|
133
133
|
{ category: 'rnx_cloud_sim', count: 1 },
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/beta.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/beta.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/detox/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/host/fetch-proxy-overrides.ts
|
|
4
4
|
var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/menu.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/menu.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/sdk.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/sdk.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -21509,13 +21509,15 @@ function normalizeCloudOrigin(source) {
|
|
|
21509
21509
|
function createCloudSession(input) {
|
|
21510
21510
|
const session = {
|
|
21511
21511
|
version: CLOUD_SESSION_VERSION,
|
|
21512
|
+
boxId: input.boxId.trim(),
|
|
21513
|
+
boxToken: input.boxToken,
|
|
21512
21514
|
simId: input.simId.trim(),
|
|
21513
21515
|
apiOrigin: normalizeCloudOrigin(input.apiOrigin.trim()),
|
|
21514
21516
|
claimId: input.claimId.trim(),
|
|
21515
21517
|
token: input.token
|
|
21516
21518
|
};
|
|
21517
|
-
if (!session.simId || !session.claimId || !session.token) {
|
|
21518
|
-
throw new Error("cloud session requires simulator, origin, claim, and
|
|
21519
|
+
if (!session.boxId || !session.boxToken || !session.simId || !session.claimId || !session.token) {
|
|
21520
|
+
throw new Error("cloud session requires box, simulator, origin, claim, and tokens");
|
|
21519
21521
|
}
|
|
21520
21522
|
return session;
|
|
21521
21523
|
}
|
|
@@ -21537,15 +21539,17 @@ function parseCloudSession(encoded) {
|
|
|
21537
21539
|
if (!isRecord3(parsed) || parsed.version !== CLOUD_SESSION_VERSION) {
|
|
21538
21540
|
throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
|
|
21539
21541
|
}
|
|
21542
|
+
const boxId = parsed.boxId;
|
|
21543
|
+
const boxToken = parsed.boxToken;
|
|
21540
21544
|
const simId = parsed.simId;
|
|
21541
21545
|
const apiOrigin = parsed.apiOrigin;
|
|
21542
21546
|
const claimId = parsed.claimId;
|
|
21543
21547
|
const token = parsed.token;
|
|
21544
|
-
if (typeof simId !== "string" || typeof apiOrigin !== "string" || typeof claimId !== "string" || typeof token !== "string") {
|
|
21548
|
+
if (typeof boxId !== "string" || typeof boxToken !== "string" || typeof simId !== "string" || typeof apiOrigin !== "string" || typeof claimId !== "string" || typeof token !== "string") {
|
|
21545
21549
|
throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
|
|
21546
21550
|
}
|
|
21547
21551
|
try {
|
|
21548
|
-
return createCloudSession({ simId, apiOrigin, claimId, token });
|
|
21552
|
+
return createCloudSession({ boxId, boxToken, simId, apiOrigin, claimId, token });
|
|
21549
21553
|
} catch {
|
|
21550
21554
|
throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
|
|
21551
21555
|
}
|
|
@@ -21559,7 +21563,7 @@ var init_cloud_session = __esm({
|
|
|
21559
21563
|
"cli/cloud-session.ts"() {
|
|
21560
21564
|
"use strict";
|
|
21561
21565
|
init_backend_origin();
|
|
21562
|
-
CLOUD_SESSION_VERSION =
|
|
21566
|
+
CLOUD_SESSION_VERSION = 2;
|
|
21563
21567
|
MAX_ENCODED_SESSION_BYTES = 32 * 1024;
|
|
21564
21568
|
RNX_CLOUD_SESSION_ENV = "RNX_CLOUD_SESSION";
|
|
21565
21569
|
RNX_SHELL_UPDATE_PREFIX = "__RNX_SHELL_UPDATE_V1__";
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.411 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/package.json
CHANGED
package/src/cloud-contract.ts
CHANGED
|
@@ -45,3 +45,14 @@ export interface RnxCloudCreateReceipt {
|
|
|
45
45
|
}
|
|
46
46
|
claim: RnxCloudClaim
|
|
47
47
|
}
|
|
48
|
+
|
|
49
|
+
// a nano box is created around one artifact with its first simulator
|
|
50
|
+
export interface RnxCloudBoxCreateReceipt {
|
|
51
|
+
boxId: string
|
|
52
|
+
size: 'nano'
|
|
53
|
+
artifact: {
|
|
54
|
+
id: `sha256:${string}`
|
|
55
|
+
bytes: number
|
|
56
|
+
}
|
|
57
|
+
simulator: RnxCloudCreateReceipt
|
|
58
|
+
}
|