sootsim 0.1.131 → 0.1.133

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.
Files changed (153) hide show
  1. package/dist-cli/bin.js +3 -3
  2. package/dist-cli/chunks/{agent-E2VVCGQU.js → agent-HUV6ZDVC.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-33VFUNED.js → agent-wrapper-DWQ4YJ2L.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-3L2XX7Y7.js → app-fonts-KZU5WKNH.js} +2 -2
  5. package/dist-cli/chunks/{assert-IWNIHSQZ.js → assert-O6MCNH6B.js} +2 -2
  6. package/dist-cli/chunks/auto-bootstrap-LTOQSXRM.js +2 -0
  7. package/dist-cli/chunks/beta-Y2OJHTRQ.js +2 -0
  8. package/dist-cli/chunks/{chunk-NBV6N5JG.js → chunk-2NV5VDY3.js} +2 -2
  9. package/dist-cli/chunks/{chunk-CIDY56TT.js → chunk-2OST4PMS.js} +2 -2
  10. package/dist-cli/chunks/{chunk-WMMBJ6EZ.js → chunk-4CQXBMKU.js} +1 -1
  11. package/dist-cli/chunks/{chunk-U6ZEGWUP.js → chunk-7BCTUWOM.js} +2 -2
  12. package/dist-cli/chunks/chunk-7SYFZZK3.js +2 -0
  13. package/dist-cli/chunks/{chunk-7FOWPTRL.js → chunk-A34CFM2J.js} +1 -1
  14. package/dist-cli/chunks/chunk-AEYD4ODQ.js +1 -0
  15. package/dist-cli/chunks/{chunk-BG5XSXNN.js → chunk-AKIYNT56.js} +1 -1
  16. package/dist-cli/chunks/{chunk-CRRUICMV.js → chunk-BC357P2N.js} +2 -2
  17. package/dist-cli/chunks/{chunk-54UKEUZT.js → chunk-BHPSNVNR.js} +3 -3
  18. package/dist-cli/chunks/chunk-D3OLBBEO.js +1 -0
  19. package/dist-cli/chunks/{chunk-M3EAG7DW.js → chunk-DYNVMRON.js} +2 -2
  20. package/dist-cli/chunks/{chunk-WVXACDTN.js → chunk-ESQVUOW2.js} +2 -2
  21. package/dist-cli/chunks/{chunk-JB2XTOTE.js → chunk-FJRIG6HG.js} +2 -2
  22. package/dist-cli/chunks/chunk-FXB2ETM3.js +4 -0
  23. package/dist-cli/chunks/{chunk-CTJ2JTGG.js → chunk-G4OBKVUY.js} +1 -1
  24. package/dist-cli/chunks/{chunk-SL3QE2ZH.js → chunk-GCNZ32Y7.js} +2 -2
  25. package/dist-cli/chunks/{chunk-APVJC2UU.js → chunk-GDHDUANQ.js} +2 -2
  26. package/dist-cli/chunks/{chunk-DII4JH4V.js → chunk-GMHBZDQA.js} +1 -1
  27. package/dist-cli/chunks/{chunk-DHAAKK5S.js → chunk-HEOJB2Q7.js} +2 -2
  28. package/dist-cli/chunks/{chunk-WCLVBJP6.js → chunk-HSNSCKU6.js} +2 -2
  29. package/dist-cli/chunks/{chunk-S2HUCQ2V.js → chunk-IMG7XQRR.js} +2 -2
  30. package/dist-cli/chunks/{chunk-T3EWCDR6.js → chunk-KFN2YKGC.js} +1 -1
  31. package/dist-cli/chunks/{chunk-F5KSHD45.js → chunk-KHC77NFP.js} +3 -3
  32. package/dist-cli/chunks/{chunk-CUISMI5W.js → chunk-KUTTVAMM.js} +1 -1
  33. package/dist-cli/chunks/chunk-LK6Y3IGB.js +64 -0
  34. package/dist-cli/chunks/{chunk-J6LN6U7I.js → chunk-MTXMNE75.js} +1 -1
  35. package/dist-cli/chunks/{chunk-34474744.js → chunk-NNRWRRI5.js} +3 -3
  36. package/dist-cli/chunks/{chunk-UDR5W52Q.js → chunk-OO3C2GYN.js} +2 -2
  37. package/dist-cli/chunks/{chunk-ENZN7H6M.js → chunk-PZSY7LCJ.js} +1 -1
  38. package/dist-cli/chunks/{chunk-LN2EUFKP.js → chunk-Q3GCZEPC.js} +1 -1
  39. package/dist-cli/chunks/{chunk-7SHQYZAV.js → chunk-QGPM7UTZ.js} +1 -1
  40. package/dist-cli/chunks/{chunk-WBH7RWVG.js → chunk-R4PCQVBM.js} +2 -2
  41. package/dist-cli/chunks/{chunk-LTEPSJWI.js → chunk-ROINTL2P.js} +2 -2
  42. package/dist-cli/chunks/chunk-RPQCGJI7.js +5 -0
  43. package/dist-cli/chunks/{chunk-ENEBFN4F.js → chunk-SKF4RZDK.js} +2 -2
  44. package/dist-cli/chunks/{chunk-SIHVPRJ5.js → chunk-THJDQ2EB.js} +1 -1
  45. package/dist-cli/chunks/{chunk-CTZWPA6E.js → chunk-TTCMDOP6.js} +2 -2
  46. package/dist-cli/chunks/{chunk-GU4JWEE2.js → chunk-UJBMEBQF.js} +1 -1
  47. package/dist-cli/chunks/{chunk-NF6TBFVQ.js → chunk-VO3QIOCT.js} +1 -1
  48. package/dist-cli/chunks/{chunk-72F7IBXI.js → chunk-VZB6MROZ.js} +2 -2
  49. package/dist-cli/chunks/{chunk-Y6P7ZGST.js → chunk-XEGM2NRW.js} +2 -2
  50. package/dist-cli/chunks/{chunk-LTDKALGE.js → chunk-YL3KKAZR.js} +1 -1
  51. package/dist-cli/chunks/chunk-YP4W6KI5.js +1 -0
  52. package/dist-cli/chunks/chunk-YZVZA6IX.js +2 -0
  53. package/dist-cli/chunks/cli-version-RQJHNNYX.js +2 -0
  54. package/dist-cli/chunks/{compat-G7MILF5C.js → compat-3BWLNHPY.js} +3 -3
  55. package/dist-cli/chunks/{config-EK2MX5TM.js → config-H7YEVE5J.js} +2 -2
  56. package/dist-cli/chunks/control-ZFU3T2LE.js +2 -0
  57. package/dist-cli/chunks/{cpu-profile-WQLZZH22.js → cpu-profile-XYCDA5GM.js} +2 -2
  58. package/dist-cli/chunks/{daemon-D667VAR5.js → daemon-TBN5MRVC.js} +2 -2
  59. package/dist-cli/chunks/{debug-J6KCXN3Y.js → debug-2WAJZ4C7.js} +3 -3
  60. package/dist-cli/chunks/demo-app-registry-JXOXYWFT.js +2 -0
  61. package/dist-cli/chunks/{detox-TVIZT3LO.js → detox-JLJPKRA3.js} +2 -2
  62. package/dist-cli/chunks/{device-BI4WKSGV.js → device-WPWC2KSY.js} +2 -2
  63. package/dist-cli/chunks/{diagnose-ACPZLWXQ.js → diagnose-PYBIEZFD.js} +2 -2
  64. package/dist-cli/chunks/drivers-XPCQOVAR.js +2 -0
  65. package/dist-cli/chunks/{electron-ZD5PU6TI.js → electron-ZW7YMV37.js} +3 -3
  66. package/dist-cli/chunks/flow-SWXVIYST.js +2 -0
  67. package/dist-cli/chunks/help-HAITGXVU.js +2 -0
  68. package/dist-cli/chunks/{hints-2VDMGSC5.js → hints-3YQNXM27.js} +2 -2
  69. package/dist-cli/chunks/{home-paths-VO4BR5BK.js → home-paths-SBGRHOZC.js} +2 -2
  70. package/dist-cli/chunks/{inspect-RM6DGHRB.js → inspect-YXTS4PR6.js} +3 -3
  71. package/dist-cli/chunks/install-VFUIM3QH.js +2 -0
  72. package/dist-cli/chunks/{install-desktop-FRPHDKRC.js → install-desktop-27SPMPUV.js} +3 -3
  73. package/dist-cli/chunks/{keys-WUOPL5VX.js → keys-Y7OJXBGI.js} +2 -2
  74. package/dist-cli/chunks/{launch-SAVHAJ6N.js → launch-OUG2GFLO.js} +3 -3
  75. package/dist-cli/chunks/{login-7MA4OPGV.js → login-XXJQHPWA.js} +4 -4
  76. package/dist-cli/chunks/{logout-YL5XHMYM.js → logout-FHJ26UTW.js} +2 -2
  77. package/dist-cli/chunks/{maestro-LCOVHJ7D.js → maestro-P4ZVR2I4.js} +2 -2
  78. package/dist-cli/chunks/{preview-BIKZNTRD.js → preview-6ONBLQBI.js} +2 -2
  79. package/dist-cli/chunks/{profile-KKIOWCDH.js → profile-LQOEBIPK.js} +2 -2
  80. package/dist-cli/chunks/{react-UJA6V4RC.js → react-R4KJVWDA.js} +2 -2
  81. package/dist-cli/chunks/{record-ACTA66DL.js → record-OBJJDTFN.js} +2 -2
  82. package/dist-cli/chunks/runtime-6JVXVZ4K.js +2 -0
  83. package/dist-cli/chunks/{runtime-delivery-Z7YPY56X.js → runtime-delivery-LEU6ABXJ.js} +2 -2
  84. package/dist-cli/chunks/{screenshot-6CUMBC6A.js → screenshot-AKU27ZTJ.js} +2 -2
  85. package/dist-cli/chunks/{screenshot-mode-YNBFDLFN.js → screenshot-mode-XPJM2SRF.js} +2 -2
  86. package/dist-cli/chunks/{screenshots-QVOIWNG6.js → screenshots-SJY4LH2Q.js} +2 -2
  87. package/dist-cli/chunks/{server-YNEOBB5D.js → server-2SSM3BKA.js} +3 -3
  88. package/dist-cli/chunks/setup-repo-X6WRLPI5.js +2 -0
  89. package/dist-cli/chunks/{skills-CH3QSSBF.js → skills-C7ZVO6AF.js} +2 -2
  90. package/dist-cli/chunks/{start-RYCAWIQ7.js → start-5BFFCFOT.js} +4 -4
  91. package/dist-cli/chunks/store-5FCKCDEL.js +2 -0
  92. package/dist-cli/chunks/telemetry-N6DCFUGB.js +2 -0
  93. package/dist-cli/chunks/{test-37ZDD753.js → test-5YTOB2K7.js} +3 -3
  94. package/dist-cli/chunks/{three-mode-BSY6KVQM.js → three-mode-ZTVDFRRN.js} +2 -2
  95. package/dist-cli/chunks/{timeline-ZD3TGYAF.js → timeline-ZSHW5COY.js} +2 -2
  96. package/dist-cli/chunks/{upgrade-UOAM4Q35.js → upgrade-DU2VLCLD.js} +2 -2
  97. package/dist-cli/chunks/upload-QLV4POAH.js +2 -0
  98. package/dist-cli/chunks/{version-O3YK6QEA.js → version-G7MFHWDO.js} +2 -2
  99. package/dist-cli/chunks/web-66TKNXN5.js +2 -0
  100. package/dist-cli/chunks/{what-happened-OXU5NEZK.js → what-happened-ZYPPAPQM.js} +2 -2
  101. package/dist-cli/chunks/{whoami-3OH4BMEA.js → whoami-U4JDM3X4.js} +2 -2
  102. package/dist-lib/agent-daemon-client.cjs +1 -1
  103. package/dist-lib/agent-events.cjs +1 -1
  104. package/dist-lib/agent-sessions.cjs +1 -1
  105. package/dist-lib/attached-projects.cjs +825 -23
  106. package/dist-lib/auth/shared-session.cjs +1 -1
  107. package/dist-lib/backend-origin.cjs +1 -1
  108. package/dist-lib/beta.cjs +1 -1
  109. package/dist-lib/beta.mjs +1 -1
  110. package/dist-lib/bridge-constants.cjs +1 -1
  111. package/dist-lib/cli-constants.cjs +1 -1
  112. package/dist-lib/config.cjs +1 -1
  113. package/dist-lib/detox/index.cjs +1 -1
  114. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  115. package/dist-lib/home-paths.cjs +1 -1
  116. package/dist-lib/host/bridge-host.cjs +443 -429
  117. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  118. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  119. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  120. package/dist-lib/host/websocket-proxy.cjs +1 -1
  121. package/dist-lib/index.cjs +1 -1
  122. package/dist-lib/metro.cjs +1 -1
  123. package/dist-lib/profiles.cjs +1 -1
  124. package/dist-lib/render-mode.cjs +1 -1
  125. package/dist-lib/scripts/demo-app-registry.cjs +1 -1
  126. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  127. package/dist-lib/sdk.cjs +1 -1
  128. package/dist-lib/sdk.mjs +1 -1
  129. package/dist-lib/skills.cjs +24 -19
  130. package/dist-lib/vite.cjs +1 -1
  131. package/package.json +1 -1
  132. package/src/attached-projects.ts +1 -1
  133. package/dist-cli/chunks/auto-bootstrap-HVFQYW3W.js +0 -2
  134. package/dist-cli/chunks/beta-DTH53ZBB.js +0 -2
  135. package/dist-cli/chunks/chunk-3RAF5I5P.js +0 -1
  136. package/dist-cli/chunks/chunk-HGKXZJYM.js +0 -67
  137. package/dist-cli/chunks/chunk-LCFEK3M3.js +0 -2
  138. package/dist-cli/chunks/chunk-MAWBNHA7.js +0 -4
  139. package/dist-cli/chunks/chunk-NKLWLNTN.js +0 -2
  140. package/dist-cli/chunks/chunk-QXDMTVKI.js +0 -1
  141. package/dist-cli/chunks/chunk-SN35VFLV.js +0 -1
  142. package/dist-cli/chunks/cli-version-XAA6XJ3E.js +0 -2
  143. package/dist-cli/chunks/control-7D5EKP3M.js +0 -2
  144. package/dist-cli/chunks/drivers-NVAOF3WK.js +0 -2
  145. package/dist-cli/chunks/flow-TL6WIR4C.js +0 -2
  146. package/dist-cli/chunks/help-42HSJPZ5.js +0 -2
  147. package/dist-cli/chunks/install-WEVANG74.js +0 -2
  148. package/dist-cli/chunks/runtime-ZPITJAAY.js +0 -2
  149. package/dist-cli/chunks/setup-repo-HCDKAHBY.js +0 -2
  150. package/dist-cli/chunks/store-32NRKG33.js +0 -2
  151. package/dist-cli/chunks/telemetry-HIY3SXVC.js +0 -2
  152. package/dist-cli/chunks/upload-RVUDLEEB.js +0 -2
  153. package/dist-cli/chunks/web-LAT537VP.js +0 -2
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.131 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.133 | (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;
@@ -7,6 +7,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
7
  var __getOwnPropNames = Object.getOwnPropertyNames;
8
8
  var __getProtoOf = Object.getPrototypeOf;
9
9
  var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __esm = (fn, res) => function __init() {
11
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
12
+ };
10
13
  var __export = (target, all) => {
11
14
  for (var name in all)
12
15
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -29,77 +32,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
29
32
  ));
30
33
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
31
34
 
32
- // src/host/bridge-host.ts
33
- var bridge_host_exports = {};
34
- __export(bridge_host_exports, {
35
- SootSimBridgeHost: () => SootSimBridgeHost,
36
- injectSharedConfigIntoHtml: () => injectSharedConfigIntoHtml
37
- });
38
- module.exports = __toCommonJS(bridge_host_exports);
39
- var import_child_process4 = require("child_process");
40
- var import_fs3 = __toESM(require("fs"), 1);
41
- var import_http3 = require("http");
42
- var import_path3 = __toESM(require("path"), 1);
43
- var import_ws2 = require("ws");
44
-
45
- // scripts/dev-server-scanner.ts
46
- var import_child_process = require("child_process");
47
- var import_http = __toESM(require("http"), 1);
48
- var import_net = __toESM(require("net"), 1);
49
- var import_util = require("util");
50
-
51
- // src/config.ts
52
- var SOOTSIM_CONFIG_QUERY_PARAM = "sootsimConfig";
53
- function hasOwnKeys(value) {
54
- return !!value && Object.keys(value).length > 0;
55
- }
56
- function hasSootSimConfig(config) {
57
- if (!config) return false;
58
- return hasOwnKeys(config.modules) || hasOwnKeys(config.turboModules) || hasOwnKeys(config.nativeModules) || hasOwnKeys(config.env) || hasOwnKeys(config.settings) || hasOwnKeys(config.initialState);
59
- }
60
- function applySootSimConfigToUrl(url, config) {
61
- const parsed = new URL(url);
62
- if (hasSootSimConfig(config)) {
63
- parsed.searchParams.set(SOOTSIM_CONFIG_QUERY_PARAM, JSON.stringify(config));
64
- } else {
65
- parsed.searchParams.delete(SOOTSIM_CONFIG_QUERY_PARAM);
66
- }
67
- return parsed.toString();
68
- }
69
-
70
- // src/native-dev-bundle-url.ts
71
- function isAbsoluteHttpUrl(url) {
72
- return /^https?:\/\//i.test(url);
73
- }
74
- function isNativeDevBundlePath(pathname) {
75
- return pathname.endsWith(".bundle");
76
- }
77
- function applyPreviewProdBundle(parsed) {
78
- if (!process.env.SOOTSIM_PREVIEW_PROD_BUNDLE) return;
79
- parsed.searchParams.set("dev", "false");
80
- parsed.searchParams.set("minify", "true");
81
- if (parsed.searchParams.has("hot")) parsed.searchParams.set("hot", "false");
82
- }
83
- function normalizeNativeDevBundleUrl(bundleUrl) {
84
- try {
85
- const isAbsolute = isAbsoluteHttpUrl(bundleUrl);
86
- const parsed = new URL(bundleUrl, "http://soot.local");
87
- parsed.pathname = parsed.pathname.replace(/\.\.bundle$/, ".bundle");
88
- if (!isNativeDevBundlePath(parsed.pathname)) return bundleUrl;
89
- parsed.searchParams.delete("transform.bytecode");
90
- applyPreviewProdBundle(parsed);
91
- if (isAbsolute) return parsed.toString();
92
- return `${parsed.pathname}${parsed.search}${parsed.hash}`;
93
- } catch {
94
- return bundleUrl;
95
- }
96
- }
97
-
98
35
  // scripts/demo-app-registry.ts
99
- var import_node_fs = require("node:fs");
100
- var import_node_os = require("node:os");
101
- var import_node_path = require("node:path");
102
- var HOME = (0, import_node_os.homedir)();
36
+ var demo_app_registry_exports = {};
37
+ __export(demo_app_registry_exports, {
38
+ APPS: () => APPS
39
+ });
103
40
  function findWorkspaceRoot(startDir) {
104
41
  let dir = startDir;
105
42
  while (true) {
@@ -131,50 +68,6 @@ function resolveWorkspaceScriptPath(workspaceRelativePath, packageRelativePath)
131
68
  }
132
69
  return candidates[0] ?? (0, import_node_path.resolve)(process.cwd(), workspaceRelativePath);
133
70
  }
134
- var getExpensifyProxyScript = () => resolveWorkspaceScriptPath(
135
- "packages/sootsim-engine/scripts/expensify-web-proxy.ts",
136
- "scripts/expensify-web-proxy.ts"
137
- );
138
- var getRainbowMetadataProxyScript = () => resolveWorkspaceScriptPath(
139
- "packages/sootsim-engine/scripts/rainbow-metadata-proxy.ts",
140
- "scripts/rainbow-metadata-proxy.ts"
141
- );
142
- var getMattermostRNUtilsNativeModule = () => resolveWorkspaceScriptPath(
143
- "packages/compat/src/stubs/mattermost-rnutils-native.ts",
144
- "../compat/src/stubs/mattermost-rnutils-native.ts"
145
- );
146
- var getMattermostKeychainNativeModule = () => resolveWorkspaceScriptPath(
147
- "packages/compat/src/stubs/native-seams/react-native-keychain-manager.ts",
148
- "../compat/src/stubs/native-seams/react-native-keychain-manager.ts"
149
- );
150
- var getMattermostNetworkClientNativeModule = () => resolveWorkspaceScriptPath(
151
- "packages/compat/src/stubs/mattermost-network-client-native.ts",
152
- "../compat/src/stubs/mattermost-network-client-native.ts"
153
- );
154
- var getMattermostPreviewServerScript = () => resolveWorkspaceScriptPath(
155
- "packages/sootsim-engine/scripts/mattermost-preview-server.ts",
156
- "scripts/mattermost-preview-server.ts"
157
- );
158
- var EXPENSIFY_NATIVE_PROXY_ENV = {
159
- USE_NGROK: "true",
160
- NGROK_URL: "http://localhost:9000/",
161
- SECURE_NGROK_URL: "http://localhost:9000/"
162
- };
163
- var MATTERMOST_DIR = (0, import_node_path.join)(HOME, "github/mattermost-mobile");
164
- var UNISWAP_REPO_DIR = (0, import_node_path.join)(HOME, "github/uniswap-interface");
165
- var UNISWAP_APP_DIR = (0, import_node_path.join)(UNISWAP_REPO_DIR, "apps/mobile");
166
- var UNISWAP_ENV_LOCAL_FILE = (0, import_node_path.join)(UNISWAP_REPO_DIR, ".env.defaults.local");
167
- var UNISWAP_PLACEHOLDER = "stored-in-.env.local";
168
- var UNISWAP_DEMO_ENV_MARKER = "# sootsim demo env overrides";
169
- var UNISWAP_FORCE_UPGRADE_HOOK_FILE = (0, import_node_path.join)(
170
- UNISWAP_REPO_DIR,
171
- "packages/uniswap/src/features/forceUpgrade/hooks/useForceUpgradeStatus.ts"
172
- );
173
- var UNISWAP_FORCE_UPGRADE_NOTIFICATION_FILE = (0, import_node_path.join)(
174
- UNISWAP_REPO_DIR,
175
- "apps/mobile/src/notification-service/data-sources/createForceUpgradeNotificationDataSource.ts"
176
- );
177
- var UNISWAP_FORCE_UPGRADE_PATCH_MARKER = "SOOTSIM_DEMO_DISABLE_FORCE_UPGRADE";
178
71
  function parseEnvFile(filePath) {
179
72
  if (!(0, import_node_fs.existsSync)(filePath)) return {};
180
73
  const env = {};
@@ -316,23 +209,6 @@ function ensureUniswapForceUpgradePatched() {
316
209
  notificationLegacyPatch
317
210
  );
318
211
  }
319
- var JOPLIN_DIR = (0, import_node_path.join)(HOME, "github/joplin");
320
- var JOPLIN_APP_DIR = (0, import_node_path.join)(JOPLIN_DIR, "packages/app-mobile");
321
- var JOPLIN_WATCH_ROOTS = [
322
- "packages/lib",
323
- "packages/renderer",
324
- "packages/turndown",
325
- "packages/turndown-plugin-gfm",
326
- "packages/editor",
327
- "packages/tools",
328
- "packages/utils",
329
- "packages/fork-htmlparser2",
330
- "packages/fork-uslug",
331
- "packages/fork-sax",
332
- "packages/htmlpack",
333
- "packages/react-native-saf-x",
334
- "packages/react-native-alarm-notification"
335
- ];
336
212
  function ensureJoplinWatchmanConfigs() {
337
213
  if (!(0, import_node_fs.existsSync)(JOPLIN_DIR)) return;
338
214
  for (const rel of JOPLIN_WATCH_ROOTS) {
@@ -342,11 +218,6 @@ function ensureJoplinWatchmanConfigs() {
342
218
  if (!(0, import_node_fs.existsSync)(cfg)) (0, import_node_fs.writeFileSync)(cfg, "{}\n");
343
219
  }
344
220
  }
345
- var JOPLIN_BUILD_SENTINELS = [
346
- "packages/lib/models/Setting.js",
347
- "packages/turndown/lib/turndown.cjs.js",
348
- "packages/app-mobile/pluginAssets/index.js"
349
- ];
350
221
  function ensureJoplinBuilt() {
351
222
  if (!(0, import_node_fs.existsSync)(JOPLIN_DIR)) return;
352
223
  const missing = JOPLIN_BUILD_SENTINELS.filter(
@@ -368,30 +239,6 @@ function ensureJoplinBuilt() {
368
239
  );
369
240
  }
370
241
  }
371
- var RAINBOW_DIR = (0, import_node_path.join)(HOME, "github/rainbow");
372
- var RAINBOW_GRAPHQL_DIR = (0, import_node_path.join)(RAINBOW_DIR, "src/graphql");
373
- var RAINBOW_GRAPHQL_CONFIG_FILE = (0, import_node_path.join)(RAINBOW_GRAPHQL_DIR, "config.js");
374
- var RAINBOW_NETWORKS_FILE = (0, import_node_path.join)(RAINBOW_DIR, "src/references/networks.json");
375
- var RAINBOW_METADATA_BASE_URL = "https://metadata.p.rainbow.me";
376
- var RAINBOW_METADATA_PROXY_PORT = 9011;
377
- var RAINBOW_DEMO_METADATA_BASE_URL = `http://127.0.0.1:${RAINBOW_METADATA_PROXY_PORT}`;
378
- var RAINBOW_PUBLIC_ENS_GRAPHQL_URL = "https://api.thegraph.com/subgraphs/name/ensdomains/ens";
379
- var RAINBOW_DEMO_QUOTE_SIGNER = "0x0000000000000000000000000000000000000000";
380
- var RAINBOW_DEMO_RELAY_URL = "https://relay.rainbow.me";
381
- var RAINBOW_DEMO_MASTER_KEY = "sootsim-rainbow-demo-master-key-do-not-use-for-real-wallets";
382
- var RAINBOW_DEMO_RPC_PROXY_BASE_URL = "https://rpc.rainbow.me/v1";
383
- var RAINBOW_DEMO_RPC_API_KEY = "";
384
- var RAINBOW_DEMO_PUBLIC_RPC_URLS = {
385
- "1": "https://ethereum-rpc.publicnode.com"
386
- };
387
- var RAINBOW_DEMO_SERVICE_API_KEY = "sootsim-rainbow-demo-api-key";
388
- var RAINBOW_DEMO_SECURE_WALLET_HASH_KEY = "0x736f6f7473696d2d7261696e626f772d64656d6f2d686173682d6b6579000000";
389
- var RAINBOW_DEMO_WALLETCONNECT_PROJECT_ID = "00000000000000000000000000000000";
390
- var RAINBOW_GRAPHQL_SENTINELS = [
391
- "src/graphql/__generated__/ens.ts",
392
- "src/graphql/__generated__/metadata.ts",
393
- "src/graphql/__generated__/metadataPOST.ts"
394
- ];
395
242
  function runRainbowSetupCommand(command, cwd) {
396
243
  const { execSync } = require("node:child_process");
397
244
  execSync(command, {
@@ -525,10 +372,6 @@ function ensureRainbowSetup() {
525
372
  }
526
373
  ensureRainbowDemoNetworks();
527
374
  }
528
- var ARTSY_DIR = (0, import_node_path.join)(HOME, "github/eigen");
529
- var ARTSY_KEYS_FILE = (0, import_node_path.join)(ARTSY_DIR, "keys.shared.json");
530
- var ARTSY_METAFLAGS_FILE = (0, import_node_path.join)(ARTSY_DIR, "metaflags.json");
531
- var ARTSY_RELAY_SENTINEL = (0, import_node_path.join)(ARTSY_DIR, "src/__generated__/.relay-complete");
532
375
  function readArtsyKeysPayload() {
533
376
  if (!(0, import_node_fs.existsSync)(ARTSY_KEYS_FILE)) return void 0;
534
377
  try {
@@ -607,284 +450,455 @@ function ensureArtsySetup() {
607
450
  (0, import_node_fs.writeFileSync)(ARTSY_RELAY_SENTINEL, "");
608
451
  }
609
452
  }
610
- var APPS = [
611
- {
612
- name: "bluesky",
613
- label: "Bluesky",
614
- dir: (0, import_node_path.join)(HOME, "github/bluesky"),
615
- preferredPort: 8082,
616
- framework: "expo",
617
- command: (p) => ({ cmd: `npx expo start --port ${p}` }),
618
- credentials: {
619
- envVars: ["SOOTSIM_BLUESKY_PASSWORD"],
620
- known: { HANDLE: "natew.bsky.social" }
621
- }
622
- },
623
- {
624
- name: "3pc",
625
- label: "3PunchConvo",
626
- dir: (0, import_node_path.join)(HOME, "lightstrike-labs/three-punch-convo-app/apps/one"),
627
- preferredPort: 8081,
628
- framework: "one",
629
- command: (p) => ({ cmd: "npx one dev", env: { ONE_PORT: String(p) } })
630
- },
631
- {
632
- name: "uniswap",
633
- label: "Uniswap",
634
- dir: UNISWAP_APP_DIR,
635
- preferredPort: 8085,
636
- framework: "expo",
637
- prepare: () => {
638
- ensureUniswapDemoEnvLocal();
639
- ensureUniswapForceUpgradePatched();
640
- },
641
- command: (p) => ({
642
- cmd: `npx expo start --clear --port ${p}`,
643
- // prefer the real local mobile env when present, otherwise fall back
644
- // to Uniswap's checked-in public web RPC settings so demo boots cleanly.
645
- env: resolveUniswapDemoEnv()
646
- })
647
- },
648
- {
649
- name: "takeout",
650
- label: "Takeout",
651
- dir: (0, import_node_path.join)(HOME, "takeout"),
652
- preferredPort: 8086,
653
- framework: "one",
654
- // takeout needs more than Metro for the demo to actually work: better-auth
655
- // (login), zero-cache (sync), and a postgres for both. `bun lite` brings
656
- // up the orez-backed stack (PG + zero + s3 in one binary) plus the One
657
- // dev server. takeout's env system shifts every port (web, pg, zero,
658
- // minio) uniformly by PORT_OFFSET, so we derive offset = port - 8081
659
- // (the base web port) to keep all backend ports clear of the default
660
- // dev stack while pinning One to the demo slot. OREZ_DATA_DIR is isolated
661
- // to a per-demo path so we don't fight a soot dev orez that may already
662
- // be holding pglite locks on ~/takeout/.orez (soot can attach takeout as
663
- // a project and spin up its own orez against the same data dir).
664
- readyTimeoutMs: 24e4,
665
- managedPorts: (p) => {
666
- const offset = p - 8081;
667
- return [5433 + offset, 4848 + offset, 9200 + offset];
668
- },
669
- command: (p) => ({
670
- cmd: "bun lite:demo",
671
- env: {
672
- TAKEOUT_ENV_MODE: "development",
673
- PORT_OFFSET: String(p - 8081),
674
- OREZ_DATA_DIR: `${HOME}/.cache/sootsim-demo/takeout-orez`,
675
- VITE_DEMO_MODE: "1",
676
- ZERO_APP_ID: "takeout",
677
- ZERO_APP_PUBLICATIONS: "zero_takeout",
678
- ZERO_CVR_MAX_CONNS: "4",
679
- ZERO_NUM_SYNC_WORKERS: "2",
680
- ZERO_UPSTREAM_MAX_CONNS: "8"
681
- }
682
- })
683
- },
684
- {
685
- name: "expensify",
686
- label: "Expensify",
687
- dir: (0, import_node_path.join)(HOME, "github/expensify"),
688
- preferredPort: 8087,
689
- framework: "rock",
690
- runtimeConfig: {
691
- env: EXPENSIFY_NATIVE_PROXY_ENV
692
- },
693
- sidecars: [
453
+ var import_node_fs, import_node_os, import_node_path, HOME, getExpensifyProxyScript, getRainbowMetadataProxyScript, getMattermostRNUtilsNativeModule, getMattermostKeychainNativeModule, getMattermostNetworkClientNativeModule, getMattermostPreviewServerScript, EXPENSIFY_NATIVE_PROXY_ENV, MATTERMOST_DIR, UNISWAP_REPO_DIR, UNISWAP_APP_DIR, UNISWAP_ENV_LOCAL_FILE, UNISWAP_PLACEHOLDER, UNISWAP_DEMO_ENV_MARKER, UNISWAP_FORCE_UPGRADE_HOOK_FILE, UNISWAP_FORCE_UPGRADE_NOTIFICATION_FILE, UNISWAP_FORCE_UPGRADE_PATCH_MARKER, JOPLIN_DIR, JOPLIN_APP_DIR, JOPLIN_WATCH_ROOTS, JOPLIN_BUILD_SENTINELS, RAINBOW_DIR, RAINBOW_GRAPHQL_DIR, RAINBOW_GRAPHQL_CONFIG_FILE, RAINBOW_NETWORKS_FILE, RAINBOW_METADATA_BASE_URL, RAINBOW_METADATA_PROXY_PORT, RAINBOW_DEMO_METADATA_BASE_URL, RAINBOW_PUBLIC_ENS_GRAPHQL_URL, RAINBOW_DEMO_QUOTE_SIGNER, RAINBOW_DEMO_RELAY_URL, RAINBOW_DEMO_MASTER_KEY, RAINBOW_DEMO_RPC_PROXY_BASE_URL, RAINBOW_DEMO_RPC_API_KEY, RAINBOW_DEMO_PUBLIC_RPC_URLS, RAINBOW_DEMO_SERVICE_API_KEY, RAINBOW_DEMO_SECURE_WALLET_HASH_KEY, RAINBOW_DEMO_WALLETCONNECT_PROJECT_ID, RAINBOW_GRAPHQL_SENTINELS, ARTSY_DIR, ARTSY_KEYS_FILE, ARTSY_METAFLAGS_FILE, ARTSY_RELAY_SENTINEL, APPS;
454
+ var init_demo_app_registry = __esm({
455
+ "scripts/demo-app-registry.ts"() {
456
+ "use strict";
457
+ import_node_fs = require("node:fs");
458
+ import_node_os = require("node:os");
459
+ import_node_path = require("node:path");
460
+ HOME = (0, import_node_os.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_path.join)(HOME, "github/mattermost-mobile");
491
+ UNISWAP_REPO_DIR = (0, import_node_path.join)(HOME, "github/uniswap-interface");
492
+ UNISWAP_APP_DIR = (0, import_node_path.join)(UNISWAP_REPO_DIR, "apps/mobile");
493
+ UNISWAP_ENV_LOCAL_FILE = (0, import_node_path.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_path.join)(
497
+ UNISWAP_REPO_DIR,
498
+ "packages/uniswap/src/features/forceUpgrade/hooks/useForceUpgradeStatus.ts"
499
+ );
500
+ UNISWAP_FORCE_UPGRADE_NOTIFICATION_FILE = (0, import_node_path.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_path.join)(HOME, "github/joplin");
506
+ JOPLIN_APP_DIR = (0, import_node_path.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_path.join)(HOME, "github/rainbow");
528
+ RAINBOW_GRAPHQL_DIR = (0, import_node_path.join)(RAINBOW_DIR, "src/graphql");
529
+ RAINBOW_GRAPHQL_CONFIG_FILE = (0, import_node_path.join)(RAINBOW_GRAPHQL_DIR, "config.js");
530
+ RAINBOW_NETWORKS_FILE = (0, import_node_path.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_path.join)(HOME, "github/eigen");
552
+ ARTSY_KEYS_FILE = (0, import_node_path.join)(ARTSY_DIR, "keys.shared.json");
553
+ ARTSY_METAFLAGS_FILE = (0, import_node_path.join)(ARTSY_DIR, "metaflags.json");
554
+ ARTSY_RELAY_SENTINEL = (0, import_node_path.join)(ARTSY_DIR, "src/__generated__/.relay-complete");
555
+ APPS = [
694
556
  {
695
- name: "web-proxy",
696
- port: 9e3,
697
- readyPath: "/api/Ping",
698
- command: () => ({
699
- cmd: `bun ${JSON.stringify(getExpensifyProxyScript())}`,
700
- env: EXPENSIFY_NATIVE_PROXY_ENV
557
+ name: "bluesky",
558
+ label: "Bluesky",
559
+ dir: (0, import_node_path.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_path.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()
701
591
  })
702
- }
703
- ],
704
- command: (p) => ({
705
- cmd: `fnm exec --using=20.20.0 npx rock start --port ${p} --no-interactive`,
706
- env: EXPENSIFY_NATIVE_PROXY_ENV
707
- })
708
- },
709
- {
710
- name: "artsy",
711
- label: "Artsy",
712
- dir: ARTSY_DIR,
713
- preferredPort: 8088,
714
- framework: "expo",
715
- runtimeConfig: resolveArtsyRuntimeConfig(),
716
- prepare: () => {
717
- ensureArtsySetup();
718
- },
719
- command: (p) => ({
720
- // eigen's `yarn start` wraps `react-native start` with a relay watcher
721
- // via concurrently; for the demo we run relay once in prepare and
722
- // invoke the metro server directly so --port is respected.
723
- cmd: `npx react-native start --port ${p}`
724
- }),
725
- credentials: {
726
- envVars: ["SOOTSIM_ARTSY_EMAIL", "SOOTSIM_ARTSY_PASSWORD"],
727
- note: "auto-login reuses Artsy\u2019s built-in Maestro launch-arguments hook"
728
- }
729
- },
730
- {
731
- name: "rainbow",
732
- label: "Rainbow",
733
- dir: RAINBOW_DIR,
734
- preferredPort: 8089,
735
- framework: "rock",
736
- sidecars: [
592
+ },
737
593
  {
738
- name: "metadata-proxy",
739
- port: RAINBOW_METADATA_PROXY_PORT,
740
- readyPath: "/health",
741
- command: () => ({
742
- cmd: `bun ${JSON.stringify(getRainbowMetadataProxyScript())}`,
594
+ name: "takeout",
595
+ label: "Takeout",
596
+ dir: (0, import_node_path.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",
743
616
  env: {
744
- PORT: String(RAINBOW_METADATA_PROXY_PORT),
745
- RAINBOW_PUBLIC_RPC_URLS: JSON.stringify(RAINBOW_DEMO_PUBLIC_RPC_URLS),
746
- RAINBOW_UPSTREAM_METADATA_BASE_URL: RAINBOW_METADATA_BASE_URL
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"
747
626
  }
748
627
  })
749
- }
750
- ],
751
- prepare: () => {
752
- ensureRainbowSetup();
753
- },
754
- command: (p) => ({
755
- cmd: `fnm exec --using=22 yarn start --port ${p} --reset-cache`,
756
- env: resolveRainbowDemoEnv()
757
- }),
758
- credentials: {
759
- envVars: ["RAINBOW_TEST_WALLET"],
760
- optionalEnvVars: [
761
- "RAINBOW_WALLETCONNECT_PROJECT_ID",
762
- "WC_PROJECT_ID",
763
- "IMGIX_DOMAIN",
764
- "IMGIX_TOKEN"
765
- ],
766
- note: "launcher supplies demo encryption, public mainnet RPC, and a placeholder WalletConnect project id; use only a public throwaway mnemonic for RAINBOW_TEST_WALLET"
767
- }
768
- },
769
- {
770
- name: "rocket-chat",
771
- label: "Rocket.Chat",
772
- dir: (0, import_node_path.join)(HOME, "github/Rocket.Chat.ReactNative"),
773
- preferredPort: 8093,
774
- framework: "expo",
775
- command: (p) => ({
776
- cmd: `npx react-native start --port ${p}`,
777
- env: { RUNNING_E2E_TESTS: "true" }
778
- }),
779
- credentials: {
780
- envVars: [
781
- "ROCKET_CHAT_DEMO_SERVER",
782
- "ROCKET_CHAT_DEMO_USERNAME",
783
- "ROCKET_CHAT_DEMO_PASSWORD"
784
- ],
785
- known: { SERVER: "https://mobile.qa.rocket.chat" },
786
- 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"
787
- }
788
- },
789
- {
790
- name: "mattermost",
791
- label: "Mattermost",
792
- dir: MATTERMOST_DIR,
793
- preferredPort: 8090,
794
- framework: "expo",
795
- sidecars: [
628
+ },
796
629
  {
797
- name: "preview-server",
798
- port: 8065,
799
- readyPath: "/api/v4/system/ping",
800
- command: () => ({
801
- cmd: `bun ${JSON.stringify(getMattermostPreviewServerScript())}`
630
+ name: "expensify",
631
+ label: "Expensify",
632
+ dir: (0, import_node_path.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
802
652
  })
803
- }
804
- ],
805
- runtimeConfig: {
806
- modules: {
807
- // mattermost patches react-native-keychain's JS entry in its own
808
- // repo; run that package and provide only the native manager seam.
809
- "react-native-keychain": false,
810
- "dist/assets/config.json": {
811
- inline: {
812
- AuthUrlScheme: "mmauth://",
813
- AuthUrlSchemeDev: "mmauthbeta://",
814
- DefaultServerUrl: "http://localhost:8065",
815
- DefaultServerName: "Mattermost Demo",
816
- TestServerUrl: "http://localhost:8065",
817
- AutoSelectServerUrl: true,
818
- WebsiteURL: "https://mattermost.com",
819
- ServerNoticeURL: "https://github.com/mattermost/mattermost-server/blob/master/NOTICE.txt",
820
- MobileNoticeURL: "https://github.com/mattermost/mattermost-mobile/blob/master/NOTICE.txt",
821
- RudderApiKey: "",
822
- SentryEnabled: false,
823
- SentryDsnIos: "",
824
- SentryDsnAndroid: "",
825
- SentryOptions: {
826
- deactivateStacktraceMerging: true,
827
- autoBreadcrumbs: {
828
- xhr: false,
829
- console: true
830
- },
831
- severityLevelFilter: ["fatal"]
832
- },
833
- ShowReview: false,
834
- ShowOnboarding: false,
835
- ExperimentalNormalizeMarkdownLinks: false,
836
- CustomRequestHeaders: {},
837
- CollectNetworkMetrics: false
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
+ })
838
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"
839
712
  }
840
713
  },
841
- nativeModules: {
842
- RNKeychainManager: { file: getMattermostKeychainNativeModule() },
843
- RNUtils: { file: getMattermostRNUtilsNativeModule() },
844
- GenericClient: { file: getMattermostNetworkClientNativeModule() },
845
- ApiClient: { file: getMattermostNetworkClientNativeModule() },
846
- WebSocketClient: { file: getMattermostNetworkClientNativeModule() }
847
- }
848
- },
849
- command: (p) => ({
850
- cmd: `npx react-native start --host 127.0.0.1 --port ${p}`
851
- }),
852
- credentials: {
853
- known: {
854
- SERVER: "http://localhost:8065",
855
- USERNAME: "demo",
856
- PASSWORD: "DemoPassword1!"
714
+ {
715
+ name: "rocket-chat",
716
+ label: "Rocket.Chat",
717
+ dir: (0, import_node_path.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
+ }
857
733
  },
858
- note: "local mattermost-preview seeded through the real REST API; no signup or OTP needed"
859
- }
860
- },
861
- {
862
- name: "joplin",
863
- label: "Joplin",
864
- dir: JOPLIN_APP_DIR,
865
- preferredPort: 8084,
866
- framework: "expo",
867
- // joplin is local-first: sync.target defaults to 0 ("None") and the
868
- // mobile startup runs WelcomeUtils.install() on first launch, which
869
- // seeds a "Welcome!" folder + welcome notes. no login or external
870
- // credentials are needed for a usable demo — just boot it. tenant
871
- // bedrock SQLite (via react-native-sqlite-storage stub) carries the
872
- // seeded notes across reloads.
873
- prepare: () => {
874
- ensureJoplinWatchmanConfigs();
875
- ensureJoplinBuilt();
876
- },
877
- command: (p) => ({
878
- cmd: `npx expo start --port ${p}`,
879
- env: { BROWSERSLIST_IGNORE_OLD_DATA: "true" }
880
- }),
881
- credentials: {
882
- note: "no login required \u2014 sync.target=0 (None), seed via WelcomeUtils"
883
- }
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
+ ];
884
831
  }
885
- ];
832
+ });
833
+
834
+ // src/host/bridge-host.ts
835
+ var bridge_host_exports = {};
836
+ __export(bridge_host_exports, {
837
+ SootSimBridgeHost: () => SootSimBridgeHost,
838
+ injectSharedConfigIntoHtml: () => injectSharedConfigIntoHtml
839
+ });
840
+ module.exports = __toCommonJS(bridge_host_exports);
841
+ var import_child_process4 = require("child_process");
842
+ var import_fs3 = __toESM(require("fs"), 1);
843
+ var import_http3 = require("http");
844
+ var import_path3 = __toESM(require("path"), 1);
845
+ var import_ws2 = require("ws");
846
+
847
+ // scripts/dev-server-scanner.ts
848
+ var import_child_process = require("child_process");
849
+ var import_http = __toESM(require("http"), 1);
850
+ var import_net = __toESM(require("net"), 1);
851
+ var import_util = require("util");
852
+
853
+ // src/config.ts
854
+ var SOOTSIM_CONFIG_QUERY_PARAM = "sootsimConfig";
855
+ function hasOwnKeys(value) {
856
+ return !!value && Object.keys(value).length > 0;
857
+ }
858
+ function hasSootSimConfig(config) {
859
+ if (!config) return false;
860
+ return hasOwnKeys(config.modules) || hasOwnKeys(config.turboModules) || hasOwnKeys(config.nativeModules) || hasOwnKeys(config.env) || hasOwnKeys(config.settings) || hasOwnKeys(config.initialState);
861
+ }
862
+ function applySootSimConfigToUrl(url, config) {
863
+ const parsed = new URL(url);
864
+ if (hasSootSimConfig(config)) {
865
+ parsed.searchParams.set(SOOTSIM_CONFIG_QUERY_PARAM, JSON.stringify(config));
866
+ } else {
867
+ parsed.searchParams.delete(SOOTSIM_CONFIG_QUERY_PARAM);
868
+ }
869
+ return parsed.toString();
870
+ }
871
+
872
+ // src/native-dev-bundle-url.ts
873
+ function isAbsoluteHttpUrl(url) {
874
+ return /^https?:\/\//i.test(url);
875
+ }
876
+ function isNativeDevBundlePath(pathname) {
877
+ return pathname.endsWith(".bundle");
878
+ }
879
+ function applyPreviewProdBundle(parsed) {
880
+ if (!process.env.SOOTSIM_PREVIEW_PROD_BUNDLE) return;
881
+ parsed.searchParams.set("dev", "false");
882
+ parsed.searchParams.set("minify", "true");
883
+ if (parsed.searchParams.has("hot")) parsed.searchParams.set("hot", "false");
884
+ }
885
+ function normalizeNativeDevBundleUrl(bundleUrl) {
886
+ try {
887
+ const isAbsolute = isAbsoluteHttpUrl(bundleUrl);
888
+ const parsed = new URL(bundleUrl, "http://soot.local");
889
+ parsed.pathname = parsed.pathname.replace(/\.\.bundle$/, ".bundle");
890
+ if (!isNativeDevBundlePath(parsed.pathname)) return bundleUrl;
891
+ parsed.searchParams.delete("transform.bytecode");
892
+ applyPreviewProdBundle(parsed);
893
+ if (isAbsolute) return parsed.toString();
894
+ return `${parsed.pathname}${parsed.search}${parsed.hash}`;
895
+ } catch {
896
+ return bundleUrl;
897
+ }
898
+ }
886
899
 
887
900
  // scripts/dev-server-scanner.ts
901
+ init_demo_app_registry();
888
902
  var execP = (0, import_util.promisify)(import_child_process.exec);
889
903
  var TIMEOUT_MS = 250;
890
904
  var MANIFEST_TIMEOUT_MS = 1500;
@@ -1956,7 +1970,7 @@ async function seedFromDemoAppRegistry() {
1956
1970
  if (existing.length > 0) return;
1957
1971
  let APPS2;
1958
1972
  try {
1959
- const mod = await import("sootsim/scripts/demo-app-registry");
1973
+ const mod = await Promise.resolve().then(() => (init_demo_app_registry(), demo_app_registry_exports));
1960
1974
  APPS2 = mod.APPS;
1961
1975
  } catch (err) {
1962
1976
  console.warn(