sootsim 0.1.138 → 0.1.140
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/dist-cli/bin.js +3 -3
- package/dist-cli/chunks/{agent-TD7SHXRH.js → agent-N767ME6M.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-H6JLLQAZ.js → agent-wrapper-ELHIUFZZ.js} +2 -2
- package/dist-cli/chunks/{app-fonts-JDQFGE3V.js → app-fonts-OZ3OSNAJ.js} +2 -2
- package/dist-cli/chunks/{assert-2XLXLJOD.js → assert-GGFUQBNB.js} +2 -2
- package/dist-cli/chunks/auto-bootstrap-L5E6XMCK.js +2 -0
- package/dist-cli/chunks/beta-D74SDA2L.js +2 -0
- package/dist-cli/chunks/camera-5PYEDLLB.js +20 -0
- package/dist-cli/chunks/chunk-4FBFOWV3.js +4 -0
- package/dist-cli/chunks/{chunk-7ELG4PYE.js → chunk-4FGNOWB6.js} +1 -1
- package/dist-cli/chunks/{chunk-ZSPUTLK7.js → chunk-5EP5RRNS.js} +35 -34
- package/dist-cli/chunks/{chunk-BA3QQ5B3.js → chunk-5VTYMBUK.js} +2 -2
- package/dist-cli/chunks/chunk-6KUVOSFF.js +79 -0
- package/dist-cli/chunks/{chunk-CTXIRBH2.js → chunk-77TL74AM.js} +1 -1
- package/dist-cli/chunks/{chunk-BDOLDROC.js → chunk-7SMEXHWJ.js} +1 -1
- package/dist-cli/chunks/{chunk-JFQVDRBK.js → chunk-AI65UVSN.js} +52 -4
- package/dist-cli/chunks/{chunk-XWHR6IKV.js → chunk-AOICEZCA.js} +2 -2
- package/dist-cli/chunks/chunk-AP2MOP44.js +2 -0
- package/dist-cli/chunks/chunk-BEA3AO36.js +5 -0
- package/dist-cli/chunks/{chunk-PILBWKNB.js → chunk-BGXNYXBC.js} +1 -1
- package/dist-cli/chunks/{chunk-FFVME5EQ.js → chunk-BLQBPN76.js} +2 -2
- package/dist-cli/chunks/{chunk-Q4J2SESV.js → chunk-BM7QWZRI.js} +2 -2
- package/dist-cli/chunks/{chunk-5N5MQQM5.js → chunk-C3FURRBF.js} +1 -1
- package/dist-cli/chunks/{chunk-RHU73TIJ.js → chunk-CQ3LV5VL.js} +2 -2
- package/dist-cli/chunks/chunk-EH6YDCSN.js +119 -0
- package/dist-cli/chunks/{chunk-T3HJHXXN.js → chunk-EMNVJOEL.js} +3 -3
- package/dist-cli/chunks/{chunk-C563J47N.js → chunk-FYUDIUFX.js} +2 -2
- package/dist-cli/chunks/{chunk-WHIZNJLR.js → chunk-GI43DDEI.js} +1 -1
- package/dist-cli/chunks/{chunk-KLFGCFE4.js → chunk-GL74P6NR.js} +1 -1
- package/dist-cli/chunks/{chunk-GYZ5ZZMH.js → chunk-GYZNLDBX.js} +2 -2
- package/dist-cli/chunks/chunk-HPTMLB7V.js +2 -0
- package/dist-cli/chunks/{chunk-NPUHFOSG.js → chunk-MRQRJINW.js} +1 -1
- package/dist-cli/chunks/{chunk-IEGRNKTT.js → chunk-N2XPC4Z7.js} +2 -2
- package/dist-cli/chunks/chunk-NQG4R5K2.js +1 -0
- package/dist-cli/chunks/{chunk-62DPZPFC.js → chunk-O2SQNUDP.js} +1 -1
- package/dist-cli/chunks/{chunk-I7RL227U.js → chunk-PBS47TD5.js} +2 -2
- package/dist-cli/chunks/chunk-Q5Z7P54I.js +2 -0
- package/dist-cli/chunks/{chunk-FBDOREAI.js → chunk-QOZ2Q4FH.js} +1 -1
- package/dist-cli/chunks/{chunk-SX6BVZL5.js → chunk-QRRBQE6M.js} +2 -2
- package/dist-cli/chunks/{chunk-KJOBH5CA.js → chunk-QXOZB7WD.js} +2 -2
- package/dist-cli/chunks/{chunk-3XBLSPSH.js → chunk-R5F7XGAO.js} +3 -3
- package/dist-cli/chunks/{chunk-VIZ5BLM2.js → chunk-RAY2DLSK.js} +1 -1
- package/dist-cli/chunks/{chunk-TP3NTZUM.js → chunk-REIC7HRW.js} +1 -1
- package/dist-cli/chunks/chunk-S7I6ZCT2.js +1 -0
- package/dist-cli/chunks/{chunk-GSGRNYPC.js → chunk-SSZBFWV7.js} +1 -1
- package/dist-cli/chunks/chunk-UHTE6FLK.js +69 -0
- package/dist-cli/chunks/{chunk-MZ7TYYP7.js → chunk-WGDXZMKT.js} +2 -2
- package/dist-cli/chunks/chunk-WN3WZEE5.js +1 -0
- package/dist-cli/chunks/{chunk-JEL7BQG7.js → chunk-X6AWKKL4.js} +2 -2
- package/dist-cli/chunks/{chunk-T6QPOIJN.js → chunk-XGYD25DJ.js} +1 -1
- package/dist-cli/chunks/{chunk-XV6XIC4J.js → chunk-ZGDJ5TFU.js} +2 -2
- package/dist-cli/chunks/{chunk-KBOMW6U3.js → chunk-ZN4Z2W7F.js} +2 -2
- package/dist-cli/chunks/{chunk-MNKYCXHQ.js → chunk-ZVQOEMXS.js} +52 -52
- package/dist-cli/chunks/cli-version-EZRTEUXF.js +2 -0
- package/dist-cli/chunks/{compat-6KRCWKBL.js → compat-U3772TUK.js} +3 -3
- package/dist-cli/chunks/{config-JGTLOWS6.js → config-6CZCIYKJ.js} +2 -2
- package/dist-cli/chunks/{control-3LHOESUK.js → control-NVA25O65.js} +2 -2
- package/dist-cli/chunks/{cpu-profile-KWE5IXBN.js → cpu-profile-WRLTZYO6.js} +2 -2
- package/dist-cli/chunks/{daemon-S5LNAQAU.js → daemon-QQPGLGS6.js} +2 -2
- package/dist-cli/chunks/{debug-KJ3TNXUN.js → debug-RKYLSDZV.js} +3 -3
- package/dist-cli/chunks/{detox-UJIPM47N.js → detox-ZRUQQU22.js} +2 -2
- package/dist-cli/chunks/{device-23SEWSUA.js → device-HXTOLEWY.js} +2 -2
- package/dist-cli/chunks/{diagnose-53JGSJF2.js → diagnose-QN4E4WA6.js} +2 -2
- package/dist-cli/chunks/drivers-EVK22AX5.js +2 -0
- package/dist-cli/chunks/{electron-F43274XT.js → electron-ZHRC4WQ5.js} +3 -3
- package/dist-cli/chunks/flow-ICCRVJVX.js +2 -0
- package/dist-cli/chunks/help-QMZ35MIQ.js +2 -0
- package/dist-cli/chunks/{hints-6EFUPUX6.js → hints-HCHKMDUE.js} +2 -2
- package/dist-cli/chunks/{home-paths-TAGKOEXO.js → home-paths-3OHKRAE4.js} +2 -2
- package/dist-cli/chunks/{inspect-UVBYBYJB.js → inspect-QXUBDKJJ.js} +3 -3
- package/dist-cli/chunks/install-JSDZIE2T.js +2 -0
- package/dist-cli/chunks/{install-desktop-M2QEFAIN.js → install-desktop-QCX44BGL.js} +7 -7
- package/dist-cli/chunks/{keys-IJNQHCGZ.js → keys-VEP2KPUF.js} +2 -2
- package/dist-cli/chunks/{launch-UK4I6UYE.js → launch-K4BPQLTP.js} +3 -3
- package/dist-cli/chunks/{login-OBLKQALN.js → login-UVC5XRKR.js} +4 -4
- package/dist-cli/chunks/{logout-HUOLFAU6.js → logout-3VW34IBA.js} +2 -2
- package/dist-cli/chunks/{maestro-B6JMWFEO.js → maestro-HTFXXMLR.js} +2 -2
- package/dist-cli/chunks/optional-demo-registry-5YYEAL46.js +2 -0
- package/dist-cli/chunks/{preview-TYICI3EN.js → preview-TZYJMLEJ.js} +2 -2
- package/dist-cli/chunks/{profile-NQO5HFFJ.js → profile-HDJRF7YB.js} +2 -2
- package/dist-cli/chunks/{react-WXEGMAH6.js → react-RLJR26M7.js} +2 -2
- package/dist-cli/chunks/{record-3DK7CCXV.js → record-2LDDHHUY.js} +2 -2
- package/dist-cli/chunks/runtime-QPYF2WQX.js +2 -0
- package/dist-cli/chunks/{runtime-delivery-QAHWI6JH.js → runtime-delivery-3F6O57E5.js} +2 -2
- package/dist-cli/chunks/{screenshot-SQ7ETUJY.js → screenshot-QAUSSEPK.js} +2 -2
- package/dist-cli/chunks/{screenshot-mode-YYIBQI6S.js → screenshot-mode-K6HEVK4K.js} +2 -2
- package/dist-cli/chunks/{screenshots-YH5P24GR.js → screenshots-TWMCGUBT.js} +2 -2
- package/dist-cli/chunks/{server-PVYHPTCD.js → server-ZPIZCBW5.js} +3 -3
- package/dist-cli/chunks/setup-repo-VHOZJEIV.js +2 -0
- package/dist-cli/chunks/{skills-2V2A7R4O.js → skills-NI3RH7CW.js} +2 -2
- package/dist-cli/chunks/{start-JKY3T6AY.js → start-G6CQL6HJ.js} +4 -4
- package/dist-cli/chunks/store-F6MJUJYW.js +2 -0
- package/dist-cli/chunks/telemetry-DM2Y7OQJ.js +2 -0
- package/dist-cli/chunks/{test-FVA5WGGM.js → test-V47D6EPK.js} +3 -3
- package/dist-cli/chunks/{three-mode-GVODLLP3.js → three-mode-G7N3LRHM.js} +2 -2
- package/dist-cli/chunks/{timeline-LCJYWJBG.js → timeline-EBUOILTJ.js} +2 -2
- package/dist-cli/chunks/{upgrade-4TVPQJRL.js → upgrade-OQJLTCQP.js} +2 -2
- package/dist-cli/chunks/upload-W3YCA65H.js +2 -0
- package/dist-cli/chunks/{version-2XWRCYTM.js → version-3YJPPUE5.js} +2 -2
- package/dist-cli/chunks/web-ZKUX5ICX.js +2 -0
- package/dist-cli/chunks/{what-happened-R57H6WK6.js → what-happened-HOY3TA42.js} +2 -2
- package/dist-cli/chunks/{whoami-YCVHJHIM.js → whoami-GOCSBVTG.js} +2 -2
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +42 -820
- 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/cli-constants.cjs +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 +179 -956
- 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/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +29 -797
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +660 -1032
- package/dist-lib/vite.cjs +1 -1
- package/package.json +2 -6
- package/scripts/dev-server-scanner.ts +10 -2
- package/scripts/optional-demo-registry.ts +54 -0
- package/src/attached-projects.ts +6 -27
- package/dist-cli/chunks/auto-bootstrap-Q7Z5522T.js +0 -2
- package/dist-cli/chunks/beta-LW4TRSKL.js +0 -2
- package/dist-cli/chunks/chunk-3AVKOCIL.js +0 -5
- package/dist-cli/chunks/chunk-BXITI3GQ.js +0 -4
- package/dist-cli/chunks/chunk-DBJCMZX7.js +0 -1
- package/dist-cli/chunks/chunk-DV4DKAHB.js +0 -64
- package/dist-cli/chunks/chunk-KYAAYSMS.js +0 -2
- package/dist-cli/chunks/chunk-M6GZUJXH.js +0 -62
- package/dist-cli/chunks/chunk-N4DFR7UX.js +0 -79
- package/dist-cli/chunks/chunk-N7TXV2XT.js +0 -1
- package/dist-cli/chunks/chunk-SIKDBA2E.js +0 -119
- package/dist-cli/chunks/chunk-YB7NANNJ.js +0 -1
- package/dist-cli/chunks/chunk-ZS55UGAA.js +0 -2
- package/dist-cli/chunks/cli-version-ROECZHPK.js +0 -2
- package/dist-cli/chunks/demo-app-registry-SU74KYFQ.js +0 -2
- package/dist-cli/chunks/drivers-LQS4T2IT.js +0 -2
- package/dist-cli/chunks/flow-H4F2X23Y.js +0 -2
- package/dist-cli/chunks/help-BT5NJNJ5.js +0 -2
- package/dist-cli/chunks/install-P5R6747T.js +0 -2
- package/dist-cli/chunks/runtime-IFNZGBPZ.js +0 -2
- package/dist-cli/chunks/setup-repo-Y63FUXRC.js +0 -2
- package/dist-cli/chunks/store-KNRC4EGM.js +0 -2
- package/dist-cli/chunks/telemetry-HDSITSDA.js +0 -2
- package/dist-cli/chunks/upload-3AXP6K6R.js +0 -2
- package/dist-cli/chunks/web-4Z6SFQFV.js +0 -2
- package/dist-lib/scripts/demo-app-registry.cjs +0 -818
- package/scripts/demo-app-registry.ts +0 -1006
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.140 | (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;
|
|
@@ -94,809 +94,41 @@ function normalizeNativeDevBundleUrl(bundleUrl) {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
// scripts/demo-
|
|
98
|
-
var
|
|
99
|
-
var
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
function findWorkspaceRoot(startDir) {
|
|
103
|
-
let dir = startDir;
|
|
104
|
-
while (true) {
|
|
105
|
-
if ((0, import_node_fs.existsSync)((0, import_node_path.join)(dir, "pnpm-workspace.yaml")) || (0, import_node_fs.existsSync)((0, import_node_path.join)(dir, "turbo.json")) || (0, import_node_fs.existsSync)((0, import_node_path.join)(dir, "nx.json")) || (0, import_node_fs.existsSync)((0, import_node_path.join)(dir, "lerna.json"))) {
|
|
106
|
-
return dir;
|
|
107
|
-
}
|
|
108
|
-
const packageJsonPath = (0, import_node_path.join)(dir, "package.json");
|
|
109
|
-
if ((0, import_node_fs.existsSync)(packageJsonPath)) {
|
|
110
|
-
try {
|
|
111
|
-
const pkg = JSON.parse((0, import_node_fs.readFileSync)(packageJsonPath, "utf8"));
|
|
112
|
-
if (pkg.workspaces) return dir;
|
|
113
|
-
} catch {
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const parent = (0, import_node_path.dirname)(dir);
|
|
117
|
-
if (parent === dir) return null;
|
|
118
|
-
dir = parent;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
function resolveWorkspaceScriptPath(workspaceRelativePath, packageRelativePath) {
|
|
122
|
-
const workspaceRoot = findWorkspaceRoot(process.cwd());
|
|
123
|
-
const candidates = [
|
|
124
|
-
workspaceRoot ? (0, import_node_path.resolve)(workspaceRoot, workspaceRelativePath) : null,
|
|
125
|
-
(0, import_node_path.resolve)(process.cwd(), workspaceRelativePath),
|
|
126
|
-
(0, import_node_path.resolve)(process.cwd(), packageRelativePath)
|
|
127
|
-
].filter((candidate) => Boolean(candidate));
|
|
128
|
-
for (const candidate of candidates) {
|
|
129
|
-
if ((0, import_node_fs.existsSync)(candidate)) return candidate;
|
|
130
|
-
}
|
|
131
|
-
return candidates[0] ?? (0, import_node_path.resolve)(process.cwd(), workspaceRelativePath);
|
|
132
|
-
}
|
|
133
|
-
var getExpensifyProxyScript = () => resolveWorkspaceScriptPath(
|
|
134
|
-
"packages/sootsim-engine/scripts/expensify-web-proxy.ts",
|
|
135
|
-
"scripts/expensify-web-proxy.ts"
|
|
136
|
-
);
|
|
137
|
-
var getRainbowMetadataProxyScript = () => resolveWorkspaceScriptPath(
|
|
138
|
-
"packages/sootsim-engine/scripts/rainbow-metadata-proxy.ts",
|
|
139
|
-
"scripts/rainbow-metadata-proxy.ts"
|
|
140
|
-
);
|
|
141
|
-
var getMattermostRNUtilsNativeModule = () => resolveWorkspaceScriptPath(
|
|
142
|
-
"packages/compat/src/stubs/mattermost-rnutils-native.ts",
|
|
143
|
-
"../compat/src/stubs/mattermost-rnutils-native.ts"
|
|
144
|
-
);
|
|
145
|
-
var getMattermostKeychainNativeModule = () => resolveWorkspaceScriptPath(
|
|
146
|
-
"packages/compat/src/stubs/native-seams/react-native-keychain-manager.ts",
|
|
147
|
-
"../compat/src/stubs/native-seams/react-native-keychain-manager.ts"
|
|
148
|
-
);
|
|
149
|
-
var getMattermostNetworkClientNativeModule = () => resolveWorkspaceScriptPath(
|
|
150
|
-
"packages/compat/src/stubs/mattermost-network-client-native.ts",
|
|
151
|
-
"../compat/src/stubs/mattermost-network-client-native.ts"
|
|
152
|
-
);
|
|
153
|
-
var getMattermostPreviewServerScript = () => resolveWorkspaceScriptPath(
|
|
154
|
-
"packages/sootsim-engine/scripts/mattermost-preview-server.ts",
|
|
155
|
-
"scripts/mattermost-preview-server.ts"
|
|
156
|
-
);
|
|
157
|
-
var EXPENSIFY_NATIVE_PROXY_ENV = {
|
|
158
|
-
USE_NGROK: "true",
|
|
159
|
-
NGROK_URL: "http://localhost:9000/",
|
|
160
|
-
SECURE_NGROK_URL: "http://localhost:9000/"
|
|
161
|
-
};
|
|
162
|
-
var MATTERMOST_DIR = (0, import_node_path.join)(HOME, "github/mattermost-mobile");
|
|
163
|
-
var UNISWAP_REPO_DIR = (0, import_node_path.join)(HOME, "github/uniswap-interface");
|
|
164
|
-
var UNISWAP_APP_DIR = (0, import_node_path.join)(UNISWAP_REPO_DIR, "apps/mobile");
|
|
165
|
-
var UNISWAP_ENV_LOCAL_FILE = (0, import_node_path.join)(UNISWAP_REPO_DIR, ".env.defaults.local");
|
|
166
|
-
var UNISWAP_PLACEHOLDER = "stored-in-.env.local";
|
|
167
|
-
var UNISWAP_DEMO_ENV_MARKER = "# sootsim demo env overrides";
|
|
168
|
-
var UNISWAP_FORCE_UPGRADE_HOOK_FILE = (0, import_node_path.join)(
|
|
169
|
-
UNISWAP_REPO_DIR,
|
|
170
|
-
"packages/uniswap/src/features/forceUpgrade/hooks/useForceUpgradeStatus.ts"
|
|
171
|
-
);
|
|
172
|
-
var UNISWAP_FORCE_UPGRADE_NOTIFICATION_FILE = (0, import_node_path.join)(
|
|
173
|
-
UNISWAP_REPO_DIR,
|
|
174
|
-
"apps/mobile/src/notification-service/data-sources/createForceUpgradeNotificationDataSource.ts"
|
|
175
|
-
);
|
|
176
|
-
var UNISWAP_FORCE_UPGRADE_PATCH_MARKER = "SOOTSIM_DEMO_DISABLE_FORCE_UPGRADE";
|
|
177
|
-
function parseEnvFile(filePath) {
|
|
178
|
-
if (!(0, import_node_fs.existsSync)(filePath)) return {};
|
|
179
|
-
const env = {};
|
|
180
|
-
const source = (0, import_node_fs.readFileSync)(filePath, "utf8");
|
|
181
|
-
for (const rawLine of source.split(/\r?\n/)) {
|
|
182
|
-
const line = rawLine.trim();
|
|
183
|
-
if (!line || line.startsWith("#")) continue;
|
|
184
|
-
const match = line.match(/^([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/);
|
|
185
|
-
if (!match) continue;
|
|
186
|
-
let value = match[2].trim();
|
|
187
|
-
if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) {
|
|
188
|
-
value = value.slice(1, -1);
|
|
189
|
-
}
|
|
190
|
-
env[match[1]] = value;
|
|
191
|
-
}
|
|
192
|
-
return env;
|
|
193
|
-
}
|
|
194
|
-
function isUsableUniswapEnvValue(value) {
|
|
195
|
-
if (!value) return false;
|
|
196
|
-
const trimmed = value.trim();
|
|
197
|
-
if (!trimmed) return false;
|
|
198
|
-
if (trimmed.includes(UNISWAP_PLACEHOLDER)) return false;
|
|
199
|
-
if (trimmed === "TRADING_API_KEY" || trimmed === "UNISWAP_API_KEY") return false;
|
|
200
|
-
return true;
|
|
201
|
-
}
|
|
202
|
-
function pickEnvValue(sources, keys) {
|
|
203
|
-
for (const source of sources) {
|
|
204
|
-
for (const key of keys) {
|
|
205
|
-
const value = source[key];
|
|
206
|
-
if (isUsableUniswapEnvValue(value)) return value.trim();
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
return void 0;
|
|
210
|
-
}
|
|
211
|
-
function resolveUniswapDemoEnv() {
|
|
212
|
-
const localEnv = parseEnvFile(UNISWAP_ENV_LOCAL_FILE);
|
|
213
|
-
const webEnv = parseEnvFile((0, import_node_path.join)(UNISWAP_REPO_DIR, "apps/web/.env"));
|
|
214
|
-
const sources = [
|
|
215
|
-
process.env,
|
|
216
|
-
localEnv,
|
|
217
|
-
webEnv
|
|
218
|
-
];
|
|
219
|
-
const env = {};
|
|
220
|
-
const bindings = [
|
|
221
|
-
["AMPLITUDE_PROXY_URL_OVERRIDE", ["REACT_APP_AMPLITUDE_PROXY_URL"]],
|
|
222
|
-
["QUICKNODE_ENDPOINT_NAME", ["REACT_APP_QUICKNODE_ENDPOINT_NAME"]],
|
|
223
|
-
["QUICKNODE_ENDPOINT_TOKEN", ["REACT_APP_QUICKNODE_ENDPOINT_TOKEN"]],
|
|
224
|
-
["INFURA_KEY", ["REACT_APP_INFURA_KEY"]],
|
|
225
|
-
["STATSIG_API_KEY", ["REACT_APP_STATSIG_API_KEY"]],
|
|
226
|
-
["STATSIG_PROXY_URL_OVERRIDE", ["REACT_APP_STATSIG_PROXY_URL"]],
|
|
227
|
-
["WALLETCONNECT_PROJECT_ID", ["REACT_APP_WALLET_CONNECT_PROJECT_ID"]],
|
|
228
|
-
["WALLETCONNECT_PROJECT_ID_BETA", ["REACT_APP_WALLET_CONNECT_PROJECT_ID"]],
|
|
229
|
-
["WALLETCONNECT_PROJECT_ID_DEV", ["REACT_APP_WALLET_CONNECT_PROJECT_ID"]],
|
|
230
|
-
["TRADING_API_KEY", ["REACT_APP_TRADING_API_KEY"]],
|
|
231
|
-
["UNISWAP_API_KEY", []]
|
|
232
|
-
];
|
|
233
|
-
for (const [target, aliases] of bindings) {
|
|
234
|
-
const value = pickEnvValue(sources, [target, ...aliases]);
|
|
235
|
-
if (!value) continue;
|
|
236
|
-
env[target] = value;
|
|
237
|
-
for (const alias of aliases) {
|
|
238
|
-
env[alias] = value;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
const hasPrivateGatewayKeys = isUsableUniswapEnvValue(env.TRADING_API_KEY) && isUsableUniswapEnvValue(env.UNISWAP_API_KEY);
|
|
242
|
-
if (!hasPrivateGatewayKeys) {
|
|
243
|
-
const publicGraphqlUrl = pickEnvValue(sources, ["GRAPHQL_URL_OVERRIDE", "REACT_APP_AWS_API_ENDPOINT"]) || "https://interface.gateway.uniswap.org/v1/graphql";
|
|
244
|
-
env.API_BASE_URL_OVERRIDE = "https://interface.gateway.uniswap.org";
|
|
245
|
-
env.API_BASE_URL_V2_OVERRIDE = "https://interface.gateway.uniswap.org/v2";
|
|
246
|
-
env.GRAPHQL_URL_OVERRIDE = publicGraphqlUrl;
|
|
247
|
-
env.TRADING_API_URL_OVERRIDE = "https://trading-api-labs.interface.gateway.uniswap.org";
|
|
248
|
-
env.FOR_API_URL_OVERRIDE = "https://for.interface.gateway.uniswap.org/v2/FOR.v1.FORService";
|
|
249
|
-
}
|
|
250
|
-
return env;
|
|
251
|
-
}
|
|
252
|
-
function ensureUniswapDemoEnvLocal() {
|
|
253
|
-
const existingSource = (0, import_node_fs.existsSync)(UNISWAP_ENV_LOCAL_FILE) ? (0, import_node_fs.readFileSync)(UNISWAP_ENV_LOCAL_FILE, "utf8") : "";
|
|
254
|
-
if (existingSource && !existingSource.includes(UNISWAP_DEMO_ENV_MARKER)) {
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
const env = resolveUniswapDemoEnv();
|
|
258
|
-
const lines = [UNISWAP_DEMO_ENV_MARKER];
|
|
259
|
-
for (const [key, value] of Object.entries(env).sort(([a], [b]) => a.localeCompare(b))) {
|
|
260
|
-
lines.push(`${key}=${JSON.stringify(value)}`);
|
|
261
|
-
}
|
|
262
|
-
lines.push("");
|
|
263
|
-
(0, import_node_fs.writeFileSync)(UNISWAP_ENV_LOCAL_FILE, `${lines.join("\n")}
|
|
264
|
-
`);
|
|
265
|
-
}
|
|
266
|
-
function ensureUniswapForceUpgradePatched() {
|
|
267
|
-
const hookNeedle = `export function useForceUpgradeStatus(): ForceUpgradeStatus {
|
|
268
|
-
`;
|
|
269
|
-
const hookPatch = ` // sootsim demo: bypass the force-upgrade gate during local engine demos.
|
|
270
|
-
return 'not-required'
|
|
271
|
-
|
|
272
|
-
`;
|
|
273
|
-
const hookLegacyPatch = ` // sootsim demo: bypass the force-upgrade gate during local engine demos.
|
|
274
|
-
if (process.env.${UNISWAP_FORCE_UPGRADE_PATCH_MARKER} === 'true') {
|
|
275
|
-
return 'not-required'
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
`;
|
|
279
|
-
const notificationNeedle = ` const getForceUpgradeStatus = (): ForceUpgradeStatus => {
|
|
280
|
-
`;
|
|
281
|
-
const notificationPatch = ` // sootsim demo: bypass the force-upgrade gate during local engine demos.
|
|
282
|
-
return 'not-required'
|
|
283
|
-
|
|
284
|
-
`;
|
|
285
|
-
const notificationLegacyPatch = ` // sootsim demo: bypass the force-upgrade gate during local engine demos.
|
|
286
|
-
if (process.env.${UNISWAP_FORCE_UPGRADE_PATCH_MARKER} === 'true') {
|
|
287
|
-
return 'not-required'
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
`;
|
|
291
|
-
const patchWithMigration = (filePath, needle, patch, legacyPatch) => {
|
|
292
|
-
const source = (0, import_node_fs.readFileSync)(filePath, "utf8");
|
|
293
|
-
if (source.includes(patch)) return;
|
|
294
|
-
if (source.includes(legacyPatch)) {
|
|
295
|
-
(0, import_node_fs.writeFileSync)(filePath, source.replace(legacyPatch, patch));
|
|
296
|
-
return;
|
|
297
|
-
}
|
|
298
|
-
if (!source.includes(needle)) {
|
|
299
|
-
throw new Error(
|
|
300
|
-
`uniswap demo patch failed: expected snippet not found in ${filePath}`
|
|
301
|
-
);
|
|
302
|
-
}
|
|
303
|
-
(0, import_node_fs.writeFileSync)(filePath, source.replace(needle, `${needle}${patch}`));
|
|
304
|
-
};
|
|
305
|
-
patchWithMigration(
|
|
306
|
-
UNISWAP_FORCE_UPGRADE_HOOK_FILE,
|
|
307
|
-
hookNeedle,
|
|
308
|
-
hookPatch,
|
|
309
|
-
hookLegacyPatch
|
|
310
|
-
);
|
|
311
|
-
patchWithMigration(
|
|
312
|
-
UNISWAP_FORCE_UPGRADE_NOTIFICATION_FILE,
|
|
313
|
-
notificationNeedle,
|
|
314
|
-
notificationPatch,
|
|
315
|
-
notificationLegacyPatch
|
|
316
|
-
);
|
|
317
|
-
}
|
|
318
|
-
var JOPLIN_DIR = (0, import_node_path.join)(HOME, "github/joplin");
|
|
319
|
-
var JOPLIN_APP_DIR = (0, import_node_path.join)(JOPLIN_DIR, "packages/app-mobile");
|
|
320
|
-
var JOPLIN_WATCH_ROOTS = [
|
|
321
|
-
"packages/lib",
|
|
322
|
-
"packages/renderer",
|
|
323
|
-
"packages/turndown",
|
|
324
|
-
"packages/turndown-plugin-gfm",
|
|
325
|
-
"packages/editor",
|
|
326
|
-
"packages/tools",
|
|
327
|
-
"packages/utils",
|
|
328
|
-
"packages/fork-htmlparser2",
|
|
329
|
-
"packages/fork-uslug",
|
|
330
|
-
"packages/fork-sax",
|
|
331
|
-
"packages/htmlpack",
|
|
332
|
-
"packages/react-native-saf-x",
|
|
333
|
-
"packages/react-native-alarm-notification"
|
|
334
|
-
];
|
|
335
|
-
function ensureJoplinWatchmanConfigs() {
|
|
336
|
-
if (!(0, import_node_fs.existsSync)(JOPLIN_DIR)) return;
|
|
337
|
-
for (const rel of JOPLIN_WATCH_ROOTS) {
|
|
338
|
-
const dir = (0, import_node_path.join)(JOPLIN_DIR, rel);
|
|
339
|
-
if (!(0, import_node_fs.existsSync)(dir)) continue;
|
|
340
|
-
const cfg = (0, import_node_path.join)(dir, ".watchmanconfig");
|
|
341
|
-
if (!(0, import_node_fs.existsSync)(cfg)) (0, import_node_fs.writeFileSync)(cfg, "{}\n");
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
var JOPLIN_BUILD_SENTINELS = [
|
|
345
|
-
"packages/lib/models/Setting.js",
|
|
346
|
-
"packages/turndown/lib/turndown.cjs.js",
|
|
347
|
-
"packages/app-mobile/pluginAssets/index.js"
|
|
348
|
-
];
|
|
349
|
-
function ensureJoplinBuilt() {
|
|
350
|
-
if (!(0, import_node_fs.existsSync)(JOPLIN_DIR)) return;
|
|
351
|
-
const missing = JOPLIN_BUILD_SENTINELS.filter(
|
|
352
|
-
(rel) => !(0, import_node_fs.existsSync)((0, import_node_path.join)(JOPLIN_DIR, rel))
|
|
353
|
-
);
|
|
354
|
-
if (missing.length === 0) return;
|
|
355
|
-
const { execSync } = require("node:child_process");
|
|
356
|
-
execSync("yarn buildParallel", {
|
|
357
|
-
cwd: JOPLIN_DIR,
|
|
358
|
-
stdio: "inherit",
|
|
359
|
-
env: { ...process.env, NO_FLIPPER: "1", CI: "" }
|
|
360
|
-
});
|
|
361
|
-
const stillMissing = JOPLIN_BUILD_SENTINELS.filter(
|
|
362
|
-
(rel) => !(0, import_node_fs.existsSync)((0, import_node_path.join)(JOPLIN_DIR, rel))
|
|
363
|
-
);
|
|
364
|
-
if (stillMissing.length > 0) {
|
|
365
|
-
throw new Error(
|
|
366
|
-
`joplin demo: yarn buildParallel did not produce: ${stillMissing.join(", ")}`
|
|
367
|
-
);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
var RAINBOW_DIR = (0, import_node_path.join)(HOME, "github/rainbow");
|
|
371
|
-
var RAINBOW_GRAPHQL_DIR = (0, import_node_path.join)(RAINBOW_DIR, "src/graphql");
|
|
372
|
-
var RAINBOW_GRAPHQL_CONFIG_FILE = (0, import_node_path.join)(RAINBOW_GRAPHQL_DIR, "config.js");
|
|
373
|
-
var RAINBOW_NETWORKS_FILE = (0, import_node_path.join)(RAINBOW_DIR, "src/references/networks.json");
|
|
374
|
-
var RAINBOW_METADATA_BASE_URL = "https://metadata.p.rainbow.me";
|
|
375
|
-
var RAINBOW_METADATA_PROXY_PORT = 9011;
|
|
376
|
-
var RAINBOW_DEMO_METADATA_BASE_URL = `http://127.0.0.1:${RAINBOW_METADATA_PROXY_PORT}`;
|
|
377
|
-
var RAINBOW_PUBLIC_ENS_GRAPHQL_URL = "https://api.thegraph.com/subgraphs/name/ensdomains/ens";
|
|
378
|
-
var RAINBOW_DEMO_QUOTE_SIGNER = "0x0000000000000000000000000000000000000000";
|
|
379
|
-
var RAINBOW_DEMO_RELAY_URL = "https://relay.rainbow.me";
|
|
380
|
-
var RAINBOW_DEMO_MASTER_KEY = "sootsim-rainbow-demo-master-key-do-not-use-for-real-wallets";
|
|
381
|
-
var RAINBOW_DEMO_RPC_PROXY_BASE_URL = "https://rpc.rainbow.me/v1";
|
|
382
|
-
var RAINBOW_DEMO_RPC_API_KEY = "";
|
|
383
|
-
var RAINBOW_DEMO_PUBLIC_RPC_URLS = {
|
|
384
|
-
"1": "https://ethereum-rpc.publicnode.com"
|
|
385
|
-
};
|
|
386
|
-
var RAINBOW_DEMO_SERVICE_API_KEY = "sootsim-rainbow-demo-api-key";
|
|
387
|
-
var RAINBOW_DEMO_SECURE_WALLET_HASH_KEY = "0x736f6f7473696d2d7261696e626f772d64656d6f2d686173682d6b6579000000";
|
|
388
|
-
var RAINBOW_DEMO_WALLETCONNECT_PROJECT_ID = "00000000000000000000000000000000";
|
|
389
|
-
var RAINBOW_GRAPHQL_SENTINELS = [
|
|
390
|
-
"src/graphql/__generated__/ens.ts",
|
|
391
|
-
"src/graphql/__generated__/metadata.ts",
|
|
392
|
-
"src/graphql/__generated__/metadataPOST.ts"
|
|
393
|
-
];
|
|
394
|
-
function runRainbowSetupCommand(command, cwd) {
|
|
395
|
-
const { execSync } = require("node:child_process");
|
|
396
|
-
execSync(command, {
|
|
397
|
-
cwd,
|
|
398
|
-
stdio: "inherit",
|
|
399
|
-
env: {
|
|
400
|
-
...process.env,
|
|
401
|
-
METADATA_BASE_URL: RAINBOW_METADATA_BASE_URL,
|
|
402
|
-
RAINBOW_RELAY_QUOTE_SIGNER: process.env.RAINBOW_RELAY_QUOTE_SIGNER ?? RAINBOW_DEMO_QUOTE_SIGNER
|
|
403
|
-
}
|
|
404
|
-
});
|
|
405
|
-
}
|
|
406
|
-
function ensureRainbowGraphqlConfig() {
|
|
407
|
-
if (!(0, import_node_fs.existsSync)(RAINBOW_GRAPHQL_DIR)) return;
|
|
408
|
-
const source = (0, import_node_fs.existsSync)(RAINBOW_GRAPHQL_CONFIG_FILE) ? (0, import_node_fs.readFileSync)(RAINBOW_GRAPHQL_CONFIG_FILE, "utf8") : "";
|
|
409
|
-
if (source.includes(RAINBOW_PUBLIC_ENS_GRAPHQL_URL) && source.includes(RAINBOW_METADATA_BASE_URL)) {
|
|
410
|
-
return;
|
|
411
|
-
}
|
|
412
|
-
(0, import_node_fs.writeFileSync)(
|
|
413
|
-
RAINBOW_GRAPHQL_CONFIG_FILE,
|
|
414
|
-
`exports.config = {
|
|
415
|
-
ens: {
|
|
416
|
-
__name: 'ens',
|
|
417
|
-
document: './queries/ens.graphql',
|
|
418
|
-
schema: {
|
|
419
|
-
method: 'POST',
|
|
420
|
-
url: '${RAINBOW_PUBLIC_ENS_GRAPHQL_URL}',
|
|
421
|
-
},
|
|
422
|
-
},
|
|
423
|
-
metadata: {
|
|
424
|
-
__name: 'metadata',
|
|
425
|
-
document: './queries/metadata.graphql',
|
|
426
|
-
schema: { method: 'GET', url: '${RAINBOW_METADATA_BASE_URL}/v1/graph' },
|
|
427
|
-
},
|
|
428
|
-
metadataPOST: {
|
|
429
|
-
__name: 'metadataPOST',
|
|
430
|
-
document: './queries/metadata.graphql',
|
|
431
|
-
schema: { method: 'POST', url: '${RAINBOW_METADATA_BASE_URL}/v1/graph' },
|
|
432
|
-
},
|
|
433
|
-
arc: {
|
|
434
|
-
__name: 'arc',
|
|
435
|
-
document: './queries/arc.graphql',
|
|
436
|
-
schema: {
|
|
437
|
-
method: 'GET',
|
|
438
|
-
url: 'https://arc-graphql.rainbow.me/graphql',
|
|
439
|
-
headers: {
|
|
440
|
-
'x-api-key': 'ARC_GRAPHQL_API_KEY',
|
|
441
|
-
},
|
|
442
|
-
},
|
|
443
|
-
},
|
|
444
|
-
arcDev: {
|
|
445
|
-
__name: 'arcDev',
|
|
446
|
-
document: './queries/arc.graphql',
|
|
447
|
-
schema: {
|
|
448
|
-
method: 'GET',
|
|
449
|
-
url: 'https://arc-graphql.rainbowdotme.workers.dev/graphql',
|
|
450
|
-
headers: {},
|
|
451
|
-
},
|
|
452
|
-
},
|
|
453
|
-
};
|
|
454
|
-
`
|
|
455
|
-
);
|
|
456
|
-
}
|
|
457
|
-
function resolveRainbowDemoEnv() {
|
|
458
|
-
const env = {
|
|
459
|
-
ENABLE_DEV_MODE: "1",
|
|
460
|
-
IS_TESTING: "false",
|
|
461
|
-
METADATA_BASE_URL: process.env.RAINBOW_METADATA_BASE_URL ?? RAINBOW_DEMO_METADATA_BASE_URL,
|
|
462
|
-
ADDYS_API_KEY: process.env.ADDYS_API_KEY ?? RAINBOW_DEMO_SERVICE_API_KEY,
|
|
463
|
-
ADDYS_BASE_URL: process.env.ADDYS_BASE_URL ?? RAINBOW_DEMO_METADATA_BASE_URL,
|
|
464
|
-
PLATFORM_API_KEY: process.env.PLATFORM_API_KEY ?? RAINBOW_DEMO_SERVICE_API_KEY,
|
|
465
|
-
PLATFORM_BASE_URL: process.env.PLATFORM_BASE_URL ?? RAINBOW_DEMO_METADATA_BASE_URL,
|
|
466
|
-
RAINBOW_MASTER_KEY: process.env.RAINBOW_MASTER_KEY ?? RAINBOW_DEMO_MASTER_KEY,
|
|
467
|
-
RAINBOW_RELAY_QUOTE_SIGNER: process.env.RAINBOW_RELAY_QUOTE_SIGNER ?? RAINBOW_DEMO_QUOTE_SIGNER,
|
|
468
|
-
RAINBOW_RELAY_URL: process.env.RAINBOW_RELAY_URL ?? RAINBOW_DEMO_RELAY_URL,
|
|
469
|
-
RPC_PROXY_API_KEY_PROD: RAINBOW_DEMO_RPC_API_KEY,
|
|
470
|
-
RPC_PROXY_BASE_URL_PROD: process.env.RAINBOW_RPC_PROXY_BASE_URL ?? process.env.RPC_PROXY_BASE_URL_PROD ?? RAINBOW_DEMO_RPC_PROXY_BASE_URL,
|
|
471
|
-
SECURE_WALLET_HASH_KEY: process.env.SECURE_WALLET_HASH_KEY ?? RAINBOW_DEMO_SECURE_WALLET_HASH_KEY,
|
|
472
|
-
WC_PROJECT_ID: process.env.WC_PROJECT_ID ?? process.env.RAINBOW_WALLETCONNECT_PROJECT_ID ?? RAINBOW_DEMO_WALLETCONNECT_PROJECT_ID
|
|
473
|
-
};
|
|
474
|
-
const optionalEnvVars = [
|
|
475
|
-
"ADDYS_API_KEY",
|
|
476
|
-
"ADDYS_BASE_URL",
|
|
477
|
-
"IMGIX_DOMAIN",
|
|
478
|
-
"IMGIX_TOKEN",
|
|
479
|
-
"PLATFORM_API_KEY",
|
|
480
|
-
"PLATFORM_BASE_URL",
|
|
481
|
-
"RAINBOW_TEST_WALLET",
|
|
482
|
-
"RAINBOW_RELAY_API_KEY",
|
|
483
|
-
"RAINBOW_RELAY_URL",
|
|
484
|
-
"SECURE_WALLET_HASH_KEY",
|
|
485
|
-
"TOKEN_SEARCH_URL"
|
|
486
|
-
];
|
|
487
|
-
for (const key of optionalEnvVars) {
|
|
488
|
-
const value = process.env[key];
|
|
489
|
-
if (value) env[key] = value;
|
|
490
|
-
}
|
|
491
|
-
return env;
|
|
492
|
-
}
|
|
493
|
-
function ensureRainbowDemoNetworks() {
|
|
494
|
-
if (!(0, import_node_fs.existsSync)(RAINBOW_NETWORKS_FILE)) return;
|
|
495
|
-
const payload = JSON.parse((0, import_node_fs.readFileSync)(RAINBOW_NETWORKS_FILE, "utf8"));
|
|
496
|
-
if (!Array.isArray(payload.networks)) return;
|
|
497
|
-
let changed = false;
|
|
498
|
-
for (const network of payload.networks) {
|
|
499
|
-
const url = network.id ? RAINBOW_DEMO_PUBLIC_RPC_URLS[network.id] : void 0;
|
|
500
|
-
if (!url || !network.defaultRPC) continue;
|
|
501
|
-
if (network.defaultRPC.url === url) continue;
|
|
502
|
-
network.defaultRPC.url = url;
|
|
503
|
-
changed = true;
|
|
504
|
-
}
|
|
505
|
-
if (changed) {
|
|
506
|
-
(0, import_node_fs.writeFileSync)(RAINBOW_NETWORKS_FILE, `${JSON.stringify(payload)}
|
|
507
|
-
`);
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
function ensureRainbowSetup() {
|
|
511
|
-
if (!(0, import_node_fs.existsSync)(RAINBOW_DIR)) return;
|
|
512
|
-
ensureRainbowGraphqlConfig();
|
|
513
|
-
if (!(0, import_node_fs.existsSync)((0, import_node_path.join)(RAINBOW_GRAPHQL_DIR, "node_modules/.bin/graphql-codegen"))) {
|
|
514
|
-
runRainbowSetupCommand("fnm exec --using=22 yarn install", RAINBOW_GRAPHQL_DIR);
|
|
515
|
-
}
|
|
516
|
-
const missingGraphql = RAINBOW_GRAPHQL_SENTINELS.some(
|
|
517
|
-
(rel) => !(0, import_node_fs.existsSync)((0, import_node_path.join)(RAINBOW_DIR, rel))
|
|
518
|
-
);
|
|
519
|
-
if (missingGraphql) {
|
|
520
|
-
runRainbowSetupCommand("fnm exec --using=22 yarn codegen", RAINBOW_GRAPHQL_DIR);
|
|
521
|
-
}
|
|
522
|
-
if (!(0, import_node_fs.existsSync)(RAINBOW_NETWORKS_FILE)) {
|
|
523
|
-
runRainbowSetupCommand("fnm exec --using=22 yarn fetch:networks", RAINBOW_DIR);
|
|
524
|
-
}
|
|
525
|
-
ensureRainbowDemoNetworks();
|
|
526
|
-
}
|
|
527
|
-
var ARTSY_DIR = (0, import_node_path.join)(HOME, "github/eigen");
|
|
528
|
-
var ARTSY_KEYS_FILE = (0, import_node_path.join)(ARTSY_DIR, "keys.shared.json");
|
|
529
|
-
var ARTSY_METAFLAGS_FILE = (0, import_node_path.join)(ARTSY_DIR, "metaflags.json");
|
|
530
|
-
var ARTSY_RELAY_SENTINEL = (0, import_node_path.join)(ARTSY_DIR, "src/__generated__/.relay-complete");
|
|
531
|
-
function readArtsyKeysPayload() {
|
|
532
|
-
if (!(0, import_node_fs.existsSync)(ARTSY_KEYS_FILE)) return void 0;
|
|
97
|
+
// scripts/optional-demo-registry.ts
|
|
98
|
+
var REGISTRY_SPECIFIER = "./demo-app-registry.ts";
|
|
99
|
+
var cached = null;
|
|
100
|
+
async function loadOptionalDemoApps() {
|
|
101
|
+
if (cached) return cached;
|
|
533
102
|
try {
|
|
534
|
-
const
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
return { secure, public: publicKeys };
|
|
103
|
+
const mod = await import(
|
|
104
|
+
/* @vite-ignore */
|
|
105
|
+
REGISTRY_SPECIFIER
|
|
106
|
+
);
|
|
107
|
+
cached = Array.isArray(mod.APPS) ? mod.APPS : [];
|
|
540
108
|
} catch {
|
|
541
|
-
|
|
109
|
+
cached = [];
|
|
542
110
|
}
|
|
111
|
+
return cached;
|
|
543
112
|
}
|
|
544
|
-
function
|
|
545
|
-
|
|
546
|
-
const password = process.env.SOOTSIM_ARTSY_PASSWORD ?? process.env.MAESTRO_TEST_PASSWORD;
|
|
547
|
-
const keys = readArtsyKeysPayload();
|
|
548
|
-
const env = {};
|
|
549
|
-
if (email && password) {
|
|
550
|
-
env.SOOTSIM_LAUNCH_ARGUMENTS = JSON.stringify({
|
|
551
|
-
email,
|
|
552
|
-
password,
|
|
553
|
-
useMaestroInit: true
|
|
554
|
-
});
|
|
555
|
-
}
|
|
556
|
-
if (keys) {
|
|
557
|
-
env.SOOTSIM_REACT_NATIVE_KEYS_JSON = JSON.stringify(keys);
|
|
558
|
-
}
|
|
559
|
-
if (Object.keys(env).length === 0) return void 0;
|
|
560
|
-
return {
|
|
561
|
-
env
|
|
562
|
-
};
|
|
563
|
-
}
|
|
564
|
-
function ensureArtsySetup() {
|
|
565
|
-
if (!(0, import_node_fs.existsSync)(ARTSY_DIR)) return;
|
|
566
|
-
const { execSync } = require("node:child_process");
|
|
567
|
-
const yarnRelease = (0, import_node_path.join)(ARTSY_DIR, ".yarn/releases/yarn-4.10.3.cjs");
|
|
568
|
-
if ((0, import_node_fs.existsSync)(yarnRelease)) {
|
|
569
|
-
const src = (0, import_node_fs.readFileSync)(yarnRelease, "utf8");
|
|
570
|
-
const needle = '["clone","-c core.autocrlf=false",';
|
|
571
|
-
if (src.includes(needle)) {
|
|
572
|
-
(0, import_node_fs.writeFileSync)(
|
|
573
|
-
yarnRelease,
|
|
574
|
-
src.replace(needle, '["clone","-c","core.autocrlf=false",')
|
|
575
|
-
);
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
if (!(0, import_node_fs.existsSync)((0, import_node_path.join)(ARTSY_DIR, "node_modules/.yarn-state.yml"))) {
|
|
579
|
-
execSync("yarn install", {
|
|
580
|
-
cwd: ARTSY_DIR,
|
|
581
|
-
stdio: "inherit",
|
|
582
|
-
env: { ...process.env, YARN_CHECKSUM_BEHAVIOR: "update" }
|
|
583
|
-
});
|
|
584
|
-
}
|
|
585
|
-
if (!(0, import_node_fs.existsSync)(ARTSY_KEYS_FILE) || !(0, import_node_fs.existsSync)(ARTSY_METAFLAGS_FILE)) {
|
|
586
|
-
try {
|
|
587
|
-
execSync("yarn setup:oss", { cwd: ARTSY_DIR, stdio: "inherit" });
|
|
588
|
-
} catch {
|
|
589
|
-
if (!(0, import_node_fs.existsSync)(ARTSY_KEYS_FILE) || !(0, import_node_fs.existsSync)(ARTSY_METAFLAGS_FILE)) {
|
|
590
|
-
throw new Error("artsy demo: setup:oss did not create keys/metaflags");
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
const rnlaPkgJson = (0, import_node_path.join)(
|
|
595
|
-
ARTSY_DIR,
|
|
596
|
-
"node_modules/react-native-launch-arguments/package.json"
|
|
597
|
-
);
|
|
598
|
-
if ((0, import_node_fs.existsSync)(rnlaPkgJson)) {
|
|
599
|
-
const raw = (0, import_node_fs.readFileSync)(rnlaPkgJson, "utf8");
|
|
600
|
-
if (raw.includes('"dist/index.js"')) {
|
|
601
|
-
(0, import_node_fs.writeFileSync)(rnlaPkgJson, raw.replace('"dist/index.js"', '"src/index.ts"'));
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
if (!(0, import_node_fs.existsSync)(ARTSY_RELAY_SENTINEL)) {
|
|
605
|
-
execSync("yarn relay", { cwd: ARTSY_DIR, stdio: "inherit" });
|
|
606
|
-
(0, import_node_fs.writeFileSync)(ARTSY_RELAY_SENTINEL, "");
|
|
607
|
-
}
|
|
113
|
+
function optionalDemoAppsSync() {
|
|
114
|
+
return cached ?? [];
|
|
608
115
|
}
|
|
609
|
-
var APPS = [
|
|
610
|
-
{
|
|
611
|
-
name: "bluesky",
|
|
612
|
-
label: "Bluesky",
|
|
613
|
-
dir: (0, import_node_path.join)(HOME, "github/bluesky"),
|
|
614
|
-
preferredPort: 8082,
|
|
615
|
-
framework: "expo",
|
|
616
|
-
command: (p) => ({ cmd: `npx expo start --port ${p}` }),
|
|
617
|
-
credentials: {
|
|
618
|
-
envVars: ["SOOTSIM_BLUESKY_PASSWORD"],
|
|
619
|
-
known: { HANDLE: "natew.bsky.social" }
|
|
620
|
-
}
|
|
621
|
-
},
|
|
622
|
-
{
|
|
623
|
-
name: "3pc",
|
|
624
|
-
label: "3PunchConvo",
|
|
625
|
-
dir: (0, import_node_path.join)(HOME, "lightstrike-labs/three-punch-convo-app/apps/one"),
|
|
626
|
-
preferredPort: 8081,
|
|
627
|
-
framework: "one",
|
|
628
|
-
command: (p) => ({ cmd: "npx one dev", env: { ONE_PORT: String(p) } })
|
|
629
|
-
},
|
|
630
|
-
{
|
|
631
|
-
name: "uniswap",
|
|
632
|
-
label: "Uniswap",
|
|
633
|
-
dir: UNISWAP_APP_DIR,
|
|
634
|
-
preferredPort: 8085,
|
|
635
|
-
framework: "expo",
|
|
636
|
-
prepare: () => {
|
|
637
|
-
ensureUniswapDemoEnvLocal();
|
|
638
|
-
ensureUniswapForceUpgradePatched();
|
|
639
|
-
},
|
|
640
|
-
command: (p) => ({
|
|
641
|
-
cmd: `npx expo start --clear --port ${p}`,
|
|
642
|
-
// prefer the real local mobile env when present, otherwise fall back
|
|
643
|
-
// to Uniswap's checked-in public web RPC settings so demo boots cleanly.
|
|
644
|
-
env: resolveUniswapDemoEnv()
|
|
645
|
-
})
|
|
646
|
-
},
|
|
647
|
-
{
|
|
648
|
-
name: "takeout",
|
|
649
|
-
label: "Takeout",
|
|
650
|
-
dir: (0, import_node_path.join)(HOME, "takeout"),
|
|
651
|
-
preferredPort: 8086,
|
|
652
|
-
framework: "one",
|
|
653
|
-
// takeout needs more than Metro for the demo to actually work: better-auth
|
|
654
|
-
// (login), zero-cache (sync), and a postgres for both. `bun lite` brings
|
|
655
|
-
// up the orez-backed stack (PG + zero + s3 in one binary) plus the One
|
|
656
|
-
// dev server. takeout's env system shifts every port (web, pg, zero,
|
|
657
|
-
// minio) uniformly by PORT_OFFSET, so we derive offset = port - 8081
|
|
658
|
-
// (the base web port) to keep all backend ports clear of the default
|
|
659
|
-
// dev stack while pinning One to the demo slot. OREZ_DATA_DIR is isolated
|
|
660
|
-
// to a per-demo path so we don't fight a soot dev orez that may already
|
|
661
|
-
// be holding pglite locks on ~/takeout/.orez (soot can attach takeout as
|
|
662
|
-
// a project and spin up its own orez against the same data dir).
|
|
663
|
-
readyTimeoutMs: 24e4,
|
|
664
|
-
managedPorts: (p) => {
|
|
665
|
-
const offset = p - 8081;
|
|
666
|
-
return [5433 + offset, 4848 + offset, 9200 + offset];
|
|
667
|
-
},
|
|
668
|
-
command: (p) => ({
|
|
669
|
-
cmd: "bun lite:demo",
|
|
670
|
-
env: {
|
|
671
|
-
TAKEOUT_ENV_MODE: "development",
|
|
672
|
-
PORT_OFFSET: String(p - 8081),
|
|
673
|
-
OREZ_DATA_DIR: `${HOME}/.cache/sootsim-demo/takeout-orez`,
|
|
674
|
-
VITE_DEMO_MODE: "1",
|
|
675
|
-
ZERO_APP_ID: "takeout",
|
|
676
|
-
ZERO_APP_PUBLICATIONS: "zero_takeout",
|
|
677
|
-
ZERO_CVR_MAX_CONNS: "4",
|
|
678
|
-
ZERO_NUM_SYNC_WORKERS: "2",
|
|
679
|
-
ZERO_UPSTREAM_MAX_CONNS: "8"
|
|
680
|
-
}
|
|
681
|
-
})
|
|
682
|
-
},
|
|
683
|
-
{
|
|
684
|
-
name: "expensify",
|
|
685
|
-
label: "Expensify",
|
|
686
|
-
dir: (0, import_node_path.join)(HOME, "github/expensify"),
|
|
687
|
-
preferredPort: 8087,
|
|
688
|
-
framework: "rock",
|
|
689
|
-
runtimeConfig: {
|
|
690
|
-
env: EXPENSIFY_NATIVE_PROXY_ENV
|
|
691
|
-
},
|
|
692
|
-
sidecars: [
|
|
693
|
-
{
|
|
694
|
-
name: "web-proxy",
|
|
695
|
-
port: 9e3,
|
|
696
|
-
readyPath: "/api/Ping",
|
|
697
|
-
command: () => ({
|
|
698
|
-
cmd: `bun ${JSON.stringify(getExpensifyProxyScript())}`,
|
|
699
|
-
env: EXPENSIFY_NATIVE_PROXY_ENV
|
|
700
|
-
})
|
|
701
|
-
}
|
|
702
|
-
],
|
|
703
|
-
command: (p) => ({
|
|
704
|
-
cmd: `fnm exec --using=20.20.0 npx rock start --port ${p} --no-interactive`,
|
|
705
|
-
env: EXPENSIFY_NATIVE_PROXY_ENV
|
|
706
|
-
})
|
|
707
|
-
},
|
|
708
|
-
{
|
|
709
|
-
name: "artsy",
|
|
710
|
-
label: "Artsy",
|
|
711
|
-
dir: ARTSY_DIR,
|
|
712
|
-
preferredPort: 8088,
|
|
713
|
-
framework: "expo",
|
|
714
|
-
runtimeConfig: resolveArtsyRuntimeConfig(),
|
|
715
|
-
prepare: () => {
|
|
716
|
-
ensureArtsySetup();
|
|
717
|
-
},
|
|
718
|
-
command: (p) => ({
|
|
719
|
-
// eigen's `yarn start` wraps `react-native start` with a relay watcher
|
|
720
|
-
// via concurrently; for the demo we run relay once in prepare and
|
|
721
|
-
// invoke the metro server directly so --port is respected.
|
|
722
|
-
cmd: `npx react-native start --port ${p}`
|
|
723
|
-
}),
|
|
724
|
-
credentials: {
|
|
725
|
-
envVars: ["SOOTSIM_ARTSY_EMAIL", "SOOTSIM_ARTSY_PASSWORD"],
|
|
726
|
-
note: "auto-login reuses Artsy\u2019s built-in Maestro launch-arguments hook"
|
|
727
|
-
}
|
|
728
|
-
},
|
|
729
|
-
{
|
|
730
|
-
name: "rainbow",
|
|
731
|
-
label: "Rainbow",
|
|
732
|
-
dir: RAINBOW_DIR,
|
|
733
|
-
preferredPort: 8089,
|
|
734
|
-
framework: "rock",
|
|
735
|
-
sidecars: [
|
|
736
|
-
{
|
|
737
|
-
name: "metadata-proxy",
|
|
738
|
-
port: RAINBOW_METADATA_PROXY_PORT,
|
|
739
|
-
readyPath: "/health",
|
|
740
|
-
command: () => ({
|
|
741
|
-
cmd: `bun ${JSON.stringify(getRainbowMetadataProxyScript())}`,
|
|
742
|
-
env: {
|
|
743
|
-
PORT: String(RAINBOW_METADATA_PROXY_PORT),
|
|
744
|
-
RAINBOW_PUBLIC_RPC_URLS: JSON.stringify(RAINBOW_DEMO_PUBLIC_RPC_URLS),
|
|
745
|
-
RAINBOW_UPSTREAM_METADATA_BASE_URL: RAINBOW_METADATA_BASE_URL
|
|
746
|
-
}
|
|
747
|
-
})
|
|
748
|
-
}
|
|
749
|
-
],
|
|
750
|
-
prepare: () => {
|
|
751
|
-
ensureRainbowSetup();
|
|
752
|
-
},
|
|
753
|
-
command: (p) => ({
|
|
754
|
-
cmd: `fnm exec --using=22 yarn start --port ${p} --reset-cache`,
|
|
755
|
-
env: resolveRainbowDemoEnv()
|
|
756
|
-
}),
|
|
757
|
-
credentials: {
|
|
758
|
-
envVars: ["RAINBOW_TEST_WALLET"],
|
|
759
|
-
optionalEnvVars: [
|
|
760
|
-
"RAINBOW_WALLETCONNECT_PROJECT_ID",
|
|
761
|
-
"WC_PROJECT_ID",
|
|
762
|
-
"IMGIX_DOMAIN",
|
|
763
|
-
"IMGIX_TOKEN"
|
|
764
|
-
],
|
|
765
|
-
note: "launcher supplies demo encryption, public mainnet RPC, and a placeholder WalletConnect project id; use only a public throwaway mnemonic for RAINBOW_TEST_WALLET"
|
|
766
|
-
}
|
|
767
|
-
},
|
|
768
|
-
{
|
|
769
|
-
name: "rocket-chat",
|
|
770
|
-
label: "Rocket.Chat",
|
|
771
|
-
dir: (0, import_node_path.join)(HOME, "github/Rocket.Chat.ReactNative"),
|
|
772
|
-
preferredPort: 8093,
|
|
773
|
-
framework: "expo",
|
|
774
|
-
command: (p) => ({
|
|
775
|
-
cmd: `npx react-native start --port ${p}`,
|
|
776
|
-
env: { RUNNING_E2E_TESTS: "true" }
|
|
777
|
-
}),
|
|
778
|
-
credentials: {
|
|
779
|
-
envVars: [
|
|
780
|
-
"ROCKET_CHAT_DEMO_SERVER",
|
|
781
|
-
"ROCKET_CHAT_DEMO_USERNAME",
|
|
782
|
-
"ROCKET_CHAT_DEMO_PASSWORD"
|
|
783
|
-
],
|
|
784
|
-
known: { SERVER: "https://mobile.qa.rocket.chat" },
|
|
785
|
-
note: "use packages/sootsim-engine/scripts/rocket-chat-demo-auth.ts to create/login a disposable QA user and print the rocketchat://auth deep link"
|
|
786
|
-
}
|
|
787
|
-
},
|
|
788
|
-
{
|
|
789
|
-
name: "mattermost",
|
|
790
|
-
label: "Mattermost",
|
|
791
|
-
dir: MATTERMOST_DIR,
|
|
792
|
-
preferredPort: 8090,
|
|
793
|
-
framework: "expo",
|
|
794
|
-
sidecars: [
|
|
795
|
-
{
|
|
796
|
-
name: "preview-server",
|
|
797
|
-
port: 8065,
|
|
798
|
-
readyPath: "/api/v4/system/ping",
|
|
799
|
-
command: () => ({
|
|
800
|
-
cmd: `bun ${JSON.stringify(getMattermostPreviewServerScript())}`
|
|
801
|
-
})
|
|
802
|
-
}
|
|
803
|
-
],
|
|
804
|
-
runtimeConfig: {
|
|
805
|
-
modules: {
|
|
806
|
-
// mattermost patches react-native-keychain's JS entry in its own
|
|
807
|
-
// repo; run that package and provide only the native manager seam.
|
|
808
|
-
"react-native-keychain": false,
|
|
809
|
-
"dist/assets/config.json": {
|
|
810
|
-
inline: {
|
|
811
|
-
AuthUrlScheme: "mmauth://",
|
|
812
|
-
AuthUrlSchemeDev: "mmauthbeta://",
|
|
813
|
-
DefaultServerUrl: "http://localhost:8065",
|
|
814
|
-
DefaultServerName: "Mattermost Demo",
|
|
815
|
-
TestServerUrl: "http://localhost:8065",
|
|
816
|
-
AutoSelectServerUrl: true,
|
|
817
|
-
WebsiteURL: "https://mattermost.com",
|
|
818
|
-
ServerNoticeURL: "https://github.com/mattermost/mattermost-server/blob/master/NOTICE.txt",
|
|
819
|
-
MobileNoticeURL: "https://github.com/mattermost/mattermost-mobile/blob/master/NOTICE.txt",
|
|
820
|
-
RudderApiKey: "",
|
|
821
|
-
SentryEnabled: false,
|
|
822
|
-
SentryDsnIos: "",
|
|
823
|
-
SentryDsnAndroid: "",
|
|
824
|
-
SentryOptions: {
|
|
825
|
-
deactivateStacktraceMerging: true,
|
|
826
|
-
autoBreadcrumbs: {
|
|
827
|
-
xhr: false,
|
|
828
|
-
console: true
|
|
829
|
-
},
|
|
830
|
-
severityLevelFilter: ["fatal"]
|
|
831
|
-
},
|
|
832
|
-
ShowReview: false,
|
|
833
|
-
ShowOnboarding: false,
|
|
834
|
-
ExperimentalNormalizeMarkdownLinks: false,
|
|
835
|
-
CustomRequestHeaders: {},
|
|
836
|
-
CollectNetworkMetrics: false
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
},
|
|
840
|
-
nativeModules: {
|
|
841
|
-
RNKeychainManager: { file: getMattermostKeychainNativeModule() },
|
|
842
|
-
RNUtils: { file: getMattermostRNUtilsNativeModule() },
|
|
843
|
-
GenericClient: { file: getMattermostNetworkClientNativeModule() },
|
|
844
|
-
ApiClient: { file: getMattermostNetworkClientNativeModule() },
|
|
845
|
-
WebSocketClient: { file: getMattermostNetworkClientNativeModule() }
|
|
846
|
-
}
|
|
847
|
-
},
|
|
848
|
-
command: (p) => ({
|
|
849
|
-
cmd: `npx react-native start --host 127.0.0.1 --port ${p}`
|
|
850
|
-
}),
|
|
851
|
-
credentials: {
|
|
852
|
-
known: {
|
|
853
|
-
SERVER: "http://localhost:8065",
|
|
854
|
-
USERNAME: "demo",
|
|
855
|
-
PASSWORD: "DemoPassword1!"
|
|
856
|
-
},
|
|
857
|
-
note: "local mattermost-preview seeded through the real REST API; no signup or OTP needed"
|
|
858
|
-
}
|
|
859
|
-
},
|
|
860
|
-
{
|
|
861
|
-
name: "joplin",
|
|
862
|
-
label: "Joplin",
|
|
863
|
-
dir: JOPLIN_APP_DIR,
|
|
864
|
-
preferredPort: 8084,
|
|
865
|
-
framework: "expo",
|
|
866
|
-
// joplin is local-first: sync.target defaults to 0 ("None") and the
|
|
867
|
-
// mobile startup runs WelcomeUtils.install() on first launch, which
|
|
868
|
-
// seeds a "Welcome!" folder + welcome notes. no login or external
|
|
869
|
-
// credentials are needed for a usable demo — just boot it. tenant
|
|
870
|
-
// bedrock SQLite (via react-native-sqlite-storage stub) carries the
|
|
871
|
-
// seeded notes across reloads.
|
|
872
|
-
prepare: () => {
|
|
873
|
-
ensureJoplinWatchmanConfigs();
|
|
874
|
-
ensureJoplinBuilt();
|
|
875
|
-
},
|
|
876
|
-
command: (p) => ({
|
|
877
|
-
cmd: `npx expo start --port ${p}`,
|
|
878
|
-
env: { BROWSERSLIST_IGNORE_OLD_DATA: "true" }
|
|
879
|
-
}),
|
|
880
|
-
credentials: {
|
|
881
|
-
note: "no login required \u2014 sync.target=0 (None), seed via WelcomeUtils"
|
|
882
|
-
}
|
|
883
|
-
}
|
|
884
|
-
];
|
|
885
116
|
|
|
886
117
|
// scripts/dev-server-scanner.ts
|
|
887
118
|
var execP = (0, import_util.promisify)(import_child_process.exec);
|
|
119
|
+
void loadOptionalDemoApps();
|
|
888
120
|
var TIMEOUT_MS = 250;
|
|
889
121
|
var MANIFEST_TIMEOUT_MS = 1500;
|
|
890
122
|
var TCP_GATE_MS = 120;
|
|
891
123
|
function tcpPing(port, timeout = TCP_GATE_MS) {
|
|
892
|
-
return new Promise((
|
|
124
|
+
return new Promise((resolve) => {
|
|
893
125
|
const sock = new import_net.default.Socket();
|
|
894
126
|
let settled = false;
|
|
895
127
|
const done = (ok) => {
|
|
896
128
|
if (settled) return;
|
|
897
129
|
settled = true;
|
|
898
130
|
sock.destroy();
|
|
899
|
-
|
|
131
|
+
resolve(ok);
|
|
900
132
|
};
|
|
901
133
|
sock.setTimeout(timeout);
|
|
902
134
|
sock.once("connect", () => done(true));
|
|
@@ -906,7 +138,7 @@ function tcpPing(port, timeout = TCP_GATE_MS) {
|
|
|
906
138
|
});
|
|
907
139
|
}
|
|
908
140
|
function httpGet(port, path, method = "GET", timeout = TIMEOUT_MS, headers = {}) {
|
|
909
|
-
return new Promise((
|
|
141
|
+
return new Promise((resolve) => {
|
|
910
142
|
const req = import_http.default.request(
|
|
911
143
|
{ hostname: "localhost", port, path, method, timeout, headers },
|
|
912
144
|
(res) => {
|
|
@@ -920,14 +152,14 @@ function httpGet(port, path, method = "GET", timeout = TIMEOUT_MS, headers = {})
|
|
|
920
152
|
})();
|
|
921
153
|
res.on(
|
|
922
154
|
"end",
|
|
923
|
-
() =>
|
|
155
|
+
() => resolve({ statusCode: res.statusCode || 0, body, contentType })
|
|
924
156
|
);
|
|
925
157
|
}
|
|
926
158
|
);
|
|
927
|
-
req.on("error", () =>
|
|
159
|
+
req.on("error", () => resolve(null));
|
|
928
160
|
req.setTimeout(timeout, () => {
|
|
929
161
|
req.destroy();
|
|
930
|
-
|
|
162
|
+
resolve(null);
|
|
931
163
|
});
|
|
932
164
|
req.end();
|
|
933
165
|
});
|
|
@@ -1006,8 +238,8 @@ async function discoverListeningPorts(excludePorts = []) {
|
|
|
1006
238
|
var cwdByPid = /* @__PURE__ */ new Map();
|
|
1007
239
|
async function resolveProcessCwd(pid) {
|
|
1008
240
|
if (pid <= 0) return null;
|
|
1009
|
-
const
|
|
1010
|
-
if (
|
|
241
|
+
const cached2 = cwdByPid.get(pid);
|
|
242
|
+
if (cached2) return cached2;
|
|
1011
243
|
try {
|
|
1012
244
|
const { stdout } = await execP(`lsof -p ${pid} -a -d cwd -Fn 2>/dev/null`, {
|
|
1013
245
|
encoding: "utf8",
|
|
@@ -1039,7 +271,7 @@ function makeResult(port, framework) {
|
|
|
1039
271
|
};
|
|
1040
272
|
}
|
|
1041
273
|
function withRuntimeConfig(port, bundleUrl) {
|
|
1042
|
-
const knownApp =
|
|
274
|
+
const knownApp = optionalDemoAppsSync().find((app) => app.preferredPort === port);
|
|
1043
275
|
const configured = knownApp?.runtimeConfig ? applySootSimConfigToUrl(bundleUrl, knownApp.runtimeConfig) : bundleUrl;
|
|
1044
276
|
return normalizeNativeDevBundleUrl(configured);
|
|
1045
277
|
}
|
|
@@ -1224,12 +456,12 @@ async function scanDevServers(opts = {}) {
|
|
|
1224
456
|
const results = [];
|
|
1225
457
|
const toProbe = [];
|
|
1226
458
|
for (const { port, pid } of processes) {
|
|
1227
|
-
const
|
|
1228
|
-
if (
|
|
1229
|
-
if (
|
|
459
|
+
const cached2 = portCache.get(port);
|
|
460
|
+
if (cached2 && __shouldReuseScannerCacheEntry(cached2, pid)) {
|
|
461
|
+
if (cached2.result) results.push(cached2.result);
|
|
1230
462
|
continue;
|
|
1231
463
|
}
|
|
1232
|
-
if (
|
|
464
|
+
if (cached2 && cached2.pid !== pid) {
|
|
1233
465
|
knownNonPatched.delete(port);
|
|
1234
466
|
knownNonExpo.delete(port);
|
|
1235
467
|
knownOne.delete(port);
|