rnxsim 0.1.444 → 0.1.445
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/auth.ts +2 -2
- package/cli/cloud-client.ts +13 -13
- package/cli/cloud-session.ts +1 -1
- package/cli/send-to-box.ts +7 -7
- 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/cloud.cjs +1 -1
- package/dist-lib/cloud.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 +178 -178
- 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 +4 -4
- 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 +178 -178
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/src/auth/shared-session.ts +1 -1
- package/src/cloud-contract.ts +1 -1
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.445 | (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;
|
|
@@ -22036,6 +22036,180 @@ var init_metroCloudArtifact = __esm({
|
|
|
22036
22036
|
}
|
|
22037
22037
|
});
|
|
22038
22038
|
|
|
22039
|
+
// ../sootsim-engine/src/metro-fingerprint-registry-client.ts
|
|
22040
|
+
function pointerUrl(options) {
|
|
22041
|
+
return options.pointerUrl ?? new URL(import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_POINTER_PATH, DEFAULT_REGISTRY_ORIGIN).toString();
|
|
22042
|
+
}
|
|
22043
|
+
async function sha256Hex(bytes) {
|
|
22044
|
+
const input = new Uint8Array(bytes.byteLength);
|
|
22045
|
+
input.set(bytes);
|
|
22046
|
+
const digest = new Uint8Array(await crypto.subtle.digest("SHA-256", input.buffer));
|
|
22047
|
+
return [...digest].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
22048
|
+
}
|
|
22049
|
+
async function openRegistryCache() {
|
|
22050
|
+
if (typeof globalThis.caches?.open !== "function") return null;
|
|
22051
|
+
try {
|
|
22052
|
+
return await globalThis.caches.open(REGISTRY_CACHE_NAME);
|
|
22053
|
+
} catch {
|
|
22054
|
+
return null;
|
|
22055
|
+
}
|
|
22056
|
+
}
|
|
22057
|
+
function cacheKey(baseUrl, suffix) {
|
|
22058
|
+
const url = new URL(baseUrl);
|
|
22059
|
+
url.pathname = `${url.pathname.replace(/\/[^/]*$/, "")}/.rnx-fingerprint-cache/${suffix}`;
|
|
22060
|
+
url.search = "";
|
|
22061
|
+
url.hash = "";
|
|
22062
|
+
return new Request(url.toString());
|
|
22063
|
+
}
|
|
22064
|
+
async function parseRegistryBytes(args) {
|
|
22065
|
+
if (args.bytes.byteLength > import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES) {
|
|
22066
|
+
throw new Error(
|
|
22067
|
+
`RNX Metro fingerprint registry exceeds ${import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES} bytes`
|
|
22068
|
+
);
|
|
22069
|
+
}
|
|
22070
|
+
const integrity = await sha256Hex(args.bytes);
|
|
22071
|
+
if (integrity !== args.expectedIntegrity) {
|
|
22072
|
+
throw new Error("RNX Metro fingerprint registry integrity mismatch");
|
|
22073
|
+
}
|
|
22074
|
+
let parsed;
|
|
22075
|
+
try {
|
|
22076
|
+
parsed = JSON.parse(new TextDecoder().decode(args.bytes));
|
|
22077
|
+
} catch {
|
|
22078
|
+
throw new Error("RNX Metro fingerprint registry is not valid JSON");
|
|
22079
|
+
}
|
|
22080
|
+
const registry = (0, import_metro_fingerprint_registry.parseRNXMetroFingerprintRegistry)(parsed);
|
|
22081
|
+
if (!registry) throw new Error("RNX Metro fingerprint registry is malformed");
|
|
22082
|
+
if (args.expectedRevision && registry.revision !== args.expectedRevision) {
|
|
22083
|
+
throw new Error("RNX Metro fingerprint registry revision does not match its pointer");
|
|
22084
|
+
}
|
|
22085
|
+
return { registry, integrity, source: args.source };
|
|
22086
|
+
}
|
|
22087
|
+
async function readCachedRegistry(cache, baseUrl, integrity, expectedRevision) {
|
|
22088
|
+
const response = await cache.match(cacheKey(baseUrl, integrity));
|
|
22089
|
+
if (!response?.ok) return null;
|
|
22090
|
+
try {
|
|
22091
|
+
return await parseRegistryBytes({
|
|
22092
|
+
bytes: new Uint8Array(await response.arrayBuffer()),
|
|
22093
|
+
expectedIntegrity: integrity,
|
|
22094
|
+
expectedRevision,
|
|
22095
|
+
source: "cache"
|
|
22096
|
+
});
|
|
22097
|
+
} catch {
|
|
22098
|
+
return null;
|
|
22099
|
+
}
|
|
22100
|
+
}
|
|
22101
|
+
async function readLastCachedRegistry(cache, baseUrl) {
|
|
22102
|
+
const memoryReceipt = memoryReceipts.get(baseUrl);
|
|
22103
|
+
if (!cache) return memoryReceipt ? { ...memoryReceipt, source: "cache" } : null;
|
|
22104
|
+
const latest = await cache.match(cacheKey(baseUrl, "latest"));
|
|
22105
|
+
if (!latest?.ok) return memoryReceipt ? { ...memoryReceipt, source: "cache" } : null;
|
|
22106
|
+
const integrity = latest.headers.get("x-rnx-registry-integrity");
|
|
22107
|
+
if (!integrity || !/^[a-f0-9]{64}$/.test(integrity)) {
|
|
22108
|
+
return memoryReceipt ? { ...memoryReceipt, source: "cache" } : null;
|
|
22109
|
+
}
|
|
22110
|
+
return await readCachedRegistry(cache, baseUrl, integrity) ?? (memoryReceipt ? { ...memoryReceipt, source: "cache" } : null);
|
|
22111
|
+
}
|
|
22112
|
+
async function writeCachedRegistry(cache, baseUrl, bytes, receipt) {
|
|
22113
|
+
memoryReceipts.set(baseUrl, receipt);
|
|
22114
|
+
if (!cache) return;
|
|
22115
|
+
const headers = {
|
|
22116
|
+
"content-type": "application/json",
|
|
22117
|
+
"x-rnx-registry-integrity": receipt.integrity
|
|
22118
|
+
};
|
|
22119
|
+
try {
|
|
22120
|
+
await cache.put(
|
|
22121
|
+
cacheKey(baseUrl, receipt.integrity),
|
|
22122
|
+
new Response(bytes.slice(), { headers })
|
|
22123
|
+
);
|
|
22124
|
+
await cache.put(cacheKey(baseUrl, "latest"), new Response("", { headers }));
|
|
22125
|
+
} catch {
|
|
22126
|
+
}
|
|
22127
|
+
}
|
|
22128
|
+
async function readPointer(response) {
|
|
22129
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
22130
|
+
if (bytes.byteLength > import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_POINTER_BYTES) {
|
|
22131
|
+
throw new Error(
|
|
22132
|
+
`RNX Metro fingerprint pointer exceeds ${import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_POINTER_BYTES} bytes`
|
|
22133
|
+
);
|
|
22134
|
+
}
|
|
22135
|
+
let parsed;
|
|
22136
|
+
try {
|
|
22137
|
+
parsed = JSON.parse(new TextDecoder().decode(bytes));
|
|
22138
|
+
} catch {
|
|
22139
|
+
throw new Error("RNX Metro fingerprint pointer is not valid JSON");
|
|
22140
|
+
}
|
|
22141
|
+
const pointer = (0, import_metro_fingerprint_registry.parseRNXMetroFingerprintPointer)(parsed);
|
|
22142
|
+
if (!pointer) throw new Error("RNX Metro fingerprint pointer is malformed");
|
|
22143
|
+
return pointer;
|
|
22144
|
+
}
|
|
22145
|
+
async function loadMetroFingerprintRegistry(options = {}) {
|
|
22146
|
+
const baseUrl = pointerUrl(options);
|
|
22147
|
+
const request = options.fetch ?? globalThis.fetch;
|
|
22148
|
+
const cache = await openRegistryCache();
|
|
22149
|
+
let pointer;
|
|
22150
|
+
try {
|
|
22151
|
+
const response = await request(baseUrl, { cache: "no-store" });
|
|
22152
|
+
if (!response.ok) {
|
|
22153
|
+
throw new Error(`RNX Metro fingerprint pointer answered ${response.status}`);
|
|
22154
|
+
}
|
|
22155
|
+
pointer = await readPointer(response);
|
|
22156
|
+
} catch (error) {
|
|
22157
|
+
const fallback = await readLastCachedRegistry(cache, baseUrl);
|
|
22158
|
+
if (fallback) return fallback;
|
|
22159
|
+
throw error;
|
|
22160
|
+
}
|
|
22161
|
+
const memoryReceipt = memoryReceipts.get(baseUrl);
|
|
22162
|
+
if (memoryReceipt?.integrity === pointer.integrity && memoryReceipt.registry.revision === pointer.revision) {
|
|
22163
|
+
return { ...memoryReceipt, source: "cache" };
|
|
22164
|
+
}
|
|
22165
|
+
const cached4 = cache ? await readCachedRegistry(cache, baseUrl, pointer.integrity, pointer.revision) : null;
|
|
22166
|
+
if (cached4) {
|
|
22167
|
+
memoryReceipts.set(baseUrl, cached4);
|
|
22168
|
+
return cached4;
|
|
22169
|
+
}
|
|
22170
|
+
try {
|
|
22171
|
+
const payloadUrl = new URL(pointer.payloadUrl, baseUrl).toString();
|
|
22172
|
+
const response = await request(payloadUrl, { cache: "force-cache" });
|
|
22173
|
+
if (!response.ok) {
|
|
22174
|
+
throw new Error(`RNX Metro fingerprint registry answered ${response.status}`);
|
|
22175
|
+
}
|
|
22176
|
+
const declaredLength = Number(response.headers.get("content-length"));
|
|
22177
|
+
if (Number.isFinite(declaredLength) && declaredLength > import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES) {
|
|
22178
|
+
throw new Error(
|
|
22179
|
+
`RNX Metro fingerprint registry exceeds ${import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES} bytes`
|
|
22180
|
+
);
|
|
22181
|
+
}
|
|
22182
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
22183
|
+
if (bytes.byteLength !== pointer.bytes) {
|
|
22184
|
+
throw new Error(
|
|
22185
|
+
"RNX Metro fingerprint registry byte length does not match its pointer"
|
|
22186
|
+
);
|
|
22187
|
+
}
|
|
22188
|
+
const receipt = await parseRegistryBytes({
|
|
22189
|
+
bytes,
|
|
22190
|
+
expectedIntegrity: pointer.integrity,
|
|
22191
|
+
expectedRevision: pointer.revision,
|
|
22192
|
+
source: "network"
|
|
22193
|
+
});
|
|
22194
|
+
await writeCachedRegistry(cache, baseUrl, bytes, receipt);
|
|
22195
|
+
return receipt;
|
|
22196
|
+
} catch (error) {
|
|
22197
|
+
const fallback = await readLastCachedRegistry(cache, baseUrl);
|
|
22198
|
+
if (fallback) return fallback;
|
|
22199
|
+
throw error;
|
|
22200
|
+
}
|
|
22201
|
+
}
|
|
22202
|
+
var import_metro_fingerprint_registry, REGISTRY_CACHE_NAME, DEFAULT_REGISTRY_ORIGIN, memoryReceipts;
|
|
22203
|
+
var init_metro_fingerprint_registry_client = __esm({
|
|
22204
|
+
"../sootsim-engine/src/metro-fingerprint-registry-client.ts"() {
|
|
22205
|
+
"use strict";
|
|
22206
|
+
import_metro_fingerprint_registry = require("rnxsim/metro-fingerprint-registry");
|
|
22207
|
+
REGISTRY_CACHE_NAME = "rnx-metro-fingerprints-v1";
|
|
22208
|
+
DEFAULT_REGISTRY_ORIGIN = "https://contrast.dev";
|
|
22209
|
+
memoryReceipts = /* @__PURE__ */ new Map();
|
|
22210
|
+
}
|
|
22211
|
+
});
|
|
22212
|
+
|
|
22039
22213
|
// ../compat/src/stub-manifest.ts
|
|
22040
22214
|
var COMPAT_REACT_NATIVE_DEEP_STUBS;
|
|
22041
22215
|
var init_stub_manifest = __esm({
|
|
@@ -22376,7 +22550,7 @@ function metroFingerprintDiscriminators(input) {
|
|
|
22376
22550
|
return { key: `${kind}:${fnv1a64(encoded)}`, cost: encoded.length };
|
|
22377
22551
|
});
|
|
22378
22552
|
}
|
|
22379
|
-
async function
|
|
22553
|
+
async function sha256Hex2(value) {
|
|
22380
22554
|
const bytes = new TextEncoder().encode(value);
|
|
22381
22555
|
const digest = new Uint8Array(await crypto.subtle.digest("SHA-256", bytes));
|
|
22382
22556
|
return [...digest].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
@@ -22428,7 +22602,7 @@ async function fingerprintBlindMetroBundle(source) {
|
|
|
22428
22602
|
exports: exports2,
|
|
22429
22603
|
literals,
|
|
22430
22604
|
dependencyArity,
|
|
22431
|
-
factoryDigest: await
|
|
22605
|
+
factoryDigest: await sha256Hex2(canonicalFactoryForDigest(factory, literalTokens))
|
|
22432
22606
|
};
|
|
22433
22607
|
})
|
|
22434
22608
|
);
|
|
@@ -22803,180 +22977,6 @@ var init_metro_fingerprint = __esm({
|
|
|
22803
22977
|
}
|
|
22804
22978
|
});
|
|
22805
22979
|
|
|
22806
|
-
// ../sootsim-engine/src/metro-fingerprint-registry-client.ts
|
|
22807
|
-
function pointerUrl(options) {
|
|
22808
|
-
return options.pointerUrl ?? new URL(import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_POINTER_PATH, DEFAULT_REGISTRY_ORIGIN).toString();
|
|
22809
|
-
}
|
|
22810
|
-
async function sha256Hex2(bytes) {
|
|
22811
|
-
const input = new Uint8Array(bytes.byteLength);
|
|
22812
|
-
input.set(bytes);
|
|
22813
|
-
const digest = new Uint8Array(await crypto.subtle.digest("SHA-256", input.buffer));
|
|
22814
|
-
return [...digest].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
22815
|
-
}
|
|
22816
|
-
async function openRegistryCache() {
|
|
22817
|
-
if (typeof globalThis.caches?.open !== "function") return null;
|
|
22818
|
-
try {
|
|
22819
|
-
return await globalThis.caches.open(REGISTRY_CACHE_NAME);
|
|
22820
|
-
} catch {
|
|
22821
|
-
return null;
|
|
22822
|
-
}
|
|
22823
|
-
}
|
|
22824
|
-
function cacheKey(baseUrl, suffix) {
|
|
22825
|
-
const url = new URL(baseUrl);
|
|
22826
|
-
url.pathname = `${url.pathname.replace(/\/[^/]*$/, "")}/.rnx-fingerprint-cache/${suffix}`;
|
|
22827
|
-
url.search = "";
|
|
22828
|
-
url.hash = "";
|
|
22829
|
-
return new Request(url.toString());
|
|
22830
|
-
}
|
|
22831
|
-
async function parseRegistryBytes(args) {
|
|
22832
|
-
if (args.bytes.byteLength > import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES) {
|
|
22833
|
-
throw new Error(
|
|
22834
|
-
`RNX Metro fingerprint registry exceeds ${import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES} bytes`
|
|
22835
|
-
);
|
|
22836
|
-
}
|
|
22837
|
-
const integrity = await sha256Hex2(args.bytes);
|
|
22838
|
-
if (integrity !== args.expectedIntegrity) {
|
|
22839
|
-
throw new Error("RNX Metro fingerprint registry integrity mismatch");
|
|
22840
|
-
}
|
|
22841
|
-
let parsed;
|
|
22842
|
-
try {
|
|
22843
|
-
parsed = JSON.parse(new TextDecoder().decode(args.bytes));
|
|
22844
|
-
} catch {
|
|
22845
|
-
throw new Error("RNX Metro fingerprint registry is not valid JSON");
|
|
22846
|
-
}
|
|
22847
|
-
const registry = (0, import_metro_fingerprint_registry.parseRNXMetroFingerprintRegistry)(parsed);
|
|
22848
|
-
if (!registry) throw new Error("RNX Metro fingerprint registry is malformed");
|
|
22849
|
-
if (args.expectedRevision && registry.revision !== args.expectedRevision) {
|
|
22850
|
-
throw new Error("RNX Metro fingerprint registry revision does not match its pointer");
|
|
22851
|
-
}
|
|
22852
|
-
return { registry, integrity, source: args.source };
|
|
22853
|
-
}
|
|
22854
|
-
async function readCachedRegistry(cache, baseUrl, integrity, expectedRevision) {
|
|
22855
|
-
const response = await cache.match(cacheKey(baseUrl, integrity));
|
|
22856
|
-
if (!response?.ok) return null;
|
|
22857
|
-
try {
|
|
22858
|
-
return await parseRegistryBytes({
|
|
22859
|
-
bytes: new Uint8Array(await response.arrayBuffer()),
|
|
22860
|
-
expectedIntegrity: integrity,
|
|
22861
|
-
expectedRevision,
|
|
22862
|
-
source: "cache"
|
|
22863
|
-
});
|
|
22864
|
-
} catch {
|
|
22865
|
-
return null;
|
|
22866
|
-
}
|
|
22867
|
-
}
|
|
22868
|
-
async function readLastCachedRegistry(cache, baseUrl) {
|
|
22869
|
-
const memoryReceipt = memoryReceipts.get(baseUrl);
|
|
22870
|
-
if (!cache) return memoryReceipt ? { ...memoryReceipt, source: "cache" } : null;
|
|
22871
|
-
const latest = await cache.match(cacheKey(baseUrl, "latest"));
|
|
22872
|
-
if (!latest?.ok) return memoryReceipt ? { ...memoryReceipt, source: "cache" } : null;
|
|
22873
|
-
const integrity = latest.headers.get("x-rnx-registry-integrity");
|
|
22874
|
-
if (!integrity || !/^[a-f0-9]{64}$/.test(integrity)) {
|
|
22875
|
-
return memoryReceipt ? { ...memoryReceipt, source: "cache" } : null;
|
|
22876
|
-
}
|
|
22877
|
-
return await readCachedRegistry(cache, baseUrl, integrity) ?? (memoryReceipt ? { ...memoryReceipt, source: "cache" } : null);
|
|
22878
|
-
}
|
|
22879
|
-
async function writeCachedRegistry(cache, baseUrl, bytes, receipt) {
|
|
22880
|
-
memoryReceipts.set(baseUrl, receipt);
|
|
22881
|
-
if (!cache) return;
|
|
22882
|
-
const headers = {
|
|
22883
|
-
"content-type": "application/json",
|
|
22884
|
-
"x-rnx-registry-integrity": receipt.integrity
|
|
22885
|
-
};
|
|
22886
|
-
try {
|
|
22887
|
-
await cache.put(
|
|
22888
|
-
cacheKey(baseUrl, receipt.integrity),
|
|
22889
|
-
new Response(bytes.slice(), { headers })
|
|
22890
|
-
);
|
|
22891
|
-
await cache.put(cacheKey(baseUrl, "latest"), new Response("", { headers }));
|
|
22892
|
-
} catch {
|
|
22893
|
-
}
|
|
22894
|
-
}
|
|
22895
|
-
async function readPointer(response) {
|
|
22896
|
-
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
22897
|
-
if (bytes.byteLength > import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_POINTER_BYTES) {
|
|
22898
|
-
throw new Error(
|
|
22899
|
-
`RNX Metro fingerprint pointer exceeds ${import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_POINTER_BYTES} bytes`
|
|
22900
|
-
);
|
|
22901
|
-
}
|
|
22902
|
-
let parsed;
|
|
22903
|
-
try {
|
|
22904
|
-
parsed = JSON.parse(new TextDecoder().decode(bytes));
|
|
22905
|
-
} catch {
|
|
22906
|
-
throw new Error("RNX Metro fingerprint pointer is not valid JSON");
|
|
22907
|
-
}
|
|
22908
|
-
const pointer = (0, import_metro_fingerprint_registry.parseRNXMetroFingerprintPointer)(parsed);
|
|
22909
|
-
if (!pointer) throw new Error("RNX Metro fingerprint pointer is malformed");
|
|
22910
|
-
return pointer;
|
|
22911
|
-
}
|
|
22912
|
-
async function loadMetroFingerprintRegistry(options = {}) {
|
|
22913
|
-
const baseUrl = pointerUrl(options);
|
|
22914
|
-
const request = options.fetch ?? globalThis.fetch;
|
|
22915
|
-
const cache = await openRegistryCache();
|
|
22916
|
-
let pointer;
|
|
22917
|
-
try {
|
|
22918
|
-
const response = await request(baseUrl, { cache: "no-store" });
|
|
22919
|
-
if (!response.ok) {
|
|
22920
|
-
throw new Error(`RNX Metro fingerprint pointer answered ${response.status}`);
|
|
22921
|
-
}
|
|
22922
|
-
pointer = await readPointer(response);
|
|
22923
|
-
} catch (error) {
|
|
22924
|
-
const fallback = await readLastCachedRegistry(cache, baseUrl);
|
|
22925
|
-
if (fallback) return fallback;
|
|
22926
|
-
throw error;
|
|
22927
|
-
}
|
|
22928
|
-
const memoryReceipt = memoryReceipts.get(baseUrl);
|
|
22929
|
-
if (memoryReceipt?.integrity === pointer.integrity && memoryReceipt.registry.revision === pointer.revision) {
|
|
22930
|
-
return { ...memoryReceipt, source: "cache" };
|
|
22931
|
-
}
|
|
22932
|
-
const cached4 = cache ? await readCachedRegistry(cache, baseUrl, pointer.integrity, pointer.revision) : null;
|
|
22933
|
-
if (cached4) {
|
|
22934
|
-
memoryReceipts.set(baseUrl, cached4);
|
|
22935
|
-
return cached4;
|
|
22936
|
-
}
|
|
22937
|
-
try {
|
|
22938
|
-
const payloadUrl = new URL(pointer.payloadUrl, baseUrl).toString();
|
|
22939
|
-
const response = await request(payloadUrl, { cache: "force-cache" });
|
|
22940
|
-
if (!response.ok) {
|
|
22941
|
-
throw new Error(`RNX Metro fingerprint registry answered ${response.status}`);
|
|
22942
|
-
}
|
|
22943
|
-
const declaredLength = Number(response.headers.get("content-length"));
|
|
22944
|
-
if (Number.isFinite(declaredLength) && declaredLength > import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES) {
|
|
22945
|
-
throw new Error(
|
|
22946
|
-
`RNX Metro fingerprint registry exceeds ${import_metro_fingerprint_registry.RNX_METRO_FINGERPRINT_MAX_PAYLOAD_BYTES} bytes`
|
|
22947
|
-
);
|
|
22948
|
-
}
|
|
22949
|
-
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
22950
|
-
if (bytes.byteLength !== pointer.bytes) {
|
|
22951
|
-
throw new Error(
|
|
22952
|
-
"RNX Metro fingerprint registry byte length does not match its pointer"
|
|
22953
|
-
);
|
|
22954
|
-
}
|
|
22955
|
-
const receipt = await parseRegistryBytes({
|
|
22956
|
-
bytes,
|
|
22957
|
-
expectedIntegrity: pointer.integrity,
|
|
22958
|
-
expectedRevision: pointer.revision,
|
|
22959
|
-
source: "network"
|
|
22960
|
-
});
|
|
22961
|
-
await writeCachedRegistry(cache, baseUrl, bytes, receipt);
|
|
22962
|
-
return receipt;
|
|
22963
|
-
} catch (error) {
|
|
22964
|
-
const fallback = await readLastCachedRegistry(cache, baseUrl);
|
|
22965
|
-
if (fallback) return fallback;
|
|
22966
|
-
throw error;
|
|
22967
|
-
}
|
|
22968
|
-
}
|
|
22969
|
-
var import_metro_fingerprint_registry, REGISTRY_CACHE_NAME, DEFAULT_REGISTRY_ORIGIN, memoryReceipts;
|
|
22970
|
-
var init_metro_fingerprint_registry_client = __esm({
|
|
22971
|
-
"../sootsim-engine/src/metro-fingerprint-registry-client.ts"() {
|
|
22972
|
-
"use strict";
|
|
22973
|
-
import_metro_fingerprint_registry = require("rnxsim/metro-fingerprint-registry");
|
|
22974
|
-
REGISTRY_CACHE_NAME = "rnx-metro-fingerprints-v1";
|
|
22975
|
-
DEFAULT_REGISTRY_ORIGIN = "https://contrast.dev";
|
|
22976
|
-
memoryReceipts = /* @__PURE__ */ new Map();
|
|
22977
|
-
}
|
|
22978
|
-
});
|
|
22979
|
-
|
|
22980
22980
|
// src/cloud-contract.ts
|
|
22981
22981
|
function isRnxCloudCommandType(value) {
|
|
22982
22982
|
return RNX_CLOUD_COMMAND_TYPE_SET.has(value);
|
|
@@ -23724,8 +23724,8 @@ var init_cloud_client = __esm({
|
|
|
23724
23724
|
import_node_path15 = require("node:path");
|
|
23725
23725
|
init_metroAssetArtifact();
|
|
23726
23726
|
init_metroCloudArtifact();
|
|
23727
|
-
init_metro_fingerprint();
|
|
23728
23727
|
init_metro_fingerprint_registry_client();
|
|
23728
|
+
init_metro_fingerprint();
|
|
23729
23729
|
init_backend_origin();
|
|
23730
23730
|
init_cloud_contract();
|
|
23731
23731
|
init_metro_production_bundle();
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.445 | (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
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
writeFileSync,
|
|
8
8
|
} from 'node:fs'
|
|
9
9
|
import { dirname, join, resolve } from 'node:path'
|
|
10
|
-
import { electronUserDataDir } from '../home-paths'
|
|
10
|
+
import { electronUserDataDir } from '../home-paths.ts'
|
|
11
11
|
|
|
12
12
|
export type SharedDesktopAuthTeamSummary = {
|
|
13
13
|
id: string
|
package/src/cloud-contract.ts
CHANGED