@powerhousedao/connect 6.2.2-dev.2 → 6.2.2-dev.20

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 (88) hide show
  1. package/assets/document-icon-192x192.png +0 -0
  2. package/assets/document-icon-512x512.png +0 -0
  3. package/assets/pwa-192x192.png +0 -0
  4. package/assets/pwa-512x512-maskable.png +0 -0
  5. package/assets/pwa-512x512.png +0 -0
  6. package/dist/{AddDriveModal-MMHlkJBJ.js → AddDriveModal-Cy4_b0wO.js} +4 -4
  7. package/dist/{AddDriveModal-MMHlkJBJ.js.map → AddDriveModal-Cy4_b0wO.js.map} +1 -1
  8. package/dist/{ClearStorageModal-CFBQ3g2W.js → ClearStorageModal-DzbBamBg.js} +4 -4
  9. package/dist/{ClearStorageModal-CFBQ3g2W.js.map → ClearStorageModal-DzbBamBg.js.map} +1 -1
  10. package/dist/{CookiesPolicyModal-CkcUKPLb.js → CookiesPolicyModal-Dpx-2TgP.js} +3 -3
  11. package/dist/{CookiesPolicyModal-CkcUKPLb.js.map → CookiesPolicyModal-Dpx-2TgP.js.map} +1 -1
  12. package/dist/{CreateDocumentModal-CvsTh0HM.js → CreateDocumentModal-u-IaJUQ0.js} +3 -3
  13. package/dist/{CreateDocumentModal-CvsTh0HM.js.map → CreateDocumentModal-u-IaJUQ0.js.map} +1 -1
  14. package/dist/{DebugSettingsModal-Rbn2aHS5.js → DebugSettingsModal-B64Dd6MI.js} +6 -6
  15. package/dist/{DebugSettingsModal-Rbn2aHS5.js.map → DebugSettingsModal-B64Dd6MI.js.map} +1 -1
  16. package/dist/{DeleteDriveModal-DSTK8FYk.js → DeleteDriveModal-CJKhWtli.js} +4 -4
  17. package/dist/{DeleteDriveModal-DSTK8FYk.js.map → DeleteDriveModal-CJKhWtli.js.map} +1 -1
  18. package/dist/{DeleteItemModal-B2nJmjsP.js → DeleteItemModal-DiieJw_o.js} +4 -4
  19. package/dist/{DeleteItemModal-B2nJmjsP.js.map → DeleteItemModal-DiieJw_o.js.map} +1 -1
  20. package/dist/{DisclaimerModal-D5FO34u9.js → DisclaimerModal-DAvYIF9-.js} +3 -3
  21. package/dist/{DisclaimerModal-D5FO34u9.js.map → DisclaimerModal-DAvYIF9-.js.map} +1 -1
  22. package/dist/{DownloadDocumentWithErrorsModal-tEr3bbtN.js → DownloadDocumentWithErrorsModal-CE4fa1k5.js} +3 -3
  23. package/dist/{DownloadDocumentWithErrorsModal-tEr3bbtN.js.map → DownloadDocumentWithErrorsModal-CE4fa1k5.js.map} +1 -1
  24. package/dist/DriveAuthRequiredModal-DSM6uNlb.js +36 -0
  25. package/dist/DriveAuthRequiredModal-DSM6uNlb.js.map +1 -0
  26. package/dist/{DriveSettingsModal-kR3hQnh4.js → DriveSettingsModal-CqFeWu4r.js} +3 -3
  27. package/dist/{DriveSettingsModal-kR3hQnh4.js.map → DriveSettingsModal-CqFeWu4r.js.map} +1 -1
  28. package/dist/{InspectorModal-D2BipxVV.js → InspectorModal-B9EdY0kb.js} +6 -6
  29. package/dist/{InspectorModal-D2BipxVV.js.map → InspectorModal-B9EdY0kb.js.map} +1 -1
  30. package/dist/LoginModal-BGTKLJx0.js +75 -0
  31. package/dist/LoginModal-BGTKLJx0.js.map +1 -0
  32. package/dist/{MissingPackageModal-BQcCQbOn.js → MissingPackageModal-C3acJ9r0.js} +18 -6
  33. package/dist/MissingPackageModal-C3acJ9r0.js.map +1 -0
  34. package/dist/OpenFileDocumentsModal-V2KByPpZ.js +293 -0
  35. package/dist/OpenFileDocumentsModal-V2KByPpZ.js.map +1 -0
  36. package/dist/{SettingsModal-C3gueGaR.js → SettingsModal-Cqb-1c4T.js} +26 -13
  37. package/dist/SettingsModal-Cqb-1c4T.js.map +1 -0
  38. package/dist/{UpgradeDriveModal-BZGSE9_r.js → UpgradeDriveModal-rUHyJTc7.js} +3 -3
  39. package/dist/{UpgradeDriveModal-BZGSE9_r.js.map → UpgradeDriveModal-rUHyJTc7.js.map} +1 -1
  40. package/dist/{app-loader-CuI4Pvun.js → app-loader-C4GMxAYB.js} +288 -39
  41. package/dist/app-loader-C4GMxAYB.js.map +1 -0
  42. package/dist/app-loader-gXQFs-oQ.js +4 -0
  43. package/dist/{build-info-DRFIgMZ5.js → build-info-D48uD8Uk.js} +5 -5
  44. package/dist/{build-info-DRFIgMZ5.js.map → build-info-D48uD8Uk.js.map} +1 -1
  45. package/dist/components-BjuHdG8Q.js +5 -0
  46. package/dist/{connect.config-vgUeFoNp.js → connect.config-C-b_Yhd6.js} +9 -4
  47. package/dist/connect.config-C-b_Yhd6.js.map +1 -0
  48. package/dist/{connection-state-DO_2lAEJ.js → connection-state-KCa1yljA.js} +4 -4
  49. package/dist/{connection-state-DO_2lAEJ.js.map → connection-state-KCa1yljA.js.map} +1 -1
  50. package/dist/{load-D7Bd6r8L.js → load-C1TQWaRI.js} +10 -10
  51. package/dist/{load-D7Bd6r8L.js.map → load-C1TQWaRI.js.map} +1 -1
  52. package/dist/main.js +1 -1
  53. package/dist/{package-nOMk-HnW.js → package-BosGa7CE.js} +8 -4
  54. package/dist/package-BosGa7CE.js.map +1 -0
  55. package/dist/{pglite-seed-z3B1JA38.js → pglite-seed-DRXPe7p-.js} +4 -4
  56. package/dist/{pglite-seed-z3B1JA38.js.map → pglite-seed-DRXPe7p-.js.map} +1 -1
  57. package/dist/pwa-manifest-link-CG8UajMz.js +34 -0
  58. package/dist/pwa-manifest-link-CG8UajMz.js.map +1 -0
  59. package/dist/{reactor-DNtlhToA.js → reactor-DEFv5EuZ.js} +145 -14
  60. package/dist/reactor-DEFv5EuZ.js.map +1 -0
  61. package/dist/reactor.worker.js +9 -5
  62. package/dist/reactor.worker.js.map +1 -1
  63. package/dist/{registerServiceWorker-nJIc0yEY.js → registerServiceWorker-Bn1KWmk0.js} +6 -4
  64. package/dist/registerServiceWorker-Bn1KWmk0.js.map +1 -0
  65. package/dist/{reload-connect-toast-D1Iqw9E_.js → reload-connect-toast-BkgP9i6_.js} +19 -3
  66. package/dist/{reload-connect-toast-D1Iqw9E_.js.map → reload-connect-toast-BkgP9i6_.js.map} +1 -1
  67. package/dist/start-connect.js +1 -1
  68. package/dist/style.css +64 -3
  69. package/dist/{toast-4t-VimvD.js → toast-BLv8rjmy.js} +3 -3
  70. package/dist/{toast-4t-VimvD.js.map → toast-BLv8rjmy.js.map} +1 -1
  71. package/dist/use-renown-login-DBujbqs8.js +55 -0
  72. package/dist/use-renown-login-DBujbqs8.js.map +1 -0
  73. package/dist/useRegistryPackages-DMhCvTWq.js +314 -0
  74. package/dist/useRegistryPackages-DMhCvTWq.js.map +1 -0
  75. package/package.json +15 -11
  76. package/dist/DriveAuthRequiredModal-BA2vS3oF.js +0 -40
  77. package/dist/DriveAuthRequiredModal-BA2vS3oF.js.map +0 -1
  78. package/dist/MissingPackageModal-BQcCQbOn.js.map +0 -1
  79. package/dist/SettingsModal-C3gueGaR.js.map +0 -1
  80. package/dist/app-loader-CuI4Pvun.js.map +0 -1
  81. package/dist/app-loader-DGIZ2168.js +0 -4
  82. package/dist/components-L890idPs.js +0 -5
  83. package/dist/connect.config-vgUeFoNp.js.map +0 -1
  84. package/dist/package-nOMk-HnW.js.map +0 -1
  85. package/dist/reactor-DNtlhToA.js.map +0 -1
  86. package/dist/registerServiceWorker-nJIc0yEY.js.map +0 -1
  87. package/dist/useRegistryPackages-BaYtekjQ.js +0 -179
  88. package/dist/useRegistryPackages-BaYtekjQ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"load-D7Bd6r8L.js","sources":["../src/hooks/useCheckLatestVersion.ts","../src/hooks/utils.ts","../src/store/user.ts","../src/components/load.tsx"],"sourcesContent":["import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { isLatestVersion } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { logger } from \"document-model\";\nimport { createElement, useEffect } from \"react\";\nimport { ReloadConnectToast } from \"../components/reload-connect-toast.js\";\n\nexport const useCheckLatestVersion = () => {\n async function checkLatestVersion() {\n const result = await isLatestVersion();\n if (result === null) return;\n // ignore dev/staging versions\n if (result.isLatest || result.currentVersion.includes(\"-\")) {\n return true;\n }\n\n if (\n import.meta.env.MODE === \"development\" ||\n connectConfig.studioMode ||\n !connectConfig.warnOutdatedApp\n ) {\n logger.warn(\n \"Connect is outdated: \\nCurrent: @currentVersion\\nLatest: @latestVersion\",\n result.currentVersion,\n result.latestVersion,\n );\n } else {\n toast(createElement(ReloadConnectToast), {\n type: \"connect-warning\",\n toastId: \"outdated-app\",\n autoClose: false,\n });\n }\n }\n\n useEffect(() => {\n checkLatestVersion().catch(console.error);\n }, []);\n};\n","import { packageJson } from \"../utils/package-json.js\";\n\nexport const isMac = window.navigator.appVersion.includes(\"Mac\");\n\nconst urlBranchMap: Record<string, string> = {\n \"staging/makerdao\": \"deployments/staging/makerdao\",\n \"staging/arbitrum\": \"arb-ltip\",\n \"staging/powerhouse\": \"staging\",\n makerdao: \"deployments/makerdao\",\n arbitrum: \"deployments/arbitrum\",\n arbgrants: \"deployments/arbitrum\",\n localhost: \"develop\",\n};\n\nconst getGithubLinkFromUrl = () => {\n const githubLink = \"https://raw.githubusercontent.com/powerhouse-inc/connect\";\n const url = window.location.href;\n\n const env = Object.keys(urlBranchMap).find((env) => url.includes(env));\n const value = env ? urlBranchMap[env] : undefined;\n if (!value) {\n return undefined;\n } else {\n return `${githubLink}/${value}/package.json`;\n }\n};\n\nconst fetchLatestVersion = async () => {\n const link = getGithubLinkFromUrl();\n if (!link) {\n return undefined;\n }\n const result = await fetch(link);\n const data = (await result.json()) as { version: string };\n const { version } = data;\n return version;\n};\n\nexport const isLatestVersion = async () => {\n const currentVersion = packageJson.version;\n const deployed = await fetchLatestVersion();\n\n if (deployed) {\n return {\n isLatest: deployed === currentVersion,\n currentVersion,\n latestVersion: deployed,\n };\n }\n\n return null;\n};\n","import { useUser } from \"@powerhousedao/reactor-browser\";\nimport type { User as SentryUser } from \"@sentry/react\";\nimport { useEffect } from \"react\";\nimport { setUser as setSentryUser } from \"../services/sentry.js\";\n\nexport function useSetSentryUser() {\n const user = useUser();\n useEffect(() => {\n let sentryUser: SentryUser | null = null;\n if (user) {\n // saves the user info except the credential\n const { credential: _credential, ...rest } = user;\n sentryUser = { id: rest.did, username: rest.ens?.name, ...rest };\n }\n setSentryUser(sentryUser);\n }, [user]);\n}\n","import { useCheckLatestVersion } from \"@powerhousedao/connect/hooks\";\nimport \"@powerhousedao/connect/i18n\";\nimport { createReactor, useSetSentryUser } from \"@powerhousedao/connect/store\";\nimport {\n detectMigrationMajor,\n detectReactorPgMajor,\n seedPendingPgVersion,\n} from \"@powerhousedao/connect/utils\";\nimport { initTheme } from \"@powerhousedao/reactor-browser\";\nimport type { DocumentModelLib } from \"document-model\";\nimport { type ReactNode } from \"react\";\nimport { applyConnectBranding, loadRuntimeConfig } from \"../runtime-config.js\";\n\nexport async function loadComponent(localPackage?: DocumentModelLib) {\n await seedPendingPgVersion();\n await Promise.all([detectReactorPgMajor(), detectMigrationMajor()]);\n const runtimeConfig = await loadRuntimeConfig();\n applyConnectBranding(runtimeConfig);\n await createReactor(localPackage);\n return {\n default: ({ children }: { children?: ReactNode }) => {\n initTheme();\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useSetSentryUser();\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useCheckLatestVersion();\n return children;\n },\n };\n}\n"],"names":["packageJson"],"mappings":";;;;;;;;;;;;;;AAOA,MAAa,8BAA8B;CACzC,eAAe,qBAAqB;EAClC,MAAM,SAAS,MAAM,iBAAiB;AACtC,MAAI,WAAW,KAAM;AAErB,MAAI,OAAO,YAAY,OAAO,eAAe,SAAS,IAAI,CACxD,QAAO;AAGT,MACE,OAAO,KAAK,IAAI,SAAS,iBACzB,cAAc,cACd,CAAC,cAAc,gBAEf,QAAO,KACL,2EACA,OAAO,gBACP,OAAO,cACR;MAED,OAAM,cAAc,mBAAmB,EAAE;GACvC,MAAM;GACN,SAAS;GACT,WAAW;GACZ,CAAC;;AAIN,iBAAgB;AACd,sBAAoB,CAAC,MAAM,QAAQ,MAAM;IACxC,EAAE,CAAC;;ACnCa,OAAO,UAAU,WAAW,SAAS,MAAM;AAEhE,MAAM,eAAuC;CAC3C,oBAAoB;CACpB,oBAAoB;CACpB,sBAAsB;CACtB,UAAU;CACV,UAAU;CACV,WAAW;CACX,WAAW;CACZ;AAED,MAAM,6BAA6B;CACjC,MAAM,aAAa;CACnB,MAAM,MAAM,OAAO,SAAS;CAE5B,MAAM,MAAM,OAAO,KAAK,aAAa,CAAC,MAAM,QAAQ,IAAI,SAAS,IAAI,CAAC;CACtE,MAAM,QAAQ,MAAM,aAAa,OAAO,KAAA;AACxC,KAAI,CAAC,MACH;KAEA,QAAO,GAAG,WAAW,GAAG,MAAM;;AAIlC,MAAM,qBAAqB,YAAY;CACrC,MAAM,OAAO,sBAAsB;AACnC,KAAI,CAAC,KACH;CAIF,MAAM,EAAE,YADM,OADC,MAAM,MAAM,KAAK,EACL,MAAM;AAEjC,QAAO;;AAGT,MAAa,kBAAkB,YAAY;CACzC,MAAM,iBAAiBA,gBAAY;CACnC,MAAM,WAAW,MAAM,oBAAoB;AAE3C,KAAI,SACF,QAAO;EACL,UAAU,aAAa;EACvB;EACA,eAAe;EAChB;AAGH,QAAO;;;;AC7CT,SAAgB,mBAAmB;CACjC,MAAM,OAAO,SAAS;AACtB,iBAAgB;EACd,IAAI,aAAgC;AACpC,MAAI,MAAM;GAER,MAAM,EAAE,YAAY,aAAa,GAAG,SAAS;AAC7C,gBAAa;IAAE,IAAI,KAAK;IAAK,UAAU,KAAK,KAAK;IAAM,GAAG;IAAM;;AAElE,UAAc,WAAW;IACxB,CAAC,KAAK,CAAC;;;;ACFZ,eAAsB,cAAc,cAAiC;AACnE,OAAM,sBAAsB;AAC5B,OAAM,QAAQ,IAAI,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;AAEnE,sBADsB,MAAM,mBAAmB,CACZ;AACnC,OAAM,cAAc,aAAa;AACjC,QAAO,EACL,UAAU,EAAE,eAAyC;AACnD,aAAW;AAEX,oBAAkB;AAElB,yBAAuB;AACvB,SAAO;IAEV","debug_id":"824e6fc3-eb86-5a82-855c-882385812466"}
1
+ {"version":3,"file":"load-C1TQWaRI.js","sources":["../src/hooks/useCheckLatestVersion.ts","../src/hooks/utils.ts","../src/store/user.ts","../src/components/load.tsx"],"sourcesContent":["import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { isLatestVersion } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { logger } from \"document-model\";\nimport { createElement, useEffect } from \"react\";\nimport { ReloadConnectToast } from \"../components/reload-connect-toast.js\";\n\nexport const useCheckLatestVersion = () => {\n async function checkLatestVersion() {\n const result = await isLatestVersion();\n if (result === null) return;\n // ignore dev/staging versions\n if (result.isLatest || result.currentVersion.includes(\"-\")) {\n return true;\n }\n\n if (\n import.meta.env.MODE === \"development\" ||\n connectConfig.studioMode ||\n !connectConfig.warnOutdatedApp\n ) {\n logger.warn(\n \"Connect is outdated: \\nCurrent: @currentVersion\\nLatest: @latestVersion\",\n result.currentVersion,\n result.latestVersion,\n );\n } else {\n toast(createElement(ReloadConnectToast), {\n type: \"connect-warning\",\n toastId: \"outdated-app\",\n autoClose: false,\n });\n }\n }\n\n useEffect(() => {\n checkLatestVersion().catch(console.error);\n }, []);\n};\n","import { packageJson } from \"../utils/package-json.js\";\n\nexport const isMac = window.navigator.appVersion.includes(\"Mac\");\n\nconst urlBranchMap: Record<string, string> = {\n \"staging/makerdao\": \"deployments/staging/makerdao\",\n \"staging/arbitrum\": \"arb-ltip\",\n \"staging/powerhouse\": \"staging\",\n makerdao: \"deployments/makerdao\",\n arbitrum: \"deployments/arbitrum\",\n arbgrants: \"deployments/arbitrum\",\n localhost: \"develop\",\n};\n\nconst getGithubLinkFromUrl = () => {\n const githubLink = \"https://raw.githubusercontent.com/powerhouse-inc/connect\";\n const url = window.location.href;\n\n const env = Object.keys(urlBranchMap).find((env) => url.includes(env));\n const value = env ? urlBranchMap[env] : undefined;\n if (!value) {\n return undefined;\n } else {\n return `${githubLink}/${value}/package.json`;\n }\n};\n\nconst fetchLatestVersion = async () => {\n const link = getGithubLinkFromUrl();\n if (!link) {\n return undefined;\n }\n const result = await fetch(link);\n const data = (await result.json()) as { version: string };\n const { version } = data;\n return version;\n};\n\nexport const isLatestVersion = async () => {\n const currentVersion = packageJson.version;\n const deployed = await fetchLatestVersion();\n\n if (deployed) {\n return {\n isLatest: deployed === currentVersion,\n currentVersion,\n latestVersion: deployed,\n };\n }\n\n return null;\n};\n","import { useUser } from \"@powerhousedao/reactor-browser\";\nimport type { User as SentryUser } from \"@sentry/react\";\nimport { useEffect } from \"react\";\nimport { setUser as setSentryUser } from \"../services/sentry.js\";\n\nexport function useSetSentryUser() {\n const user = useUser();\n useEffect(() => {\n let sentryUser: SentryUser | null = null;\n if (user) {\n // saves the user info except the credential\n const { credential: _credential, ...rest } = user;\n sentryUser = { id: rest.did, username: rest.ens?.name, ...rest };\n }\n setSentryUser(sentryUser);\n }, [user]);\n}\n","import { useCheckLatestVersion } from \"@powerhousedao/connect/hooks\";\nimport \"@powerhousedao/connect/i18n\";\nimport { createReactor, useSetSentryUser } from \"@powerhousedao/connect/store\";\nimport {\n detectMigrationMajor,\n detectReactorPgMajor,\n seedPendingPgVersion,\n} from \"@powerhousedao/connect/utils\";\nimport { initTheme } from \"@powerhousedao/reactor-browser\";\nimport type { DocumentModelLib } from \"document-model\";\nimport { type ReactNode } from \"react\";\nimport { applyConnectBranding, loadRuntimeConfig } from \"../runtime-config.js\";\n\nexport async function loadComponent(localPackage?: DocumentModelLib) {\n await seedPendingPgVersion();\n await Promise.all([detectReactorPgMajor(), detectMigrationMajor()]);\n const runtimeConfig = await loadRuntimeConfig();\n applyConnectBranding(runtimeConfig);\n await createReactor(localPackage);\n return {\n default: ({ children }: { children?: ReactNode }) => {\n initTheme();\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useSetSentryUser();\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useCheckLatestVersion();\n return children;\n },\n };\n}\n"],"names":["packageJson"],"mappings":";;;;;;;;;;;;;;AAOA,MAAa,8BAA8B;CACzC,eAAe,qBAAqB;EAClC,MAAM,SAAS,MAAM,iBAAiB;AACtC,MAAI,WAAW,KAAM;AAErB,MAAI,OAAO,YAAY,OAAO,eAAe,SAAS,IAAI,CACxD,QAAO;AAGT,MACE,OAAO,KAAK,IAAI,SAAS,iBACzB,cAAc,cACd,CAAC,cAAc,gBAEf,QAAO,KACL,2EACA,OAAO,gBACP,OAAO,cACR;MAED,OAAM,cAAc,mBAAmB,EAAE;GACvC,MAAM;GACN,SAAS;GACT,WAAW;GACZ,CAAC;;AAIN,iBAAgB;AACd,sBAAoB,CAAC,MAAM,QAAQ,MAAM;IACxC,EAAE,CAAC;;ACnCa,OAAO,UAAU,WAAW,SAAS,MAAM;AAEhE,MAAM,eAAuC;CAC3C,oBAAoB;CACpB,oBAAoB;CACpB,sBAAsB;CACtB,UAAU;CACV,UAAU;CACV,WAAW;CACX,WAAW;CACZ;AAED,MAAM,6BAA6B;CACjC,MAAM,aAAa;CACnB,MAAM,MAAM,OAAO,SAAS;CAE5B,MAAM,MAAM,OAAO,KAAK,aAAa,CAAC,MAAM,QAAQ,IAAI,SAAS,IAAI,CAAC;CACtE,MAAM,QAAQ,MAAM,aAAa,OAAO,KAAA;AACxC,KAAI,CAAC,MACH;KAEA,QAAO,GAAG,WAAW,GAAG,MAAM;;AAIlC,MAAM,qBAAqB,YAAY;CACrC,MAAM,OAAO,sBAAsB;AACnC,KAAI,CAAC,KACH;CAIF,MAAM,EAAE,YADM,OADC,MAAM,MAAM,KAAK,EACL,MAAM;AAEjC,QAAO;;AAGT,MAAa,kBAAkB,YAAY;CACzC,MAAM,iBAAiBA,gBAAY;CACnC,MAAM,WAAW,MAAM,oBAAoB;AAE3C,KAAI,SACF,QAAO;EACL,UAAU,aAAa;EACvB;EACA,eAAe;EAChB;AAGH,QAAO;;;;AC7CT,SAAgB,mBAAmB;CACjC,MAAM,OAAO,SAAS;AACtB,iBAAgB;EACd,IAAI,aAAgC;AACpC,MAAI,MAAM;GAER,MAAM,EAAE,YAAY,aAAa,GAAG,SAAS;AAC7C,gBAAa;IAAE,IAAI,KAAK;IAAK,UAAU,KAAK,KAAK;IAAM,GAAG;IAAM;;AAElE,UAAc,WAAW;IACxB,CAAC,KAAK,CAAC;;;;ACFZ,eAAsB,cAAc,cAAiC;AACnE,OAAM,sBAAsB;AAC5B,OAAM,QAAQ,IAAI,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;AAEnE,sBADsB,MAAM,mBAAmB,CACZ;AACnC,OAAM,cAAc,aAAa;AACjC,QAAO,EACL,UAAU,EAAE,eAAyC;AACnD,aAAW;AAEX,oBAAkB;AAElB,yBAAuB;AACvB,SAAO;IAEV","debug_id":"138d3388-6b6c-5d86-b8ea-714aa0b76d1b"}
package/dist/main.js CHANGED
@@ -6,7 +6,7 @@ import { jsx } from "react/jsx-runtime";
6
6
  //#region main.tsx
7
7
  if (!window.ph) window.ph = {};
8
8
  await loadRuntimeConfig();
9
- const { AppLoader } = await import("./app-loader-DGIZ2168.js");
9
+ const { AppLoader } = await import("./app-loader-gXQFs-oQ.js");
10
10
  createRoot(document.getElementById("root")).render(/* @__PURE__ */ jsx(AppLoader, {}));
11
11
  //#endregion
12
12
 
@@ -1,10 +1,10 @@
1
1
  //#region package.json
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]="0d63c423-d179-5a7b-a1be-b3c10919a667")}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]="d22eb5b0-5d32-55de-96d5-7462b748eea8")}catch(e){}}();
4
4
  var package_default = {
5
5
  name: "@powerhousedao/connect",
6
6
  productName: "Powerhouse-Connect",
7
- version: "6.2.2-dev.2",
7
+ version: "6.2.2-dev.20",
8
8
  description: "Powerhouse Connect",
9
9
  main: "dist/index.html",
10
10
  type: "module",
@@ -77,8 +77,11 @@ var package_default = {
77
77
  "@powerhousedao/reactor-browser": "workspace:*",
78
78
  "@powerhousedao/shared": "workspace:*",
79
79
  "@powerhousedao/vetra": "workspace:*",
80
+ "@privy-io/react-auth": "^3.25.0",
81
+ "@rainbow-me/rainbowkit": "^2.2.11",
80
82
  "@renown/sdk": "workspace:*",
81
83
  "@sentry/react": "^10.17.0",
84
+ "@tanstack/react-query": "^5.90.2",
82
85
  "document-model": "workspace:*",
83
86
  "i18next": "^25.5.3",
84
87
  "kysely": "catalog:",
@@ -92,6 +95,7 @@ var package_default = {
92
95
  "react-router-dom": "^6.11.2",
93
96
  "tailwind-merge": "catalog:",
94
97
  "usehooks-ts": "^3.1.1",
98
+ "wagmi": "2.19.5",
95
99
  "zod": "catalog:"
96
100
  },
97
101
  devDependencies: {
@@ -123,5 +127,5 @@ var package_default = {
123
127
  //#endregion
124
128
  export { package_default as t };
125
129
 
126
- //# sourceMappingURL=package-nOMk-HnW.js.map
127
- //# debugId=0d63c423-d179-5a7b-a1be-b3c10919a667
130
+ //# sourceMappingURL=package-BosGa7CE.js.map
131
+ //# debugId=d22eb5b0-5d32-55de-96d5-7462b748eea8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-BosGa7CE.js","sources":["../package.json"],"sourcesContent":[""],"names":[],"mappings":"","debug_id":"d22eb5b0-5d32-55de-96d5-7462b748eea8"}
@@ -1,6 +1,6 @@
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]="5bf4726b-5c59-5a84-9d1b-d492f6e8f929")}catch(e){}}();
3
- import { l as invalidateReactorPgMajorCache, m as REACTOR_PGLITE_NAME } from "./connection-state-DO_2lAEJ.js";
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]="8f8cb813-98e0-5cee-93aa-17aa54301236")}catch(e){}}();
3
+ import { l as invalidateReactorPgMajorCache, m as REACTOR_PGLITE_NAME } from "./connection-state-KCa1yljA.js";
4
4
  //#region src/utils/pglite-seed.ts
5
5
  const PENDING_PG_SEED_KEY = "ph:pending-pg-seed";
6
6
  /**
@@ -45,5 +45,5 @@ async function seedPendingPgVersion() {
45
45
  //#endregion
46
46
  export { seedPendingPgVersion as n, PENDING_PG_SEED_KEY as t };
47
47
 
48
- //# sourceMappingURL=pglite-seed-z3B1JA38.js.map
49
- //# debugId=5bf4726b-5c59-5a84-9d1b-d492f6e8f929
48
+ //# sourceMappingURL=pglite-seed-DRXPe7p-.js.map
49
+ //# debugId=8f8cb813-98e0-5cee-93aa-17aa54301236
@@ -1 +1 @@
1
- {"version":3,"file":"pglite-seed-z3B1JA38.js","sources":["../src/utils/pglite-seed.ts"],"sourcesContent":["import { invalidateReactorPgMajorCache } from \"./pglite-runtime.js\";\nimport { REACTOR_PGLITE_NAME } from \"./storage-namespace.js\";\n\nexport const PENDING_PG_SEED_KEY = \"ph:pending-pg-seed\";\n\n/**\n * If the Debug Inspector requested a forced PG version reset, this runs\n * before the reactor is created on the subsequent page load: opens a fresh\n * PGlite of the requested major against the reactor data dir, lets `initdb`\n * populate `PG_VERSION`, then closes. The next step of app boot then\n * detects this fresh data dir and picks the matching runtime.\n */\nexport async function seedPendingPgVersion(): Promise<void> {\n const raw = localStorage.getItem(PENDING_PG_SEED_KEY);\n if (!raw) return;\n\n const major = parseInt(raw, 10);\n console.info(`[pglite-seed] Seeding fresh PG${major} data dir...`);\n\n try {\n if (major === 16) {\n const { PGlite } = await import(\"pglite-legacy-02\");\n const pg = new PGlite(`idb://${REACTOR_PGLITE_NAME}`);\n try {\n await pg.waitReady;\n } finally {\n await pg.close();\n }\n } else if (major === 17) {\n const { PGlite } = await import(\"@electric-sql/pglite\");\n const pg = new PGlite(`idb://${REACTOR_PGLITE_NAME}`);\n try {\n await pg.waitReady;\n } finally {\n await pg.close();\n }\n } else {\n console.warn(`[pglite-seed] Unsupported version ${raw}, skipping`);\n return;\n }\n console.info(`[pglite-seed] Seeded PG${major} data dir.`);\n } finally {\n localStorage.removeItem(PENDING_PG_SEED_KEY);\n invalidateReactorPgMajorCache();\n }\n}\n"],"names":[],"mappings":";;;;AAGA,MAAa,sBAAsB;;;;;;;;AASnC,eAAsB,uBAAsC;CAC1D,MAAM,MAAM,aAAa,QAAQ,oBAAoB;AACrD,KAAI,CAAC,IAAK;CAEV,MAAM,QAAQ,SAAS,KAAK,GAAG;AAC/B,SAAQ,KAAK,iCAAiC,MAAM,cAAc;AAElE,KAAI;AACF,MAAI,UAAU,IAAI;GAChB,MAAM,EAAE,WAAW,MAAM,OAAO;GAChC,MAAM,KAAK,IAAI,OAAO,SAAS,sBAAsB;AACrD,OAAI;AACF,UAAM,GAAG;aACD;AACR,UAAM,GAAG,OAAO;;aAET,UAAU,IAAI;GACvB,MAAM,EAAE,WAAW,MAAM,OAAO;GAChC,MAAM,KAAK,IAAI,OAAO,SAAS,sBAAsB;AACrD,OAAI;AACF,UAAM,GAAG;aACD;AACR,UAAM,GAAG,OAAO;;SAEb;AACL,WAAQ,KAAK,qCAAqC,IAAI,YAAY;AAClE;;AAEF,UAAQ,KAAK,0BAA0B,MAAM,YAAY;WACjD;AACR,eAAa,WAAW,oBAAoB;AAC5C,iCAA+B","debug_id":"5bf4726b-5c59-5a84-9d1b-d492f6e8f929"}
1
+ {"version":3,"file":"pglite-seed-DRXPe7p-.js","sources":["../src/utils/pglite-seed.ts"],"sourcesContent":["import { invalidateReactorPgMajorCache } from \"./pglite-runtime.js\";\nimport { REACTOR_PGLITE_NAME } from \"./storage-namespace.js\";\n\nexport const PENDING_PG_SEED_KEY = \"ph:pending-pg-seed\";\n\n/**\n * If the Debug Inspector requested a forced PG version reset, this runs\n * before the reactor is created on the subsequent page load: opens a fresh\n * PGlite of the requested major against the reactor data dir, lets `initdb`\n * populate `PG_VERSION`, then closes. The next step of app boot then\n * detects this fresh data dir and picks the matching runtime.\n */\nexport async function seedPendingPgVersion(): Promise<void> {\n const raw = localStorage.getItem(PENDING_PG_SEED_KEY);\n if (!raw) return;\n\n const major = parseInt(raw, 10);\n console.info(`[pglite-seed] Seeding fresh PG${major} data dir...`);\n\n try {\n if (major === 16) {\n const { PGlite } = await import(\"pglite-legacy-02\");\n const pg = new PGlite(`idb://${REACTOR_PGLITE_NAME}`);\n try {\n await pg.waitReady;\n } finally {\n await pg.close();\n }\n } else if (major === 17) {\n const { PGlite } = await import(\"@electric-sql/pglite\");\n const pg = new PGlite(`idb://${REACTOR_PGLITE_NAME}`);\n try {\n await pg.waitReady;\n } finally {\n await pg.close();\n }\n } else {\n console.warn(`[pglite-seed] Unsupported version ${raw}, skipping`);\n return;\n }\n console.info(`[pglite-seed] Seeded PG${major} data dir.`);\n } finally {\n localStorage.removeItem(PENDING_PG_SEED_KEY);\n invalidateReactorPgMajorCache();\n }\n}\n"],"names":[],"mappings":";;;;AAGA,MAAa,sBAAsB;;;;;;;;AASnC,eAAsB,uBAAsC;CAC1D,MAAM,MAAM,aAAa,QAAQ,oBAAoB;AACrD,KAAI,CAAC,IAAK;CAEV,MAAM,QAAQ,SAAS,KAAK,GAAG;AAC/B,SAAQ,KAAK,iCAAiC,MAAM,cAAc;AAElE,KAAI;AACF,MAAI,UAAU,IAAI;GAChB,MAAM,EAAE,WAAW,MAAM,OAAO;GAChC,MAAM,KAAK,IAAI,OAAO,SAAS,sBAAsB;AACrD,OAAI;AACF,UAAM,GAAG;aACD;AACR,UAAM,GAAG,OAAO;;aAET,UAAU,IAAI;GACvB,MAAM,EAAE,WAAW,MAAM,OAAO;GAChC,MAAM,KAAK,IAAI,OAAO,SAAS,sBAAsB;AACrD,OAAI;AACF,UAAM,GAAG;aACD;AACR,UAAM,GAAG,OAAO;;SAEb;AACL,WAAQ,KAAK,qCAAqC,IAAI,YAAY;AAClE;;AAEF,UAAQ,KAAK,0BAA0B,MAAM,YAAY;WACjD;AACR,eAAa,WAAW,oBAAoB;AAC5C,iCAA+B","debug_id":"8f8cb813-98e0-5cee-93aa-17aa54301236"}
@@ -0,0 +1,34 @@
1
+ //#region src/utils/pwa-manifest-link.ts
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]="6816b9f8-4e0c-55d2-a369-54d2e597ace3")}catch(e){}}();
4
+ let manifestRevision = 0;
5
+ /**
6
+ * Force the browser to re-consume `manifest.webmanifest` by replacing the
7
+ * `<link rel="manifest">` element with a fresh, cache-busting one. No-op when
8
+ * there is no DOM or no manifest link (dev mode / offline disabled — the build
9
+ * only injects the link when the service worker is enabled).
10
+ */
11
+ function refreshPwaManifestLink() {
12
+ if (typeof document === "undefined") return;
13
+ const existing = document.querySelector("link[rel=\"manifest\"]");
14
+ if (!existing) return;
15
+ if (!existing.getAttribute("href")) return;
16
+ let href;
17
+ try {
18
+ const url = new URL(existing.href, document.baseURI);
19
+ url.searchParams.set("ph-manifest-rev", String(++manifestRevision));
20
+ href = url.toString();
21
+ } catch {
22
+ return;
23
+ }
24
+ const link = document.createElement("link");
25
+ link.rel = "manifest";
26
+ if (existing.crossOrigin) link.crossOrigin = existing.crossOrigin;
27
+ link.href = href;
28
+ existing.replaceWith(link);
29
+ }
30
+ //#endregion
31
+ export { refreshPwaManifestLink as t };
32
+
33
+ //# sourceMappingURL=pwa-manifest-link-CG8UajMz.js.map
34
+ //# debugId=6816b9f8-4e0c-55d2-a369-54d2e597ace3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pwa-manifest-link-CG8UajMz.js","sources":["../src/utils/pwa-manifest-link.ts"],"sourcesContent":["// After a runtime package install/removal updates the PWA fragment in\n// IndexedDB (BrowserPackageManager.#syncPwaFragments), the service worker\n// already serves an up-to-date `manifest.webmanifest` — it reads IndexedDB\n// fresh on every request. But the browser only parsed `<link rel=\"manifest\">`\n// ONCE, at page load, so its in-memory manifest (the install prompt, and the\n// manifest's declared fields as the browser reads them — visible in\n// DevTools → Application → Manifest) stays frozen until something makes it\n// re-consume. That \"something\" used to be a manual reload / service-worker\n// update.\n//\n// Re-attaching the manifest `<link>` with a fresh, cache-busting href triggers\n// Chromium's manifest-change invalidation (it recomputes the manifest URL and\n// notifies its consumers), so the install pipeline / DevTools re-fetch the\n// (dynamically served) manifest on demand — no full page reload. The SW route\n// matches on the pathname, so the extra query param doesn't change which\n// response is served, and `start_url`/`scope`/`id` are unaffected (they resolve\n// to the same directory, dropping the query).\n//\n// Caveat (unavoidable, not app-fixable): the OS-level registrations the manifest\n// drives — file associations and launch_handler — are snapshotted by the OS at\n// install time and only re-read on the browser's own throttled manifest-update\n// schedule, so those still lag. The reliable, immediate signal is the served\n// manifest itself (DevTools → Application → Manifest).\n\n// Monotonic per-session revision so each re-attach uses a distinct href (a\n// counter, not a timestamp — deterministic and dependency-free).\nlet manifestRevision = 0;\n\n/**\n * Force the browser to re-consume `manifest.webmanifest` by replacing the\n * `<link rel=\"manifest\">` element with a fresh, cache-busting one. No-op when\n * there is no DOM or no manifest link (dev mode / offline disabled — the build\n * only injects the link when the service worker is enabled).\n */\nexport function refreshPwaManifestLink(): void {\n if (typeof document === \"undefined\") return;\n const existing = document.querySelector<HTMLLinkElement>(\n 'link[rel=\"manifest\"]',\n );\n if (!existing) return;\n // An absent/empty href would resolve to the document URL (new URL(\"\", base)\n // does not throw), producing a manifest link pointing at the HTML page. Bail.\n if (!existing.getAttribute(\"href\")) return;\n\n let href: string;\n try {\n const url = new URL(existing.href, document.baseURI);\n url.searchParams.set(\"ph-manifest-rev\", String(++manifestRevision));\n href = url.toString();\n } catch {\n return;\n }\n\n const link = document.createElement(\"link\");\n link.rel = \"manifest\";\n // Preserve crossorigin (vite-plugin-pwa sets it when useCredentials is on).\n if (existing.crossOrigin) link.crossOrigin = existing.crossOrigin;\n link.href = href;\n existing.replaceWith(link);\n}\n"],"names":[],"mappings":";;;AA0BA,IAAI,mBAAmB;;;;;;;AAQvB,SAAgB,yBAA+B;AAC7C,KAAI,OAAO,aAAa,YAAa;CACrC,MAAM,WAAW,SAAS,cACxB,yBACD;AACD,KAAI,CAAC,SAAU;AAGf,KAAI,CAAC,SAAS,aAAa,OAAO,CAAE;CAEpC,IAAI;AACJ,KAAI;EACF,MAAM,MAAM,IAAI,IAAI,SAAS,MAAM,SAAS,QAAQ;AACpD,MAAI,aAAa,IAAI,mBAAmB,OAAO,EAAE,iBAAiB,CAAC;AACnE,SAAO,IAAI,UAAU;SACf;AACN;;CAGF,MAAM,OAAO,SAAS,cAAc,OAAO;AAC3C,MAAK,MAAM;AAEX,KAAI,SAAS,YAAa,MAAK,cAAc,SAAS;AACtD,MAAK,OAAO;AACZ,UAAS,YAAY,KAAK","debug_id":"6816b9f8-4e0c-55d2-a369-54d2e597ace3"}
@@ -1,11 +1,13 @@
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]="7e541be1-e63c-52fc-aa22-7bf029f5d029")}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]="a1b05313-974e-5ec4-b479-73d1da860f70")}catch(e){}}();
3
3
  import { n as getRuntimeConfig } from "./runtime-config-DL3QjcfM.js";
4
4
  import { a as resolvePgMajorForRuntime, r as loadPGliteModule } from "./pglite-major-B39aOEiE.js";
5
- import { r as getVersion, t as getGitSha } from "./build-info-DRFIgMZ5.js";
6
- import { n as buildPHGlobalConfig, o as phGlobalConfig } from "./connect.config-vgUeFoNp.js";
7
- import { a as detectReactorPgMajor, h as RELATIONAL_PGLITE_NAME, m as REACTOR_PGLITE_NAME, n as setWorkerConnectionStatus, o as detectRelationalPgMajor, p as REACTOR_INSTANCE_NAMESPACE } from "./connection-state-DO_2lAEJ.js";
8
- import { n as toast } from "./toast-4t-VimvD.js";
5
+ import { r as getVersion, t as getGitSha } from "./build-info-D48uD8Uk.js";
6
+ import { n as buildPHGlobalConfig, o as phGlobalConfig } from "./connect.config-C-b_Yhd6.js";
7
+ import { t as refreshPwaManifestLink } from "./pwa-manifest-link-CG8UajMz.js";
8
+ import { a as detectReactorPgMajor, h as RELATIONAL_PGLITE_NAME, m as REACTOR_PGLITE_NAME, n as setWorkerConnectionStatus, o as detectRelationalPgMajor, p as REACTOR_INSTANCE_NAMESPACE } from "./connection-state-KCa1yljA.js";
9
+ import { n as toast } from "./toast-BLv8rjmy.js";
10
+ import { PWA_IDB_KEY, PWA_IDB_NAME, PWA_IDB_STORE, PWA_IDB_VERSION, mergePwaConfig, withInferredCategory } from "@powerhousedao/shared/connect";
9
11
  import { createRelationalDb } from "@powerhousedao/shared/processors";
10
12
  import { DocumentModelRegistry, DocumentModelResolver, ReactorEventTypes } from "@powerhousedao/reactor";
11
13
  import { MessageRouter, RPC_PROTOCOL_VERSION, SyncManagerProxy, connectReactorClient, createInspectorProxy, createPortTransport, createReactorEventBusProxy, createRelationalPgliteProxy, createWorkerAdminClient, postReactorIdentity } from "@powerhousedao/reactor-browser/rpc";
@@ -14,11 +16,89 @@ import { PGliteDialect } from "kysely-pglite-dialect";
14
16
  import { BrowserLocalStorage, ChannelScheme as ChannelScheme$1, DRIVE_DOCUMENT_TYPES, DocumentCache, DocumentChangeType, ReactorBuilder as ReactorBuilder$1, ReactorClientBuilder as ReactorClientBuilder$1, RegistryClient, addPHEventHandlers, addRemoteDrive, createAnalyticsStore, extractDriveSlugFromPath, extractNodeSlugFromPath, getDrives, isDriveAuthError, login, refreshReactorDataClient, setAttachmentService, setDefaultPHGlobalConfig, setDocumentCache, setDriveMetadata, setDrives, setFeatures, setPGliteDB, setPHToast, setPackageDiscoveryService, setReactorClient, setReactorClientModule, setRenown, setSelectedDrive, setSelectedNode, setVetraPackageManager, waitForDocumentReady } from "@powerhousedao/reactor-browser";
15
17
  import { ConsoleLogger, logger, setLogLevel as setLogLevel$1 } from "document-model";
16
18
  import { BrowserKeyStorage, RenownBuilder, RenownCryptoBuilder, createSignatureVerifier } from "@renown/sdk";
19
+ import { PwaConfigSchema } from "@powerhousedao/shared/document-model";
17
20
  import { createAttachmentClient, createRemoteAttachmentService } from "@powerhousedao/reactor-attachments/client";
18
21
  import { OpenFeature } from "@openfeature/web-sdk";
19
22
  import * as common from "@powerhousedao/powerhouse-vetra-packages";
20
23
  import commonPkg from "@powerhousedao/powerhouse-vetra-packages/package.json" with { type: "json" };
24
+ import { toCdnUrl } from "@powerhousedao/shared/registry/urls";
21
25
  import vetraPkg from "@powerhousedao/vetra/package.json" with { type: "json" };
26
+ //#region src/utils/pwa-idb.ts
27
+ function openPwaIdb() {
28
+ return new Promise((resolve, reject) => {
29
+ const req = indexedDB.open(PWA_IDB_NAME, PWA_IDB_VERSION);
30
+ req.onupgradeneeded = () => {
31
+ if (!req.result.objectStoreNames.contains(PWA_IDB_STORE)) req.result.createObjectStore(PWA_IDB_STORE);
32
+ };
33
+ req.onerror = () => reject(req.error ?? /* @__PURE__ */ new Error("ph-pwa open failed"));
34
+ req.onblocked = () => reject(/* @__PURE__ */ new Error("ph-pwa open blocked"));
35
+ req.onsuccess = () => resolve(req.result);
36
+ });
37
+ }
38
+ /** Write (replace) the single merged fragment record. Best-effort: a failure to
39
+ * mirror the manifest must never break package installation, so callers ignore
40
+ * rejections. No-op when IndexedDB is unavailable (SSR/tests). */
41
+ async function writeMergedPwaFragment(fragment) {
42
+ if (typeof indexedDB === "undefined") return;
43
+ const db = await openPwaIdb();
44
+ try {
45
+ await new Promise((resolve, reject) => {
46
+ const tx = db.transaction(PWA_IDB_STORE, "readwrite");
47
+ tx.oncomplete = () => resolve();
48
+ tx.onerror = () => reject(tx.error ?? /* @__PURE__ */ new Error("PWA fragment write failed"));
49
+ tx.objectStore(PWA_IDB_STORE).put({
50
+ version: 1,
51
+ fragment,
52
+ updatedAt: Date.now()
53
+ }, PWA_IDB_KEY);
54
+ });
55
+ } finally {
56
+ db.close();
57
+ }
58
+ }
59
+ /** Resolve `src` against the package `baseUrl`, absolute srcs passing through.
60
+ * `baseUrl` may itself be relative (e.g. a same-origin-proxied registry, or the
61
+ * dev `/node_modules/…` path), so it is first made absolute against the app
62
+ * origin — `new URL(src, relativeBase)` would otherwise throw and silently
63
+ * leave the src unresolved. A malformed src is left untouched. */
64
+ function toAbsoluteAssetUrl(src, baseUrl) {
65
+ try {
66
+ const origin = typeof location !== "undefined" ? location.href : "http://localhost/";
67
+ return new URL(src, new URL(baseUrl, origin)).toString();
68
+ } catch {
69
+ return src;
70
+ }
71
+ }
72
+ function resolveIconSrc(icon, baseUrl) {
73
+ return {
74
+ ...icon,
75
+ src: toAbsoluteAssetUrl(icon.src, baseUrl)
76
+ };
77
+ }
78
+ /**
79
+ * Rewrite a package fragment's relative asset srcs (manifest icons and
80
+ * file-handler icons) to absolute URLs against the package's base — a runtime
81
+ * package's assets live on the registry CDN, not the app origin, so the served
82
+ * manifest must point there. `baseUrl` null (a local/bundled package whose
83
+ * assets are app-origin-relative) leaves srcs untouched.
84
+ */
85
+ function resolveFragmentAssetUrls(config, baseUrl) {
86
+ if (!baseUrl || !config.manifest) return config;
87
+ const m = config.manifest;
88
+ const resolveIcons = (icons) => icons?.map((icon) => resolveIconSrc(icon, baseUrl));
89
+ return {
90
+ ...config,
91
+ manifest: {
92
+ ...m,
93
+ icons: resolveIcons(m.icons),
94
+ file_handlers: m.file_handlers?.map((handler) => ({
95
+ ...handler,
96
+ icons: resolveIcons(handler.icons)
97
+ }))
98
+ }
99
+ };
100
+ }
101
+ //#endregion
22
102
  //#region src/pglite.db.ts
23
103
  async function createMainThreadPGlite(major, dbName) {
24
104
  const { PGlite } = await loadPGliteModule(major);
@@ -84,7 +164,7 @@ async function createBrowserReactor(documentModelModules, upgradeManifests, reno
84
164
  };
85
165
  const pg = await getReactorPGlite();
86
166
  const logger = new ConsoleLogger(["reactor-client"]);
87
- const builder = new ReactorClientBuilder$1().withLogger(logger).withSigner(signerConfig).withReactorBuilder(new ReactorBuilder$1().withDocumentModels(documentModelModules).withUpgradeManifests(upgradeManifests).withChannelScheme(ChannelScheme$1.CONNECT).withJwtHandler(jwtHandler).withKysely(new Kysely({ dialect: new PGliteDialect(pg) })));
167
+ const builder = new ReactorClientBuilder$1().withLogger(logger).withSigner(signerConfig).withReactorBuilder(new ReactorBuilder$1().withDocumentModelSources(documentModelModules).withUpgradeManifests(upgradeManifests).withChannelScheme(ChannelScheme$1.CONNECT).withJwtHandler(jwtHandler).withKysely(new Kysely({ dialect: new PGliteDialect(pg) })));
88
168
  if (documentModelLoader) builder.withDocumentModelLoader(documentModelLoader);
89
169
  const module = await builder.buildModule();
90
170
  return {
@@ -601,14 +681,14 @@ var BrowserPackageManager = class {
601
681
  #cdnUrl;
602
682
  #localPackageVersion;
603
683
  #localPackageNames = new Set([LOCAL_PACKAGE_NAME]);
684
+ #pwaSyncTimer;
685
+ /** Serialized last-mirrored PWA fragment; lets a sync skip the IndexedDB
686
+ * write + manifest re-attach when nothing PWA-relevant changed. */
687
+ #lastSyncedFragmentJson;
604
688
  constructor(namespace, registryUrl) {
605
689
  this.#storage = new BrowserLocalStorage(namespace + ":PH_PACKAGES");
606
690
  this.registryUrl = registryUrl;
607
- this.#cdnUrl = registryUrl !== null ? this.#toCdnUrl(registryUrl) : null;
608
- }
609
- #toCdnUrl(baseUrl) {
610
- if (baseUrl.includes("/-/cdn")) return baseUrl;
611
- return `${baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl}/-/cdn`;
691
+ this.#cdnUrl = registryUrl !== null ? toCdnUrl(registryUrl) : null;
612
692
  }
613
693
  async init(localPackage, localPackageVersion, studioMode) {
614
694
  this.addLocalPackage(common.manifest.name, common, commonPkg.version);
@@ -829,6 +909,53 @@ var BrowserPackageManager = class {
829
909
  this.#subscribers.forEach((handler) => {
830
910
  handler({ packages });
831
911
  });
912
+ this.#schedulePwaSync();
913
+ }
914
+ /**
915
+ * Debounced mirror of every loaded package's PWA fragment into IndexedDB, so
916
+ * the service worker can serve a web-app manifest that reflects packages
917
+ * installed AT RUNTIME (a SW can't read localStorage, where the package list
918
+ * lives). Debounced because `init()` rehydrates many packages in a burst;
919
+ * coalescing collapses that into a single write.
920
+ */
921
+ #schedulePwaSync() {
922
+ if (typeof indexedDB === "undefined") return;
923
+ clearTimeout(this.#pwaSyncTimer);
924
+ this.#pwaSyncTimer = setTimeout(() => {
925
+ this.#syncPwaFragments();
926
+ }, 50);
927
+ }
928
+ async #syncPwaFragments() {
929
+ const contributions = [];
930
+ for (const [name, loadedPackage] of this.#packages) {
931
+ const manifest = loadedPackage.manifest;
932
+ let config = {};
933
+ if (manifest.pwa) {
934
+ const parsed = PwaConfigSchema.safeParse(manifest.pwa);
935
+ if (parsed.success) {
936
+ const importUrl = this.#storage.get(name)?.importUrl ?? null;
937
+ const baseUrl = importUrl ? importUrl.replace(/browser\/index\.js$/, "") : null;
938
+ config = resolveFragmentAssetUrls(parsed.data, baseUrl);
939
+ } else console.warn(`[Connect][PWA] "${name}" ships an invalid pwa fragment; skipped.`, parsed.error);
940
+ }
941
+ config = withInferredCategory(config, manifest.category);
942
+ if (Object.keys(config).length === 0) continue;
943
+ contributions.push({
944
+ source: name,
945
+ config
946
+ });
947
+ }
948
+ const merged = mergePwaConfig(contributions);
949
+ const mergedJson = JSON.stringify(merged);
950
+ if (mergedJson === this.#lastSyncedFragmentJson) return;
951
+ try {
952
+ await writeMergedPwaFragment(merged);
953
+ } catch (error) {
954
+ console.debug("[Connect][PWA] fragment mirror to IndexedDB failed:", error);
955
+ return;
956
+ }
957
+ this.#lastSyncedFragmentJson = mergedJson;
958
+ refreshPwaManifestLink();
832
959
  }
833
960
  };
834
961
  //#endregion
@@ -1004,6 +1131,9 @@ var NullAttachmentService = class {
1004
1131
  get() {
1005
1132
  return Promise.reject(/* @__PURE__ */ new Error("NullAttachmentService: no attachment service configured"));
1006
1133
  }
1134
+ getDownloadTarget() {
1135
+ return Promise.reject(/* @__PURE__ */ new Error("NullAttachmentService: no attachment service configured"));
1136
+ }
1007
1137
  };
1008
1138
  async function createProcessorHostModule(reactorClient, readModels, attachmentService) {
1009
1139
  try {
@@ -1124,7 +1254,8 @@ async function createReactor(localPackage) {
1124
1254
  const renownCrypto = await new RenownCryptoBuilder().withKeyPairStorage(keyPairStorage).build();
1125
1255
  const renown = await new RenownBuilder("connect", {
1126
1256
  basename: getRuntimeConfig().connect.renown?.namespace ?? phGlobalConfig.routerBasename,
1127
- baseUrl: phGlobalConfig.renownUrl
1257
+ baseUrl: phGlobalConfig.renownUrl,
1258
+ switchboardUrl: phGlobalConfig.switchboardUrl
1128
1259
  }).withCrypto(renownCrypto).build();
1129
1260
  const runtimeConfig = getRuntimeConfig();
1130
1261
  const packageManager = new BrowserPackageManager(phGlobalConfig.routerBasename ?? "", runtimeConfig.packageRegistryUrl ?? null);
@@ -1278,5 +1409,5 @@ function getDriveUrl() {
1278
1409
  //#endregion
1279
1410
  export { createReactor as n, clearReactorStorage as t };
1280
1411
 
1281
- //# sourceMappingURL=reactor-DNtlhToA.js.map
1282
- //# debugId=7e541be1-e63c-52fc-aa22-7bf029f5d029
1412
+ //# sourceMappingURL=reactor-DEFv5EuZ.js.map
1413
+ //# debugId=a1b05313-974e-5ec4-b479-73d1da860f70