@powerhousedao/connect 6.2.2-dev.7 → 6.2.2-dev.70

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-BxOW6Sr6.js → ClearStorageModal-sv_RLIBW.js} +4 -4
  9. package/dist/{ClearStorageModal-BxOW6Sr6.js.map → ClearStorageModal-sv_RLIBW.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-BGB0gcLr.js → DebugSettingsModal-N6_S1I93.js} +6 -6
  17. package/dist/{DebugSettingsModal-BGB0gcLr.js.map → DebugSettingsModal-N6_S1I93.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-C8APjWYF.js → InspectorModal-DT_TY0EA.js} +6 -6
  33. package/dist/{InspectorModal-C8APjWYF.js.map → InspectorModal-DT_TY0EA.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-CnwqIFlk.js +311 -0
  39. package/dist/OpenFileDocumentsModal-CnwqIFlk.js.map +1 -0
  40. package/dist/{SettingsModal-BFck2YNG.js → SettingsModal-CdH7gYfl.js} +26 -13
  41. package/dist/SettingsModal-CdH7gYfl.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-DRcaakT5.js +4 -0
  45. package/dist/{app-loader-BI9LbEnT.js → app-loader-DZjWOssg.js} +458 -89
  46. package/dist/app-loader-DZjWOssg.js.map +1 -0
  47. package/dist/{build-info-B8h78xbQ.js → build-info-DkBYoE00.js} +5 -5
  48. package/dist/{build-info-B8h78xbQ.js.map → build-info-DkBYoE00.js.map} +1 -1
  49. package/dist/components-DkoZFIlp.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-_dpLo8DZ.js → load-YL5iNy62.js} +10 -10
  55. package/dist/{load-_dpLo8DZ.js.map → load-YL5iNy62.js.map} +1 -1
  56. package/dist/main.js +1 -1
  57. package/dist/{package-B9IyLCZE.js → package-DpvCqyYB.js} +10 -5
  58. package/dist/package-DpvCqyYB.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-DpVQKcX7.js → reactor-BgpVxD7A.js} +179 -40
  64. package/dist/reactor-BgpVxD7A.js.map +1 -0
  65. package/dist/reactor.worker.js +11 -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 +18 -13
  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-BFck2YNG.js.map +0 -1
  86. package/dist/app-loader-BAjPPbXx.js +0 -4
  87. package/dist/app-loader-BI9LbEnT.js.map +0 -1
  88. package/dist/components-D5-Rnhml.js +0 -5
  89. package/dist/connect.config-vgUeFoNp.js.map +0 -1
  90. package/dist/package-B9IyLCZE.js.map +0 -1
  91. package/dist/reactor-DpVQKcX7.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]="e57bff7c-3d2d-50d8-b575-e03ce58a137f")}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]="73c29cd6-d5a0-524a-b114-fa7597f3fe44")}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-B9IyLCZE.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-DpVQKcX7.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-DpvCqyYB.js";
6
+ import { r as connectConfig } from "./connect.config-C-b_Yhd6.js";
7
+ import { n as createReactor } from "./reactor-BgpVxD7A.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-_dpLo8DZ.js.map
100
- //# debugId=e57bff7c-3d2d-50d8-b575-e03ce58a137f
99
+ //# sourceMappingURL=load-YL5iNy62.js.map
100
+ //# debugId=73c29cd6-d5a0-524a-b114-fa7597f3fe44
@@ -1 +1 @@
1
- {"version":3,"file":"load-_dpLo8DZ.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":"e57bff7c-3d2d-50d8-b575-e03ce58a137f"}
1
+ {"version":3,"file":"load-YL5iNy62.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":"73c29cd6-d5a0-524a-b114-fa7597f3fe44"}
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-BAjPPbXx.js");
9
+ const { AppLoader } = await import("./app-loader-DRcaakT5.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]="19c4e905-d497-5402-9cbf-9d2c4952c8c1")}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]="85f1f317-a537-555b-aaf3-75b122eef2ad")}catch(e){}}();
4
4
  var package_default = {
5
5
  name: "@powerhousedao/connect",
6
6
  productName: "Powerhouse-Connect",
7
- version: "6.2.2-dev.7",
7
+ version: "6.2.2-dev.70",
8
8
  description: "Powerhouse Connect",
9
9
  main: "dist/index.html",
10
10
  type: "module",
@@ -56,7 +56,7 @@ var package_default = {
56
56
  "build": "pnpm run build:bundle && pnpm run build:css",
57
57
  "build:bundle": "tsdown",
58
58
  "build:css": "pnpm exec tailwindcss -i style.css -o dist/style.css",
59
- "build:debug": "PH_DEBUG_BUILD=true vite build",
59
+ "build:debug": "cross-env PH_DEBUG_BUILD=true vite build",
60
60
  "preview": "vite preview",
61
61
  "cy:open": "cypress open",
62
62
  "docker:build": "docker build -f ./Dockerfile --tag connect-test-dev --build-arg TAG=dev .",
@@ -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,9 +95,11 @@ 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: {
102
+ "cross-env": "catalog:",
98
103
  "@tailwindcss/cli": "catalog:",
99
104
  "@tailwindcss/vite": "catalog:",
100
105
  "@testing-library/dom": "^10.4.0",
@@ -123,5 +128,5 @@ var package_default = {
123
128
  //#endregion
124
129
  export { package_default as t };
125
130
 
126
- //# sourceMappingURL=package-B9IyLCZE.js.map
127
- //# debugId=19c4e905-d497-5402-9cbf-9d2c4952c8c1
131
+ //# sourceMappingURL=package-DpvCqyYB.js.map
132
+ //# debugId=85f1f317-a537-555b-aaf3-75b122eef2ad
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-DpvCqyYB.js","sources":["../package.json"],"sourcesContent":[""],"names":[],"mappings":"","debug_id":"85f1f317-a537-555b-aaf3-75b122eef2ad"}
@@ -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,24 +1,104 @@
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]="6d771834-3905-5baf-bb0f-2b2d4874a1a7")}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]="8716edcf-60be-583e-b605-e98565c88252")}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-B8h78xbQ.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-DkBYoE00.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
- import { DocumentModelRegistry, DocumentModelResolver, ReactorEventTypes } from "@powerhousedao/reactor";
12
+ import { DocumentModelRegistry, DocumentModelResolver, ReactorEventTypes, createReactorHostModuleBase } from "@powerhousedao/reactor";
11
13
  import { MessageRouter, RPC_PROTOCOL_VERSION, SyncManagerProxy, connectReactorClient, createInspectorProxy, createPortTransport, createReactorEventBusProxy, createRelationalPgliteProxy, createWorkerAdminClient, postReactorIdentity } from "@powerhousedao/reactor-browser/rpc";
12
14
  import { Kysely } from "kysely";
13
15
  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";
17
- import { createAttachmentClient, createRemoteAttachmentService } from "@powerhousedao/reactor-attachments/client";
19
+ import { PwaConfigSchema } from "@powerhousedao/shared/document-model";
20
+ import { createAttachmentClient, createRemoteAttachmentService, createXhrUploadTransport } 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,29 +1138,23 @@ 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 {
1010
1147
  const { pgLite, relationalDb } = await getDb();
1011
1148
  const { store: analyticsStore } = await createAnalyticsStore({ pgLite });
1012
1149
  return {
1013
- relationalDb,
1014
- analyticsStore,
1015
- processorApp: "connect",
1016
- client: reactorClient,
1017
- attachments: createAttachmentClient(attachmentService ?? new NullAttachmentService()),
1018
- dispatch: { async execute(docId, branch, actions, signal) {
1019
- const jobInfo = await reactorClient.executeAsync(docId, branch, actions, signal);
1020
- return {
1021
- id: jobInfo.id,
1022
- status: jobInfo.status
1023
- };
1024
- } },
1025
- getReadModel(name) {
1026
- const model = readModels.find((m) => m.name === name);
1027
- if (!model) throw new Error(`Read model "${name}" not found`);
1028
- return model;
1029
- }
1150
+ ...createReactorHostModuleBase({
1151
+ client: reactorClient,
1152
+ readModels,
1153
+ relationalDb,
1154
+ analyticsStore,
1155
+ processorApp: "connect"
1156
+ }),
1157
+ attachments: createAttachmentClient(attachmentService ?? new NullAttachmentService())
1030
1158
  };
1031
1159
  } catch (error) {
1032
1160
  console.error(`Failed to initialize processor host module:`);
@@ -1120,11 +1248,16 @@ async function createReactor(localPackage) {
1120
1248
  setPHToast(toast);
1121
1249
  const features = await initFeatureFlags();
1122
1250
  logger.info("Features: @features", JSON.stringify(Object.fromEntries(features), null, 2));
1251
+ const renownChainId = getRuntimeConfig().connect.renown?.chainId;
1123
1252
  const keyPairStorage = await BrowserKeyStorage.create();
1124
- const renownCrypto = await new RenownCryptoBuilder().withKeyPairStorage(keyPairStorage).build();
1253
+ const cryptoBuilder = new RenownCryptoBuilder().withKeyPairStorage(keyPairStorage);
1254
+ if (renownChainId !== void 0) cryptoBuilder.withChainId(renownChainId);
1255
+ const renownCrypto = await cryptoBuilder.build();
1125
1256
  const renown = await new RenownBuilder("connect", {
1126
1257
  basename: getRuntimeConfig().connect.renown?.namespace ?? phGlobalConfig.routerBasename,
1127
- baseUrl: phGlobalConfig.renownUrl
1258
+ baseUrl: phGlobalConfig.renownUrl,
1259
+ switchboardUrl: phGlobalConfig.switchboardUrl,
1260
+ chainId: renownChainId
1128
1261
  }).withCrypto(renownCrypto).build();
1129
1262
  const runtimeConfig = getRuntimeConfig();
1130
1263
  const packageManager = new BrowserPackageManager(phGlobalConfig.routerBasename ?? "", runtimeConfig.packageRegistryUrl ?? null);
@@ -1146,6 +1279,9 @@ async function createReactor(localPackage) {
1146
1279
  storageKey: phGlobalConfig.routerBasename ?? ""
1147
1280
  }) : new NoRegistryDiscoveryService(packageManager);
1148
1281
  setPackageDiscoveryService(discoveryService);
1282
+ const reactorFeatureFlags = runtimeConfig.connect?.reactor?.featureFlags ?? {};
1283
+ const enabledReactorFlags = Object.entries(reactorFeatureFlags).filter(([, enabled]) => enabled).map(([name]) => name);
1284
+ if (enabledReactorFlags.length > 0) logger.info(`Reactor feature flags: ${enabledReactorFlags.join(", ")}`);
1149
1285
  let reactorClientModule;
1150
1286
  if (isReactorWorkerEnabled()) {
1151
1287
  const packageSpecs = packageManager.getRegistryPackages().map((p) => p.version ? `${p.name}@${p.version}` : p.name);
@@ -1156,6 +1292,8 @@ async function createReactor(localPackage) {
1156
1292
  cdnUrl: packageManager.cdnUrl ?? "",
1157
1293
  packageSpecs,
1158
1294
  studioMode: phGlobalConfig.studioMode,
1295
+ renownChainId,
1296
+ featureFlags: reactorFeatureFlags,
1159
1297
  documentModelModules,
1160
1298
  upgradeManifests,
1161
1299
  documentModelLoader: { async load(documentType) {
@@ -1183,7 +1321,7 @@ async function createReactor(localPackage) {
1183
1321
  logger.error("Reactor worker failed to start: @error", error);
1184
1322
  throw error;
1185
1323
  }
1186
- } else reactorClientModule = await createBrowserReactor(documentModelModules, upgradeManifests, renown, discoveryService);
1324
+ } else reactorClientModule = await createBrowserReactor(documentModelModules, upgradeManifests, renown, reactorFeatureFlags, discoveryService);
1187
1325
  const drives = await getDrives(reactorClientModule.client);
1188
1326
  await login(getDidFromUrl(), renown);
1189
1327
  const documentCache = new DocumentCache(reactorClientModule.client);
@@ -1206,7 +1344,8 @@ async function createReactor(localPackage) {
1206
1344
  };
1207
1345
  setAttachmentService(createRemoteAttachmentService({
1208
1346
  remoteUrl: switchboardOrigin,
1209
- jwtHandler: attachmentJwtHandler
1347
+ jwtHandler: attachmentJwtHandler,
1348
+ uploadTransport: createXhrUploadTransport()
1210
1349
  }));
1211
1350
  }
1212
1351
  }
@@ -1278,5 +1417,5 @@ function getDriveUrl() {
1278
1417
  //#endregion
1279
1418
  export { createReactor as n, clearReactorStorage as t };
1280
1419
 
1281
- //# sourceMappingURL=reactor-DpVQKcX7.js.map
1282
- //# debugId=6d771834-3905-5baf-bb0f-2b2d4874a1a7
1420
+ //# sourceMappingURL=reactor-BgpVxD7A.js.map
1421
+ //# debugId=8716edcf-60be-583e-b605-e98565c88252