@powerhousedao/connect 6.2.2-dev.5 → 6.2.2-dev.50

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 (95) 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-Bw0YuxZg.js} +5 -5
  7. package/dist/AddDriveModal-Bw0YuxZg.js.map +1 -0
  8. package/dist/{ClearStorageModal--Kc9BLDH.js → ClearStorageModal-DDzOvG6T.js} +4 -4
  9. package/dist/{ClearStorageModal--Kc9BLDH.js.map → ClearStorageModal-DDzOvG6T.js.map} +1 -1
  10. package/dist/ConfirmDocumentUpgradeModal-9AaaQJTs.js +114 -0
  11. package/dist/ConfirmDocumentUpgradeModal-9AaaQJTs.js.map +1 -0
  12. package/dist/{CookiesPolicyModal-CkcUKPLb.js → CookiesPolicyModal-CQ-zHJdw.js} +3 -3
  13. package/dist/{CookiesPolicyModal-CkcUKPLb.js.map → CookiesPolicyModal-CQ-zHJdw.js.map} +1 -1
  14. package/dist/{CreateDocumentModal-CvsTh0HM.js → CreateDocumentModal-NNi4p6EI.js} +7 -5
  15. package/dist/CreateDocumentModal-NNi4p6EI.js.map +1 -0
  16. package/dist/{DebugSettingsModal-B7hFn_9k.js → DebugSettingsModal-k1l_X-wO.js} +6 -6
  17. package/dist/{DebugSettingsModal-B7hFn_9k.js.map → DebugSettingsModal-k1l_X-wO.js.map} +1 -1
  18. package/dist/{DeleteDriveModal-DSTK8FYk.js → DeleteDriveModal-C7fnXMsR.js} +4 -4
  19. package/dist/{DeleteDriveModal-DSTK8FYk.js.map → DeleteDriveModal-C7fnXMsR.js.map} +1 -1
  20. package/dist/{DeleteItemModal-B2nJmjsP.js → DeleteItemModal-BK_Y8Thj.js} +4 -4
  21. package/dist/{DeleteItemModal-B2nJmjsP.js.map → DeleteItemModal-BK_Y8Thj.js.map} +1 -1
  22. package/dist/{DisclaimerModal-D5FO34u9.js → DisclaimerModal-DJPHCnFY.js} +3 -3
  23. package/dist/{DisclaimerModal-D5FO34u9.js.map → DisclaimerModal-DJPHCnFY.js.map} +1 -1
  24. package/dist/DocumentVersionUnsupportedModal-tBHLK6b1.js +32 -0
  25. package/dist/DocumentVersionUnsupportedModal-tBHLK6b1.js.map +1 -0
  26. package/dist/{DownloadDocumentWithErrorsModal-tEr3bbtN.js → DownloadDocumentWithErrorsModal-sWu46HVB.js} +3 -3
  27. package/dist/{DownloadDocumentWithErrorsModal-tEr3bbtN.js.map → DownloadDocumentWithErrorsModal-sWu46HVB.js.map} +1 -1
  28. package/dist/DriveAuthRequiredModal-D3IPAst0.js +36 -0
  29. package/dist/DriveAuthRequiredModal-D3IPAst0.js.map +1 -0
  30. package/dist/{DriveSettingsModal-kR3hQnh4.js → DriveSettingsModal-7OKx8foy.js} +3 -3
  31. package/dist/{DriveSettingsModal-kR3hQnh4.js.map → DriveSettingsModal-7OKx8foy.js.map} +1 -1
  32. package/dist/{InspectorModal-DO7xAv0e.js → InspectorModal-DoIShIZU.js} +6 -6
  33. package/dist/{InspectorModal-DO7xAv0e.js.map → InspectorModal-DoIShIZU.js.map} +1 -1
  34. package/dist/LoginModal-Cd2wGgG4.js +75 -0
  35. package/dist/LoginModal-Cd2wGgG4.js.map +1 -0
  36. package/dist/{MissingPackageModal-BQcCQbOn.js → MissingPackageModal-DyP2-Ojb.js} +18 -6
  37. package/dist/MissingPackageModal-DyP2-Ojb.js.map +1 -0
  38. package/dist/OpenFileDocumentsModal-DH6sfJwe.js +311 -0
  39. package/dist/OpenFileDocumentsModal-DH6sfJwe.js.map +1 -0
  40. package/dist/{SettingsModal-5UjMFrlr.js → SettingsModal-CAKQhsAi.js} +26 -13
  41. package/dist/SettingsModal-CAKQhsAi.js.map +1 -0
  42. package/dist/{UpgradeDriveModal-BZGSE9_r.js → UpgradeDriveModal-wo5oO9mg.js} +3 -3
  43. package/dist/{UpgradeDriveModal-BZGSE9_r.js.map → UpgradeDriveModal-wo5oO9mg.js.map} +1 -1
  44. package/dist/{app-loader-C1rnoBbl.js → app-loader-0RTyMrTQ.js} +457 -89
  45. package/dist/app-loader-0RTyMrTQ.js.map +1 -0
  46. package/dist/app-loader-DeTgp8IP.js +4 -0
  47. package/dist/{build-info-COOSxFxb.js → build-info-B5u-94Xv.js} +5 -5
  48. package/dist/{build-info-COOSxFxb.js.map → build-info-B5u-94Xv.js.map} +1 -1
  49. package/dist/components-CqwpIQXY.js +5 -0
  50. package/dist/{connect.config-vgUeFoNp.js → connect.config-C-b_Yhd6.js} +9 -4
  51. package/dist/connect.config-C-b_Yhd6.js.map +1 -0
  52. package/dist/{connection-state-DO_2lAEJ.js → connection-state-KCa1yljA.js} +4 -4
  53. package/dist/{connection-state-DO_2lAEJ.js.map → connection-state-KCa1yljA.js.map} +1 -1
  54. package/dist/{load-BCpNI6yz.js → load-2EH2_hXZ.js} +10 -10
  55. package/dist/{load-BCpNI6yz.js.map → load-2EH2_hXZ.js.map} +1 -1
  56. package/dist/main.js +1 -1
  57. package/dist/{package-BJ5bAWw-.js → package-PM62ZNdm.js} +8 -4
  58. package/dist/package-PM62ZNdm.js.map +1 -0
  59. package/dist/{pglite-seed-z3B1JA38.js → pglite-seed-DRXPe7p-.js} +4 -4
  60. package/dist/{pglite-seed-z3B1JA38.js.map → pglite-seed-DRXPe7p-.js.map} +1 -1
  61. package/dist/pwa-manifest-link-CG8UajMz.js +34 -0
  62. package/dist/pwa-manifest-link-CG8UajMz.js.map +1 -0
  63. package/dist/{reactor-EirLqbNn.js → reactor-BqAu6N6i.js} +167 -20
  64. package/dist/reactor-BqAu6N6i.js.map +1 -0
  65. package/dist/reactor.worker.js +8 -6
  66. package/dist/reactor.worker.js.map +1 -1
  67. package/dist/{registerServiceWorker-nJIc0yEY.js → registerServiceWorker-Bn1KWmk0.js} +6 -4
  68. package/dist/registerServiceWorker-Bn1KWmk0.js.map +1 -0
  69. package/dist/{reload-connect-toast-D1Iqw9E_.js → reload-connect-toast-DDQEupCN.js} +23 -5
  70. package/dist/{reload-connect-toast-D1Iqw9E_.js.map → reload-connect-toast-DDQEupCN.js.map} +1 -1
  71. package/dist/start-connect.js +1 -1
  72. package/dist/style.css +100 -7
  73. package/dist/{toast-4t-VimvD.js → toast-CO6ChlzE.js} +8 -5
  74. package/dist/toast-CO6ChlzE.js.map +1 -0
  75. package/dist/use-renown-login-BtGljnB4.js +52 -0
  76. package/dist/use-renown-login-BtGljnB4.js.map +1 -0
  77. package/dist/useRegistryPackages-DMhCvTWq.js +314 -0
  78. package/dist/useRegistryPackages-DMhCvTWq.js.map +1 -0
  79. package/package.json +15 -11
  80. package/dist/AddDriveModal-MMHlkJBJ.js.map +0 -1
  81. package/dist/CreateDocumentModal-CvsTh0HM.js.map +0 -1
  82. package/dist/DriveAuthRequiredModal-BA2vS3oF.js +0 -40
  83. package/dist/DriveAuthRequiredModal-BA2vS3oF.js.map +0 -1
  84. package/dist/MissingPackageModal-BQcCQbOn.js.map +0 -1
  85. package/dist/SettingsModal-5UjMFrlr.js.map +0 -1
  86. package/dist/app-loader-C1rnoBbl.js.map +0 -1
  87. package/dist/app-loader-CpXJhHIH.js +0 -4
  88. package/dist/components-DHj3ZpJg.js +0 -5
  89. package/dist/connect.config-vgUeFoNp.js.map +0 -1
  90. package/dist/package-BJ5bAWw-.js.map +0 -1
  91. package/dist/reactor-EirLqbNn.js.map +0 -1
  92. package/dist/registerServiceWorker-nJIc0yEY.js.map +0 -1
  93. package/dist/toast-4t-VimvD.js.map +0 -1
  94. package/dist/useRegistryPackages-BaYtekjQ.js +0 -179
  95. package/dist/useRegistryPackages-BaYtekjQ.js.map +0 -1
@@ -1,13 +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]="638b1d2b-ae19-559c-8423-64aa382f243a")}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]="e38d6bba-f79b-559d-8833-21786be3bb5a")}catch(e){}}();
3
3
  import { r as loadRuntimeConfig, t as applyConnectBranding } from "./runtime-config-DL3QjcfM.js";
4
- import { r as setUser, t as ReloadConnectToast } from "./reload-connect-toast-D1Iqw9E_.js";
5
- import { t as package_default } from "./package-BJ5bAWw-.js";
6
- import { r as connectConfig } from "./connect.config-vgUeFoNp.js";
7
- import { a as detectReactorPgMajor, i as detectMigrationMajor } from "./connection-state-DO_2lAEJ.js";
8
- import { n as seedPendingPgVersion } from "./pglite-seed-z3B1JA38.js";
9
- import { n as createReactor } from "./reactor-EirLqbNn.js";
10
- import { n as toast } from "./toast-4t-VimvD.js";
4
+ import { r as setUser, t as ReloadConnectToast } from "./reload-connect-toast-DDQEupCN.js";
5
+ import { t as package_default } from "./package-PM62ZNdm.js";
6
+ import { r as connectConfig } from "./connect.config-C-b_Yhd6.js";
7
+ import { n as createReactor } from "./reactor-BqAu6N6i.js";
8
+ import { a as detectReactorPgMajor, i as detectMigrationMajor } from "./connection-state-KCa1yljA.js";
9
+ import { n as seedPendingPgVersion } from "./pglite-seed-DRXPe7p-.js";
10
+ import { r as toast } from "./toast-CO6ChlzE.js";
11
11
  import { createElement, useEffect } from "react";
12
12
  import { initTheme, useUser } from "@powerhousedao/reactor-browser";
13
13
  import { logger } from "document-model";
@@ -96,5 +96,5 @@ async function loadComponent(localPackage) {
96
96
  //#endregion
97
97
  export { loadComponent };
98
98
 
99
- //# sourceMappingURL=load-BCpNI6yz.js.map
100
- //# debugId=638b1d2b-ae19-559c-8423-64aa382f243a
99
+ //# sourceMappingURL=load-2EH2_hXZ.js.map
100
+ //# debugId=e38d6bba-f79b-559d-8833-21786be3bb5a
@@ -1 +1 @@
1
- {"version":3,"file":"load-BCpNI6yz.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":"638b1d2b-ae19-559c-8423-64aa382f243a"}
1
+ {"version":3,"file":"load-2EH2_hXZ.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":"e38d6bba-f79b-559d-8833-21786be3bb5a"}
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-CpXJhHIH.js");
9
+ const { AppLoader } = await import("./app-loader-DeTgp8IP.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]="41f1a3d7-a917-59ab-84d3-6c331b08f3a5")}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]="ce38aa65-36d0-54bd-851c-bf6b4263ed87")}catch(e){}}();
4
4
  var package_default = {
5
5
  name: "@powerhousedao/connect",
6
6
  productName: "Powerhouse-Connect",
7
- version: "6.2.2-dev.5",
7
+ version: "6.2.2-dev.50",
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.35.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-BJ5bAWw-.js.map
127
- //# debugId=41f1a3d7-a917-59ab-84d3-6c331b08f3a5
130
+ //# sourceMappingURL=package-PM62ZNdm.js.map
131
+ //# debugId=ce38aa65-36d0-54bd-851c-bf6b4263ed87
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-PM62ZNdm.js","sources":["../package.json"],"sourcesContent":[""],"names":[],"mappings":"","debug_id":"ce38aa65-36d0-54bd-851c-bf6b4263ed87"}
@@ -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]="e05ed503-9b99-5c51-b2a9-5fe914be5f04")}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]="32ef7366-e65d-58a6-868a-e24e5b38d6e6")}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-COOSxFxb.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-B5u-94Xv.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 { r as toast } from "./toast-CO6ChlzE.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);
@@ -73,7 +153,7 @@ async function getDb() {
73
153
  * Creates a Reactor that plugs into legacy storage but syncs through the new
74
154
  * Reactor GQL API.
75
155
  */
76
- async function createBrowserReactor(documentModelModules, upgradeManifests, renown, documentModelLoader) {
156
+ async function createBrowserReactor(documentModelModules, upgradeManifests, renown, featureFlags, documentModelLoader) {
77
157
  const signerConfig = {
78
158
  signer: renown.signer,
79
159
  verifier: createSignatureVerifier()
@@ -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().withDocumentModelSources(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).withExecutorConfig({ featureFlags }).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 {
@@ -127,7 +207,7 @@ async function addDefaultDrivesForNewReactor(drives) {
127
207
  }
128
208
  }
129
209
  if (driveId && (drive.name || drive.icon)) try {
130
- const reactorClient = window.ph?.reactorClient;
210
+ const reactorClient = window.ph?.reactorClientModule?.client;
131
211
  if (reactorClient) await waitForDocumentReady(reactorClient, driveId, { timeoutMs: 15e3 });
132
212
  await setDriveMetadata(driveId, {
133
213
  name: drive.name,
@@ -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
@@ -855,6 +982,10 @@ function bumpWorkerGen(namespace, gen) {
855
982
  const PING_INTERVAL_MS = 2e3;
856
983
  const PING_DEADLINE_MS = 3e3;
857
984
  const MAX_MISSED_PINGS = 2;
985
+ /** Sorted so the same set always produces the same fingerprint. */
986
+ function enabledFlagList(flags) {
987
+ return Object.entries(flags).filter(([, enabled]) => enabled).map(([name]) => name).sort().join(",");
988
+ }
858
989
  function toReactorIdentity(user) {
859
990
  if (!user) return null;
860
991
  return {
@@ -890,14 +1021,17 @@ function createWorkerReactorClientModule(args) {
890
1021
  models: args.documentModelModules.map((m) => ({
891
1022
  id: m.documentModel.global.id,
892
1023
  version: m.version ?? 1
893
- }))
1024
+ })),
1025
+ featureFlags: enabledFlagList(args.featureFlags)
894
1026
  },
895
1027
  construct: {
896
1028
  namespace: args.namespace,
897
1029
  relationalNamespace: args.relationalNamespace,
898
1030
  cdnUrl: args.cdnUrl,
899
1031
  packageSpecs: args.packageSpecs,
900
- studioMode: args.studioMode
1032
+ studioMode: args.studioMode,
1033
+ renownChainId: args.renownChainId,
1034
+ featureFlags: args.featureFlags
901
1035
  },
902
1036
  packages: args.packageSpecs
903
1037
  }, args.onReload, documentModelRegistry);
@@ -1004,6 +1138,9 @@ var NullAttachmentService = class {
1004
1138
  get() {
1005
1139
  return Promise.reject(/* @__PURE__ */ new Error("NullAttachmentService: no attachment service configured"));
1006
1140
  }
1141
+ getDownloadTarget() {
1142
+ return Promise.reject(/* @__PURE__ */ new Error("NullAttachmentService: no attachment service configured"));
1143
+ }
1007
1144
  };
1008
1145
  async function createProcessorHostModule(reactorClient, readModels, attachmentService) {
1009
1146
  try {
@@ -1120,11 +1257,16 @@ async function createReactor(localPackage) {
1120
1257
  setPHToast(toast);
1121
1258
  const features = await initFeatureFlags();
1122
1259
  logger.info("Features: @features", JSON.stringify(Object.fromEntries(features), null, 2));
1260
+ const renownChainId = getRuntimeConfig().connect.renown?.chainId;
1123
1261
  const keyPairStorage = await BrowserKeyStorage.create();
1124
- const renownCrypto = await new RenownCryptoBuilder().withKeyPairStorage(keyPairStorage).build();
1262
+ const cryptoBuilder = new RenownCryptoBuilder().withKeyPairStorage(keyPairStorage);
1263
+ if (renownChainId !== void 0) cryptoBuilder.withChainId(renownChainId);
1264
+ const renownCrypto = await cryptoBuilder.build();
1125
1265
  const renown = await new RenownBuilder("connect", {
1126
1266
  basename: getRuntimeConfig().connect.renown?.namespace ?? phGlobalConfig.routerBasename,
1127
- baseUrl: phGlobalConfig.renownUrl
1267
+ baseUrl: phGlobalConfig.renownUrl,
1268
+ switchboardUrl: phGlobalConfig.switchboardUrl,
1269
+ chainId: renownChainId
1128
1270
  }).withCrypto(renownCrypto).build();
1129
1271
  const runtimeConfig = getRuntimeConfig();
1130
1272
  const packageManager = new BrowserPackageManager(phGlobalConfig.routerBasename ?? "", runtimeConfig.packageRegistryUrl ?? null);
@@ -1146,6 +1288,9 @@ async function createReactor(localPackage) {
1146
1288
  storageKey: phGlobalConfig.routerBasename ?? ""
1147
1289
  }) : new NoRegistryDiscoveryService(packageManager);
1148
1290
  setPackageDiscoveryService(discoveryService);
1291
+ const reactorFeatureFlags = runtimeConfig.connect?.reactor?.featureFlags ?? {};
1292
+ const enabledReactorFlags = Object.entries(reactorFeatureFlags).filter(([, enabled]) => enabled).map(([name]) => name);
1293
+ if (enabledReactorFlags.length > 0) logger.info(`Reactor feature flags: ${enabledReactorFlags.join(", ")}`);
1149
1294
  let reactorClientModule;
1150
1295
  if (isReactorWorkerEnabled()) {
1151
1296
  const packageSpecs = packageManager.getRegistryPackages().map((p) => p.version ? `${p.name}@${p.version}` : p.name);
@@ -1156,6 +1301,8 @@ async function createReactor(localPackage) {
1156
1301
  cdnUrl: packageManager.cdnUrl ?? "",
1157
1302
  packageSpecs,
1158
1303
  studioMode: phGlobalConfig.studioMode,
1304
+ renownChainId,
1305
+ featureFlags: reactorFeatureFlags,
1159
1306
  documentModelModules,
1160
1307
  upgradeManifests,
1161
1308
  documentModelLoader: { async load(documentType) {
@@ -1183,7 +1330,7 @@ async function createReactor(localPackage) {
1183
1330
  logger.error("Reactor worker failed to start: @error", error);
1184
1331
  throw error;
1185
1332
  }
1186
- } else reactorClientModule = await createBrowserReactor(documentModelModules, upgradeManifests, renown, discoveryService);
1333
+ } else reactorClientModule = await createBrowserReactor(documentModelModules, upgradeManifests, renown, reactorFeatureFlags, discoveryService);
1187
1334
  const drives = await getDrives(reactorClientModule.client);
1188
1335
  await login(getDidFromUrl(), renown);
1189
1336
  const documentCache = new DocumentCache(reactorClientModule.client);
@@ -1278,5 +1425,5 @@ function getDriveUrl() {
1278
1425
  //#endregion
1279
1426
  export { createReactor as n, clearReactorStorage as t };
1280
1427
 
1281
- //# sourceMappingURL=reactor-EirLqbNn.js.map
1282
- //# debugId=e05ed503-9b99-5c51-b2a9-5fe914be5f04
1428
+ //# sourceMappingURL=reactor-BqAu6N6i.js.map
1429
+ //# debugId=32ef7366-e65d-58a6-868a-e24e5b38d6e6