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;
|
|
@@ -32,802 +32,34 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
32
32
|
));
|
|
33
33
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
34
34
|
|
|
35
|
-
// scripts/demo-
|
|
36
|
-
var
|
|
37
|
-
__export(
|
|
38
|
-
|
|
35
|
+
// scripts/optional-demo-registry.ts
|
|
36
|
+
var optional_demo_registry_exports = {};
|
|
37
|
+
__export(optional_demo_registry_exports, {
|
|
38
|
+
loadOptionalDemoApps: () => loadOptionalDemoApps,
|
|
39
|
+
optionalDemoAppsSync: () => optionalDemoAppsSync
|
|
39
40
|
});
|
|
40
|
-
function
|
|
41
|
-
|
|
42
|
-
while (true) {
|
|
43
|
-
if ((0, import_node_fs.existsSync)((0, import_node_path2.join)(dir, "pnpm-workspace.yaml")) || (0, import_node_fs.existsSync)((0, import_node_path2.join)(dir, "turbo.json")) || (0, import_node_fs.existsSync)((0, import_node_path2.join)(dir, "nx.json")) || (0, import_node_fs.existsSync)((0, import_node_path2.join)(dir, "lerna.json"))) {
|
|
44
|
-
return dir;
|
|
45
|
-
}
|
|
46
|
-
const packageJsonPath = (0, import_node_path2.join)(dir, "package.json");
|
|
47
|
-
if ((0, import_node_fs.existsSync)(packageJsonPath)) {
|
|
48
|
-
try {
|
|
49
|
-
const pkg = JSON.parse((0, import_node_fs.readFileSync)(packageJsonPath, "utf8"));
|
|
50
|
-
if (pkg.workspaces) return dir;
|
|
51
|
-
} catch {
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
const parent = (0, import_node_path2.dirname)(dir);
|
|
55
|
-
if (parent === dir) return null;
|
|
56
|
-
dir = parent;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
function resolveWorkspaceScriptPath(workspaceRelativePath, packageRelativePath) {
|
|
60
|
-
const workspaceRoot = findWorkspaceRoot(process.cwd());
|
|
61
|
-
const candidates = [
|
|
62
|
-
workspaceRoot ? (0, import_node_path2.resolve)(workspaceRoot, workspaceRelativePath) : null,
|
|
63
|
-
(0, import_node_path2.resolve)(process.cwd(), workspaceRelativePath),
|
|
64
|
-
(0, import_node_path2.resolve)(process.cwd(), packageRelativePath)
|
|
65
|
-
].filter((candidate) => Boolean(candidate));
|
|
66
|
-
for (const candidate of candidates) {
|
|
67
|
-
if ((0, import_node_fs.existsSync)(candidate)) return candidate;
|
|
68
|
-
}
|
|
69
|
-
return candidates[0] ?? (0, import_node_path2.resolve)(process.cwd(), workspaceRelativePath);
|
|
70
|
-
}
|
|
71
|
-
function parseEnvFile(filePath) {
|
|
72
|
-
if (!(0, import_node_fs.existsSync)(filePath)) return {};
|
|
73
|
-
const env = {};
|
|
74
|
-
const source = (0, import_node_fs.readFileSync)(filePath, "utf8");
|
|
75
|
-
for (const rawLine of source.split(/\r?\n/)) {
|
|
76
|
-
const line = rawLine.trim();
|
|
77
|
-
if (!line || line.startsWith("#")) continue;
|
|
78
|
-
const match = line.match(/^([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/);
|
|
79
|
-
if (!match) continue;
|
|
80
|
-
let value = match[2].trim();
|
|
81
|
-
if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) {
|
|
82
|
-
value = value.slice(1, -1);
|
|
83
|
-
}
|
|
84
|
-
env[match[1]] = value;
|
|
85
|
-
}
|
|
86
|
-
return env;
|
|
87
|
-
}
|
|
88
|
-
function isUsableUniswapEnvValue(value) {
|
|
89
|
-
if (!value) return false;
|
|
90
|
-
const trimmed = value.trim();
|
|
91
|
-
if (!trimmed) return false;
|
|
92
|
-
if (trimmed.includes(UNISWAP_PLACEHOLDER)) return false;
|
|
93
|
-
if (trimmed === "TRADING_API_KEY" || trimmed === "UNISWAP_API_KEY") return false;
|
|
94
|
-
return true;
|
|
95
|
-
}
|
|
96
|
-
function pickEnvValue(sources, keys) {
|
|
97
|
-
for (const source of sources) {
|
|
98
|
-
for (const key of keys) {
|
|
99
|
-
const value = source[key];
|
|
100
|
-
if (isUsableUniswapEnvValue(value)) return value.trim();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return void 0;
|
|
104
|
-
}
|
|
105
|
-
function resolveUniswapDemoEnv() {
|
|
106
|
-
const localEnv = parseEnvFile(UNISWAP_ENV_LOCAL_FILE);
|
|
107
|
-
const webEnv = parseEnvFile((0, import_node_path2.join)(UNISWAP_REPO_DIR, "apps/web/.env"));
|
|
108
|
-
const sources = [
|
|
109
|
-
process.env,
|
|
110
|
-
localEnv,
|
|
111
|
-
webEnv
|
|
112
|
-
];
|
|
113
|
-
const env = {};
|
|
114
|
-
const bindings = [
|
|
115
|
-
["AMPLITUDE_PROXY_URL_OVERRIDE", ["REACT_APP_AMPLITUDE_PROXY_URL"]],
|
|
116
|
-
["QUICKNODE_ENDPOINT_NAME", ["REACT_APP_QUICKNODE_ENDPOINT_NAME"]],
|
|
117
|
-
["QUICKNODE_ENDPOINT_TOKEN", ["REACT_APP_QUICKNODE_ENDPOINT_TOKEN"]],
|
|
118
|
-
["INFURA_KEY", ["REACT_APP_INFURA_KEY"]],
|
|
119
|
-
["STATSIG_API_KEY", ["REACT_APP_STATSIG_API_KEY"]],
|
|
120
|
-
["STATSIG_PROXY_URL_OVERRIDE", ["REACT_APP_STATSIG_PROXY_URL"]],
|
|
121
|
-
["WALLETCONNECT_PROJECT_ID", ["REACT_APP_WALLET_CONNECT_PROJECT_ID"]],
|
|
122
|
-
["WALLETCONNECT_PROJECT_ID_BETA", ["REACT_APP_WALLET_CONNECT_PROJECT_ID"]],
|
|
123
|
-
["WALLETCONNECT_PROJECT_ID_DEV", ["REACT_APP_WALLET_CONNECT_PROJECT_ID"]],
|
|
124
|
-
["TRADING_API_KEY", ["REACT_APP_TRADING_API_KEY"]],
|
|
125
|
-
["UNISWAP_API_KEY", []]
|
|
126
|
-
];
|
|
127
|
-
for (const [target, aliases] of bindings) {
|
|
128
|
-
const value = pickEnvValue(sources, [target, ...aliases]);
|
|
129
|
-
if (!value) continue;
|
|
130
|
-
env[target] = value;
|
|
131
|
-
for (const alias of aliases) {
|
|
132
|
-
env[alias] = value;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
const hasPrivateGatewayKeys = isUsableUniswapEnvValue(env.TRADING_API_KEY) && isUsableUniswapEnvValue(env.UNISWAP_API_KEY);
|
|
136
|
-
if (!hasPrivateGatewayKeys) {
|
|
137
|
-
const publicGraphqlUrl = pickEnvValue(sources, ["GRAPHQL_URL_OVERRIDE", "REACT_APP_AWS_API_ENDPOINT"]) || "https://interface.gateway.uniswap.org/v1/graphql";
|
|
138
|
-
env.API_BASE_URL_OVERRIDE = "https://interface.gateway.uniswap.org";
|
|
139
|
-
env.API_BASE_URL_V2_OVERRIDE = "https://interface.gateway.uniswap.org/v2";
|
|
140
|
-
env.GRAPHQL_URL_OVERRIDE = publicGraphqlUrl;
|
|
141
|
-
env.TRADING_API_URL_OVERRIDE = "https://trading-api-labs.interface.gateway.uniswap.org";
|
|
142
|
-
env.FOR_API_URL_OVERRIDE = "https://for.interface.gateway.uniswap.org/v2/FOR.v1.FORService";
|
|
143
|
-
}
|
|
144
|
-
return env;
|
|
145
|
-
}
|
|
146
|
-
function ensureUniswapDemoEnvLocal() {
|
|
147
|
-
const existingSource = (0, import_node_fs.existsSync)(UNISWAP_ENV_LOCAL_FILE) ? (0, import_node_fs.readFileSync)(UNISWAP_ENV_LOCAL_FILE, "utf8") : "";
|
|
148
|
-
if (existingSource && !existingSource.includes(UNISWAP_DEMO_ENV_MARKER)) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
const env = resolveUniswapDemoEnv();
|
|
152
|
-
const lines = [UNISWAP_DEMO_ENV_MARKER];
|
|
153
|
-
for (const [key, value] of Object.entries(env).sort(([a], [b]) => a.localeCompare(b))) {
|
|
154
|
-
lines.push(`${key}=${JSON.stringify(value)}`);
|
|
155
|
-
}
|
|
156
|
-
lines.push("");
|
|
157
|
-
(0, import_node_fs.writeFileSync)(UNISWAP_ENV_LOCAL_FILE, `${lines.join("\n")}
|
|
158
|
-
`);
|
|
159
|
-
}
|
|
160
|
-
function ensureUniswapForceUpgradePatched() {
|
|
161
|
-
const hookNeedle = `export function useForceUpgradeStatus(): ForceUpgradeStatus {
|
|
162
|
-
`;
|
|
163
|
-
const hookPatch = ` // sootsim demo: bypass the force-upgrade gate during local engine demos.
|
|
164
|
-
return 'not-required'
|
|
165
|
-
|
|
166
|
-
`;
|
|
167
|
-
const hookLegacyPatch = ` // sootsim demo: bypass the force-upgrade gate during local engine demos.
|
|
168
|
-
if (process.env.${UNISWAP_FORCE_UPGRADE_PATCH_MARKER} === 'true') {
|
|
169
|
-
return 'not-required'
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
`;
|
|
173
|
-
const notificationNeedle = ` const getForceUpgradeStatus = (): ForceUpgradeStatus => {
|
|
174
|
-
`;
|
|
175
|
-
const notificationPatch = ` // sootsim demo: bypass the force-upgrade gate during local engine demos.
|
|
176
|
-
return 'not-required'
|
|
177
|
-
|
|
178
|
-
`;
|
|
179
|
-
const notificationLegacyPatch = ` // sootsim demo: bypass the force-upgrade gate during local engine demos.
|
|
180
|
-
if (process.env.${UNISWAP_FORCE_UPGRADE_PATCH_MARKER} === 'true') {
|
|
181
|
-
return 'not-required'
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
`;
|
|
185
|
-
const patchWithMigration = (filePath, needle, patch, legacyPatch) => {
|
|
186
|
-
const source = (0, import_node_fs.readFileSync)(filePath, "utf8");
|
|
187
|
-
if (source.includes(patch)) return;
|
|
188
|
-
if (source.includes(legacyPatch)) {
|
|
189
|
-
(0, import_node_fs.writeFileSync)(filePath, source.replace(legacyPatch, patch));
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
if (!source.includes(needle)) {
|
|
193
|
-
throw new Error(
|
|
194
|
-
`uniswap demo patch failed: expected snippet not found in ${filePath}`
|
|
195
|
-
);
|
|
196
|
-
}
|
|
197
|
-
(0, import_node_fs.writeFileSync)(filePath, source.replace(needle, `${needle}${patch}`));
|
|
198
|
-
};
|
|
199
|
-
patchWithMigration(
|
|
200
|
-
UNISWAP_FORCE_UPGRADE_HOOK_FILE,
|
|
201
|
-
hookNeedle,
|
|
202
|
-
hookPatch,
|
|
203
|
-
hookLegacyPatch
|
|
204
|
-
);
|
|
205
|
-
patchWithMigration(
|
|
206
|
-
UNISWAP_FORCE_UPGRADE_NOTIFICATION_FILE,
|
|
207
|
-
notificationNeedle,
|
|
208
|
-
notificationPatch,
|
|
209
|
-
notificationLegacyPatch
|
|
210
|
-
);
|
|
211
|
-
}
|
|
212
|
-
function ensureJoplinWatchmanConfigs() {
|
|
213
|
-
if (!(0, import_node_fs.existsSync)(JOPLIN_DIR)) return;
|
|
214
|
-
for (const rel of JOPLIN_WATCH_ROOTS) {
|
|
215
|
-
const dir = (0, import_node_path2.join)(JOPLIN_DIR, rel);
|
|
216
|
-
if (!(0, import_node_fs.existsSync)(dir)) continue;
|
|
217
|
-
const cfg = (0, import_node_path2.join)(dir, ".watchmanconfig");
|
|
218
|
-
if (!(0, import_node_fs.existsSync)(cfg)) (0, import_node_fs.writeFileSync)(cfg, "{}\n");
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
function ensureJoplinBuilt() {
|
|
222
|
-
if (!(0, import_node_fs.existsSync)(JOPLIN_DIR)) return;
|
|
223
|
-
const missing = JOPLIN_BUILD_SENTINELS.filter(
|
|
224
|
-
(rel) => !(0, import_node_fs.existsSync)((0, import_node_path2.join)(JOPLIN_DIR, rel))
|
|
225
|
-
);
|
|
226
|
-
if (missing.length === 0) return;
|
|
227
|
-
const { execSync } = require("node:child_process");
|
|
228
|
-
execSync("yarn buildParallel", {
|
|
229
|
-
cwd: JOPLIN_DIR,
|
|
230
|
-
stdio: "inherit",
|
|
231
|
-
env: { ...process.env, NO_FLIPPER: "1", CI: "" }
|
|
232
|
-
});
|
|
233
|
-
const stillMissing = JOPLIN_BUILD_SENTINELS.filter(
|
|
234
|
-
(rel) => !(0, import_node_fs.existsSync)((0, import_node_path2.join)(JOPLIN_DIR, rel))
|
|
235
|
-
);
|
|
236
|
-
if (stillMissing.length > 0) {
|
|
237
|
-
throw new Error(
|
|
238
|
-
`joplin demo: yarn buildParallel did not produce: ${stillMissing.join(", ")}`
|
|
239
|
-
);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
function runRainbowSetupCommand(command, cwd) {
|
|
243
|
-
const { execSync } = require("node:child_process");
|
|
244
|
-
execSync(command, {
|
|
245
|
-
cwd,
|
|
246
|
-
stdio: "inherit",
|
|
247
|
-
env: {
|
|
248
|
-
...process.env,
|
|
249
|
-
METADATA_BASE_URL: RAINBOW_METADATA_BASE_URL,
|
|
250
|
-
RAINBOW_RELAY_QUOTE_SIGNER: process.env.RAINBOW_RELAY_QUOTE_SIGNER ?? RAINBOW_DEMO_QUOTE_SIGNER
|
|
251
|
-
}
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
function ensureRainbowGraphqlConfig() {
|
|
255
|
-
if (!(0, import_node_fs.existsSync)(RAINBOW_GRAPHQL_DIR)) return;
|
|
256
|
-
const source = (0, import_node_fs.existsSync)(RAINBOW_GRAPHQL_CONFIG_FILE) ? (0, import_node_fs.readFileSync)(RAINBOW_GRAPHQL_CONFIG_FILE, "utf8") : "";
|
|
257
|
-
if (source.includes(RAINBOW_PUBLIC_ENS_GRAPHQL_URL) && source.includes(RAINBOW_METADATA_BASE_URL)) {
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
(0, import_node_fs.writeFileSync)(
|
|
261
|
-
RAINBOW_GRAPHQL_CONFIG_FILE,
|
|
262
|
-
`exports.config = {
|
|
263
|
-
ens: {
|
|
264
|
-
__name: 'ens',
|
|
265
|
-
document: './queries/ens.graphql',
|
|
266
|
-
schema: {
|
|
267
|
-
method: 'POST',
|
|
268
|
-
url: '${RAINBOW_PUBLIC_ENS_GRAPHQL_URL}',
|
|
269
|
-
},
|
|
270
|
-
},
|
|
271
|
-
metadata: {
|
|
272
|
-
__name: 'metadata',
|
|
273
|
-
document: './queries/metadata.graphql',
|
|
274
|
-
schema: { method: 'GET', url: '${RAINBOW_METADATA_BASE_URL}/v1/graph' },
|
|
275
|
-
},
|
|
276
|
-
metadataPOST: {
|
|
277
|
-
__name: 'metadataPOST',
|
|
278
|
-
document: './queries/metadata.graphql',
|
|
279
|
-
schema: { method: 'POST', url: '${RAINBOW_METADATA_BASE_URL}/v1/graph' },
|
|
280
|
-
},
|
|
281
|
-
arc: {
|
|
282
|
-
__name: 'arc',
|
|
283
|
-
document: './queries/arc.graphql',
|
|
284
|
-
schema: {
|
|
285
|
-
method: 'GET',
|
|
286
|
-
url: 'https://arc-graphql.rainbow.me/graphql',
|
|
287
|
-
headers: {
|
|
288
|
-
'x-api-key': 'ARC_GRAPHQL_API_KEY',
|
|
289
|
-
},
|
|
290
|
-
},
|
|
291
|
-
},
|
|
292
|
-
arcDev: {
|
|
293
|
-
__name: 'arcDev',
|
|
294
|
-
document: './queries/arc.graphql',
|
|
295
|
-
schema: {
|
|
296
|
-
method: 'GET',
|
|
297
|
-
url: 'https://arc-graphql.rainbowdotme.workers.dev/graphql',
|
|
298
|
-
headers: {},
|
|
299
|
-
},
|
|
300
|
-
},
|
|
301
|
-
};
|
|
302
|
-
`
|
|
303
|
-
);
|
|
304
|
-
}
|
|
305
|
-
function resolveRainbowDemoEnv() {
|
|
306
|
-
const env = {
|
|
307
|
-
ENABLE_DEV_MODE: "1",
|
|
308
|
-
IS_TESTING: "false",
|
|
309
|
-
METADATA_BASE_URL: process.env.RAINBOW_METADATA_BASE_URL ?? RAINBOW_DEMO_METADATA_BASE_URL,
|
|
310
|
-
ADDYS_API_KEY: process.env.ADDYS_API_KEY ?? RAINBOW_DEMO_SERVICE_API_KEY,
|
|
311
|
-
ADDYS_BASE_URL: process.env.ADDYS_BASE_URL ?? RAINBOW_DEMO_METADATA_BASE_URL,
|
|
312
|
-
PLATFORM_API_KEY: process.env.PLATFORM_API_KEY ?? RAINBOW_DEMO_SERVICE_API_KEY,
|
|
313
|
-
PLATFORM_BASE_URL: process.env.PLATFORM_BASE_URL ?? RAINBOW_DEMO_METADATA_BASE_URL,
|
|
314
|
-
RAINBOW_MASTER_KEY: process.env.RAINBOW_MASTER_KEY ?? RAINBOW_DEMO_MASTER_KEY,
|
|
315
|
-
RAINBOW_RELAY_QUOTE_SIGNER: process.env.RAINBOW_RELAY_QUOTE_SIGNER ?? RAINBOW_DEMO_QUOTE_SIGNER,
|
|
316
|
-
RAINBOW_RELAY_URL: process.env.RAINBOW_RELAY_URL ?? RAINBOW_DEMO_RELAY_URL,
|
|
317
|
-
RPC_PROXY_API_KEY_PROD: RAINBOW_DEMO_RPC_API_KEY,
|
|
318
|
-
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,
|
|
319
|
-
SECURE_WALLET_HASH_KEY: process.env.SECURE_WALLET_HASH_KEY ?? RAINBOW_DEMO_SECURE_WALLET_HASH_KEY,
|
|
320
|
-
WC_PROJECT_ID: process.env.WC_PROJECT_ID ?? process.env.RAINBOW_WALLETCONNECT_PROJECT_ID ?? RAINBOW_DEMO_WALLETCONNECT_PROJECT_ID
|
|
321
|
-
};
|
|
322
|
-
const optionalEnvVars = [
|
|
323
|
-
"ADDYS_API_KEY",
|
|
324
|
-
"ADDYS_BASE_URL",
|
|
325
|
-
"IMGIX_DOMAIN",
|
|
326
|
-
"IMGIX_TOKEN",
|
|
327
|
-
"PLATFORM_API_KEY",
|
|
328
|
-
"PLATFORM_BASE_URL",
|
|
329
|
-
"RAINBOW_TEST_WALLET",
|
|
330
|
-
"RAINBOW_RELAY_API_KEY",
|
|
331
|
-
"RAINBOW_RELAY_URL",
|
|
332
|
-
"SECURE_WALLET_HASH_KEY",
|
|
333
|
-
"TOKEN_SEARCH_URL"
|
|
334
|
-
];
|
|
335
|
-
for (const key of optionalEnvVars) {
|
|
336
|
-
const value = process.env[key];
|
|
337
|
-
if (value) env[key] = value;
|
|
338
|
-
}
|
|
339
|
-
return env;
|
|
340
|
-
}
|
|
341
|
-
function ensureRainbowDemoNetworks() {
|
|
342
|
-
if (!(0, import_node_fs.existsSync)(RAINBOW_NETWORKS_FILE)) return;
|
|
343
|
-
const payload = JSON.parse((0, import_node_fs.readFileSync)(RAINBOW_NETWORKS_FILE, "utf8"));
|
|
344
|
-
if (!Array.isArray(payload.networks)) return;
|
|
345
|
-
let changed = false;
|
|
346
|
-
for (const network of payload.networks) {
|
|
347
|
-
const url = network.id ? RAINBOW_DEMO_PUBLIC_RPC_URLS[network.id] : void 0;
|
|
348
|
-
if (!url || !network.defaultRPC) continue;
|
|
349
|
-
if (network.defaultRPC.url === url) continue;
|
|
350
|
-
network.defaultRPC.url = url;
|
|
351
|
-
changed = true;
|
|
352
|
-
}
|
|
353
|
-
if (changed) {
|
|
354
|
-
(0, import_node_fs.writeFileSync)(RAINBOW_NETWORKS_FILE, `${JSON.stringify(payload)}
|
|
355
|
-
`);
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
function ensureRainbowSetup() {
|
|
359
|
-
if (!(0, import_node_fs.existsSync)(RAINBOW_DIR)) return;
|
|
360
|
-
ensureRainbowGraphqlConfig();
|
|
361
|
-
if (!(0, import_node_fs.existsSync)((0, import_node_path2.join)(RAINBOW_GRAPHQL_DIR, "node_modules/.bin/graphql-codegen"))) {
|
|
362
|
-
runRainbowSetupCommand("fnm exec --using=22 yarn install", RAINBOW_GRAPHQL_DIR);
|
|
363
|
-
}
|
|
364
|
-
const missingGraphql = RAINBOW_GRAPHQL_SENTINELS.some(
|
|
365
|
-
(rel) => !(0, import_node_fs.existsSync)((0, import_node_path2.join)(RAINBOW_DIR, rel))
|
|
366
|
-
);
|
|
367
|
-
if (missingGraphql) {
|
|
368
|
-
runRainbowSetupCommand("fnm exec --using=22 yarn codegen", RAINBOW_GRAPHQL_DIR);
|
|
369
|
-
}
|
|
370
|
-
if (!(0, import_node_fs.existsSync)(RAINBOW_NETWORKS_FILE)) {
|
|
371
|
-
runRainbowSetupCommand("fnm exec --using=22 yarn fetch:networks", RAINBOW_DIR);
|
|
372
|
-
}
|
|
373
|
-
ensureRainbowDemoNetworks();
|
|
374
|
-
}
|
|
375
|
-
function readArtsyKeysPayload() {
|
|
376
|
-
if (!(0, import_node_fs.existsSync)(ARTSY_KEYS_FILE)) return void 0;
|
|
41
|
+
async function loadOptionalDemoApps() {
|
|
42
|
+
if (cached) return cached;
|
|
377
43
|
try {
|
|
378
|
-
const
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
return { secure, public: publicKeys };
|
|
44
|
+
const mod = await import(
|
|
45
|
+
/* @vite-ignore */
|
|
46
|
+
REGISTRY_SPECIFIER
|
|
47
|
+
);
|
|
48
|
+
cached = Array.isArray(mod.APPS) ? mod.APPS : [];
|
|
384
49
|
} catch {
|
|
385
|
-
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
function resolveArtsyRuntimeConfig() {
|
|
389
|
-
const email = process.env.SOOTSIM_ARTSY_EMAIL ?? process.env.MAESTRO_TEST_EMAIL;
|
|
390
|
-
const password = process.env.SOOTSIM_ARTSY_PASSWORD ?? process.env.MAESTRO_TEST_PASSWORD;
|
|
391
|
-
const keys = readArtsyKeysPayload();
|
|
392
|
-
const env = {};
|
|
393
|
-
if (email && password) {
|
|
394
|
-
env.SOOTSIM_LAUNCH_ARGUMENTS = JSON.stringify({
|
|
395
|
-
email,
|
|
396
|
-
password,
|
|
397
|
-
useMaestroInit: true
|
|
398
|
-
});
|
|
50
|
+
cached = [];
|
|
399
51
|
}
|
|
400
|
-
|
|
401
|
-
env.SOOTSIM_REACT_NATIVE_KEYS_JSON = JSON.stringify(keys);
|
|
402
|
-
}
|
|
403
|
-
if (Object.keys(env).length === 0) return void 0;
|
|
404
|
-
return {
|
|
405
|
-
env
|
|
406
|
-
};
|
|
52
|
+
return cached;
|
|
407
53
|
}
|
|
408
|
-
function
|
|
409
|
-
|
|
410
|
-
const { execSync } = require("node:child_process");
|
|
411
|
-
const yarnRelease = (0, import_node_path2.join)(ARTSY_DIR, ".yarn/releases/yarn-4.10.3.cjs");
|
|
412
|
-
if ((0, import_node_fs.existsSync)(yarnRelease)) {
|
|
413
|
-
const src = (0, import_node_fs.readFileSync)(yarnRelease, "utf8");
|
|
414
|
-
const needle = '["clone","-c core.autocrlf=false",';
|
|
415
|
-
if (src.includes(needle)) {
|
|
416
|
-
(0, import_node_fs.writeFileSync)(
|
|
417
|
-
yarnRelease,
|
|
418
|
-
src.replace(needle, '["clone","-c","core.autocrlf=false",')
|
|
419
|
-
);
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
if (!(0, import_node_fs.existsSync)((0, import_node_path2.join)(ARTSY_DIR, "node_modules/.yarn-state.yml"))) {
|
|
423
|
-
execSync("yarn install", {
|
|
424
|
-
cwd: ARTSY_DIR,
|
|
425
|
-
stdio: "inherit",
|
|
426
|
-
env: { ...process.env, YARN_CHECKSUM_BEHAVIOR: "update" }
|
|
427
|
-
});
|
|
428
|
-
}
|
|
429
|
-
if (!(0, import_node_fs.existsSync)(ARTSY_KEYS_FILE) || !(0, import_node_fs.existsSync)(ARTSY_METAFLAGS_FILE)) {
|
|
430
|
-
try {
|
|
431
|
-
execSync("yarn setup:oss", { cwd: ARTSY_DIR, stdio: "inherit" });
|
|
432
|
-
} catch {
|
|
433
|
-
if (!(0, import_node_fs.existsSync)(ARTSY_KEYS_FILE) || !(0, import_node_fs.existsSync)(ARTSY_METAFLAGS_FILE)) {
|
|
434
|
-
throw new Error("artsy demo: setup:oss did not create keys/metaflags");
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
const rnlaPkgJson = (0, import_node_path2.join)(
|
|
439
|
-
ARTSY_DIR,
|
|
440
|
-
"node_modules/react-native-launch-arguments/package.json"
|
|
441
|
-
);
|
|
442
|
-
if ((0, import_node_fs.existsSync)(rnlaPkgJson)) {
|
|
443
|
-
const raw = (0, import_node_fs.readFileSync)(rnlaPkgJson, "utf8");
|
|
444
|
-
if (raw.includes('"dist/index.js"')) {
|
|
445
|
-
(0, import_node_fs.writeFileSync)(rnlaPkgJson, raw.replace('"dist/index.js"', '"src/index.ts"'));
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
if (!(0, import_node_fs.existsSync)(ARTSY_RELAY_SENTINEL)) {
|
|
449
|
-
execSync("yarn relay", { cwd: ARTSY_DIR, stdio: "inherit" });
|
|
450
|
-
(0, import_node_fs.writeFileSync)(ARTSY_RELAY_SENTINEL, "");
|
|
451
|
-
}
|
|
54
|
+
function optionalDemoAppsSync() {
|
|
55
|
+
return cached ?? [];
|
|
452
56
|
}
|
|
453
|
-
var
|
|
454
|
-
var
|
|
455
|
-
"scripts/demo-
|
|
57
|
+
var REGISTRY_SPECIFIER, cached;
|
|
58
|
+
var init_optional_demo_registry = __esm({
|
|
59
|
+
"scripts/optional-demo-registry.ts"() {
|
|
456
60
|
"use strict";
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
import_node_path2 = require("node:path");
|
|
460
|
-
HOME = (0, import_node_os2.homedir)();
|
|
461
|
-
getExpensifyProxyScript = () => resolveWorkspaceScriptPath(
|
|
462
|
-
"packages/sootsim-engine/scripts/expensify-web-proxy.ts",
|
|
463
|
-
"scripts/expensify-web-proxy.ts"
|
|
464
|
-
);
|
|
465
|
-
getRainbowMetadataProxyScript = () => resolveWorkspaceScriptPath(
|
|
466
|
-
"packages/sootsim-engine/scripts/rainbow-metadata-proxy.ts",
|
|
467
|
-
"scripts/rainbow-metadata-proxy.ts"
|
|
468
|
-
);
|
|
469
|
-
getMattermostRNUtilsNativeModule = () => resolveWorkspaceScriptPath(
|
|
470
|
-
"packages/compat/src/stubs/mattermost-rnutils-native.ts",
|
|
471
|
-
"../compat/src/stubs/mattermost-rnutils-native.ts"
|
|
472
|
-
);
|
|
473
|
-
getMattermostKeychainNativeModule = () => resolveWorkspaceScriptPath(
|
|
474
|
-
"packages/compat/src/stubs/native-seams/react-native-keychain-manager.ts",
|
|
475
|
-
"../compat/src/stubs/native-seams/react-native-keychain-manager.ts"
|
|
476
|
-
);
|
|
477
|
-
getMattermostNetworkClientNativeModule = () => resolveWorkspaceScriptPath(
|
|
478
|
-
"packages/compat/src/stubs/mattermost-network-client-native.ts",
|
|
479
|
-
"../compat/src/stubs/mattermost-network-client-native.ts"
|
|
480
|
-
);
|
|
481
|
-
getMattermostPreviewServerScript = () => resolveWorkspaceScriptPath(
|
|
482
|
-
"packages/sootsim-engine/scripts/mattermost-preview-server.ts",
|
|
483
|
-
"scripts/mattermost-preview-server.ts"
|
|
484
|
-
);
|
|
485
|
-
EXPENSIFY_NATIVE_PROXY_ENV = {
|
|
486
|
-
USE_NGROK: "true",
|
|
487
|
-
NGROK_URL: "http://localhost:9000/",
|
|
488
|
-
SECURE_NGROK_URL: "http://localhost:9000/"
|
|
489
|
-
};
|
|
490
|
-
MATTERMOST_DIR = (0, import_node_path2.join)(HOME, "github/mattermost-mobile");
|
|
491
|
-
UNISWAP_REPO_DIR = (0, import_node_path2.join)(HOME, "github/uniswap-interface");
|
|
492
|
-
UNISWAP_APP_DIR = (0, import_node_path2.join)(UNISWAP_REPO_DIR, "apps/mobile");
|
|
493
|
-
UNISWAP_ENV_LOCAL_FILE = (0, import_node_path2.join)(UNISWAP_REPO_DIR, ".env.defaults.local");
|
|
494
|
-
UNISWAP_PLACEHOLDER = "stored-in-.env.local";
|
|
495
|
-
UNISWAP_DEMO_ENV_MARKER = "# sootsim demo env overrides";
|
|
496
|
-
UNISWAP_FORCE_UPGRADE_HOOK_FILE = (0, import_node_path2.join)(
|
|
497
|
-
UNISWAP_REPO_DIR,
|
|
498
|
-
"packages/uniswap/src/features/forceUpgrade/hooks/useForceUpgradeStatus.ts"
|
|
499
|
-
);
|
|
500
|
-
UNISWAP_FORCE_UPGRADE_NOTIFICATION_FILE = (0, import_node_path2.join)(
|
|
501
|
-
UNISWAP_REPO_DIR,
|
|
502
|
-
"apps/mobile/src/notification-service/data-sources/createForceUpgradeNotificationDataSource.ts"
|
|
503
|
-
);
|
|
504
|
-
UNISWAP_FORCE_UPGRADE_PATCH_MARKER = "SOOTSIM_DEMO_DISABLE_FORCE_UPGRADE";
|
|
505
|
-
JOPLIN_DIR = (0, import_node_path2.join)(HOME, "github/joplin");
|
|
506
|
-
JOPLIN_APP_DIR = (0, import_node_path2.join)(JOPLIN_DIR, "packages/app-mobile");
|
|
507
|
-
JOPLIN_WATCH_ROOTS = [
|
|
508
|
-
"packages/lib",
|
|
509
|
-
"packages/renderer",
|
|
510
|
-
"packages/turndown",
|
|
511
|
-
"packages/turndown-plugin-gfm",
|
|
512
|
-
"packages/editor",
|
|
513
|
-
"packages/tools",
|
|
514
|
-
"packages/utils",
|
|
515
|
-
"packages/fork-htmlparser2",
|
|
516
|
-
"packages/fork-uslug",
|
|
517
|
-
"packages/fork-sax",
|
|
518
|
-
"packages/htmlpack",
|
|
519
|
-
"packages/react-native-saf-x",
|
|
520
|
-
"packages/react-native-alarm-notification"
|
|
521
|
-
];
|
|
522
|
-
JOPLIN_BUILD_SENTINELS = [
|
|
523
|
-
"packages/lib/models/Setting.js",
|
|
524
|
-
"packages/turndown/lib/turndown.cjs.js",
|
|
525
|
-
"packages/app-mobile/pluginAssets/index.js"
|
|
526
|
-
];
|
|
527
|
-
RAINBOW_DIR = (0, import_node_path2.join)(HOME, "github/rainbow");
|
|
528
|
-
RAINBOW_GRAPHQL_DIR = (0, import_node_path2.join)(RAINBOW_DIR, "src/graphql");
|
|
529
|
-
RAINBOW_GRAPHQL_CONFIG_FILE = (0, import_node_path2.join)(RAINBOW_GRAPHQL_DIR, "config.js");
|
|
530
|
-
RAINBOW_NETWORKS_FILE = (0, import_node_path2.join)(RAINBOW_DIR, "src/references/networks.json");
|
|
531
|
-
RAINBOW_METADATA_BASE_URL = "https://metadata.p.rainbow.me";
|
|
532
|
-
RAINBOW_METADATA_PROXY_PORT = 9011;
|
|
533
|
-
RAINBOW_DEMO_METADATA_BASE_URL = `http://127.0.0.1:${RAINBOW_METADATA_PROXY_PORT}`;
|
|
534
|
-
RAINBOW_PUBLIC_ENS_GRAPHQL_URL = "https://api.thegraph.com/subgraphs/name/ensdomains/ens";
|
|
535
|
-
RAINBOW_DEMO_QUOTE_SIGNER = "0x0000000000000000000000000000000000000000";
|
|
536
|
-
RAINBOW_DEMO_RELAY_URL = "https://relay.rainbow.me";
|
|
537
|
-
RAINBOW_DEMO_MASTER_KEY = "sootsim-rainbow-demo-master-key-do-not-use-for-real-wallets";
|
|
538
|
-
RAINBOW_DEMO_RPC_PROXY_BASE_URL = "https://rpc.rainbow.me/v1";
|
|
539
|
-
RAINBOW_DEMO_RPC_API_KEY = "";
|
|
540
|
-
RAINBOW_DEMO_PUBLIC_RPC_URLS = {
|
|
541
|
-
"1": "https://ethereum-rpc.publicnode.com"
|
|
542
|
-
};
|
|
543
|
-
RAINBOW_DEMO_SERVICE_API_KEY = "sootsim-rainbow-demo-api-key";
|
|
544
|
-
RAINBOW_DEMO_SECURE_WALLET_HASH_KEY = "0x736f6f7473696d2d7261696e626f772d64656d6f2d686173682d6b6579000000";
|
|
545
|
-
RAINBOW_DEMO_WALLETCONNECT_PROJECT_ID = "00000000000000000000000000000000";
|
|
546
|
-
RAINBOW_GRAPHQL_SENTINELS = [
|
|
547
|
-
"src/graphql/__generated__/ens.ts",
|
|
548
|
-
"src/graphql/__generated__/metadata.ts",
|
|
549
|
-
"src/graphql/__generated__/metadataPOST.ts"
|
|
550
|
-
];
|
|
551
|
-
ARTSY_DIR = (0, import_node_path2.join)(HOME, "github/eigen");
|
|
552
|
-
ARTSY_KEYS_FILE = (0, import_node_path2.join)(ARTSY_DIR, "keys.shared.json");
|
|
553
|
-
ARTSY_METAFLAGS_FILE = (0, import_node_path2.join)(ARTSY_DIR, "metaflags.json");
|
|
554
|
-
ARTSY_RELAY_SENTINEL = (0, import_node_path2.join)(ARTSY_DIR, "src/__generated__/.relay-complete");
|
|
555
|
-
APPS = [
|
|
556
|
-
{
|
|
557
|
-
name: "bluesky",
|
|
558
|
-
label: "Bluesky",
|
|
559
|
-
dir: (0, import_node_path2.join)(HOME, "github/bluesky"),
|
|
560
|
-
preferredPort: 8082,
|
|
561
|
-
framework: "expo",
|
|
562
|
-
command: (p) => ({ cmd: `npx expo start --port ${p}` }),
|
|
563
|
-
credentials: {
|
|
564
|
-
envVars: ["SOOTSIM_BLUESKY_PASSWORD"],
|
|
565
|
-
known: { HANDLE: "natew.bsky.social" }
|
|
566
|
-
}
|
|
567
|
-
},
|
|
568
|
-
{
|
|
569
|
-
name: "3pc",
|
|
570
|
-
label: "3PunchConvo",
|
|
571
|
-
dir: (0, import_node_path2.join)(HOME, "lightstrike-labs/three-punch-convo-app/apps/one"),
|
|
572
|
-
preferredPort: 8081,
|
|
573
|
-
framework: "one",
|
|
574
|
-
command: (p) => ({ cmd: "npx one dev", env: { ONE_PORT: String(p) } })
|
|
575
|
-
},
|
|
576
|
-
{
|
|
577
|
-
name: "uniswap",
|
|
578
|
-
label: "Uniswap",
|
|
579
|
-
dir: UNISWAP_APP_DIR,
|
|
580
|
-
preferredPort: 8085,
|
|
581
|
-
framework: "expo",
|
|
582
|
-
prepare: () => {
|
|
583
|
-
ensureUniswapDemoEnvLocal();
|
|
584
|
-
ensureUniswapForceUpgradePatched();
|
|
585
|
-
},
|
|
586
|
-
command: (p) => ({
|
|
587
|
-
cmd: `npx expo start --clear --port ${p}`,
|
|
588
|
-
// prefer the real local mobile env when present, otherwise fall back
|
|
589
|
-
// to Uniswap's checked-in public web RPC settings so demo boots cleanly.
|
|
590
|
-
env: resolveUniswapDemoEnv()
|
|
591
|
-
})
|
|
592
|
-
},
|
|
593
|
-
{
|
|
594
|
-
name: "takeout",
|
|
595
|
-
label: "Takeout",
|
|
596
|
-
dir: (0, import_node_path2.join)(HOME, "takeout"),
|
|
597
|
-
preferredPort: 8086,
|
|
598
|
-
framework: "one",
|
|
599
|
-
// takeout needs more than Metro for the demo to actually work: better-auth
|
|
600
|
-
// (login), zero-cache (sync), and a postgres for both. `bun lite` brings
|
|
601
|
-
// up the orez-backed stack (PG + zero + s3 in one binary) plus the One
|
|
602
|
-
// dev server. takeout's env system shifts every port (web, pg, zero,
|
|
603
|
-
// minio) uniformly by PORT_OFFSET, so we derive offset = port - 8081
|
|
604
|
-
// (the base web port) to keep all backend ports clear of the default
|
|
605
|
-
// dev stack while pinning One to the demo slot. OREZ_DATA_DIR is isolated
|
|
606
|
-
// to a per-demo path so we don't fight a soot dev orez that may already
|
|
607
|
-
// be holding pglite locks on ~/takeout/.orez (soot can attach takeout as
|
|
608
|
-
// a project and spin up its own orez against the same data dir).
|
|
609
|
-
readyTimeoutMs: 24e4,
|
|
610
|
-
managedPorts: (p) => {
|
|
611
|
-
const offset = p - 8081;
|
|
612
|
-
return [5433 + offset, 4848 + offset, 9200 + offset];
|
|
613
|
-
},
|
|
614
|
-
command: (p) => ({
|
|
615
|
-
cmd: "bun lite:demo",
|
|
616
|
-
env: {
|
|
617
|
-
TAKEOUT_ENV_MODE: "development",
|
|
618
|
-
PORT_OFFSET: String(p - 8081),
|
|
619
|
-
OREZ_DATA_DIR: `${HOME}/.cache/sootsim-demo/takeout-orez`,
|
|
620
|
-
VITE_DEMO_MODE: "1",
|
|
621
|
-
ZERO_APP_ID: "takeout",
|
|
622
|
-
ZERO_APP_PUBLICATIONS: "zero_takeout",
|
|
623
|
-
ZERO_CVR_MAX_CONNS: "4",
|
|
624
|
-
ZERO_NUM_SYNC_WORKERS: "2",
|
|
625
|
-
ZERO_UPSTREAM_MAX_CONNS: "8"
|
|
626
|
-
}
|
|
627
|
-
})
|
|
628
|
-
},
|
|
629
|
-
{
|
|
630
|
-
name: "expensify",
|
|
631
|
-
label: "Expensify",
|
|
632
|
-
dir: (0, import_node_path2.join)(HOME, "github/expensify"),
|
|
633
|
-
preferredPort: 8087,
|
|
634
|
-
framework: "rock",
|
|
635
|
-
runtimeConfig: {
|
|
636
|
-
env: EXPENSIFY_NATIVE_PROXY_ENV
|
|
637
|
-
},
|
|
638
|
-
sidecars: [
|
|
639
|
-
{
|
|
640
|
-
name: "web-proxy",
|
|
641
|
-
port: 9e3,
|
|
642
|
-
readyPath: "/api/Ping",
|
|
643
|
-
command: () => ({
|
|
644
|
-
cmd: `bun ${JSON.stringify(getExpensifyProxyScript())}`,
|
|
645
|
-
env: EXPENSIFY_NATIVE_PROXY_ENV
|
|
646
|
-
})
|
|
647
|
-
}
|
|
648
|
-
],
|
|
649
|
-
command: (p) => ({
|
|
650
|
-
cmd: `fnm exec --using=20.20.0 npx rock start --port ${p} --no-interactive`,
|
|
651
|
-
env: EXPENSIFY_NATIVE_PROXY_ENV
|
|
652
|
-
})
|
|
653
|
-
},
|
|
654
|
-
{
|
|
655
|
-
name: "artsy",
|
|
656
|
-
label: "Artsy",
|
|
657
|
-
dir: ARTSY_DIR,
|
|
658
|
-
preferredPort: 8088,
|
|
659
|
-
framework: "expo",
|
|
660
|
-
runtimeConfig: resolveArtsyRuntimeConfig(),
|
|
661
|
-
prepare: () => {
|
|
662
|
-
ensureArtsySetup();
|
|
663
|
-
},
|
|
664
|
-
command: (p) => ({
|
|
665
|
-
// eigen's `yarn start` wraps `react-native start` with a relay watcher
|
|
666
|
-
// via concurrently; for the demo we run relay once in prepare and
|
|
667
|
-
// invoke the metro server directly so --port is respected.
|
|
668
|
-
cmd: `npx react-native start --port ${p}`
|
|
669
|
-
}),
|
|
670
|
-
credentials: {
|
|
671
|
-
envVars: ["SOOTSIM_ARTSY_EMAIL", "SOOTSIM_ARTSY_PASSWORD"],
|
|
672
|
-
note: "auto-login reuses Artsy\u2019s built-in Maestro launch-arguments hook"
|
|
673
|
-
}
|
|
674
|
-
},
|
|
675
|
-
{
|
|
676
|
-
name: "rainbow",
|
|
677
|
-
label: "Rainbow",
|
|
678
|
-
dir: RAINBOW_DIR,
|
|
679
|
-
preferredPort: 8089,
|
|
680
|
-
framework: "rock",
|
|
681
|
-
sidecars: [
|
|
682
|
-
{
|
|
683
|
-
name: "metadata-proxy",
|
|
684
|
-
port: RAINBOW_METADATA_PROXY_PORT,
|
|
685
|
-
readyPath: "/health",
|
|
686
|
-
command: () => ({
|
|
687
|
-
cmd: `bun ${JSON.stringify(getRainbowMetadataProxyScript())}`,
|
|
688
|
-
env: {
|
|
689
|
-
PORT: String(RAINBOW_METADATA_PROXY_PORT),
|
|
690
|
-
RAINBOW_PUBLIC_RPC_URLS: JSON.stringify(RAINBOW_DEMO_PUBLIC_RPC_URLS),
|
|
691
|
-
RAINBOW_UPSTREAM_METADATA_BASE_URL: RAINBOW_METADATA_BASE_URL
|
|
692
|
-
}
|
|
693
|
-
})
|
|
694
|
-
}
|
|
695
|
-
],
|
|
696
|
-
prepare: () => {
|
|
697
|
-
ensureRainbowSetup();
|
|
698
|
-
},
|
|
699
|
-
command: (p) => ({
|
|
700
|
-
cmd: `fnm exec --using=22 yarn start --port ${p} --reset-cache`,
|
|
701
|
-
env: resolveRainbowDemoEnv()
|
|
702
|
-
}),
|
|
703
|
-
credentials: {
|
|
704
|
-
envVars: ["RAINBOW_TEST_WALLET"],
|
|
705
|
-
optionalEnvVars: [
|
|
706
|
-
"RAINBOW_WALLETCONNECT_PROJECT_ID",
|
|
707
|
-
"WC_PROJECT_ID",
|
|
708
|
-
"IMGIX_DOMAIN",
|
|
709
|
-
"IMGIX_TOKEN"
|
|
710
|
-
],
|
|
711
|
-
note: "launcher supplies demo encryption, public mainnet RPC, and a placeholder WalletConnect project id; use only a public throwaway mnemonic for RAINBOW_TEST_WALLET"
|
|
712
|
-
}
|
|
713
|
-
},
|
|
714
|
-
{
|
|
715
|
-
name: "rocket-chat",
|
|
716
|
-
label: "Rocket.Chat",
|
|
717
|
-
dir: (0, import_node_path2.join)(HOME, "github/Rocket.Chat.ReactNative"),
|
|
718
|
-
preferredPort: 8093,
|
|
719
|
-
framework: "expo",
|
|
720
|
-
command: (p) => ({
|
|
721
|
-
cmd: `npx react-native start --port ${p}`,
|
|
722
|
-
env: { RUNNING_E2E_TESTS: "true" }
|
|
723
|
-
}),
|
|
724
|
-
credentials: {
|
|
725
|
-
envVars: [
|
|
726
|
-
"ROCKET_CHAT_DEMO_SERVER",
|
|
727
|
-
"ROCKET_CHAT_DEMO_USERNAME",
|
|
728
|
-
"ROCKET_CHAT_DEMO_PASSWORD"
|
|
729
|
-
],
|
|
730
|
-
known: { SERVER: "https://mobile.qa.rocket.chat" },
|
|
731
|
-
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"
|
|
732
|
-
}
|
|
733
|
-
},
|
|
734
|
-
{
|
|
735
|
-
name: "mattermost",
|
|
736
|
-
label: "Mattermost",
|
|
737
|
-
dir: MATTERMOST_DIR,
|
|
738
|
-
preferredPort: 8090,
|
|
739
|
-
framework: "expo",
|
|
740
|
-
sidecars: [
|
|
741
|
-
{
|
|
742
|
-
name: "preview-server",
|
|
743
|
-
port: 8065,
|
|
744
|
-
readyPath: "/api/v4/system/ping",
|
|
745
|
-
command: () => ({
|
|
746
|
-
cmd: `bun ${JSON.stringify(getMattermostPreviewServerScript())}`
|
|
747
|
-
})
|
|
748
|
-
}
|
|
749
|
-
],
|
|
750
|
-
runtimeConfig: {
|
|
751
|
-
modules: {
|
|
752
|
-
// mattermost patches react-native-keychain's JS entry in its own
|
|
753
|
-
// repo; run that package and provide only the native manager seam.
|
|
754
|
-
"react-native-keychain": false,
|
|
755
|
-
"dist/assets/config.json": {
|
|
756
|
-
inline: {
|
|
757
|
-
AuthUrlScheme: "mmauth://",
|
|
758
|
-
AuthUrlSchemeDev: "mmauthbeta://",
|
|
759
|
-
DefaultServerUrl: "http://localhost:8065",
|
|
760
|
-
DefaultServerName: "Mattermost Demo",
|
|
761
|
-
TestServerUrl: "http://localhost:8065",
|
|
762
|
-
AutoSelectServerUrl: true,
|
|
763
|
-
WebsiteURL: "https://mattermost.com",
|
|
764
|
-
ServerNoticeURL: "https://github.com/mattermost/mattermost-server/blob/master/NOTICE.txt",
|
|
765
|
-
MobileNoticeURL: "https://github.com/mattermost/mattermost-mobile/blob/master/NOTICE.txt",
|
|
766
|
-
RudderApiKey: "",
|
|
767
|
-
SentryEnabled: false,
|
|
768
|
-
SentryDsnIos: "",
|
|
769
|
-
SentryDsnAndroid: "",
|
|
770
|
-
SentryOptions: {
|
|
771
|
-
deactivateStacktraceMerging: true,
|
|
772
|
-
autoBreadcrumbs: {
|
|
773
|
-
xhr: false,
|
|
774
|
-
console: true
|
|
775
|
-
},
|
|
776
|
-
severityLevelFilter: ["fatal"]
|
|
777
|
-
},
|
|
778
|
-
ShowReview: false,
|
|
779
|
-
ShowOnboarding: false,
|
|
780
|
-
ExperimentalNormalizeMarkdownLinks: false,
|
|
781
|
-
CustomRequestHeaders: {},
|
|
782
|
-
CollectNetworkMetrics: false
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
|
-
},
|
|
786
|
-
nativeModules: {
|
|
787
|
-
RNKeychainManager: { file: getMattermostKeychainNativeModule() },
|
|
788
|
-
RNUtils: { file: getMattermostRNUtilsNativeModule() },
|
|
789
|
-
GenericClient: { file: getMattermostNetworkClientNativeModule() },
|
|
790
|
-
ApiClient: { file: getMattermostNetworkClientNativeModule() },
|
|
791
|
-
WebSocketClient: { file: getMattermostNetworkClientNativeModule() }
|
|
792
|
-
}
|
|
793
|
-
},
|
|
794
|
-
command: (p) => ({
|
|
795
|
-
cmd: `npx react-native start --host 127.0.0.1 --port ${p}`
|
|
796
|
-
}),
|
|
797
|
-
credentials: {
|
|
798
|
-
known: {
|
|
799
|
-
SERVER: "http://localhost:8065",
|
|
800
|
-
USERNAME: "demo",
|
|
801
|
-
PASSWORD: "DemoPassword1!"
|
|
802
|
-
},
|
|
803
|
-
note: "local mattermost-preview seeded through the real REST API; no signup or OTP needed"
|
|
804
|
-
}
|
|
805
|
-
},
|
|
806
|
-
{
|
|
807
|
-
name: "joplin",
|
|
808
|
-
label: "Joplin",
|
|
809
|
-
dir: JOPLIN_APP_DIR,
|
|
810
|
-
preferredPort: 8084,
|
|
811
|
-
framework: "expo",
|
|
812
|
-
// joplin is local-first: sync.target defaults to 0 ("None") and the
|
|
813
|
-
// mobile startup runs WelcomeUtils.install() on first launch, which
|
|
814
|
-
// seeds a "Welcome!" folder + welcome notes. no login or external
|
|
815
|
-
// credentials are needed for a usable demo — just boot it. tenant
|
|
816
|
-
// bedrock SQLite (via react-native-sqlite-storage stub) carries the
|
|
817
|
-
// seeded notes across reloads.
|
|
818
|
-
prepare: () => {
|
|
819
|
-
ensureJoplinWatchmanConfigs();
|
|
820
|
-
ensureJoplinBuilt();
|
|
821
|
-
},
|
|
822
|
-
command: (p) => ({
|
|
823
|
-
cmd: `npx expo start --port ${p}`,
|
|
824
|
-
env: { BROWSERSLIST_IGNORE_OLD_DATA: "true" }
|
|
825
|
-
}),
|
|
826
|
-
credentials: {
|
|
827
|
-
note: "no login required \u2014 sync.target=0 (None), seed via WelcomeUtils"
|
|
828
|
-
}
|
|
829
|
-
}
|
|
830
|
-
];
|
|
61
|
+
REGISTRY_SPECIFIER = "./demo-app-registry.ts";
|
|
62
|
+
cached = null;
|
|
831
63
|
}
|
|
832
64
|
});
|
|
833
65
|
|
|
@@ -860,8 +92,8 @@ __export(attached_projects_exports, {
|
|
|
860
92
|
});
|
|
861
93
|
module.exports = __toCommonJS(attached_projects_exports);
|
|
862
94
|
var import_node_crypto = require("node:crypto");
|
|
863
|
-
var
|
|
864
|
-
var
|
|
95
|
+
var import_node_fs = __toESM(require("node:fs"), 1);
|
|
96
|
+
var import_node_path2 = __toESM(require("node:path"), 1);
|
|
865
97
|
|
|
866
98
|
// src/home-paths.ts
|
|
867
99
|
var import_node_os = require("node:os");
|
|
@@ -896,7 +128,7 @@ function getUserDataDir() {
|
|
|
896
128
|
return userDataDir();
|
|
897
129
|
}
|
|
898
130
|
function storeFile() {
|
|
899
|
-
return
|
|
131
|
+
return import_node_path2.default.join(userDataDir(), "attached-projects.json");
|
|
900
132
|
}
|
|
901
133
|
function cloneEmpty() {
|
|
902
134
|
return {
|
|
@@ -910,7 +142,7 @@ function loadStore() {
|
|
|
910
142
|
const file = storeFile();
|
|
911
143
|
let raw;
|
|
912
144
|
try {
|
|
913
|
-
raw =
|
|
145
|
+
raw = import_node_fs.default.readFileSync(file, "utf8");
|
|
914
146
|
} catch (err) {
|
|
915
147
|
if (err.code === "ENOENT") return cloneEmpty();
|
|
916
148
|
throw err;
|
|
@@ -927,7 +159,7 @@ function loadStore() {
|
|
|
927
159
|
} catch (err) {
|
|
928
160
|
const quarantine = `${file}.corrupt-${Date.now()}`;
|
|
929
161
|
try {
|
|
930
|
-
|
|
162
|
+
import_node_fs.default.renameSync(file, quarantine);
|
|
931
163
|
console.warn(
|
|
932
164
|
`[sootsim] attached-projects.json was unparseable; quarantined to ${quarantine}. original error: ${err.message}`
|
|
933
165
|
);
|
|
@@ -938,16 +170,16 @@ function loadStore() {
|
|
|
938
170
|
}
|
|
939
171
|
function writeStore(store) {
|
|
940
172
|
const file = storeFile();
|
|
941
|
-
|
|
173
|
+
import_node_fs.default.mkdirSync(import_node_path2.default.dirname(file), { recursive: true });
|
|
942
174
|
const tmp = `${file}.tmp-${process.pid}-${Date.now()}`;
|
|
943
|
-
const fd =
|
|
175
|
+
const fd = import_node_fs.default.openSync(tmp, "w", 384);
|
|
944
176
|
try {
|
|
945
|
-
|
|
946
|
-
|
|
177
|
+
import_node_fs.default.writeFileSync(fd, JSON.stringify(store, null, 2));
|
|
178
|
+
import_node_fs.default.fsyncSync(fd);
|
|
947
179
|
} finally {
|
|
948
|
-
|
|
180
|
+
import_node_fs.default.closeSync(fd);
|
|
949
181
|
}
|
|
950
|
-
|
|
182
|
+
import_node_fs.default.renameSync(tmp, file);
|
|
951
183
|
}
|
|
952
184
|
function mutateStore(fn) {
|
|
953
185
|
const store = loadStore();
|
|
@@ -956,7 +188,7 @@ function mutateStore(fn) {
|
|
|
956
188
|
return store;
|
|
957
189
|
}
|
|
958
190
|
function projectIdForCwd(cwd) {
|
|
959
|
-
return (0, import_node_crypto.createHash)("sha256").update(
|
|
191
|
+
return (0, import_node_crypto.createHash)("sha256").update(import_node_path2.default.resolve(cwd)).digest("hex").slice(0, 16);
|
|
960
192
|
}
|
|
961
193
|
function newSessionId() {
|
|
962
194
|
return `s_${(0, import_node_crypto.randomBytes)(10).toString("hex")}`;
|
|
@@ -965,7 +197,7 @@ function newPreviewId() {
|
|
|
965
197
|
return `pa_${(0, import_node_crypto.randomBytes)(10).toString("hex")}`;
|
|
966
198
|
}
|
|
967
199
|
function upsertProject(input) {
|
|
968
|
-
const cwd =
|
|
200
|
+
const cwd = import_node_path2.default.resolve(input.cwd);
|
|
969
201
|
const id = projectIdForCwd(cwd);
|
|
970
202
|
let result;
|
|
971
203
|
mutateStore((store) => {
|
|
@@ -991,7 +223,7 @@ function upsertProject(input) {
|
|
|
991
223
|
const now = Date.now();
|
|
992
224
|
const created = {
|
|
993
225
|
id,
|
|
994
|
-
name: input.name ??
|
|
226
|
+
name: input.name ?? import_node_path2.default.basename(cwd),
|
|
995
227
|
cwd,
|
|
996
228
|
repoRoot: input.repoRoot,
|
|
997
229
|
sourceRoots: input.sourceRoots ?? [cwd],
|
|
@@ -1018,7 +250,7 @@ function findProjectById(id) {
|
|
|
1018
250
|
return loadStore().attachedProjects.find((p) => p.id === id) ?? null;
|
|
1019
251
|
}
|
|
1020
252
|
function findProjectByCwd(cwd) {
|
|
1021
|
-
const resolved =
|
|
253
|
+
const resolved = import_node_path2.default.resolve(cwd);
|
|
1022
254
|
return loadStore().attachedProjects.find((p) => p.cwd === resolved) ?? null;
|
|
1023
255
|
}
|
|
1024
256
|
function findProjectByBundleUrl(bundleUrl) {
|
|
@@ -1187,23 +419,13 @@ function deletePreviewAttachment(id) {
|
|
|
1187
419
|
async function seedFromDemoAppRegistry() {
|
|
1188
420
|
const existing = loadStore().attachedProjects;
|
|
1189
421
|
if (existing.length > 0) return;
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
APPS2 = mod.APPS;
|
|
1194
|
-
} catch (err) {
|
|
1195
|
-
console.warn(
|
|
1196
|
-
"[sootsim] seedFromDemoAppRegistry: could not load demo registry:",
|
|
1197
|
-
err.message
|
|
1198
|
-
);
|
|
1199
|
-
return;
|
|
1200
|
-
}
|
|
1201
|
-
if (!Array.isArray(APPS2)) return;
|
|
1202
|
-
const apps = APPS2;
|
|
422
|
+
const { loadOptionalDemoApps: loadOptionalDemoApps2 } = await Promise.resolve().then(() => (init_optional_demo_registry(), optional_demo_registry_exports));
|
|
423
|
+
const apps = await loadOptionalDemoApps2();
|
|
424
|
+
if (apps.length === 0) return;
|
|
1203
425
|
mutateStore((store) => {
|
|
1204
426
|
for (const app of apps) {
|
|
1205
|
-
if (!
|
|
1206
|
-
const cwd =
|
|
427
|
+
if (!import_node_fs.default.existsSync(app.dir)) continue;
|
|
428
|
+
const cwd = import_node_path2.default.resolve(app.dir);
|
|
1207
429
|
const id = projectIdForCwd(cwd);
|
|
1208
430
|
if (store.attachedProjects.some((p) => p.id === id)) continue;
|
|
1209
431
|
const now = Date.now();
|