@powerhousedao/connect 6.2.3-dev.9 → 6.2.3

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 (119) hide show
  1. package/dist/{AddDriveModal-xAw48kdl.js → AddDriveModal-DhNfP94R.js} +5 -5
  2. package/dist/{AddDriveModal-xAw48kdl.js.map → AddDriveModal-DhNfP94R.js.map} +1 -1
  3. package/dist/{ClearStorageModal-C1BXHTq3.js → ClearStorageModal-DyU-FIgY.js} +5 -5
  4. package/dist/{ClearStorageModal-C1BXHTq3.js.map → ClearStorageModal-DyU-FIgY.js.map} +1 -1
  5. package/dist/{ConfirmDocumentUpgradeModal-FUOhZsk7.js → ConfirmDocumentUpgradeModal-DcOZy20m.js} +8 -7
  6. package/dist/{ConfirmDocumentUpgradeModal-FUOhZsk7.js.map → ConfirmDocumentUpgradeModal-DcOZy20m.js.map} +1 -1
  7. package/dist/{CookiesPolicyModal-BpyPPyxS.js → CookiesPolicyModal-BLw4pnhn.js} +4 -4
  8. package/dist/{CookiesPolicyModal-BpyPPyxS.js.map → CookiesPolicyModal-BLw4pnhn.js.map} +1 -1
  9. package/dist/{CreateDocumentModal-C45W8J0V.js → CreateDocumentModal-Bmv0V-kY.js} +6 -5
  10. package/dist/{CreateDocumentModal-C45W8J0V.js.map → CreateDocumentModal-Bmv0V-kY.js.map} +1 -1
  11. package/dist/{DebugSettingsModal-ClqHzcxM.js → DebugSettingsModal-CwUN9gIr.js} +7 -7
  12. package/dist/{DebugSettingsModal-ClqHzcxM.js.map → DebugSettingsModal-CwUN9gIr.js.map} +1 -1
  13. package/dist/{DeleteDriveModal-Dug84t1j.js → DeleteDriveModal-CjGnG0ht.js} +5 -5
  14. package/dist/{DeleteDriveModal-Dug84t1j.js.map → DeleteDriveModal-CjGnG0ht.js.map} +1 -1
  15. package/dist/{DeleteItemModal-mMzy3V8o.js → DeleteItemModal-BbY_4_xT.js} +5 -5
  16. package/dist/{DeleteItemModal-mMzy3V8o.js.map → DeleteItemModal-BbY_4_xT.js.map} +1 -1
  17. package/dist/{DisclaimerModal-DvpD5dPM.js → DisclaimerModal-DuglmEwL.js} +4 -4
  18. package/dist/{DisclaimerModal-DvpD5dPM.js.map → DisclaimerModal-DuglmEwL.js.map} +1 -1
  19. package/dist/{DocumentVersionUnsupportedModal-C3Q0V75l.js → DocumentVersionUnsupportedModal-C4fy7fZ6.js} +4 -4
  20. package/dist/{DocumentVersionUnsupportedModal-C3Q0V75l.js.map → DocumentVersionUnsupportedModal-C4fy7fZ6.js.map} +1 -1
  21. package/dist/{DownloadDocumentWithErrorsModal-IKl0ljQb.js → DownloadDocumentWithErrorsModal-BsPQ5qgy.js} +6 -5
  22. package/dist/{DownloadDocumentWithErrorsModal-IKl0ljQb.js.map → DownloadDocumentWithErrorsModal-BsPQ5qgy.js.map} +1 -1
  23. package/dist/{DriveAuthRequiredModal-DVK7ZQzO.js → DriveAuthRequiredModal-CtsB0kwH.js} +5 -5
  24. package/dist/{DriveAuthRequiredModal-DVK7ZQzO.js.map → DriveAuthRequiredModal-CtsB0kwH.js.map} +1 -1
  25. package/dist/{DriveSettingsModal-C6-mRQiv.js → DriveSettingsModal-d1L0eYof.js} +4 -4
  26. package/dist/{DriveSettingsModal-C6-mRQiv.js.map → DriveSettingsModal-d1L0eYof.js.map} +1 -1
  27. package/dist/{InspectorModal-7FQBTEzt.js → InspectorModal-Cd8kbCV8.js} +61 -21
  28. package/dist/InspectorModal-Cd8kbCV8.js.map +1 -0
  29. package/dist/{LoginModal-CybbOm3N.js → LoginModal-CI0ogC2-.js} +5 -5
  30. package/dist/{LoginModal-CybbOm3N.js.map → LoginModal-CI0ogC2-.js.map} +1 -1
  31. package/dist/{MissingPackageModal-nBnExqO0.js → MissingPackageModal-HFUPQMML.js} +5 -5
  32. package/dist/{MissingPackageModal-nBnExqO0.js.map → MissingPackageModal-HFUPQMML.js.map} +1 -1
  33. package/dist/{OpenFileDocumentsModal-DGaYJpXW.js → OpenFileDocumentsModal-BQsaBP4x.js} +8 -7
  34. package/dist/{OpenFileDocumentsModal-DGaYJpXW.js.map → OpenFileDocumentsModal-BQsaBP4x.js.map} +1 -1
  35. package/dist/{SettingsModal-CPv3_jmp.js → SettingsModal-CgjW-M2a.js} +17 -15
  36. package/dist/{SettingsModal-CPv3_jmp.js.map → SettingsModal-CgjW-M2a.js.map} +1 -1
  37. package/dist/{UpgradeDriveModal-_8t9slxQ.js → UpgradeDriveModal-CXX6D5Au.js} +4 -4
  38. package/dist/{UpgradeDriveModal-_8t9slxQ.js.map → UpgradeDriveModal-CXX6D5Au.js.map} +1 -1
  39. package/dist/app-loader-D2bV-77j.js +4 -0
  40. package/dist/{app-loader-DyGcBhGV.js → app-loader-l5wtQh5z.js} +1160 -1121
  41. package/dist/app-loader-l5wtQh5z.js.map +1 -0
  42. package/dist/app-skeleton--Me5zlSz.js +112 -0
  43. package/dist/app-skeleton--Me5zlSz.js.map +1 -0
  44. package/dist/app-skeleton-CBN4tenZ.js +4 -0
  45. package/dist/boot-DPNEOI2A.js +210 -0
  46. package/dist/boot-DPNEOI2A.js.map +1 -0
  47. package/dist/buffer-DNTcuap_.js +66 -0
  48. package/dist/buffer-DNTcuap_.js.map +1 -0
  49. package/dist/{build-info-D9_h0032.js → build-info-BV8UtyA4.js} +5 -5
  50. package/dist/{build-info-D9_h0032.js.map → build-info-BV8UtyA4.js.map} +1 -1
  51. package/dist/components-BH57lxCU.js +5 -0
  52. package/dist/{connect.config-DaHDEUrw.js → connect.config-CaXMoB42.js} +24 -12
  53. package/dist/connect.config-CaXMoB42.js.map +1 -0
  54. package/dist/{connection-state-3w4liC1X.js → connection-state-Eqc2izmt.js} +6 -6
  55. package/dist/{connection-state-3w4liC1X.js.map → connection-state-Eqc2izmt.js.map} +1 -1
  56. package/dist/{cookie-banner-BH6bIq24.js → cookie-banner-BxXvPdIY.js} +6 -6
  57. package/dist/{cookie-banner-BH6bIq24.js.map → cookie-banner-BxXvPdIY.js.map} +1 -1
  58. package/dist/{i18n-CWO0vYVd.js → i18n-CTgT1HG-.js} +3 -3
  59. package/dist/{i18n-CWO0vYVd.js.map → i18n-CTgT1HG-.js.map} +1 -1
  60. package/dist/{load-Cu7S9GPc.js → load-ftpCX1HI.js} +13 -11
  61. package/dist/{load-Cu7S9GPc.js.map → load-ftpCX1HI.js.map} +1 -1
  62. package/dist/main.d.ts +2 -1
  63. package/dist/main.js +8 -8
  64. package/dist/main.js.map +1 -1
  65. package/dist/package-manager-BbzIV9aN.js +485 -0
  66. package/dist/package-manager-BbzIV9aN.js.map +1 -0
  67. package/dist/{pglite-major-B39aOEiE.js → pglite-major-p4_YefAE.js} +23 -5
  68. package/dist/pglite-major-p4_YefAE.js.map +1 -0
  69. package/dist/{pglite-migrate-core-Boxqqx-c.js → pglite-migrate-core-BcXcImng.js} +8 -6
  70. package/dist/{pglite-migrate-core-Boxqqx-c.js.map → pglite-migrate-core-BcXcImng.js.map} +1 -1
  71. package/dist/{pglite-seed-BqAUvNFw.js → pglite-seed-Cl2d-iyl.js} +4 -4
  72. package/dist/{pglite-seed-BqAUvNFw.js.map → pglite-seed-Cl2d-iyl.js.map} +1 -1
  73. package/dist/pglite.worker.d.ts +2 -1
  74. package/dist/pglite.worker.js +4 -3
  75. package/dist/pglite.worker.js.map +1 -1
  76. package/dist/pglite.worker.legacy.d.ts +2 -1
  77. package/dist/pglite.worker.legacy.js +4 -3
  78. package/dist/pglite.worker.legacy.js.map +1 -1
  79. package/dist/{preferences-store-_5Cw4_YV.js → preferences-store-DZUIAkHE.js} +6 -25
  80. package/dist/preferences-store-DZUIAkHE.js.map +1 -0
  81. package/dist/{pwa-manifest-link-DIgOSo2Q.js → pwa-manifest-link-DQRJpF0r.js} +3 -3
  82. package/dist/{pwa-manifest-link-DIgOSo2Q.js.map → pwa-manifest-link-DQRJpF0r.js.map} +1 -1
  83. package/dist/{reactor-yC8BveHb.js → reactor-CItc8KaF.js} +68 -437
  84. package/dist/reactor-CItc8KaF.js.map +1 -0
  85. package/dist/reactor.worker.d.ts +2 -1
  86. package/dist/reactor.worker.js +76 -21
  87. package/dist/reactor.worker.js.map +1 -1
  88. package/dist/{registerServiceWorker-BSzbNfvz.js → registerServiceWorker-smkROQhm.js} +5 -5
  89. package/dist/{registerServiceWorker-BSzbNfvz.js.map → registerServiceWorker-smkROQhm.js.map} +1 -1
  90. package/dist/renown-trust-DRgHpxlZ.js +34 -0
  91. package/dist/renown-trust-DRgHpxlZ.js.map +1 -0
  92. package/dist/{runtime-config-DL3QjcfM.js → runtime-config-DtJIUgYw.js} +3 -3
  93. package/dist/{runtime-config-DL3QjcfM.js.map → runtime-config-DtJIUgYw.js.map} +1 -1
  94. package/dist/{sentry-QXKgQmr2.js → sentry-jfDyrxdX.js} +3 -3
  95. package/dist/{sentry-QXKgQmr2.js.map → sentry-jfDyrxdX.js.map} +1 -1
  96. package/dist/start-connect.d.ts +4 -5
  97. package/dist/start-connect.d.ts.map +1 -1
  98. package/dist/start-connect.js +6 -8
  99. package/dist/start-connect.js.map +1 -1
  100. package/dist/style.css +2907 -1
  101. package/dist/{toast-BXIGd4Eb.js → toast-C6WW-_O-.js} +3 -3
  102. package/dist/{toast-BXIGd4Eb.js.map → toast-C6WW-_O-.js.map} +1 -1
  103. package/dist/{use-renown-login-Cf3va6u_.js → use-renown-login-BzOSQETV.js} +3 -3
  104. package/dist/{use-renown-login-Cf3va6u_.js.map → use-renown-login-BzOSQETV.js.map} +1 -1
  105. package/dist/useIsEmbedded-BWJ0qb7w.js +26 -0
  106. package/dist/useIsEmbedded-BWJ0qb7w.js.map +1 -0
  107. package/dist/{useRegistryPackages-BnUcL_nZ.js → useRegistryPackages-DuoU75ap.js} +73 -10
  108. package/dist/useRegistryPackages-DuoU75ap.js.map +1 -0
  109. package/package.json +19 -19
  110. package/style.css +7 -5
  111. package/dist/InspectorModal-7FQBTEzt.js.map +0 -1
  112. package/dist/app-loader-C4pFYc82.js +0 -4
  113. package/dist/app-loader-DyGcBhGV.js.map +0 -1
  114. package/dist/components-MEmS6hgr.js +0 -4
  115. package/dist/connect.config-DaHDEUrw.js.map +0 -1
  116. package/dist/pglite-major-B39aOEiE.js.map +0 -1
  117. package/dist/preferences-store-_5Cw4_YV.js.map +0 -1
  118. package/dist/reactor-yC8BveHb.js.map +0 -1
  119. package/dist/useRegistryPackages-BnUcL_nZ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"registerServiceWorker-BSzbNfvz.js","sources":["../src/utils/registerServiceWorker.ts"],"sourcesContent":["import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { refreshPwaManifestLink } from \"./pwa-manifest-link.js\";\n\nconst basePath = connectConfig.routerBasename;\n\nconst serviceWorkerScriptPath = [basePath, \"service-worker.js\"]\n .join(\"/\")\n .replace(/\\/{2,}/gm, \"/\");\n\n// External store backing the refresh prompt: our hand-written service worker\n// (injectManifest, registerType: prompt) parks a new worker as \"waiting\" by not\n// calling skipWaiting on install; we flag that here so\n// service-worker-update-prompt.tsx can offer a Refresh instead of reloading\n// from under the user.\nlet updateAvailable = false;\nconst updateListeners = new Set<() => void>();\n\nfunction setUpdateAvailable(value: boolean) {\n if (updateAvailable === value) return;\n updateAvailable = value;\n for (const listener of updateListeners) listener();\n}\n\nexport function subscribeServiceWorkerUpdate(cb: () => void): () => void {\n updateListeners.add(cb);\n return () => {\n updateListeners.delete(cb);\n };\n}\n\nexport function getServiceWorkerUpdateAvailable(): boolean {\n return updateAvailable;\n}\n\nclass ServiceWorkerManager {\n ready = false;\n debug = false;\n registration: ServiceWorkerRegistration | null = null;\n // Only reload on controllerchange when the user actually accepted an update.\n // clientsClaim fires controllerchange on the very first install too, and we\n // must not reload then.\n #updateAccepted = false;\n #reloading = false;\n\n constructor(debug = false) {\n this.debug = debug;\n }\n\n setDebug(debug: boolean) {\n this.debug = debug;\n }\n\n #log(...args: unknown[]) {\n if (this.debug) console.log(\"[ServiceWorker]\", ...args);\n }\n\n // Watch an installing worker; once it reaches \"installed\" while another\n // worker already controls the page, a new version is waiting → prompt.\n #trackInstalling(worker: ServiceWorker | null) {\n if (!worker) return;\n worker.addEventListener(\"statechange\", () => {\n if (worker.state === \"installed\" && navigator.serviceWorker.controller) {\n this.#log(\"New version installed and waiting\");\n setUpdateAvailable(true);\n }\n });\n }\n\n #handleRegistration(registration: ServiceWorkerRegistration) {\n this.registration = registration;\n this.ready = true;\n this.#log(\"registered\", registration);\n\n // A worker installed by a previous page load may already be waiting.\n if (registration.waiting && navigator.serviceWorker.controller) {\n setUpdateAvailable(true);\n }\n\n this.#trackInstalling(registration.installing);\n registration.addEventListener(\"updatefound\", () => {\n this.#trackInstalling(registration.installing);\n });\n }\n\n async #register() {\n try {\n navigator.serviceWorker.addEventListener(\"controllerchange\", () => {\n // First visit: boot fetches the runtime config before this SW controls\n // the page, so it never lands in the cache. Warm it now (clientsClaim\n // just gave us control) so a single online load is enough to go offline.\n this.#warmRuntimeConfigCache();\n // The SW only serves the dynamic manifest.webmanifest once it controls\n // the page. A package installed before that (its fragment already in\n // IndexedDB) was re-consumed against the static base manifest; now that\n // the dynamic route is live, re-attach the link so it picks up the\n // package's PWA config without a manual reload.\n refreshPwaManifestLink();\n // Reload once the worker we activated via applyUpdate() takes control.\n if (!this.#updateAccepted || this.#reloading) return;\n this.#reloading = true;\n window.location.reload();\n });\n\n const existing = await navigator.serviceWorker.getRegistration();\n if (existing) {\n this.#handleRegistration(existing);\n // Force an immediate check so a deploy that happened while the tab was\n // closed surfaces a prompt on the next load.\n await existing.update();\n } else {\n const registration = await navigator.serviceWorker.register(\n serviceWorkerScriptPath,\n );\n this.#handleRegistration(registration);\n }\n\n // Periodically poll for a new version while the tab stays open.\n const intervalId = setInterval(() => {\n void (async () => {\n const reg = await navigator.serviceWorker.getRegistration();\n if (!reg) {\n clearInterval(intervalId);\n return;\n }\n // Skip while a worker is mid-install or the browser is offline —\n // updating then would only fire a doomed network fetch (per the\n // vite-plugin-pwa periodic-update guidance).\n if (reg.installing || !navigator.onLine) return;\n await reg.update();\n })();\n }, connectConfig.appVersionCheckInterval);\n } catch (error) {\n console.error(\"ServiceWorker registration failed: \", error);\n }\n }\n\n registerServiceWorker(debug = false) {\n this.debug = debug;\n\n if (!(\"serviceWorker\" in navigator)) {\n console.warn(\"Service Worker not available\");\n return;\n }\n const start = () => {\n this.#register().catch(console.error);\n };\n // This runs from a React effect, which usually fires *after* the window\n // `load` event has already happened — so adding a load listener would never\n // fire. Register immediately when the page is already loaded; otherwise wait\n // for load to avoid contending with initial page resource fetches.\n if (document.readyState === \"complete\") {\n start();\n } else {\n window.addEventListener(\"load\", start, { once: true });\n }\n }\n\n // Fire-and-forget re-fetch so the controlling SW's NetworkFirst rule caches\n // the config (see controllerchange). The URL MUST match runtime-config.ts's\n // loader (`${import.meta.env.BASE_URL}powerhouse.config.json`) or the cache\n // keys won't line up.\n #warmRuntimeConfigCache() {\n void fetch(`${import.meta.env.BASE_URL}powerhouse.config.json`).catch(\n () => {},\n );\n }\n\n // Activate the waiting worker; the controllerchange handler then reloads.\n applyUpdate() {\n setUpdateAvailable(false);\n const waiting = this.registration?.waiting;\n if (!waiting) {\n // Nothing waiting (or already activated) — reload to pick up whatever\n // the active worker now serves.\n this.#reloading = true;\n window.location.reload();\n return;\n }\n this.#updateAccepted = true;\n waiting.postMessage({ type: \"SKIP_WAITING\" });\n }\n\n sendMessage(message: unknown) {\n const target =\n this.registration?.active ??\n this.registration?.waiting ??\n navigator.serviceWorker.controller;\n target?.postMessage(message);\n }\n\n // Drop any worker controlling this scope — used when offline support is\n // disabled (a disabled build also ships a self-destroying worker).\n async unregisterAll() {\n if (!(\"serviceWorker\" in navigator)) return;\n const registrations = await navigator.serviceWorker.getRegistrations();\n await Promise.all(registrations.map((r) => r.unregister()));\n }\n}\n\nexport const serviceWorkerManager = new ServiceWorkerManager();\n"],"names":["#log","#trackInstalling","#register","#warmRuntimeConfigCache","#updateAccepted","#reloading","#handleRegistration"],"mappings":"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","debug_id":"44f47a6f-9a4c-591d-84e3-63e063c185cf"}
1
+ {"version":3,"file":"registerServiceWorker-smkROQhm.js","sources":["../src/utils/registerServiceWorker.ts"],"sourcesContent":["import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { refreshPwaManifestLink } from \"./pwa-manifest-link.js\";\n\nconst basePath = connectConfig.routerBasename;\n\nconst serviceWorkerScriptPath = [basePath, \"service-worker.js\"]\n .join(\"/\")\n .replace(/\\/{2,}/gm, \"/\");\n\n// External store backing the refresh prompt: our hand-written service worker\n// (injectManifest, registerType: prompt) parks a new worker as \"waiting\" by not\n// calling skipWaiting on install; we flag that here so\n// service-worker-update-prompt.tsx can offer a Refresh instead of reloading\n// from under the user.\nlet updateAvailable = false;\nconst updateListeners = new Set<() => void>();\n\nfunction setUpdateAvailable(value: boolean) {\n if (updateAvailable === value) return;\n updateAvailable = value;\n for (const listener of updateListeners) listener();\n}\n\nexport function subscribeServiceWorkerUpdate(cb: () => void): () => void {\n updateListeners.add(cb);\n return () => {\n updateListeners.delete(cb);\n };\n}\n\nexport function getServiceWorkerUpdateAvailable(): boolean {\n return updateAvailable;\n}\n\nclass ServiceWorkerManager {\n ready = false;\n debug = false;\n registration: ServiceWorkerRegistration | null = null;\n // Only reload on controllerchange when the user actually accepted an update.\n // clientsClaim fires controllerchange on the very first install too, and we\n // must not reload then.\n #updateAccepted = false;\n #reloading = false;\n\n constructor(debug = false) {\n this.debug = debug;\n }\n\n setDebug(debug: boolean) {\n this.debug = debug;\n }\n\n #log(...args: unknown[]) {\n if (this.debug) console.log(\"[ServiceWorker]\", ...args);\n }\n\n // Watch an installing worker; once it reaches \"installed\" while another\n // worker already controls the page, a new version is waiting → prompt.\n #trackInstalling(worker: ServiceWorker | null) {\n if (!worker) return;\n worker.addEventListener(\"statechange\", () => {\n if (worker.state === \"installed\" && navigator.serviceWorker.controller) {\n this.#log(\"New version installed and waiting\");\n setUpdateAvailable(true);\n }\n });\n }\n\n #handleRegistration(registration: ServiceWorkerRegistration) {\n this.registration = registration;\n this.ready = true;\n this.#log(\"registered\", registration);\n\n // A worker installed by a previous page load may already be waiting.\n if (registration.waiting && navigator.serviceWorker.controller) {\n setUpdateAvailable(true);\n }\n\n this.#trackInstalling(registration.installing);\n registration.addEventListener(\"updatefound\", () => {\n this.#trackInstalling(registration.installing);\n });\n }\n\n async #register() {\n try {\n navigator.serviceWorker.addEventListener(\"controllerchange\", () => {\n // First visit: boot fetches the runtime config before this SW controls\n // the page, so it never lands in the cache. Warm it now (clientsClaim\n // just gave us control) so a single online load is enough to go offline.\n this.#warmRuntimeConfigCache();\n // The SW only serves the dynamic manifest.webmanifest once it controls\n // the page. A package installed before that (its fragment already in\n // IndexedDB) was re-consumed against the static base manifest; now that\n // the dynamic route is live, re-attach the link so it picks up the\n // package's PWA config without a manual reload.\n refreshPwaManifestLink();\n // Reload once the worker we activated via applyUpdate() takes control.\n if (!this.#updateAccepted || this.#reloading) return;\n this.#reloading = true;\n window.location.reload();\n });\n\n const existing = await navigator.serviceWorker.getRegistration();\n if (existing) {\n this.#handleRegistration(existing);\n // Force an immediate check so a deploy that happened while the tab was\n // closed surfaces a prompt on the next load.\n await existing.update();\n } else {\n const registration = await navigator.serviceWorker.register(\n serviceWorkerScriptPath,\n );\n this.#handleRegistration(registration);\n }\n\n // Periodically poll for a new version while the tab stays open.\n const intervalId = setInterval(() => {\n void (async () => {\n const reg = await navigator.serviceWorker.getRegistration();\n if (!reg) {\n clearInterval(intervalId);\n return;\n }\n // Skip while a worker is mid-install or the browser is offline —\n // updating then would only fire a doomed network fetch (per the\n // vite-plugin-pwa periodic-update guidance).\n if (reg.installing || !navigator.onLine) return;\n await reg.update();\n })();\n }, connectConfig.appVersionCheckInterval);\n } catch (error) {\n console.error(\"ServiceWorker registration failed: \", error);\n }\n }\n\n registerServiceWorker(debug = false) {\n this.debug = debug;\n\n if (!(\"serviceWorker\" in navigator)) {\n console.warn(\"Service Worker not available\");\n return;\n }\n const start = () => {\n this.#register().catch(console.error);\n };\n // This runs from a React effect, which usually fires *after* the window\n // `load` event has already happened — so adding a load listener would never\n // fire. Register immediately when the page is already loaded; otherwise wait\n // for load to avoid contending with initial page resource fetches.\n if (document.readyState === \"complete\") {\n start();\n } else {\n window.addEventListener(\"load\", start, { once: true });\n }\n }\n\n // Fire-and-forget re-fetch so the controlling SW's NetworkFirst rule caches\n // the config (see controllerchange). The URL MUST match runtime-config.ts's\n // loader (`${import.meta.env.BASE_URL}powerhouse.config.json`) or the cache\n // keys won't line up.\n #warmRuntimeConfigCache() {\n void fetch(`${import.meta.env.BASE_URL}powerhouse.config.json`).catch(\n () => {},\n );\n }\n\n // Activate the waiting worker; the controllerchange handler then reloads.\n applyUpdate() {\n setUpdateAvailable(false);\n const waiting = this.registration?.waiting;\n if (!waiting) {\n // Nothing waiting (or already activated) — reload to pick up whatever\n // the active worker now serves.\n this.#reloading = true;\n window.location.reload();\n return;\n }\n this.#updateAccepted = true;\n waiting.postMessage({ type: \"SKIP_WAITING\" });\n }\n\n sendMessage(message: unknown) {\n const target =\n this.registration?.active ??\n this.registration?.waiting ??\n navigator.serviceWorker.controller;\n target?.postMessage(message);\n }\n\n // Drop any worker controlling this scope — used when offline support is\n // disabled (a disabled build also ships a self-destroying worker).\n async unregisterAll() {\n if (!(\"serviceWorker\" in navigator)) return;\n const registrations = await navigator.serviceWorker.getRegistrations();\n await Promise.all(registrations.map((r) => r.unregister()));\n }\n}\n\nexport const serviceWorkerManager = new ServiceWorkerManager();\n"],"names":[],"mappings":"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","debug_id":"e66be136-4138-5452-99c8-b48f7cf62feb"}
@@ -0,0 +1,34 @@
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2a03e561-8352-534f-9e49-4827833e1919")}catch(e){}}();
3
+ import { createRenownTrustPolicy, resolveSwitchboardEndpoint } from "@renown/sdk/trust";
4
+ //#region src/utils/renown-trust.ts
5
+ const MISSING_RENOWN_ENDPOINT_MESSAGE = "connect.reactor.featureFlags.authEnforcement is on, but no Renown endpoint is configured to verify signers against: set connect.renown.url (or connect.renown.switchboardUrl). Without one every signed write would be refused.";
6
+ /** Under authEnforcement, admits keys a Renown credential binds to the wallet. */
7
+ async function createConnectTrustPolicy(featureFlags, endpoints, ownSigner) {
8
+ if (!featureFlags?.authEnforcement) return;
9
+ const renownUrl = endpoints.renownUrl || void 0;
10
+ const switchboardUrl = endpoints.switchboardUrl || void 0;
11
+ if (!renownUrl && !switchboardUrl) throw new Error(MISSING_RENOWN_ENDPOINT_MESSAGE);
12
+ const switchboard = await resolveSwitchboardEndpoint({
13
+ switchboardUrl,
14
+ baseUrl: renownUrl
15
+ });
16
+ return createRenownTrustPolicy({
17
+ ...switchboard ? { switchboard } : {},
18
+ ...renownUrl ? { renownUrl } : {},
19
+ ownSigner
20
+ });
21
+ }
22
+ /** The reactor host's signer, with the trust policy when authEnforcement is on. */
23
+ async function createConnectSignerConfig(signer, featureFlags, endpoints) {
24
+ const trustPolicy = await createConnectTrustPolicy(featureFlags, endpoints, signer);
25
+ return trustPolicy ? {
26
+ signer,
27
+ trustPolicy
28
+ } : { signer };
29
+ }
30
+ //#endregion
31
+ export { createConnectSignerConfig as t };
32
+
33
+ //# sourceMappingURL=renown-trust-DRgHpxlZ.js.map
34
+ //# debugId=2a03e561-8352-534f-9e49-4827833e1919
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renown-trust-DRgHpxlZ.js","sources":["../src/utils/renown-trust.ts"],"sourcesContent":["import type {\n ReactorFeatureFlags,\n SignatureTrustPolicy,\n SignerConfig,\n} from \"@powerhousedao/reactor\";\nimport type { ISigner } from \"@powerhousedao/shared/document-model\";\nimport {\n createRenownTrustPolicy,\n resolveSwitchboardEndpoint,\n type RenownOwnSigner,\n} from \"@renown/sdk/trust\";\n\n/** Where the trust policy reads the credentials binding keys to wallets. */\nexport type RenownTrustEndpoints = {\n /** `connect.renown.url`. */\n renownUrl?: string;\n /** `connect.renown.switchboardUrl`. */\n switchboardUrl?: string;\n};\n\nexport const MISSING_RENOWN_ENDPOINT_MESSAGE =\n \"connect.reactor.featureFlags.authEnforcement is on, but no Renown endpoint \" +\n \"is configured to verify signers against: set connect.renown.url (or \" +\n \"connect.renown.switchboardUrl). Without one every signed write would be \" +\n \"refused.\";\n\n/** Under authEnforcement, admits keys a Renown credential binds to the wallet. */\nexport async function createConnectTrustPolicy(\n featureFlags: Partial<ReactorFeatureFlags> | undefined,\n endpoints: RenownTrustEndpoints,\n ownSigner: RenownOwnSigner,\n): Promise<SignatureTrustPolicy | undefined> {\n if (!featureFlags?.authEnforcement) {\n return undefined;\n }\n const renownUrl = endpoints.renownUrl || undefined;\n const switchboardUrl = endpoints.switchboardUrl || undefined;\n if (!renownUrl && !switchboardUrl) {\n throw new Error(MISSING_RENOWN_ENDPOINT_MESSAGE);\n }\n const switchboard = await resolveSwitchboardEndpoint({\n switchboardUrl,\n baseUrl: renownUrl,\n });\n return createRenownTrustPolicy({\n ...(switchboard ? { switchboard } : {}),\n ...(renownUrl ? { renownUrl } : {}),\n ownSigner,\n });\n}\n\n/** The reactor host's signer, with the trust policy when authEnforcement is on. */\nexport async function createConnectSignerConfig(\n signer: ISigner,\n featureFlags: Partial<ReactorFeatureFlags> | undefined,\n endpoints: RenownTrustEndpoints,\n): Promise<SignerConfig> {\n const trustPolicy = await createConnectTrustPolicy(\n featureFlags,\n endpoints,\n signer,\n );\n return trustPolicy ? { signer, trustPolicy } : { signer };\n}\n"],"names":[],"mappings":";;;;AAoBA,MAAa,kCACX;;AAMF,eAAsB,yBACpB,cACA,WACA,WAC2C;CAC3C,IAAI,CAAC,cAAc,iBACjB;CAEF,MAAM,YAAY,UAAU,aAAa,KAAA;CACzC,MAAM,iBAAiB,UAAU,kBAAkB,KAAA;CACnD,IAAI,CAAC,aAAa,CAAC,gBACjB,MAAM,IAAI,MAAM,+BAA+B;CAEjD,MAAM,cAAc,MAAM,2BAA2B;EACnD;EACA,SAAS;CACX,CAAC;CACD,OAAO,wBAAwB;EAC7B,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;EACrC,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;EACjC;CACF,CAAC;AACH;;AAGA,eAAsB,0BACpB,QACA,cACA,WACuB;CACvB,MAAM,cAAc,MAAM,yBACxB,cACA,WACA,MACF;CACA,OAAO,cAAc;EAAE;EAAQ;CAAY,IAAI,EAAE,OAAO;AAC1D","debug_id":"2a03e561-8352-534f-9e49-4827833e1919"}
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="cdf9ab5d-3c92-52d3-8a1f-c30d0710458c")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7752a8d2-bc17-583b-b675-e6920533d68f")}catch(e){}}();
3
3
  import { ConfigLoader, JsonConfigAdapter } from "@powerhousedao/shared/connect";
4
4
  //#region src/runtime-config.ts
5
5
  const loader = new ConfigLoader(new JsonConfigAdapter({ path: `${import.meta.env.BASE_URL}powerhouse.config.json` }));
@@ -20,5 +20,5 @@ function applyConnectBranding(config) {
20
20
  //#endregion
21
21
  export { getRuntimeConfig as n, loadRuntimeConfig as r, applyConnectBranding as t };
22
22
 
23
- //# sourceMappingURL=runtime-config-DL3QjcfM.js.map
24
- //# debugId=cdf9ab5d-3c92-52d3-8a1f-c30d0710458c
23
+ //# sourceMappingURL=runtime-config-DtJIUgYw.js.map
24
+ //# debugId=7752a8d2-bc17-583b-b675-e6920533d68f
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-config-DL3QjcfM.js","sources":["../src/runtime-config.ts"],"sourcesContent":["import {\n ConfigLoader,\n JsonConfigAdapter,\n type RuntimePowerhouseConfig,\n} from \"@powerhousedao/shared/connect\";\n\nconst loader = new ConfigLoader(\n new JsonConfigAdapter({\n path: `${import.meta.env.BASE_URL}powerhouse.config.json`,\n }),\n);\n\nexport async function loadRuntimeConfig(): Promise<RuntimePowerhouseConfig> {\n return (await loader.read()) as RuntimePowerhouseConfig;\n}\n\n/**\n * Returns the cached config synchronously.\n * Must be called after `loadRuntimeConfig()` has resolved.\n */\nexport function getRuntimeConfig(): RuntimePowerhouseConfig {\n return loader.getCached() as RuntimePowerhouseConfig;\n}\n\nexport function applyConnectBranding(config: RuntimePowerhouseConfig): void {\n const appName = config.connect.branding?.appName;\n if (appName) document.title = appName;\n}\n"],"names":[],"mappings":";;;;AAMA,MAAM,SAAS,IAAI,aACjB,IAAI,kBAAkB,EACpB,MAAM,GAAG,OAAO,KAAK,IAAI,SAAS,yBACnC,CAAC,CACH;AAED,eAAsB,oBAAsD;AAC1E,QAAQ,MAAM,OAAO,MAAM;;;;;;AAO7B,SAAgB,mBAA4C;AAC1D,QAAO,OAAO,WAAW;;AAG3B,SAAgB,qBAAqB,QAAuC;CAC1E,MAAM,UAAU,OAAO,QAAQ,UAAU;AACzC,KAAI,QAAS,UAAS,QAAQ","debug_id":"cdf9ab5d-3c92-52d3-8a1f-c30d0710458c"}
1
+ {"version":3,"file":"runtime-config-DtJIUgYw.js","sources":["../src/runtime-config.ts"],"sourcesContent":["import {\n ConfigLoader,\n JsonConfigAdapter,\n type RuntimePowerhouseConfig,\n} from \"@powerhousedao/shared/connect\";\n\nconst loader = new ConfigLoader(\n new JsonConfigAdapter({\n path: `${import.meta.env.BASE_URL}powerhouse.config.json`,\n }),\n);\n\nexport async function loadRuntimeConfig(): Promise<RuntimePowerhouseConfig> {\n return (await loader.read()) as RuntimePowerhouseConfig;\n}\n\n/**\n * Returns the cached config synchronously.\n * Must be called after `loadRuntimeConfig()` has resolved.\n */\nexport function getRuntimeConfig(): RuntimePowerhouseConfig {\n return loader.getCached() as RuntimePowerhouseConfig;\n}\n\nexport function applyConnectBranding(config: RuntimePowerhouseConfig): void {\n const appName = config.connect.branding?.appName;\n if (appName) document.title = appName;\n}\n"],"names":[],"mappings":";;;;AAMA,MAAM,SAAS,IAAI,aACjB,IAAI,kBAAkB,EACpB,MAAM,GAAG,YAAY,IAAI,SAAS,wBACpC,CAAC,CACH;AAEA,eAAsB,oBAAsD;CAC1E,OAAQ,MAAM,OAAO,KAAK;AAC5B;;;;;AAMA,SAAgB,mBAA4C;CAC1D,OAAO,OAAO,UAAU;AAC1B;AAEA,SAAgB,qBAAqB,QAAuC;CAC1E,MAAM,UAAU,OAAO,QAAQ,UAAU;CACzC,IAAI,SAAS,SAAS,QAAQ;AAChC","debug_id":"7752a8d2-bc17-583b-b675-e6920533d68f"}
@@ -1,6 +1,6 @@
1
1
  //#region src/services/sentry.ts
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6563a098-6466-5831-a4ee-4a1569073e78")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="bc3320b1-f171-5f27-89ee-e9ed3b901fec")}catch(e){}}();
4
4
  let sentry;
5
5
  function setSentryModule(mod) {
6
6
  sentry = mod;
@@ -11,5 +11,5 @@ function setUser(...args) {
11
11
  //#endregion
12
12
  export { setUser as n, setSentryModule as t };
13
13
 
14
- //# sourceMappingURL=sentry-QXKgQmr2.js.map
15
- //# debugId=6563a098-6466-5831-a4ee-4a1569073e78
14
+ //# sourceMappingURL=sentry-jfDyrxdX.js.map
15
+ //# debugId=bc3320b1-f171-5f27-89ee-e9ed3b901fec
@@ -1 +1 @@
1
- {"version":3,"file":"sentry-QXKgQmr2.js","sources":["../src/services/sentry.ts"],"sourcesContent":["// Lazy Sentry accessors: the SDK (and rrweb replay) stays off the boot path\n// until useInitSentry dynamically loads it. No-ops while Sentry is disabled.\nimport type * as SentryModule from \"@sentry/react\";\n\nlet sentry: typeof SentryModule | undefined;\n\nexport function setSentryModule(mod: typeof SentryModule | undefined): void {\n sentry = mod;\n}\n\nexport function captureException(\n ...args: Parameters<typeof SentryModule.captureException>\n): void {\n sentry?.captureException(...args);\n}\n\nexport function setUser(\n ...args: Parameters<typeof SentryModule.setUser>\n): void {\n sentry?.setUser(...args);\n}\n"],"names":[],"mappings":";;;AAIA,IAAI;AAEJ,SAAgB,gBAAgB,KAA4C;AAC1E,UAAS;;AASX,SAAgB,QACd,GAAG,MACG;AACN,SAAQ,QAAQ,GAAG,KAAK","debug_id":"6563a098-6466-5831-a4ee-4a1569073e78"}
1
+ {"version":3,"file":"sentry-jfDyrxdX.js","sources":["../src/services/sentry.ts"],"sourcesContent":["// Lazy Sentry accessors: the SDK (and rrweb replay) stays off the boot path\n// until useInitSentry dynamically loads it. No-ops while Sentry is disabled.\nimport type * as SentryModule from \"@sentry/react\";\n\nlet sentry: typeof SentryModule | undefined;\n\nexport function setSentryModule(mod: typeof SentryModule | undefined): void {\n sentry = mod;\n}\n\nexport function captureException(\n ...args: Parameters<typeof SentryModule.captureException>\n): void {\n sentry?.captureException(...args);\n}\n\nexport function setUser(\n ...args: Parameters<typeof SentryModule.setUser>\n): void {\n sentry?.setUser(...args);\n}\n"],"names":[],"mappings":";;;AAIA,IAAI;AAEJ,SAAgB,gBAAgB,KAA4C;CAC1E,SAAS;AACX;AAQA,SAAgB,QACd,GAAG,MACG;CACN,QAAQ,QAAQ,GAAG,IAAI;AACzB","debug_id":"bc3320b1-f171-5f27-89ee-e9ed3b901fec"}
@@ -1,21 +1,20 @@
1
1
  import { DocumentModelLib } from "@powerhousedao/shared/document-model";
2
-
3
2
  //#region start-connect.d.ts
4
- type ModuleNamespace = Record<string, any> & {
3
+ export type ModuleNamespace = Record<string, any> & {
5
4
  [Symbol.toStringTag]: "Module";
6
5
  };
7
6
  /** `import.meta` extended with the minimal subset of Vite's HMR API used by the
8
7
  * codegen-generated `main.tsx`. Exported so consumer projects can cast
9
8
  * `import.meta` to it without pulling `vite/client` into their tsconfig `types`. */
10
- type ImportHmr = ImportMeta & {
9
+ export type ImportHmr = ImportMeta & {
11
10
  hot?: {
12
11
  accept(deps: readonly string[], cb: (mods: Array<ModuleNamespace | undefined>) => void): void;
13
12
  };
14
13
  };
15
14
  declare function updateLocalPackage(pkg: DocumentModelLib<any> | ModuleNamespace): void;
16
- declare function startConnect(localPackage: DocumentModelLib<any>): {
15
+ export declare function startConnect(localPackage: DocumentModelLib<any>): {
17
16
  updateLocalPackage: typeof updateLocalPackage;
18
17
  };
19
18
  //#endregion
20
- export { ImportHmr, ModuleNamespace, startConnect };
19
+ export {};
21
20
  //# sourceMappingURL=start-connect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"start-connect.d.ts","names":[],"sources":["../start-connect.tsx"],"mappings":";;;KA+BY,eAAA,GAAkB,MAAA;EAAA,CAC3B,MAAA,CAAO,WAAA;AAAA;;;;KAME,SAAA,GAAY,UAAA;EACtB,GAAA;IACE,MAAA,CACE,IAAA,qBACA,EAAA,GAAK,IAAA,EAAM,KAAA,CAAM,eAAA;EAAA;AAAA;AAAA,iBAKd,kBAAA,CAAmB,GAAA,EAAK,gBAAA,QAAwB,eAAA;AAAA,iBAIzC,YAAA,CAAa,YAAA,EAAc,gBAAA;6BAAA,kBAAA;AAAA"}
1
+ {"version":3,"file":"start-connect.d.ts","names":[],"sources":["../start-connect.tsx"],"mappings":";;YAkCY,kBAAkB;GAC3B,OAAO;;;;;YAME,YAAY;EACtB;IACE,OACE,yBACA,KAAK,MAAM,MAAM;;;iBAKd,mBAAmB,KAAK,wBAAwB;wBAIzC,aAAa,cAAc;6BAAA"}
@@ -1,21 +1,19 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2f8a11cf-bc6b-5fbf-9031-7723d0609b7b")}catch(e){}}();
3
- import { r as loadRuntimeConfig } from "./runtime-config-DL3QjcfM.js";
4
- import { createRoot } from "react-dom/client";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fda83e80-3003-561a-9081-524c01d1842d")}catch(e){}}();
3
+ import { t as bootConnect } from "./boot-DPNEOI2A.js";
5
4
  import { jsx } from "react/jsx-runtime";
6
5
  //#region start-connect.tsx
7
- await loadRuntimeConfig();
8
- const { AppLoader } = await import("./components-MEmS6hgr.js");
6
+ const root = await bootConnect();
7
+ const components = root ? await import("./components-BH57lxCU.js") : null;
9
8
  function updateLocalPackage(pkg) {
10
9
  window.ph?.vetraPackageManager?.updateLocalPackage(pkg);
11
10
  }
12
11
  function startConnect(localPackage) {
13
- if (!window.ph) window.ph = {};
14
- createRoot(document.getElementById("root")).render(/* @__PURE__ */ jsx(AppLoader, { localPackage }));
12
+ if (root && components) root.render(/* @__PURE__ */ jsx(components.AppLoader, { localPackage }));
15
13
  return { updateLocalPackage };
16
14
  }
17
15
  //#endregion
18
16
  export { startConnect };
19
17
 
20
18
  //# sourceMappingURL=start-connect.js.map
21
- //# debugId=2f8a11cf-bc6b-5fbf-9031-7723d0609b7b
19
+ //# debugId=fda83e80-3003-561a-9081-524c01d1842d
@@ -1 +1 @@
1
- {"version":3,"file":"start-connect.js","sources":["../start-connect.tsx"],"sourcesContent":["import type { DocumentModelLib } from \"@powerhousedao/shared/document-model\";\nimport { createRoot } from \"react-dom/client\";\nimport { loadRuntimeConfig } from \"./src/runtime-config.js\";\n\n// Bootstrap the runtime config BEFORE the React tree imports. Any module that\n// imports start-connect.tsx — including the codegen-generated main.tsx —\n// suspends on this top-level await, so by the time the dynamic import of\n// AppLoader resolves, the ConfigLoader cache is warm and connect.config.ts\n// can read getRuntimeConfig() synchronously at module evaluation.\nawait loadRuntimeConfig();\n\nconst { AppLoader } = await import(\"./src/components/index.js\");\n\n/* Starts your local dev server for Connect.\n *\n * Call this function with the export of your project's index.ts file in your main.tsx file like this:\n *\n * // main.tsx\n * import * as localPackage from \"./index.js\";\n * const { updateLocalPackage } = startConnect(localPackage);\n *\n * if (import.meta.hot) {\n * import.meta.hot.accept([\"./index.js\"], ([newModule]) => {\n * if (newModule) {\n * updateLocalPackage(newModule);\n * }\n * });\n * }\n */\n\n// Type for Vite HMR modules\nexport type ModuleNamespace = Record<string, any> & {\n [Symbol.toStringTag]: \"Module\";\n};\n\n/** `import.meta` extended with the minimal subset of Vite's HMR API used by the\n * codegen-generated `main.tsx`. Exported so consumer projects can cast\n * `import.meta` to it without pulling `vite/client` into their tsconfig `types`. */\nexport type ImportHmr = ImportMeta & {\n hot?: {\n accept(\n deps: readonly string[],\n cb: (mods: Array<ModuleNamespace | undefined>) => void,\n ): void;\n };\n};\n\nfunction updateLocalPackage(pkg: DocumentModelLib<any> | ModuleNamespace) {\n window.ph?.vetraPackageManager?.updateLocalPackage(pkg as DocumentModelLib);\n}\n\nexport function startConnect(localPackage: DocumentModelLib<any>) {\n if (!window.ph) {\n window.ph = {};\n }\n\n createRoot(document.getElementById(\"root\")!).render(\n <AppLoader localPackage={localPackage as DocumentModelLib} />,\n );\n\n return {\n updateLocalPackage,\n };\n}\n"],"names":[],"mappings":";;;;;;AASA,MAAM,mBAAmB;AAEzB,MAAM,EAAE,cAAc,MAAM,OAAO;AAoCnC,SAAS,mBAAmB,KAA8C;AACxE,QAAO,IAAI,qBAAqB,mBAAmB,IAAwB;;AAG7E,SAAgB,aAAa,cAAqC;AAChE,KAAI,CAAC,OAAO,GACV,QAAO,KAAK,EAAE;AAGhB,YAAW,SAAS,eAAe,OAAO,CAAE,CAAC,OAC3C,oBAAC,WAAD,EAAyB,cAAoC,CAAA,CAC9D;AAED,QAAO,EACL,oBACD","debug_id":"2f8a11cf-bc6b-5fbf-9031-7723d0609b7b"}
1
+ {"version":3,"file":"start-connect.js","sources":["../start-connect.tsx"],"sourcesContent":["import type { DocumentModelLib } from \"@powerhousedao/shared/document-model\";\nimport { bootConnect } from \"./src/boot.js\";\n\n// Paint the config-independent skeleton, then bootstrap the runtime config,\n// BEFORE the React tree imports. Any module that imports start-connect.tsx —\n// including the codegen-generated main.tsx — suspends on this top-level await,\n// so by the time the dynamic import of AppLoader resolves, the ConfigLoader\n// cache is warm and connect.config.ts can read getRuntimeConfig()\n// synchronously at module evaluation.\nconst root = await bootConnect();\n\n// `null` means startup failed and bootConnect has painted the error state; the\n// app graph must not be imported, since its modules read the config at\n// module-evaluation and would throw.\nconst components = root ? await import(\"./src/components/index.js\") : null;\n\n/* Starts your local dev server for Connect.\n *\n * Call this function with the export of your project's index.ts file in your main.tsx file like this:\n *\n * // main.tsx\n * import * as localPackage from \"./index.js\";\n * const { updateLocalPackage } = startConnect(localPackage);\n *\n * if (import.meta.hot) {\n * import.meta.hot.accept([\"./index.js\"], ([newModule]) => {\n * if (newModule) {\n * updateLocalPackage(newModule);\n * }\n * });\n * }\n */\n\n// Type for Vite HMR modules\nexport type ModuleNamespace = Record<string, any> & {\n [Symbol.toStringTag]: \"Module\";\n};\n\n/** `import.meta` extended with the minimal subset of Vite's HMR API used by the\n * codegen-generated `main.tsx`. Exported so consumer projects can cast\n * `import.meta` to it without pulling `vite/client` into their tsconfig `types`. */\nexport type ImportHmr = ImportMeta & {\n hot?: {\n accept(\n deps: readonly string[],\n cb: (mods: Array<ModuleNamespace | undefined>) => void,\n ): void;\n };\n};\n\nfunction updateLocalPackage(pkg: DocumentModelLib<any> | ModuleNamespace) {\n window.ph?.vetraPackageManager?.updateLocalPackage(pkg as DocumentModelLib);\n}\n\nexport function startConnect(localPackage: DocumentModelLib<any>) {\n // Rendered into the same root the skeleton was painted into, so the swap is\n // a reconciliation rather than a second mount point.\n if (root && components) {\n root.render(\n <components.AppLoader localPackage={localPackage as DocumentModelLib} />,\n );\n }\n\n return {\n updateLocalPackage,\n };\n}\n"],"names":[],"mappings":";;;;;AASA,MAAM,OAAO,MAAM,YAAY;AAK/B,MAAM,aAAa,OAAO,MAAM,OAAO,8BAA+B;AAoCtE,SAAS,mBAAmB,KAA8C;CACxE,OAAO,IAAI,qBAAqB,mBAAmB,GAAuB;AAC5E;AAEA,SAAgB,aAAa,cAAqC;CAGhE,IAAI,QAAQ,YACV,KAAK,OACH,oBAAC,WAAW,WAAZ,EAAoC,aAAmC,CAAA,CACzE;CAGF,OAAO,EACL,mBACF;AACF","debug_id":"fda83e80-3003-561a-9081-524c01d1842d"}