sootsim 0.1.291 → 0.1.293
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/detox/expectations.ts +32 -12
- package/dist-cli/bin.js +5 -5
- package/dist-cli/chunks/{agent-EDS4HRKB.js → agent-YWI2NWL7.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-ZCSAPGFF.js → agent-wrapper-IYJ7UZOA.js} +2 -2
- package/dist-cli/chunks/{app-fonts-4WW4EQEW.js → app-fonts-FQFUC4LR.js} +2 -2
- package/dist-cli/chunks/{assert-XEWAR4HT.js → assert-XUCELWAC.js} +2 -2
- package/dist-cli/chunks/{auth-SAYME64O.js → auth-4DQTV3OW.js} +2 -2
- package/dist-cli/chunks/beta-CFDAW6UN.js +2 -0
- package/dist-cli/chunks/{camera-2AHKTJ5I.js → camera-RYOHBVZA.js} +2 -2
- package/dist-cli/chunks/{chunk-7CU7FXRN.js → chunk-2M57EAWS.js} +1 -1
- package/dist-cli/chunks/{chunk-LJU4JU3N.js → chunk-2VKTOZQ5.js} +2 -2
- package/dist-cli/chunks/{chunk-NGPK2CLP.js → chunk-2XYCSFGN.js} +3 -3
- package/dist-cli/chunks/{chunk-UQLIMTO6.js → chunk-3UX6AY2B.js} +1 -1
- package/dist-cli/chunks/{chunk-R36NUSCM.js → chunk-4B4VFT73.js} +2 -2
- package/dist-cli/chunks/{chunk-KQKLLUX5.js → chunk-547W23BB.js} +2 -2
- package/dist-cli/chunks/{chunk-KSN2WTV6.js → chunk-67CIS55C.js} +1 -1
- package/dist-cli/chunks/{chunk-VK3IISND.js → chunk-6IFJLHDA.js} +1 -1
- package/dist-cli/chunks/{chunk-NRXMKMIJ.js → chunk-6VVLDYPV.js} +2 -2
- package/dist-cli/chunks/{chunk-LD5ZN4ZU.js → chunk-7B6RGFTM.js} +2 -2
- package/dist-cli/chunks/{chunk-HFJEB4UJ.js → chunk-7H34H74K.js} +2 -2
- package/dist-cli/chunks/{chunk-HQRKN435.js → chunk-7H5G4HUK.js} +2 -2
- package/dist-cli/chunks/{chunk-OC6PU44E.js → chunk-ACSTEPSD.js} +1 -1
- package/dist-cli/chunks/chunk-AFRXWKTA.js +118 -0
- package/dist-cli/chunks/{chunk-7GKJ3U2Z.js → chunk-B7TX4WFB.js} +2 -2
- package/dist-cli/chunks/{chunk-EFTPP4W3.js → chunk-BQT5YDTV.js} +3 -3
- package/dist-cli/chunks/{chunk-NPP6ZJLD.js → chunk-DE4ZA3NL.js} +2 -2
- package/dist-cli/chunks/{chunk-462J7KLI.js → chunk-E5WYXRGV.js} +3 -3
- package/dist-cli/chunks/chunk-HKMWUN7F.js +2 -0
- package/dist-cli/chunks/{chunk-5CJQNMXY.js → chunk-J6P2UPXH.js} +2 -2
- package/dist-cli/chunks/{chunk-GJDCBMAP.js → chunk-JOPKZVOW.js} +1 -1
- package/dist-cli/chunks/{chunk-EPJO7YNS.js → chunk-K5JEUI5G.js} +1 -1
- package/dist-cli/chunks/{chunk-5D5XSE5V.js → chunk-KC5SCOGS.js} +2 -2
- package/dist-cli/chunks/{chunk-FWC4J42U.js → chunk-LA5DIO33.js} +1 -1
- package/dist-cli/chunks/{chunk-653O3F3M.js → chunk-LOQLZFRK.js} +2 -2
- package/dist-cli/chunks/{chunk-QOIOK64H.js → chunk-MOU2WLO4.js} +1 -1
- package/dist-cli/chunks/{chunk-LHBU5QMM.js → chunk-NCCMRFXU.js} +1 -1
- package/dist-cli/chunks/{chunk-5IBT7JOS.js → chunk-PCAPHXN3.js} +2 -2
- package/dist-cli/chunks/chunk-QXDXUDJD.js +1 -0
- package/dist-cli/chunks/{chunk-NN4CZ2QW.js → chunk-RKXHQ2Q3.js} +1 -1
- package/dist-cli/chunks/{chunk-Z6I5M7VJ.js → chunk-RMLJXP7T.js} +2 -2
- package/dist-cli/chunks/chunk-RV67J726.js +2 -0
- package/dist-cli/chunks/{chunk-UZA3Q67P.js → chunk-TJS5IMOH.js} +1 -1
- package/dist-cli/chunks/{chunk-KTTLGU7Y.js → chunk-U3564F2Y.js} +2 -2
- package/dist-cli/chunks/{chunk-3FBFOGQJ.js → chunk-UOHGYYSO.js} +1 -1
- package/dist-cli/chunks/{chunk-DLMAMKWL.js → chunk-UPKYK52K.js} +2 -2
- package/dist-cli/chunks/{chunk-GZON2OYB.js → chunk-USJTVC7T.js} +1 -1
- package/dist-cli/chunks/{chunk-U6GFEFUD.js → chunk-VO74GDXL.js} +3 -3
- package/dist-cli/chunks/{chunk-76O3ZWTI.js → chunk-VZ44FQDG.js} +1 -1
- package/dist-cli/chunks/chunk-WI36YJ23.js +2 -0
- package/dist-cli/chunks/{chunk-5NGZRMTN.js → chunk-WOWLO4LL.js} +1 -1
- package/dist-cli/chunks/chunk-WP3TFHFL.js +10 -0
- package/dist-cli/chunks/{chunk-KBG6WN24.js → chunk-WPPMUUML.js} +2 -2
- package/dist-cli/chunks/{chunk-ZYS5SEB2.js → chunk-WVMYRKSS.js} +2 -2
- package/dist-cli/chunks/chunk-YNG4C3ZS.js +2 -0
- package/dist-cli/chunks/{chunk-JTZNB4PB.js → chunk-YRFWATLA.js} +2 -2
- package/dist-cli/chunks/{cleanup-KXX5W42A.js → cleanup-BLFDJSFS.js} +2 -2
- package/dist-cli/chunks/cli-version-TQHZOK4L.js +2 -0
- package/dist-cli/chunks/{compat-VDVJ2I74.js → compat-Q3WCSTB7.js} +3 -3
- package/dist-cli/chunks/{config-FIQQP5FR.js → config-NHNMRRNB.js} +2 -2
- package/dist-cli/chunks/control-I7YBDRJT.js +2 -0
- package/dist-cli/chunks/daemon-4R3SZLZY.js +2 -0
- package/dist-cli/chunks/{debug-LPLH46JF.js → debug-PGRMZFXA.js} +3 -3
- package/dist-cli/chunks/{desktop-4HDRWKMN.js → desktop-NVTQ37LH.js} +3 -3
- package/dist-cli/chunks/{detox-U23WKW23.js → detox-W3JDXS76.js} +2 -2
- package/dist-cli/chunks/{device-HZKTA7ZV.js → device-KQYN3EVK.js} +2 -2
- package/dist-cli/chunks/{diagnose-M64QUWBW.js → diagnose-CPUKSGNO.js} +2 -2
- package/dist-cli/chunks/disk-cleanup-2COWZWBC.js +2 -0
- package/dist-cli/chunks/drivers-RRZM6E72.js +2 -0
- package/dist-cli/chunks/{film-4IB44CT3.js → film-VZGAZ2YY.js} +3 -3
- package/dist-cli/chunks/flow-VH6DFDQ4.js +2 -0
- package/dist-cli/chunks/help-3HQ2RINO.js +2 -0
- package/dist-cli/chunks/{hidden-runtime-alias-UEU5POA4.js → hidden-runtime-alias-KWHABCNZ.js} +2 -2
- package/dist-cli/chunks/{home-paths-2C4YKPPX.js → home-paths-O4CGYVHF.js} +2 -2
- package/dist-cli/chunks/inspect-PKMJGXDH.js +2 -0
- package/dist-cli/chunks/install-desktop-K5TP3ZHJ.js +2 -0
- package/dist-cli/chunks/{login-MY54AOXW.js → login-KPN4Z26Q.js} +4 -4
- package/dist-cli/chunks/{logout-LYR2RDJY.js → logout-E3UCJAMC.js} +2 -2
- package/dist-cli/chunks/{maestro-4RAMCNZQ.js → maestro-PYA4AHTS.js} +3 -3
- package/dist-cli/chunks/{maestro-generate-CBSUR73A.js → maestro-generate-KCMYWPWL.js} +3 -3
- package/dist-cli/chunks/{mode-2KATMMXB.js → mode-AEB7G2SJ.js} +2 -2
- package/dist-cli/chunks/optional-demo-registry-AIWOBAAA.js +2 -0
- package/dist-cli/chunks/{perf-FVL2ZRQW.js → perf-YLXGZI3E.js} +2 -2
- package/dist-cli/chunks/permissions-7VMVZOUV.js +11 -0
- package/dist-cli/chunks/{record-TCD4VLNH.js → record-AVQO45PE.js} +3 -3
- package/dist-cli/chunks/runtime-HOGETVVD.js +2 -0
- package/dist-cli/chunks/{screenshot-command-ENCJ4W2W.js → screenshot-command-LACQLA4N.js} +3 -3
- package/dist-cli/chunks/{screenshots-capture-FVVMZPFO.js → screenshots-capture-PROOBSGB.js} +2 -2
- package/dist-cli/chunks/{serve-HNHS3QBP.js → serve-FJN2FRGW.js} +2 -2
- package/dist-cli/chunks/{setup-MRLIGVU4.js → setup-IVV4NRYQ.js} +3 -3
- package/dist-cli/chunks/{skills-2LW5BE7P.js → skills-WYR3PJOH.js} +2 -2
- package/dist-cli/chunks/{storage-KH5HQF3V.js → storage-GM7K4MGM.js} +2 -2
- package/dist-cli/chunks/store-YLVHPKG7.js +2 -0
- package/dist-cli/chunks/telemetry-MQKB6PFX.js +2 -0
- package/dist-cli/chunks/{timeline-BWFBU4VM.js → timeline-R5UL3N4T.js} +2 -2
- package/dist-cli/chunks/{upgrade-GZFX4JEO.js → upgrade-RWHSFZRX.js} +2 -2
- package/dist-cli/chunks/upload-RBH4XGJ2.js +2 -0
- package/dist-cli/chunks/{version-OKMVZCP5.js → version-7K6TVQOW.js} +2 -2
- package/dist-cli/chunks/web-46ZPQCAL.js +2 -0
- package/dist-cli/chunks/{what-happened-MC7JDW6C.js → what-happened-K24TSJZX.js} +2 -2
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +24 -6
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +411 -66
- 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/jump-to-source-babel.cjs +1 -1
- package/dist-lib/menu.cjs +38 -2
- package/dist-lib/menu.mjs +38 -2
- 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 +354 -2
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +443 -91
- package/dist-lib/vite.cjs +1 -1
- package/package.json +2 -1
- package/scripts/dev-server-scanner.ts +27 -1
- package/skills/contrast/SKILL.md +1 -0
- package/src/menu.ts +38 -1
- package/src/settings-bundle.ts +439 -0
- package/dist-cli/chunks/beta-HKVUNMLY.js +0 -2
- package/dist-cli/chunks/chunk-5ZBUNUUE.js +0 -2
- package/dist-cli/chunks/chunk-7NW75BHD.js +0 -5
- package/dist-cli/chunks/chunk-H7F2BILD.js +0 -118
- package/dist-cli/chunks/chunk-IDZP6WN5.js +0 -2
- package/dist-cli/chunks/chunk-IGPDVTHJ.js +0 -2
- package/dist-cli/chunks/chunk-KU3T3N2W.js +0 -1
- package/dist-cli/chunks/chunk-ZEYCE3XJ.js +0 -2
- package/dist-cli/chunks/cli-version-IQXVYN67.js +0 -2
- package/dist-cli/chunks/control-GDBZBVQC.js +0 -2
- package/dist-cli/chunks/daemon-Y76JSFGV.js +0 -2
- package/dist-cli/chunks/disk-cleanup-P662TT6J.js +0 -2
- package/dist-cli/chunks/drivers-CKWEDYVG.js +0 -2
- package/dist-cli/chunks/flow-WDFYSQKC.js +0 -2
- package/dist-cli/chunks/help-2S3OHQLT.js +0 -2
- package/dist-cli/chunks/inspect-SKU24VE3.js +0 -2
- package/dist-cli/chunks/install-desktop-RKURHJ34.js +0 -2
- package/dist-cli/chunks/optional-demo-registry-26Q7AW7X.js +0 -2
- package/dist-cli/chunks/runtime-Z3D53UGW.js +0 -2
- package/dist-cli/chunks/store-IBEI6PK4.js +0 -2
- package/dist-cli/chunks/telemetry-3T56HLDZ.js +0 -2
- package/dist-cli/chunks/upload-PCXRS5D7.js +0 -2
- package/dist-cli/chunks/web-ZHCP6WFY.js +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/host/fetch-proxy-overrides.ts
|
|
4
4
|
var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/menu.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -62,6 +62,36 @@ function appMenu() {
|
|
|
62
62
|
shortcutLabel: "settings",
|
|
63
63
|
showInShortcutDocs: true
|
|
64
64
|
},
|
|
65
|
+
{
|
|
66
|
+
label: "Settings Pages",
|
|
67
|
+
items: [
|
|
68
|
+
{
|
|
69
|
+
label: "Accessibility",
|
|
70
|
+
action: "open-settings-page",
|
|
71
|
+
actionPayload: "accessibility"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
label: "Display & Text Size",
|
|
75
|
+
action: "open-settings-page",
|
|
76
|
+
actionPayload: "display-and-text-size"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
label: "Notifications",
|
|
80
|
+
action: "open-settings-page",
|
|
81
|
+
actionPayload: "notifications"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
label: "Apps",
|
|
85
|
+
action: "open-settings-page",
|
|
86
|
+
actionPayload: "apps"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
label: "Privacy & Security",
|
|
90
|
+
action: "open-settings-page",
|
|
91
|
+
actionPayload: "privacy"
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
},
|
|
65
95
|
{ type: "separator" },
|
|
66
96
|
{
|
|
67
97
|
label: "Hide SootSim",
|
|
@@ -282,9 +312,15 @@ function windowMenu(state) {
|
|
|
282
312
|
label: "Show Top Bar",
|
|
283
313
|
type: "checkbox",
|
|
284
314
|
checked: state.showTopBar,
|
|
285
|
-
enabled: state.showBezels,
|
|
286
315
|
action: "toggle-topbar"
|
|
287
316
|
},
|
|
317
|
+
{
|
|
318
|
+
label: "Show Rail",
|
|
319
|
+
type: "checkbox",
|
|
320
|
+
checked: state.showRail,
|
|
321
|
+
action: "toggle-rail",
|
|
322
|
+
hiddenIn: "electron"
|
|
323
|
+
},
|
|
288
324
|
{
|
|
289
325
|
label: "Screenshot",
|
|
290
326
|
type: "checkbox",
|
package/dist-lib/menu.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/menu.ts
|
|
4
4
|
var SOOTSIM_ENGINE_EVENT_NAME = "sootsim:engine-event";
|
|
@@ -29,6 +29,36 @@ function appMenu() {
|
|
|
29
29
|
shortcutLabel: "settings",
|
|
30
30
|
showInShortcutDocs: true
|
|
31
31
|
},
|
|
32
|
+
{
|
|
33
|
+
label: "Settings Pages",
|
|
34
|
+
items: [
|
|
35
|
+
{
|
|
36
|
+
label: "Accessibility",
|
|
37
|
+
action: "open-settings-page",
|
|
38
|
+
actionPayload: "accessibility"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: "Display & Text Size",
|
|
42
|
+
action: "open-settings-page",
|
|
43
|
+
actionPayload: "display-and-text-size"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
label: "Notifications",
|
|
47
|
+
action: "open-settings-page",
|
|
48
|
+
actionPayload: "notifications"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
label: "Apps",
|
|
52
|
+
action: "open-settings-page",
|
|
53
|
+
actionPayload: "apps"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
label: "Privacy & Security",
|
|
57
|
+
action: "open-settings-page",
|
|
58
|
+
actionPayload: "privacy"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
},
|
|
32
62
|
{ type: "separator" },
|
|
33
63
|
{
|
|
34
64
|
label: "Hide SootSim",
|
|
@@ -249,9 +279,15 @@ function windowMenu(state) {
|
|
|
249
279
|
label: "Show Top Bar",
|
|
250
280
|
type: "checkbox",
|
|
251
281
|
checked: state.showTopBar,
|
|
252
|
-
enabled: state.showBezels,
|
|
253
282
|
action: "toggle-topbar"
|
|
254
283
|
},
|
|
284
|
+
{
|
|
285
|
+
label: "Show Rail",
|
|
286
|
+
type: "checkbox",
|
|
287
|
+
checked: state.showRail,
|
|
288
|
+
action: "toggle-rail",
|
|
289
|
+
hiddenIn: "electron"
|
|
290
|
+
},
|
|
255
291
|
{
|
|
256
292
|
label: "Screenshot",
|
|
257
293
|
type: "checkbox",
|
package/dist-lib/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (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;
|
|
@@ -33,6 +33,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
33
33
|
var dev_server_scanner_exports = {};
|
|
34
34
|
__export(dev_server_scanner_exports, {
|
|
35
35
|
__applyManifestForTests: () => __applyManifestForTests,
|
|
36
|
+
__attachAppSettingsBundleForTests: () => __attachAppSettingsBundleForTests,
|
|
36
37
|
__isSootSimSelfServerForTests: () => __isSootSimSelfServerForTests,
|
|
37
38
|
__resetScannerCache: () => __resetScannerCache,
|
|
38
39
|
__shouldReuseScannerCacheEntry: () => __shouldReuseScannerCacheEntry,
|
|
@@ -98,6 +99,342 @@ function normalizeNativeDevBundleUrl(bundleUrl) {
|
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
101
|
|
|
102
|
+
// src/settings-bundle.ts
|
|
103
|
+
var import_promises = require("node:fs/promises");
|
|
104
|
+
var import_node_path = require("node:path");
|
|
105
|
+
var import_plist = __toESM(require("@expo/plist"), 1);
|
|
106
|
+
var MAX_PLIST_BYTES = 1048576;
|
|
107
|
+
var MAX_CHILD_DEPTH = 8;
|
|
108
|
+
var MAX_PLIST_FILES = 32;
|
|
109
|
+
var MAX_SPECIFIERS = 512;
|
|
110
|
+
var settingsBundleCache = /* @__PURE__ */ new Map();
|
|
111
|
+
function isRecord(value) {
|
|
112
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
113
|
+
}
|
|
114
|
+
function resolvePlistParser(value) {
|
|
115
|
+
if (!isRecord(value)) return null;
|
|
116
|
+
const direct = value.parse;
|
|
117
|
+
if (typeof direct === "function") {
|
|
118
|
+
return (source) => Reflect.apply(direct, value, [source]);
|
|
119
|
+
}
|
|
120
|
+
const nested = value.default;
|
|
121
|
+
if (!isRecord(nested)) return null;
|
|
122
|
+
const nestedParse = nested.parse;
|
|
123
|
+
return typeof nestedParse === "function" ? (source) => Reflect.apply(nestedParse, nested, [source]) : null;
|
|
124
|
+
}
|
|
125
|
+
var parsePlist = resolvePlistParser(import_plist.default);
|
|
126
|
+
function optionalString(value) {
|
|
127
|
+
return typeof value === "string" ? value : void 0;
|
|
128
|
+
}
|
|
129
|
+
function requiredString(value) {
|
|
130
|
+
if (typeof value !== "string") return null;
|
|
131
|
+
const normalized = value.trim();
|
|
132
|
+
return normalized ? normalized : null;
|
|
133
|
+
}
|
|
134
|
+
function finiteNumber(value) {
|
|
135
|
+
return typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
136
|
+
}
|
|
137
|
+
function preferenceValue(value) {
|
|
138
|
+
if (typeof value === "string" || typeof value === "boolean") return value;
|
|
139
|
+
return finiteNumber(value);
|
|
140
|
+
}
|
|
141
|
+
function keyboardType(value) {
|
|
142
|
+
if (typeof value !== "string") return void 0;
|
|
143
|
+
switch (value.replaceAll(/[-_\s]/g, "").toLowerCase()) {
|
|
144
|
+
case "alphabet":
|
|
145
|
+
return "alphabet";
|
|
146
|
+
case "numbersandpunctuation":
|
|
147
|
+
return "numbers-and-punctuation";
|
|
148
|
+
case "numberpad":
|
|
149
|
+
return "number-pad";
|
|
150
|
+
case "url":
|
|
151
|
+
return "url";
|
|
152
|
+
case "emailaddress":
|
|
153
|
+
return "email-address";
|
|
154
|
+
case "namephonepad":
|
|
155
|
+
return "name-phone-pad";
|
|
156
|
+
case "asciicapable":
|
|
157
|
+
return "ascii-capable";
|
|
158
|
+
default:
|
|
159
|
+
return void 0;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function autocapitalization(value) {
|
|
163
|
+
if (typeof value !== "string") return void 0;
|
|
164
|
+
switch (value.replaceAll(/[-_\s]/g, "").toLowerCase()) {
|
|
165
|
+
case "none":
|
|
166
|
+
return "none";
|
|
167
|
+
case "sentences":
|
|
168
|
+
return "sentences";
|
|
169
|
+
case "words":
|
|
170
|
+
return "words";
|
|
171
|
+
case "allcharacters":
|
|
172
|
+
return "all-characters";
|
|
173
|
+
default:
|
|
174
|
+
return void 0;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function autocorrection(value) {
|
|
178
|
+
if (typeof value === "boolean") return value;
|
|
179
|
+
if (typeof value !== "string") return void 0;
|
|
180
|
+
switch (value.trim().toLowerCase()) {
|
|
181
|
+
case "yes":
|
|
182
|
+
return true;
|
|
183
|
+
case "no":
|
|
184
|
+
return false;
|
|
185
|
+
default:
|
|
186
|
+
return void 0;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function safeChildPlistName(value) {
|
|
190
|
+
const file = requiredString(value);
|
|
191
|
+
if (!file || file.includes("/") || file.includes("\\") || file.includes("..")) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
file,
|
|
196
|
+
name: file.toLowerCase().endsWith(".plist") ? file : `${file}.plist`
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
async function readableSettingsBundle(path) {
|
|
200
|
+
try {
|
|
201
|
+
const root = await (0, import_promises.stat)((0, import_node_path.join)(path, "Root.plist"));
|
|
202
|
+
return root.isFile() && root.size <= MAX_PLIST_BYTES;
|
|
203
|
+
} catch {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
async function findSettingsBundle(projectRoot) {
|
|
208
|
+
const directCandidates = [
|
|
209
|
+
(0, import_node_path.join)(projectRoot, "Settings.bundle"),
|
|
210
|
+
(0, import_node_path.join)(projectRoot, "ios", "Settings.bundle")
|
|
211
|
+
];
|
|
212
|
+
for (const candidate of directCandidates) {
|
|
213
|
+
if (await readableSettingsBundle(candidate)) return candidate;
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
const iosRoot = (0, import_node_path.join)(projectRoot, "ios");
|
|
217
|
+
const children = await (0, import_promises.readdir)(iosRoot, { withFileTypes: true });
|
|
218
|
+
const candidates = children.filter(
|
|
219
|
+
(entry) => entry.isDirectory() && entry.name !== "Pods" && entry.name !== "build" && !entry.name.startsWith(".")
|
|
220
|
+
).map((entry) => (0, import_node_path.join)(iosRoot, entry.name, "Settings.bundle")).sort();
|
|
221
|
+
for (const candidate of candidates) {
|
|
222
|
+
if (await readableSettingsBundle(candidate)) return candidate;
|
|
223
|
+
}
|
|
224
|
+
} catch {
|
|
225
|
+
}
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
async function settingsBundleFingerprint(bundlePath) {
|
|
229
|
+
try {
|
|
230
|
+
const entries = await (0, import_promises.readdir)(bundlePath, { withFileTypes: true });
|
|
231
|
+
const names = entries.filter((entry) => entry.isFile() && entry.name.toLowerCase().endsWith(".plist")).map((entry) => entry.name).sort().slice(0, MAX_PLIST_FILES + 1);
|
|
232
|
+
if (names.length === 0 || names.length > MAX_PLIST_FILES) return null;
|
|
233
|
+
const parts = await Promise.all(
|
|
234
|
+
names.map(async (name) => {
|
|
235
|
+
const metadata = await (0, import_promises.stat)((0, import_node_path.join)(bundlePath, name));
|
|
236
|
+
if (!metadata.isFile() || metadata.size > MAX_PLIST_BYTES) return null;
|
|
237
|
+
return `${name}:${metadata.size}:${metadata.mtimeMs}:${metadata.ctimeMs}`;
|
|
238
|
+
})
|
|
239
|
+
);
|
|
240
|
+
if (parts.some((part) => part === null)) return null;
|
|
241
|
+
return parts.join("|");
|
|
242
|
+
} catch {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
async function parsePlistRecord(path) {
|
|
247
|
+
try {
|
|
248
|
+
if (!parsePlist) return null;
|
|
249
|
+
const metadata = await (0, import_promises.stat)(path);
|
|
250
|
+
if (!metadata.isFile() || metadata.size > MAX_PLIST_BYTES) return null;
|
|
251
|
+
const source = await (0, import_promises.readFile)(path, "utf8");
|
|
252
|
+
const parsed = parsePlist(source);
|
|
253
|
+
return isRecord(parsed) ? parsed : null;
|
|
254
|
+
} catch {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
function normalizeMultiValue(raw, key, title) {
|
|
259
|
+
if (!Array.isArray(raw.Values) || !Array.isArray(raw.Titles)) return null;
|
|
260
|
+
const values = [];
|
|
261
|
+
const titles = [];
|
|
262
|
+
let optionType;
|
|
263
|
+
const pairCount = Math.min(raw.Values.length, raw.Titles.length);
|
|
264
|
+
for (let index = 0; index < pairCount; index++) {
|
|
265
|
+
const value = preferenceValue(raw.Values[index]);
|
|
266
|
+
const optionTitle = optionalString(raw.Titles[index]);
|
|
267
|
+
if (value === null || optionTitle === void 0) continue;
|
|
268
|
+
const valueType = typeof value === "string" ? "string" : typeof value === "number" ? "number" : "boolean";
|
|
269
|
+
if (optionType !== void 0 && valueType !== optionType) continue;
|
|
270
|
+
optionType = valueType;
|
|
271
|
+
values.push(value);
|
|
272
|
+
titles.push(optionTitle);
|
|
273
|
+
}
|
|
274
|
+
const firstValue = values[0];
|
|
275
|
+
if (firstValue === void 0) return null;
|
|
276
|
+
const declaredDefault = preferenceValue(raw.DefaultValue);
|
|
277
|
+
const defaultValue = declaredDefault !== null && values.includes(declaredDefault) ? declaredDefault : firstValue;
|
|
278
|
+
return {
|
|
279
|
+
type: "multi-value",
|
|
280
|
+
key,
|
|
281
|
+
title,
|
|
282
|
+
defaultValue,
|
|
283
|
+
currentValue: defaultValue,
|
|
284
|
+
values,
|
|
285
|
+
titles
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
async function normalizeSpecifier(raw, context) {
|
|
289
|
+
if (!isRecord(raw)) return null;
|
|
290
|
+
if (context.budget.specifiers >= MAX_SPECIFIERS) return null;
|
|
291
|
+
const type = requiredString(raw.Type);
|
|
292
|
+
if (!type) return null;
|
|
293
|
+
context.budget.specifiers += 1;
|
|
294
|
+
if (type === "PSGroupSpecifier") {
|
|
295
|
+
const title2 = optionalString(raw.Title);
|
|
296
|
+
const footer = optionalString(raw.FooterText);
|
|
297
|
+
return {
|
|
298
|
+
type: "group",
|
|
299
|
+
...title2 !== void 0 ? { title: title2 } : null,
|
|
300
|
+
...footer !== void 0 ? { footer } : null
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
const key = requiredString(raw.Key);
|
|
304
|
+
if (type === "PSSliderSpecifier") {
|
|
305
|
+
if (!key) return null;
|
|
306
|
+
const minimumValue = finiteNumber(raw.MinimumValue);
|
|
307
|
+
const maximumValue = finiteNumber(raw.MaximumValue);
|
|
308
|
+
if (minimumValue === null || maximumValue === null || maximumValue <= minimumValue) {
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
const declaredDefault = finiteNumber(raw.DefaultValue);
|
|
312
|
+
const defaultValue = Math.min(
|
|
313
|
+
maximumValue,
|
|
314
|
+
Math.max(minimumValue, declaredDefault ?? minimumValue)
|
|
315
|
+
);
|
|
316
|
+
const title2 = optionalString(raw.Title);
|
|
317
|
+
const minimumValueImage = optionalString(raw.MinimumValueImage);
|
|
318
|
+
const maximumValueImage = optionalString(raw.MaximumValueImage);
|
|
319
|
+
return {
|
|
320
|
+
type: "slider",
|
|
321
|
+
key,
|
|
322
|
+
defaultValue,
|
|
323
|
+
currentValue: defaultValue,
|
|
324
|
+
minimumValue,
|
|
325
|
+
maximumValue,
|
|
326
|
+
...title2 !== void 0 ? { title: title2 } : null,
|
|
327
|
+
...minimumValueImage !== void 0 ? { minimumValueImage } : null,
|
|
328
|
+
...maximumValueImage !== void 0 ? { maximumValueImage } : null
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
if (type === "PSChildPaneSpecifier") {
|
|
332
|
+
const title2 = requiredString(raw.Title);
|
|
333
|
+
const child = safeChildPlistName(raw.File);
|
|
334
|
+
if (!title2 || !child || context.depth >= MAX_CHILD_DEPTH) return null;
|
|
335
|
+
const childSpecifiers = await parseSpecifierFile(child.name, {
|
|
336
|
+
...context,
|
|
337
|
+
depth: context.depth + 1
|
|
338
|
+
});
|
|
339
|
+
if (!childSpecifiers || childSpecifiers.length === 0) return null;
|
|
340
|
+
return {
|
|
341
|
+
type: "child-pane",
|
|
342
|
+
title: title2,
|
|
343
|
+
file: child.file,
|
|
344
|
+
specifiers: childSpecifiers
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
if (!key) return null;
|
|
348
|
+
const title = requiredString(raw.Title) ?? key;
|
|
349
|
+
if (type === "PSToggleSwitchSpecifier") {
|
|
350
|
+
const defaultValue = typeof raw.DefaultValue === "boolean" ? raw.DefaultValue : false;
|
|
351
|
+
return {
|
|
352
|
+
type: "toggle",
|
|
353
|
+
key,
|
|
354
|
+
title,
|
|
355
|
+
defaultValue,
|
|
356
|
+
currentValue: defaultValue
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
if (type === "PSTextFieldSpecifier") {
|
|
360
|
+
const defaultValue = optionalString(raw.DefaultValue) ?? "";
|
|
361
|
+
const placeholder = optionalString(raw.Placeholder);
|
|
362
|
+
const resolvedKeyboardType = keyboardType(raw.KeyboardType);
|
|
363
|
+
const resolvedAutocapitalization = autocapitalization(raw.AutocapitalizationType);
|
|
364
|
+
const resolvedAutocorrection = autocorrection(raw.AutocorrectionType);
|
|
365
|
+
return {
|
|
366
|
+
type: "text",
|
|
367
|
+
key,
|
|
368
|
+
title,
|
|
369
|
+
defaultValue,
|
|
370
|
+
currentValue: defaultValue,
|
|
371
|
+
...placeholder !== void 0 ? { placeholder } : null,
|
|
372
|
+
...typeof raw.IsSecure === "boolean" ? { secure: raw.IsSecure } : null,
|
|
373
|
+
...resolvedKeyboardType ? { keyboardType: resolvedKeyboardType } : null,
|
|
374
|
+
...resolvedAutocapitalization ? { autocapitalization: resolvedAutocapitalization } : null,
|
|
375
|
+
...resolvedAutocorrection !== void 0 ? { autocorrection: resolvedAutocorrection } : null
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
if (type === "PSMultiValueSpecifier" || type === "PSRadioGroupSpecifier") {
|
|
379
|
+
return normalizeMultiValue(raw, key, title);
|
|
380
|
+
}
|
|
381
|
+
if (type === "PSTitleValueSpecifier") {
|
|
382
|
+
const defaultValue = preferenceValue(raw.DefaultValue) ?? "";
|
|
383
|
+
return {
|
|
384
|
+
type: "title-value",
|
|
385
|
+
key,
|
|
386
|
+
title,
|
|
387
|
+
defaultValue,
|
|
388
|
+
currentValue: defaultValue
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
return null;
|
|
392
|
+
}
|
|
393
|
+
async function parseSpecifierFile(fileName, context) {
|
|
394
|
+
const cached2 = context.fileCache.get(fileName);
|
|
395
|
+
if (cached2 !== void 0) return cached2;
|
|
396
|
+
if (context.stack.has(fileName) || context.budget.files >= MAX_PLIST_FILES) {
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
399
|
+
context.budget.files += 1;
|
|
400
|
+
const root = await parsePlistRecord((0, import_node_path.join)(context.bundlePath, fileName));
|
|
401
|
+
if (!root || !Array.isArray(root.PreferenceSpecifiers)) {
|
|
402
|
+
context.fileCache.set(fileName, null);
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
const stack = new Set(context.stack);
|
|
406
|
+
stack.add(fileName);
|
|
407
|
+
const specifiers = [];
|
|
408
|
+
for (const raw of root.PreferenceSpecifiers) {
|
|
409
|
+
if (context.budget.specifiers >= MAX_SPECIFIERS) break;
|
|
410
|
+
const specifier = await normalizeSpecifier(raw, { ...context, stack });
|
|
411
|
+
if (specifier) specifiers.push(specifier);
|
|
412
|
+
}
|
|
413
|
+
context.fileCache.set(fileName, specifiers);
|
|
414
|
+
return specifiers;
|
|
415
|
+
}
|
|
416
|
+
async function readAppSettingsBundle(projectRoot) {
|
|
417
|
+
const bundlePath = await findSettingsBundle(projectRoot);
|
|
418
|
+
if (!bundlePath) return null;
|
|
419
|
+
const fingerprint = await settingsBundleFingerprint(bundlePath);
|
|
420
|
+
if (!fingerprint) return null;
|
|
421
|
+
const cached2 = settingsBundleCache.get(bundlePath);
|
|
422
|
+
if (cached2?.fingerprint === fingerprint) return cached2.specifiers;
|
|
423
|
+
const specifiers = await parseSpecifierFile("Root.plist", {
|
|
424
|
+
bundlePath,
|
|
425
|
+
depth: 0,
|
|
426
|
+
budget: { files: 0, specifiers: 0 },
|
|
427
|
+
stack: /* @__PURE__ */ new Set(),
|
|
428
|
+
fileCache: /* @__PURE__ */ new Map()
|
|
429
|
+
});
|
|
430
|
+
const normalized = specifiers && specifiers.length > 0 ? specifiers : null;
|
|
431
|
+
settingsBundleCache.set(bundlePath, { fingerprint, specifiers: normalized });
|
|
432
|
+
return normalized;
|
|
433
|
+
}
|
|
434
|
+
function __resetAppSettingsBundleCacheForTests() {
|
|
435
|
+
settingsBundleCache.clear();
|
|
436
|
+
}
|
|
437
|
+
|
|
101
438
|
// scripts/optional-demo-registry.ts
|
|
102
439
|
var REGISTRY_SPECIFIER = "./demo-app-registry.ts";
|
|
103
440
|
var cached = null;
|
|
@@ -498,7 +835,19 @@ function __resetScannerCache() {
|
|
|
498
835
|
knownOne.clear();
|
|
499
836
|
enrichmentCache.clear();
|
|
500
837
|
enrichmentInFlight.clear();
|
|
838
|
+
__resetAppSettingsBundleCacheForTests();
|
|
839
|
+
}
|
|
840
|
+
async function attachAppSettingsBundle(result, projectRoot) {
|
|
841
|
+
const settingsBundle = await readAppSettingsBundle(projectRoot);
|
|
842
|
+
if (settingsBundle) {
|
|
843
|
+
result.settingsBundle = settingsBundle;
|
|
844
|
+
result.settingsStorageScopeUrl = result.bundleUrl;
|
|
845
|
+
} else {
|
|
846
|
+
delete result.settingsBundle;
|
|
847
|
+
delete result.settingsStorageScopeUrl;
|
|
848
|
+
}
|
|
501
849
|
}
|
|
850
|
+
var __attachAppSettingsBundleForTests = attachAppSettingsBundle;
|
|
502
851
|
async function scanDevServers(opts = {}) {
|
|
503
852
|
await loadOptionalDemoApps();
|
|
504
853
|
const processes = await discoverListeningProcesses(opts.excludePorts);
|
|
@@ -554,7 +903,9 @@ async function scanDevServers(opts = {}) {
|
|
|
554
903
|
if (!pid) return;
|
|
555
904
|
result.pid = pid;
|
|
556
905
|
const cwd = await resolveProcessCwd(pid);
|
|
557
|
-
if (cwd)
|
|
906
|
+
if (!cwd) return;
|
|
907
|
+
result.cwd = cwd;
|
|
908
|
+
await attachAppSettingsBundle(result, cwd);
|
|
558
909
|
})
|
|
559
910
|
);
|
|
560
911
|
const livePids = new Set(pidByPort.values());
|
|
@@ -566,6 +917,7 @@ async function scanDevServers(opts = {}) {
|
|
|
566
917
|
// Annotate the CommonJS export names for ESM import in node:
|
|
567
918
|
0 && (module.exports = {
|
|
568
919
|
__applyManifestForTests,
|
|
920
|
+
__attachAppSettingsBundleForTests,
|
|
569
921
|
__isSootSimSelfServerForTests,
|
|
570
922
|
__resetScannerCache,
|
|
571
923
|
__shouldReuseScannerCacheEntry,
|
package/dist-lib/sdk.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/sdk.mjs
CHANGED