@powerhousedao/connect 6.0.0-dev.146 → 6.0.0-dev.148
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AddDriveModal-CT8C5KqN.js → AddDriveModal-CBK9gEWg.js} +7 -6
- package/dist/AddDriveModal-CBK9gEWg.js.map +1 -0
- package/dist/{ClearStorageModal-CGFmu0pv.js → ClearStorageModal-D3E7NK-K.js} +2 -2
- package/dist/{ClearStorageModal-CGFmu0pv.js.map → ClearStorageModal-D3E7NK-K.js.map} +1 -1
- package/dist/{MissingPackageModal-BOeTH4V6.js → MissingPackageModal-DM-yLsFK.js} +2 -2
- package/dist/{MissingPackageModal-BOeTH4V6.js.map → MissingPackageModal-DM-yLsFK.js.map} +1 -1
- package/dist/{SettingsModal-W_dW_FlT.js → SettingsModal-DKMukahc.js} +3 -3
- package/dist/{SettingsModal-W_dW_FlT.js.map → SettingsModal-DKMukahc.js.map} +1 -1
- package/dist/{load-CnS8GeBm.js → load-BlDFD8IU.js} +3 -3
- package/dist/{load-CnS8GeBm.js.map → load-BlDFD8IU.js.map} +1 -1
- package/dist/main.js +1 -1
- package/dist/{package-xDNIiXIA.js → package-CAvEMIil.js} +2 -2
- package/dist/package-CAvEMIil.js.map +1 -0
- package/dist/{reactor-XtvM2Ar4.js → reactor-DiCrb7Gu.js} +22 -93
- package/dist/reactor-DiCrb7Gu.js.map +1 -0
- package/dist/{sidebar-Ck5KQ_T4.js → sidebar-ChKKUvXH.js} +8 -8
- package/dist/sidebar-ChKKUvXH.js.map +1 -0
- package/dist/start-connect.d.ts.map +1 -1
- package/dist/start-connect.js +2 -4
- package/dist/start-connect.js.map +1 -1
- package/dist/{useRegistryPackages-Ctlhv061.js → useRegistryPackages-DSzf8iPN.js} +9 -18
- package/dist/useRegistryPackages-DSzf8iPN.js.map +1 -0
- package/package.json +9 -9
- package/dist/AddDriveModal-CT8C5KqN.js.map +0 -1
- package/dist/package-xDNIiXIA.js.map +0 -1
- package/dist/reactor-XtvM2Ar4.js.map +0 -1
- package/dist/sidebar-Ck5KQ_T4.js.map +0 -1
- package/dist/useRegistryPackages-Ctlhv061.js.map +0 -1
|
@@ -16,7 +16,7 @@ function AddDriveModal() {
|
|
|
16
16
|
const appModules = useAppModules();
|
|
17
17
|
const onAddLocalDrive = async (data) => {
|
|
18
18
|
try {
|
|
19
|
-
const app = appModules?.find((a) => a.id === data.
|
|
19
|
+
const app = appModules?.find((a) => a.config.id === data.id);
|
|
20
20
|
const newDrive = await addDrive({
|
|
21
21
|
id: "",
|
|
22
22
|
slug: "",
|
|
@@ -30,7 +30,7 @@ function AddDriveModal() {
|
|
|
30
30
|
listeners: [],
|
|
31
31
|
triggers: []
|
|
32
32
|
}
|
|
33
|
-
}, app?.id);
|
|
33
|
+
}, app?.config.id);
|
|
34
34
|
toast$1(t("notifications.addDriveSuccess"), { type: "connect-success" });
|
|
35
35
|
if (!newDrive) return;
|
|
36
36
|
setSelectedDrive(newDrive);
|
|
@@ -76,13 +76,14 @@ function AddDriveModal() {
|
|
|
76
76
|
if (!status) return closePHModal();
|
|
77
77
|
},
|
|
78
78
|
appOptions: appModules?.map((pkg) => ({
|
|
79
|
-
id: pkg.id,
|
|
80
|
-
name: pkg.name,
|
|
81
|
-
|
|
79
|
+
id: pkg.config.id,
|
|
80
|
+
name: pkg.config.name,
|
|
81
|
+
sharingType: "LOCAL",
|
|
82
|
+
availableOffline: false
|
|
82
83
|
})) || []
|
|
83
84
|
});
|
|
84
85
|
}
|
|
85
86
|
//#endregion
|
|
86
87
|
export { AddDriveModal };
|
|
87
88
|
|
|
88
|
-
//# sourceMappingURL=AddDriveModal-
|
|
89
|
+
//# sourceMappingURL=AddDriveModal-CBK9gEWg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddDriveModal-CBK9gEWg.js","names":["ConnectAddLocalDriveModal"],"sources":["../src/components/modal/modals/AddDriveModal.tsx"],"sourcesContent":["import { toast } from \"@powerhousedao/connect/services\";\nimport type {\n AddRemoteDriveInput,\n AppOptions,\n} from \"@powerhousedao/design-system/connect\";\nimport { AddDriveModal as ConnectAddLocalDriveModal } from \"@powerhousedao/design-system/connect\";\nimport {\n addDrive,\n addRemoteDrive,\n closePHModal,\n setSelectedDrive,\n useAppModules,\n usePHModal,\n useRenown,\n useUser,\n} from \"@powerhousedao/reactor-browser\";\nimport { t } from \"i18next\";\n\nasync function requestPublicDriveFromReactor(\n url: string,\n headers?: Record<string, string>,\n): Promise<{ id: string; name: string }> {\n const response = await fetch(url, { headers: headers ?? {} });\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n return (await response.json()) as { id: string; name: string };\n}\n\nexport function AddDriveModal() {\n const phModal = usePHModal();\n const open = phModal?.type === \"addDrive\";\n const user = useUser();\n const renown = useRenown();\n const appModules = useAppModules();\n const onAddLocalDrive = async (data: AppOptions) => {\n try {\n const app = appModules?.find((a) => a.config.id === data.id);\n const newDrive = await addDrive(\n {\n id: \"\",\n slug: \"\",\n global: {\n name: data.name,\n icon: null,\n },\n local: {\n availableOffline: data.availableOffline,\n sharingType: data.sharingType.toLowerCase(),\n listeners: [],\n triggers: [],\n },\n },\n app?.config.id,\n );\n\n toast(t(\"notifications.addDriveSuccess\"), {\n type: \"connect-success\",\n });\n\n if (!newDrive) {\n return;\n }\n\n setSelectedDrive(newDrive);\n } catch (e) {\n console.error(e);\n }\n };\n\n const onAddRemoteDrive = async (data: AddRemoteDriveInput) => {\n try {\n const driveId = await addRemoteDrive(data.url, data.id);\n\n toast(t(\"notifications.addDriveSuccess\"), {\n type: \"connect-success\",\n });\n\n setSelectedDrive(driveId);\n } catch (e) {\n console.error(e);\n }\n };\n async function onAddLocalDriveSubmit(data: AppOptions) {\n await onAddLocalDrive(data);\n closePHModal();\n }\n\n async function onAddRemoteDriveSubmit(data: AddRemoteDriveInput) {\n await onAddRemoteDrive(data);\n closePHModal();\n }\n\n const ready = !!appModules?.length;\n\n return (\n <ConnectAddLocalDriveModal\n open={open && ready}\n onAddLocalDrive={onAddLocalDriveSubmit}\n onAddRemoteDrive={onAddRemoteDriveSubmit}\n requestPublicDrive={async (url: string) => {\n try {\n if (user) {\n const authToken = await renown?.getBearerToken?.({\n expiresIn: 10,\n aud: url,\n });\n return requestPublicDriveFromReactor(url, {\n Authorization: `Bearer ${authToken}`,\n });\n }\n return requestPublicDriveFromReactor(url);\n } catch (error) {\n console.error(error);\n return requestPublicDriveFromReactor(url);\n }\n }}\n onOpenChange={(status) => {\n if (!status) return closePHModal();\n }}\n appOptions={\n appModules?.map((pkg) => ({\n id: pkg.config.id,\n name: pkg.config.name,\n sharingType: \"LOCAL\",\n availableOffline: false,\n })) || []\n }\n />\n );\n}\n"],"mappings":";;;;;;AAkBA,eAAe,8BACb,KACA,SACuC;CACvC,MAAM,WAAW,MAAM,MAAM,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,CAAC;AAC7D,KAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,QAAQ,SAAS,SAAS;AAE5C,QAAQ,MAAM,SAAS,MAAM;;AAG/B,SAAgB,gBAAgB;CAE9B,MAAM,OADU,YAAY,EACN,SAAS;CAC/B,MAAM,OAAO,SAAS;CACtB,MAAM,SAAS,WAAW;CAC1B,MAAM,aAAa,eAAe;CAClC,MAAM,kBAAkB,OAAO,SAAqB;AAClD,MAAI;GACF,MAAM,MAAM,YAAY,MAAM,MAAM,EAAE,OAAO,OAAO,KAAK,GAAG;GAC5D,MAAM,WAAW,MAAM,SACrB;IACE,IAAI;IACJ,MAAM;IACN,QAAQ;KACN,MAAM,KAAK;KACX,MAAM;KACP;IACD,OAAO;KACL,kBAAkB,KAAK;KACvB,aAAa,KAAK,YAAY,aAAa;KAC3C,WAAW,EAAE;KACb,UAAU,EAAE;KACb;IACF,EACD,KAAK,OAAO,GACb;AAED,WAAM,EAAE,gCAAgC,EAAE,EACxC,MAAM,mBACP,CAAC;AAEF,OAAI,CAAC,SACH;AAGF,oBAAiB,SAAS;WACnB,GAAG;AACV,WAAQ,MAAM,EAAE;;;CAIpB,MAAM,mBAAmB,OAAO,SAA8B;AAC5D,MAAI;GACF,MAAM,UAAU,MAAM,eAAe,KAAK,KAAK,KAAK,GAAG;AAEvD,WAAM,EAAE,gCAAgC,EAAE,EACxC,MAAM,mBACP,CAAC;AAEF,oBAAiB,QAAQ;WAClB,GAAG;AACV,WAAQ,MAAM,EAAE;;;CAGpB,eAAe,sBAAsB,MAAkB;AACrD,QAAM,gBAAgB,KAAK;AAC3B,gBAAc;;CAGhB,eAAe,uBAAuB,MAA2B;AAC/D,QAAM,iBAAiB,KAAK;AAC5B,gBAAc;;CAGhB,MAAM,QAAQ,CAAC,CAAC,YAAY;AAE5B,QACE,oBAACA,iBAAD;EACE,MAAM,QAAQ;EACd,iBAAiB;EACjB,kBAAkB;EAClB,oBAAoB,OAAO,QAAgB;AACzC,OAAI;AACF,QAAI,KAKF,QAAO,8BAA8B,KAAK,EACxC,eAAe,UALC,MAAM,QAAQ,iBAAiB;KAC/C,WAAW;KACX,KAAK;KACN,CAAC,IAGD,CAAC;AAEJ,WAAO,8BAA8B,IAAI;YAClC,OAAO;AACd,YAAQ,MAAM,MAAM;AACpB,WAAO,8BAA8B,IAAI;;;EAG7C,eAAe,WAAW;AACxB,OAAI,CAAC,OAAQ,QAAO,cAAc;;EAEpC,YACE,YAAY,KAAK,SAAS;GACxB,IAAI,IAAI,OAAO;GACf,MAAM,IAAI,OAAO;GACjB,aAAa;GACb,kBAAkB;GACnB,EAAE,IAAI,EAAE;EAEX,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as clearReactorStorage } from "./reactor-
|
|
1
|
+
import { t as clearReactorStorage } from "./reactor-DiCrb7Gu.js";
|
|
2
2
|
import { closePHModal, setSelectedDrive, setSelectedNode, showPHModal, usePHModal } from "@powerhousedao/reactor-browser";
|
|
3
3
|
import { childLogger } from "document-model";
|
|
4
4
|
import { useState } from "react";
|
|
@@ -41,4 +41,4 @@ function ClearStorageModal() {
|
|
|
41
41
|
//#endregion
|
|
42
42
|
export { ClearStorageModal };
|
|
43
43
|
|
|
44
|
-
//# sourceMappingURL=ClearStorageModal-
|
|
44
|
+
//# sourceMappingURL=ClearStorageModal-D3E7NK-K.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClearStorageModal-
|
|
1
|
+
{"version":3,"file":"ClearStorageModal-D3E7NK-K.js","names":["logger"],"sources":["../src/components/modal/modals/ClearStorageModal.tsx"],"sourcesContent":["import { clearReactorStorage } from \"@powerhousedao/connect/store\";\nimport { ConnectConfirmationModal } from \"@powerhousedao/design-system/connect\";\nimport {\n closePHModal,\n setSelectedDrive,\n setSelectedNode,\n showPHModal,\n usePHModal,\n} from \"@powerhousedao/reactor-browser\";\nimport { childLogger } from \"document-model\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nconst logger = childLogger([\"ClearStorage\"]);\n\nexport function ClearStorageModal() {\n const phModal = usePHModal();\n const open = phModal?.type === \"clearStorage\";\n const { t } = useTranslation();\n const [loading, setLoading] = useState(false);\n\n function clearStorage() {\n setLoading(true);\n clearReactorStorage()\n .then(() => {\n logger.info(\"Storage cleared\");\n setSelectedDrive(undefined);\n setSelectedNode(undefined);\n window.location.reload();\n })\n .catch((error) => {\n logger.error(\"Error clearing storage: @error\", error);\n setLoading(false);\n });\n }\n\n return (\n <ConnectConfirmationModal\n open={open}\n header={t(\"modals.connectSettings.clearStorage.confirmation.title\")}\n title={t(\"modals.connectSettings.clearStorage.confirmation.title\")}\n body={t(\"modals.connectSettings.clearStorage.confirmation.body\")}\n cancelLabel={t(\"common.cancel\")}\n continueLabel={t(\n \"modals.connectSettings.clearStorage.confirmation.clearButton\",\n )}\n onCancel={() => showPHModal({ type: \"settings\" })}\n onContinue={clearStorage}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n continueButtonProps={{\n disabled: loading,\n }}\n />\n );\n}\n"],"mappings":";;;;;;;;AAaA,MAAMA,WAAS,YAAY,CAAC,eAAe,CAAC;AAE5C,SAAgB,oBAAoB;CAElC,MAAM,OADU,YAAY,EACN,SAAS;CAC/B,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;CAE7C,SAAS,eAAe;AACtB,aAAW,KAAK;AAChB,uBAAqB,CAClB,WAAW;AACV,YAAO,KAAK,kBAAkB;AAC9B,oBAAiB,KAAA,EAAU;AAC3B,mBAAgB,KAAA,EAAU;AAC1B,UAAO,SAAS,QAAQ;IACxB,CACD,OAAO,UAAU;AAChB,YAAO,MAAM,kCAAkC,MAAM;AACrD,cAAW,MAAM;IACjB;;AAGN,QACE,oBAAC,0BAAD;EACQ;EACN,QAAQ,EAAE,yDAAyD;EACnE,OAAO,EAAE,yDAAyD;EAClE,MAAM,EAAE,wDAAwD;EAChE,aAAa,EAAE,gBAAgB;EAC/B,eAAe,EACb,+DACD;EACD,gBAAgB,YAAY,EAAE,MAAM,YAAY,CAAC;EACjD,YAAY;EACZ,eAAe,WAAoB;AACjC,OAAI,CAAC,OAAQ,QAAO,cAAc;;EAEpC,qBAAqB,EACnB,UAAU,SACX;EACD,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as useRegistryPackages } from "./useRegistryPackages-
|
|
1
|
+
import { t as useRegistryPackages } from "./useRegistryPackages-DSzf8iPN.js";
|
|
2
2
|
import { closePHModal, usePHModal, useVetraPackageManager } from "@powerhousedao/reactor-browser";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
import { MissingPackageModal } from "@powerhousedao/design-system/connect/index";
|
|
@@ -30,4 +30,4 @@ function ConnectMissingPackageModal() {
|
|
|
30
30
|
//#endregion
|
|
31
31
|
export { ConnectMissingPackageModal };
|
|
32
32
|
|
|
33
|
-
//# sourceMappingURL=MissingPackageModal-
|
|
33
|
+
//# sourceMappingURL=MissingPackageModal-DM-yLsFK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MissingPackageModal-
|
|
1
|
+
{"version":3,"file":"MissingPackageModal-DM-yLsFK.js","names":[],"sources":["../src/components/modal/modals/MissingPackageModal.tsx"],"sourcesContent":["import { useRegistryPackages } from \"@powerhousedao/connect/hooks\";\nimport { MissingPackageModal } from \"@powerhousedao/design-system/connect/index\";\nimport {\n closePHModal,\n usePHModal,\n useVetraPackageManager,\n} from \"@powerhousedao/reactor-browser\";\n\nexport function ConnectMissingPackageModal() {\n const phModal = usePHModal();\n const { registryPackageList, updateRegistryPackageStatus } =\n useRegistryPackages();\n const packageManager = useVetraPackageManager();\n const open = phModal?.type === \"missingPackage\";\n\n const documentType = open ? phModal.documentType : undefined;\n\n if (!packageManager || !documentType) return null;\n\n async function onInstall(packageName: string) {\n const result = await packageManager?.addPackage(packageName);\n if (result?.type === \"success\") {\n updateRegistryPackageStatus(packageName, \"registry-install\");\n }\n }\n\n function onDismiss(packageName: string) {\n updateRegistryPackageStatus(packageName, \"dismissed\");\n }\n\n const requiredPackages = registryPackageList.filter((rp) =>\n rp.documentTypes.includes(documentType),\n );\n\n return (\n <MissingPackageModal\n documentType={documentType}\n requiredPackages={requiredPackages}\n open={open}\n onInstall={onInstall}\n onDismiss={onDismiss}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n />\n );\n}\n"],"mappings":";;;;;AAQA,SAAgB,6BAA6B;CAC3C,MAAM,UAAU,YAAY;CAC5B,MAAM,EAAE,qBAAqB,gCAC3B,qBAAqB;CACvB,MAAM,iBAAiB,wBAAwB;CAC/C,MAAM,OAAO,SAAS,SAAS;CAE/B,MAAM,eAAe,OAAO,QAAQ,eAAe,KAAA;AAEnD,KAAI,CAAC,kBAAkB,CAAC,aAAc,QAAO;CAE7C,eAAe,UAAU,aAAqB;AAE5C,OADe,MAAM,gBAAgB,WAAW,YAAY,GAChD,SAAS,UACnB,6BAA4B,aAAa,mBAAmB;;CAIhE,SAAS,UAAU,aAAqB;AACtC,8BAA4B,aAAa,YAAY;;AAOvD,QACE,oBAAC,qBAAD;EACgB;EACd,kBAPqB,oBAAoB,QAAQ,OACnD,GAAG,cAAc,SAAS,aAAa,CACxC;EAMS;EACK;EACA;EACX,eAAe,WAAoB;AACjC,OAAI,CAAC,OAAQ,QAAO,cAAc;;EAEpC,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as connectConfig } from "./connect.config-DDu1QWU1.js";
|
|
2
2
|
import { t as toast$1 } from "./toast-iD-70hL8.js";
|
|
3
|
-
import { t as useRegistryPackages } from "./useRegistryPackages-
|
|
4
|
-
import { t as package_default } from "./package-
|
|
3
|
+
import { t as useRegistryPackages } from "./useRegistryPackages-DSzf8iPN.js";
|
|
4
|
+
import { t as package_default } from "./package-CAvEMIil.js";
|
|
5
5
|
import { closePHModal, deleteDrive, setSelectedDrive, showPHModal, useDrives, usePHModal, useVetraPackageManager } from "@powerhousedao/reactor-browser";
|
|
6
6
|
import { useCallback, useMemo, useState } from "react";
|
|
7
7
|
import { About, DangerZone, DefaultEditor, PackageManager, SettingsModal as SettingsModal$1 } from "@powerhousedao/design-system/connect";
|
|
@@ -150,4 +150,4 @@ const SettingsModal = () => {
|
|
|
150
150
|
//#endregion
|
|
151
151
|
export { SettingsModal };
|
|
152
152
|
|
|
153
|
-
//# sourceMappingURL=SettingsModal-
|
|
153
|
+
//# sourceMappingURL=SettingsModal-DKMukahc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsModal-
|
|
1
|
+
{"version":3,"file":"SettingsModal-DKMukahc.js","names":["About","BaseAbout","packageJson","DangerZone","BaseDangerZone","DefaultEditor","BaseDefaultEditor","DefaultEditor","DangerZone","About","SettingsModalV2"],"sources":["../src/components/modal/modals/settings/about.tsx","../src/components/modal/modals/settings/danger-zone.tsx","../src/components/modal/modals/settings/default-editor.tsx","../src/components/modal/modals/settings/package-manager.tsx","../src/components/modal/modals/SettingsModal.tsx"],"sourcesContent":["import { connectConfig } from \"@powerhousedao/connect/config\";\nimport { packageJson } from \"@powerhousedao/connect/utils\";\nimport { About as BaseAbout } from \"@powerhousedao/design-system/connect\";\n\nexport const About: React.FC = () => {\n return (\n <BaseAbout\n packageJson={packageJson}\n phCliVersion={\n typeof connectConfig.phCliVersion === \"string\"\n ? connectConfig.phCliVersion\n : undefined\n }\n />\n );\n};\n","import { DangerZone as BaseDangerZone } from \"@powerhousedao/design-system/connect\";\nimport {\n deleteDrive,\n setSelectedDrive,\n showPHModal,\n useDrives,\n} from \"@powerhousedao/reactor-browser\";\nimport type { DocumentDriveDocument } from \"@powerhousedao/shared/document-drive\";\n\nexport const DangerZone: React.FC = () => {\n const drives = useDrives();\n\n const handleDeleteDrive = async (drive: DocumentDriveDocument) => {\n await deleteDrive(drive.header.id);\n setSelectedDrive(undefined);\n };\n\n const handleClearStorage = () => {\n showPHModal({ type: \"clearStorage\" });\n };\n\n return (\n <BaseDangerZone\n drives={drives ?? []}\n onDeleteDrive={handleDeleteDrive}\n onClearStorage={handleClearStorage}\n />\n );\n};\n","import { DefaultEditor as BaseDefaultEditor } from \"@powerhousedao/design-system/connect\";\nimport { useCallback, useState } from \"react\";\n\nconst documentModelEditorOptions = [\n { label: \"V1\", value: \"document-model-editor\" },\n { label: \"V2\", value: \"document-model-editor-v2\" },\n] as const;\n\nexport const DefaultEditor: React.FC = () => {\n const [documentModelEditor, setDocumentModelEditor] = useState<\n (typeof documentModelEditorOptions)[number]\n >(documentModelEditorOptions[1]);\n\n const handleSetDocumentEditor = useCallback((value: string) => {\n const option = documentModelEditorOptions.find((dm) => dm.value == value);\n if (option) {\n setDocumentModelEditor(option);\n }\n }, []);\n\n return (\n <BaseDefaultEditor\n documentModelEditor={documentModelEditor.value}\n setDocumentModelEditor={handleSetDocumentEditor}\n documentModelEditorOptions={\n documentModelEditorOptions as unknown as {\n value: string;\n label: string;\n }[]\n }\n />\n );\n};\n","import { useRegistryPackages } from \"@powerhousedao/connect/hooks\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport { PackageManager } from \"@powerhousedao/design-system/connect\";\nimport { useVetraPackageManager } from \"@powerhousedao/reactor-browser\";\nimport React from \"react\";\n\nexport const ConnectPackageManager: React.FC = () => {\n const packageManager = useVetraPackageManager();\n const { registryPackageList, updateRegistryPackageStatus } =\n useRegistryPackages();\n\n async function handleInstall(packageName: string) {\n if (!packageManager) return;\n\n const result = await packageManager.addPackage(packageName);\n if (result.type === \"success\") {\n updateRegistryPackageStatus(packageName, \"registry-install\");\n toast(`Package \"${packageName}\" installed successfully`, {\n type: \"connect-success\",\n });\n } else {\n const message = result.error.message;\n toast(`Failed to install \"${packageName}\": ${message}`, {\n type: \"error\",\n });\n }\n }\n\n function handleUninstall(packageName: string) {\n if (!packageManager) return;\n try {\n packageManager.removePackage(packageName);\n updateRegistryPackageStatus(packageName, \"available\");\n\n toast(`Package \"${packageName}\" uninstalled successfully`, {\n type: \"connect-success\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n toast(`Failed to uninstall \"${packageName}\": ${message}`, {\n type: \"error\",\n });\n }\n }\n\n return (\n <div className=\"flex h-full flex-1 flex-col\">\n <PackageManager\n mutable={true}\n registryPackageList={registryPackageList}\n onInstall={handleInstall}\n onUninstall={handleUninstall}\n />\n </div>\n );\n};\n","import { Icon } from \"@powerhousedao/design-system\";\nimport { SettingsModal as SettingsModalV2 } from \"@powerhousedao/design-system/connect\";\nimport { closePHModal, usePHModal } from \"@powerhousedao/reactor-browser\";\nimport { t } from \"i18next\";\nimport React, { useMemo } from \"react\";\nimport { About } from \"./settings/about.js\";\nimport { DangerZone } from \"./settings/danger-zone.js\";\nimport { DefaultEditor } from \"./settings/default-editor.js\";\nimport { ConnectPackageManager } from \"./settings/package-manager.js\";\n\nexport const SettingsModal: React.FC = () => {\n const phModal = usePHModal();\n const open = phModal?.type === \"settings\";\n function onRefresh() {\n window.location.reload();\n }\n\n const tabs = useMemo(\n () => [\n {\n id: \"package-manager\",\n icon: <Icon name=\"PackageManager\" size={12} />,\n label: \"Package Manager\",\n content: ConnectPackageManager,\n },\n {\n id: \"default-editors\",\n icon: <Icon name=\"Edit\" size={12} />,\n label: \"Default Editors\",\n content: DefaultEditor,\n },\n {\n id: \"danger-zone\",\n icon: <Icon name=\"Danger\" size={12} className=\"text-red-900\" />,\n label: <span className=\"text-red-900\">Danger Zone</span>,\n content: () => <DangerZone />,\n },\n {\n id: \"about\",\n icon: <Icon name=\"QuestionSquare\" size={12} />,\n label: \"About\",\n content: About,\n },\n ],\n [onRefresh],\n );\n\n return (\n <SettingsModalV2\n open={open}\n title={t(\"modals.connectSettings.title\")}\n onOpenChange={(status: boolean) => {\n if (!status) return closePHModal();\n }}\n tabs={tabs}\n />\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as connectConfig } from "./connect.config-DDu1QWU1.js";
|
|
2
2
|
import { t as toast } from "./toast-iD-70hL8.js";
|
|
3
|
-
import { t as package_default } from "./package-
|
|
4
|
-
import { n as createReactor } from "./reactor-
|
|
3
|
+
import { t as package_default } from "./package-CAvEMIil.js";
|
|
4
|
+
import { n as createReactor } from "./reactor-DiCrb7Gu.js";
|
|
5
5
|
import { useUser } from "@powerhousedao/reactor-browser";
|
|
6
6
|
import { logger } from "document-model";
|
|
7
7
|
import { createElement, useEffect } from "react";
|
|
@@ -102,4 +102,4 @@ async function loadComponent(localPackage) {
|
|
|
102
102
|
//#endregion
|
|
103
103
|
export { loadComponent };
|
|
104
104
|
|
|
105
|
-
//# sourceMappingURL=load-
|
|
105
|
+
//# sourceMappingURL=load-BlDFD8IU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-
|
|
1
|
+
{"version":3,"file":"load-BlDFD8IU.js","names":["packageJson"],"sources":["../src/components/reload-connect-toast.tsx","../src/hooks/useCheckLatestVersion.ts","../src/hooks/utils.ts","../src/store/user.ts","../src/components/load.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\n\nexport const ReloadConnectToast = () => {\n const { t } = useTranslation();\n\n return (\n <div>\n <p className=\"font-medium\">{t(\"notifications.reloadApp\")}</p>\n <button\n onClick={() => location.reload()}\n className=\"underline decoration-solid underline-offset-2\"\n >\n {t(\"common.reloadConnect\")} 🔄\n </button>\n </div>\n );\n};\n","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 { setUser as setSentryUser } from \"@sentry/react\";\nimport { useEffect } from \"react\";\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, ...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 type { DocumentModelLib } from \"document-model\";\nimport { type ReactNode } from \"react\";\n\nexport async function loadComponent(localPackage?: DocumentModelLib) {\n await createReactor(localPackage);\n return {\n default: ({ children }: { children?: ReactNode }) => {\n useSetSentryUser();\n useCheckLatestVersion();\n return children;\n },\n };\n}\n"],"mappings":";;;;;;;;;;;AAEA,MAAa,2BAA2B;CACtC,MAAM,EAAE,MAAM,gBAAgB;AAE9B,QACE,qBAAC,OAAD,EAAA,UAAA,CACE,oBAAC,KAAD;EAAG,WAAU;YAAe,EAAE,0BAA0B;EAAK,CAAA,EAC7D,qBAAC,UAAD;EACE,eAAe,SAAS,QAAQ;EAChC,WAAU;YAFZ,CAIG,EAAE,uBAAuB,EAAC,MACpB;IACL,EAAA,CAAA;;;;ACPV,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,GAAG,SAAS;AAChC,gBAAa;IAAE,IAAI,KAAK;IAAK,UAAU,KAAK,KAAK;IAAM,GAAG;IAAM;;AAElE,UAAc,WAAW;IACxB,CAAC,KAAK,CAAC;;;;ACTZ,eAAsB,cAAc,cAAiC;AACnE,OAAM,cAAc,aAAa;AACjC,QAAO,EACL,UAAU,EAAE,eAAyC;AACnD,oBAAkB;AAClB,yBAAuB;AACvB,SAAO;IAEV"}
|
package/dist/main.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
var package_default = {
|
|
3
3
|
name: "@powerhousedao/connect",
|
|
4
4
|
productName: "Powerhouse-Connect",
|
|
5
|
-
version: "6.0.0-dev.
|
|
5
|
+
version: "6.0.0-dev.148",
|
|
6
6
|
description: "Powerhouse Connect",
|
|
7
7
|
main: "dist/index.html",
|
|
8
8
|
type: "module",
|
|
@@ -106,4 +106,4 @@ var package_default = {
|
|
|
106
106
|
//#endregion
|
|
107
107
|
export { package_default as t };
|
|
108
108
|
|
|
109
|
-
//# sourceMappingURL=package-
|
|
109
|
+
//# sourceMappingURL=package-CAvEMIil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-CAvEMIil.js","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import { i as phGlobalConfigFromEnv, t as connectConfig } from "./connect.config-DDu1QWU1.js";
|
|
2
2
|
import { t as toast } from "./toast-iD-70hL8.js";
|
|
3
|
-
import { BrowserLocalStorage,
|
|
4
|
-
import { ConsoleLogger,
|
|
5
|
-
import { DocumentModelEditor, GenericDriveExplorer } from "@powerhousedao/powerhouse-vetra-packages/editors";
|
|
3
|
+
import { BrowserLocalStorage, ChannelScheme, DocumentCache, DocumentChangeType, ReactorBuilder, ReactorClientBuilder, addPHEventHandlers, addRemoteDrive, createAnalyticsStore, dropAllReactorStorage, extractDriveSlugFromPath, extractNodeSlugFromPath, getDrives, login, refreshReactorDataClient, setDefaultPHGlobalConfig, setDocumentCache, setDrives, setFeatures, setPHToast, setReactorClient, setReactorClientModule, setRenown, setSelectedDrive, setSelectedNode, setVetraPackageManager } from "@powerhousedao/reactor-browser";
|
|
4
|
+
import { ConsoleLogger, logger, setLogLevel as setLogLevel$1 } from "document-model";
|
|
6
5
|
import { PGlite } from "@electric-sql/pglite";
|
|
7
6
|
import { BrowserKeyStorage, RenownBuilder, RenownCryptoBuilder, createSignatureVerifier } from "@renown/sdk";
|
|
8
7
|
import { Kysely } from "kysely";
|
|
9
8
|
import { PGliteDialect } from "kysely-pglite-dialect";
|
|
10
|
-
import { createState, defaultBaseState } from "@powerhousedao/shared/document-model";
|
|
11
9
|
import { live } from "@electric-sql/pglite/live";
|
|
12
10
|
import { PGliteWorker } from "@electric-sql/pglite/worker";
|
|
13
11
|
import { createRelationalDb } from "@powerhousedao/shared/processors";
|
|
14
|
-
import { driveDocumentModelModule } from "@powerhousedao/shared/document-drive";
|
|
15
12
|
import { OpenFeature } from "@openfeature/web-sdk";
|
|
16
|
-
import * as
|
|
13
|
+
import * as common from "@powerhousedao/powerhouse-vetra-packages";
|
|
14
|
+
import * as vetra from "@powerhousedao/vetra";
|
|
17
15
|
//#region src/utils/reactor.ts
|
|
18
16
|
/**
|
|
19
17
|
* Creates a Reactor that plugs into legacy storage but syncs through the new
|
|
@@ -61,58 +59,6 @@ async function addDefaultDrivesForNewReactor(defaultDriveUrls) {
|
|
|
61
59
|
}
|
|
62
60
|
}
|
|
63
61
|
//#endregion
|
|
64
|
-
//#region src/store/document-model.ts
|
|
65
|
-
function loadDocumentModelDocumentModelModule() {
|
|
66
|
-
const global = documentModelDocumentModelModule.documentModel.global;
|
|
67
|
-
const name = global.name;
|
|
68
|
-
const documentType = global.id;
|
|
69
|
-
return {
|
|
70
|
-
id: documentType,
|
|
71
|
-
name,
|
|
72
|
-
documentType,
|
|
73
|
-
extension: global.extension,
|
|
74
|
-
specifications: global.specifications,
|
|
75
|
-
reducer: documentModelDocumentModelModule.reducer,
|
|
76
|
-
actions: documentModelDocumentModelModule.actions,
|
|
77
|
-
utils: documentModelDocumentModelModule.utils,
|
|
78
|
-
documentModel: createState(defaultBaseState(), global)
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
function loadDriveDocumentModelModule() {
|
|
82
|
-
const global = driveDocumentModelModule.documentModel.global;
|
|
83
|
-
const name = global.name;
|
|
84
|
-
const documentType = global.id;
|
|
85
|
-
return {
|
|
86
|
-
id: documentType,
|
|
87
|
-
name,
|
|
88
|
-
documentType,
|
|
89
|
-
extension: global.extension,
|
|
90
|
-
specifications: global.specifications,
|
|
91
|
-
reducer: driveDocumentModelModule.reducer,
|
|
92
|
-
actions: driveDocumentModelModule.actions,
|
|
93
|
-
utils: driveDocumentModelModule.utils,
|
|
94
|
-
documentModel: createState(defaultBaseState(), global)
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
//#endregion
|
|
98
|
-
//#region src/store/editor.ts
|
|
99
|
-
function loadGenericDriveExplorerEditorModule() {
|
|
100
|
-
return {
|
|
101
|
-
id: DEFAULT_DRIVE_EDITOR_ID,
|
|
102
|
-
name: "Generic Drive Explorer",
|
|
103
|
-
documentTypes: ["powerhouse/document-drive"],
|
|
104
|
-
Component: GenericDriveExplorer.Component
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
function loadDocumentModelEditor() {
|
|
108
|
-
return {
|
|
109
|
-
id: "document-model-editor-v2",
|
|
110
|
-
name: "Document Model Editor",
|
|
111
|
-
documentTypes: ["powerhouse/document-model"],
|
|
112
|
-
Component: DocumentModelEditor.Component
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
//#endregion
|
|
116
62
|
//#region src/feature-flags.ts
|
|
117
63
|
/**
|
|
118
64
|
* QueryParamProvider reads feature flags from URL query parameters.
|
|
@@ -231,10 +177,9 @@ const FEATURE_INSPECTOR_ENABLED_DEFAULT = false;
|
|
|
231
177
|
//#endregion
|
|
232
178
|
//#region src/package-manager.ts
|
|
233
179
|
const LOCAL_PACKAGE_NAME = "Local";
|
|
234
|
-
const COMMON_PACKAGE_NAME = "Common";
|
|
235
180
|
const LOCAL_PACKAGES = [
|
|
236
181
|
LOCAL_PACKAGE_NAME,
|
|
237
|
-
|
|
182
|
+
"Common",
|
|
238
183
|
"@powerhousedao/vetra"
|
|
239
184
|
];
|
|
240
185
|
var BrowserPackageManager = class {
|
|
@@ -258,8 +203,8 @@ var BrowserPackageManager = class {
|
|
|
258
203
|
async init(localPackage) {
|
|
259
204
|
const commonPackageWithMeta = this.#loadCommonPackage();
|
|
260
205
|
this.#registerPackage(commonPackageWithMeta);
|
|
261
|
-
const
|
|
262
|
-
this.#registerPackage(
|
|
206
|
+
const vetraPackageWithMeta = this.#loadVetraPackage();
|
|
207
|
+
this.#registerPackage(vetraPackageWithMeta);
|
|
263
208
|
if (localPackage) {
|
|
264
209
|
this.#localPackage = localPackage;
|
|
265
210
|
this.#registerPackage({
|
|
@@ -276,7 +221,7 @@ var BrowserPackageManager = class {
|
|
|
276
221
|
}
|
|
277
222
|
getPackageSource(packageName) {
|
|
278
223
|
if (LOCAL_PACKAGES.includes(packageName)) return "common";
|
|
279
|
-
if (packageName === this.#localPackage?.name) return "project";
|
|
224
|
+
if (packageName === this.#localPackage?.manifest.name) return "project";
|
|
280
225
|
const packageMeta = this.#storage.get(packageName);
|
|
281
226
|
if (!packageMeta) return null;
|
|
282
227
|
if (packageMeta.importUrl === `/node_modules/${packageName}`) return "local-install";
|
|
@@ -323,43 +268,24 @@ var BrowserPackageManager = class {
|
|
|
323
268
|
};
|
|
324
269
|
}
|
|
325
270
|
load(documentType) {
|
|
326
|
-
const documentModelModule = Array.from(this.#packages.values().flatMap((p) => p.
|
|
271
|
+
const documentModelModule = Array.from(this.#packages.values().flatMap((p) => p.documentModels)).find((m) => m.documentModel.global.id === documentType);
|
|
327
272
|
if (documentModelModule) return Promise.resolve(documentModelModule);
|
|
328
273
|
return Promise.reject(/* @__PURE__ */ new Error("Model not available"));
|
|
329
274
|
}
|
|
330
275
|
#loadCommonPackage() {
|
|
331
|
-
const documentModelDocumentModelModule = loadDocumentModelDocumentModelModule();
|
|
332
|
-
const driveDocumentModelModule = loadDriveDocumentModelModule();
|
|
333
|
-
const documentModelEditorModule = loadDocumentModelEditor();
|
|
334
|
-
const genericDriveExplorerEditorModule = loadGenericDriveExplorerEditorModule();
|
|
335
|
-
const name = COMMON_PACKAGE_NAME;
|
|
336
276
|
return {
|
|
337
|
-
name,
|
|
277
|
+
name: common.manifest.name,
|
|
338
278
|
importUrl: null,
|
|
339
279
|
stylesheetUrl: null,
|
|
340
|
-
loadedPackage:
|
|
341
|
-
id: COMMON_PACKAGE_ID,
|
|
342
|
-
name,
|
|
343
|
-
description: "Common",
|
|
344
|
-
category: "Common",
|
|
345
|
-
author: {
|
|
346
|
-
name: "Powerhouse",
|
|
347
|
-
website: "https://powerhousedao.com"
|
|
348
|
-
},
|
|
349
|
-
modules: {
|
|
350
|
-
documentModelModules: [documentModelDocumentModelModule, driveDocumentModelModule],
|
|
351
|
-
editorModules: [documentModelEditorModule, genericDriveExplorerEditorModule]
|
|
352
|
-
},
|
|
353
|
-
upgradeManifests: []
|
|
354
|
-
}
|
|
280
|
+
loadedPackage: common
|
|
355
281
|
};
|
|
356
282
|
}
|
|
357
283
|
#loadVetraPackage() {
|
|
358
284
|
return {
|
|
359
|
-
name:
|
|
285
|
+
name: vetra.manifest.name,
|
|
360
286
|
importUrl: null,
|
|
361
287
|
stylesheetUrl: null,
|
|
362
|
-
loadedPackage:
|
|
288
|
+
loadedPackage: vetra
|
|
363
289
|
};
|
|
364
290
|
}
|
|
365
291
|
async #loadPackageFromNodeModules(name) {
|
|
@@ -385,10 +311,10 @@ var BrowserPackageManager = class {
|
|
|
385
311
|
if (!importUrl) throw new Error(`Import url not defined for package "${name}".`);
|
|
386
312
|
return {
|
|
387
313
|
name,
|
|
388
|
-
loadedPackage:
|
|
314
|
+
loadedPackage: await import(
|
|
389
315
|
/* @vite-ignore */
|
|
390
316
|
importUrl
|
|
391
|
-
)
|
|
317
|
+
),
|
|
392
318
|
importUrl,
|
|
393
319
|
stylesheetUrl
|
|
394
320
|
};
|
|
@@ -509,7 +435,7 @@ async function createReactor(localPackage) {
|
|
|
509
435
|
(await packageManager.addPackages(packagesConfig.packages)).map((r) => {
|
|
510
436
|
if (r.type === "error") console.error(r.error);
|
|
511
437
|
});
|
|
512
|
-
const reactorClientModule = await createBrowserReactor(packageManager.packages.flatMap((pkg) => pkg.
|
|
438
|
+
const reactorClientModule = await createBrowserReactor(packageManager.packages.flatMap((pkg) => pkg.documentModels).filter((module, index, modules) => modules.findIndex((m) => m.documentModel.global.id === module.documentModel.global.id && m.version === module.version) === index), packageManager.packages.flatMap((pkg) => pkg.upgradeManifests).filter((u) => u !== void 0), renown);
|
|
513
439
|
const drives = await getDrives(reactorClientModule.client);
|
|
514
440
|
const path = window.location.pathname;
|
|
515
441
|
const driveSlug = extractDriveSlugFromPath(path);
|
|
@@ -559,10 +485,13 @@ async function createReactor(localPackage) {
|
|
|
559
485
|
if (packagesWithProcessorFactories.length > 0) {
|
|
560
486
|
const processorHostModule = await createProcessorHostModule();
|
|
561
487
|
if (processorHostModule !== void 0) await Promise.all(packagesWithProcessorFactories.map(async (pkg) => {
|
|
562
|
-
const {
|
|
488
|
+
const { manifest, processorFactory } = pkg;
|
|
489
|
+
const name = manifest.name;
|
|
490
|
+
const id = manifest.name;
|
|
563
491
|
logger.info("Loading processor factory: @name", name);
|
|
564
492
|
try {
|
|
565
|
-
const factory = await processorFactory(processorHostModule);
|
|
493
|
+
const factory = await processorFactory?.(processorHostModule);
|
|
494
|
+
if (!factory) return;
|
|
566
495
|
await reactorClientModule.reactorModule?.processorManager.registerFactory(id, factory);
|
|
567
496
|
} catch (error) {
|
|
568
497
|
logger.error(`Error registering processor: @name`, name);
|
|
@@ -583,4 +512,4 @@ function getDriveUrl() {
|
|
|
583
512
|
//#endregion
|
|
584
513
|
export { createReactor as n, clearReactorStorage as t };
|
|
585
514
|
|
|
586
|
-
//# sourceMappingURL=reactor-
|
|
515
|
+
//# sourceMappingURL=reactor-DiCrb7Gu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactor-DiCrb7Gu.js","names":["#storage","#cdnUrl","#toCdnUrl","#loadCommonPackage","#registerPackage","#loadVetraPackage","#localPackage","#packagesMemo","#packages","#loadPackage","#unmountStylesheet","#notifyPackagesChanged","#subscribers","#loadPackageFromNodeModules","#importPackage","#loadPackageFromRegistry","#mountStylesheet","#stylesheets"],"sources":["../src/utils/reactor.ts","../src/feature-flags.ts","../src/package-manager.ts","../src/packages.config.ts","../src/pglite.db.ts","../src/store/processor-host-module.ts","../src/store/reactor.ts"],"sourcesContent":["import { PGlite } from \"@electric-sql/pglite\";\nimport {\n addRemoteDrive,\n ChannelScheme,\n ReactorBuilder,\n ReactorClientBuilder,\n type BrowserReactorClientModule,\n type Database,\n type IDocumentModelLoader,\n type JwtHandler,\n type SignerConfig,\n} from \"@powerhousedao/reactor-browser\";\nimport type {\n DocumentModelModule,\n UpgradeManifest,\n} from \"@powerhousedao/shared/document-model\";\nimport { createSignatureVerifier, type IRenown } from \"@renown/sdk\";\nimport { ConsoleLogger } from \"document-model\";\nimport { Kysely } from \"kysely\";\nimport { PGliteDialect } from \"kysely-pglite-dialect\";\n\n/**\n * Creates a Reactor that plugs into legacy storage but syncs through the new\n * Reactor GQL API.\n */\nexport async function createBrowserReactor(\n documentModelModules: DocumentModelModule[],\n upgradeManifests: UpgradeManifest<readonly number[]>[],\n renown: IRenown,\n documentModelLoader?: IDocumentModelLoader,\n): Promise<BrowserReactorClientModule> {\n const signerConfig: SignerConfig = {\n signer: renown.signer,\n verifier: createSignatureVerifier(),\n };\n\n const jwtHandler: JwtHandler = async (url: string) => {\n if (!renown.user) {\n return undefined;\n }\n return renown.getBearerToken({ expiresIn: 10, aud: url });\n };\n\n const pg = new PGlite(\"idb://reactor\", {\n relaxedDurability: true,\n });\n const logger = new ConsoleLogger([\"reactor-client\"]);\n const builder = new ReactorClientBuilder()\n .withLogger(logger)\n .withSigner(signerConfig)\n .withReactorBuilder(\n new ReactorBuilder()\n .withDocumentModels(documentModelModules)\n .withUpgradeManifests(upgradeManifests)\n .withChannelScheme(ChannelScheme.CONNECT)\n .withJwtHandler(jwtHandler)\n .withKysely(\n new Kysely<Database>({\n dialect: new PGliteDialect(pg),\n }),\n ),\n );\n\n if (documentModelLoader) {\n builder.withDocumentModelLoader(documentModelLoader);\n }\n\n const module = await builder.buildModule();\n return {\n ...module,\n pg,\n } as BrowserReactorClientModule;\n}\n\n/**\n * Parse default drives from environment variable.\n * Returns an array of drive REST endpoint URLs (e.g., \"https://example.com/d/powerhouse\").\n */\nexport function getDefaultDrivesFromEnv(): string[] {\n const envValue = import.meta.env.PH_CONNECT_DEFAULT_DRIVES_URL as\n | string\n | undefined;\n if (!envValue) return [];\n return envValue.split(\",\").filter((url) => url.trim().length > 0);\n}\n\n/**\n * Add default drives for the new reactor via sync manager.\n * @param defaultDriveUrls - Array of drive REST endpoint URLs (e.g., \"https://example.com/d/powerhouse\")\n */\nexport async function addDefaultDrivesForNewReactor(\n defaultDriveUrls: string[],\n): Promise<void> {\n for (const url of defaultDriveUrls) {\n try {\n await addRemoteDrive(url);\n } catch (error) {\n console.error(`Failed to add default drive ${url}:`, error);\n }\n }\n}\n","import {\n OpenFeature,\n type ErrorCode,\n type JsonValue,\n type Provider,\n type ResolutionDetails,\n} from \"@openfeature/web-sdk\";\nimport { logger, setLogLevel, type ILogger } from \"document-model\";\nimport { connectConfig } from \"./connect.config.js\";\n\n/**\n * QueryParamProvider reads feature flags from URL query parameters.\n *\n * Usage:\n * const params = new URLSearchParams(window.location.search);\n * const provider = new QueryParamProvider(params);\n * await OpenFeature.setProviderAndWait(provider);\n *\n * Query parameter format:\n * ?FEATURE_DUAL_ACTION_CREATE_ENABLED=true&FEATURE_FOO=false\n */\nexport class QueryParamProvider implements Provider {\n public readonly runsOn = \"client\" as const;\n\n readonly metadata = {\n name: \"QueryParamProvider\",\n } as const;\n\n private flags: Map<string, string>;\n\n constructor(searchParams: URLSearchParams) {\n this.flags = new Map();\n\n // Extract all query parameters that look like feature flags\n for (const [key, value] of searchParams.entries()) {\n this.flags.set(key, value);\n }\n }\n\n resolveBooleanEvaluation(\n flagKey: string,\n defaultValue: boolean,\n ): ResolutionDetails<boolean> {\n const value = this.flags.get(flagKey);\n\n if (value === undefined) {\n return {\n value: defaultValue,\n reason: \"DEFAULT\",\n };\n }\n\n // Parse boolean from string\n const boolValue = value.toLowerCase() === \"true\" || value === \"1\";\n\n return {\n value: boolValue,\n reason: \"STATIC\",\n variant: value,\n };\n }\n\n resolveStringEvaluation(\n flagKey: string,\n defaultValue: string,\n ): ResolutionDetails<string> {\n const value = this.flags.get(flagKey);\n\n if (value === undefined) {\n return {\n value: defaultValue,\n reason: \"DEFAULT\",\n };\n }\n\n return {\n value,\n reason: \"STATIC\",\n variant: value,\n };\n }\n\n resolveNumberEvaluation(\n flagKey: string,\n defaultValue: number,\n ): ResolutionDetails<number> {\n const value = this.flags.get(flagKey);\n\n if (value === undefined) {\n return {\n value: defaultValue,\n reason: \"DEFAULT\",\n };\n }\n\n const numValue = Number(value);\n\n if (isNaN(numValue)) {\n return {\n value: defaultValue,\n reason: \"ERROR\",\n errorCode: \"PARSE_ERROR\" as ErrorCode,\n errorMessage: `Failed to parse \"${value}\" as a number`,\n };\n }\n\n return {\n value: numValue,\n reason: \"STATIC\",\n variant: value,\n };\n }\n\n resolveObjectEvaluation<T extends JsonValue>(\n flagKey: string,\n defaultValue: T,\n ): ResolutionDetails<T> {\n const value = this.flags.get(flagKey);\n\n if (value === undefined) {\n return {\n value: defaultValue,\n reason: \"DEFAULT\",\n };\n }\n\n try {\n const objValue = JSON.parse(value) as T;\n return {\n value: objValue,\n reason: \"STATIC\",\n variant: value,\n };\n } catch (error) {\n return {\n value: defaultValue,\n reason: \"ERROR\",\n errorCode: \"PARSE_ERROR\" as ErrorCode,\n errorMessage: `Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n}\n\n/**\n * Initialize OpenFeature with the QueryParamProvider.\n * Reads feature flags from query parameters.\n */\nexport async function initFeatureFlags(\n searchParams?: URLSearchParams,\n): Promise<Map<string, boolean>> {\n const params =\n searchParams ??\n (typeof window !== \"undefined\"\n ? new URLSearchParams(window.location.search)\n : new URLSearchParams());\n const provider = new QueryParamProvider(params);\n await OpenFeature.setProviderAndWait(provider);\n\n const features = new Map<string, boolean>();\n const client = OpenFeature.getClient();\n\n // Query param overrides env var for inspector\n const inspectorFromParam = params.has(FEATURE_INSPECTOR_ENABLED);\n const inspectorEnabled = inspectorFromParam\n ? client.getBooleanValue(\n FEATURE_INSPECTOR_ENABLED,\n FEATURE_INSPECTOR_ENABLED_DEFAULT,\n )\n : connectConfig.content.inspectorEnabled;\n features.set(FEATURE_INSPECTOR_ENABLED, inspectorEnabled);\n\n // Handle LOG_LEVEL query param override\n const logLevelParam = params.get(\"LOG_LEVEL\");\n if (logLevelParam) {\n const validLogLevels = [\"verbose\", \"debug\", \"info\", \"warn\", \"error\"];\n if (validLogLevels.includes(logLevelParam.toLowerCase())) {\n setLogLevel(logLevelParam.toLowerCase() as ILogger[\"level\"]);\n logger.info(\n \"Log level set to @level via query param\",\n logLevelParam.toLowerCase(),\n );\n } else {\n logger.warn(\n \"Invalid LOG_LEVEL query param: @param. Valid values: @validLevels\",\n logLevelParam,\n validLogLevels.join(\", \"),\n );\n }\n }\n\n return features;\n}\n\nconst FEATURE_INSPECTOR_ENABLED = \"FEATURE_INSPECTOR_ENABLED\";\nconst FEATURE_INSPECTOR_ENABLED_DEFAULT = false;\n\n/**\n * If true, shows the inspector button in the sidebar.\n * Defaults to false (hidden).\n */\nexport async function isInspectorEnabled(): Promise<boolean> {\n const client = OpenFeature.getClient();\n return Promise.resolve(\n client.getBooleanValue(\n FEATURE_INSPECTOR_ENABLED,\n FEATURE_INSPECTOR_ENABLED_DEFAULT,\n ),\n );\n}\n","import * as common from \"@powerhousedao/powerhouse-vetra-packages\";\nimport type {\n IPackagesListener,\n PackageManagerInstallResult,\n} from \"@powerhousedao/reactor-browser\";\nimport {\n BrowserLocalStorage,\n type IPackageListerUnsubscribe,\n type IPackageManager,\n} from \"@powerhousedao/reactor-browser\";\nimport {\n type DocumentModelLib,\n type DocumentModelModule,\n} from \"@powerhousedao/shared/document-model\";\nimport * as vetra from \"@powerhousedao/vetra\";\n\ntype PackageMeta = {\n name: string;\n importUrl: string | null;\n stylesheetUrl: string | null;\n};\n\ntype PackageWithMeta = PackageMeta & {\n loadedPackage: DocumentModelLib;\n};\n\nconst LOCAL_PACKAGE_NAME = \"Local\" as const;\nconst COMMON_PACKAGE_NAME = \"Common\" as const;\nconst VETRA_PACKAGE_NAME = \"@powerhousedao/vetra\" as const;\nconst LOCAL_PACKAGES: string[] = [\n LOCAL_PACKAGE_NAME,\n COMMON_PACKAGE_NAME,\n VETRA_PACKAGE_NAME,\n];\n\nexport class BrowserPackageManager implements IPackageManager {\n registryUrl: string | null;\n #storage: BrowserLocalStorage<PackageMeta>;\n #packages: Map<string, DocumentModelLib> = new Map();\n #subscribers = new Set<IPackagesListener>();\n #packagesMemo: DocumentModelLib[] = [];\n #stylesheets: Map<string, HTMLLinkElement> = new Map();\n #localPackage: DocumentModelLib | undefined;\n\n #cdnUrl: string | null;\n\n constructor(namespace: string, registryUrl: string | null) {\n this.#storage = new BrowserLocalStorage<PackageMeta>(\n namespace + \":PH_PACKAGES\",\n );\n this.registryUrl = registryUrl;\n this.#cdnUrl = registryUrl !== null ? this.#toCdnUrl(registryUrl) : null;\n }\n\n #toCdnUrl(baseUrl: string): string {\n if (baseUrl.includes(\"/-/cdn\")) return baseUrl;\n const base = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n return `${base}/-/cdn`;\n }\n\n async init(localPackage?: DocumentModelLib) {\n const commonPackageWithMeta = this.#loadCommonPackage();\n this.#registerPackage(commonPackageWithMeta);\n const vetraPackageWithMeta = this.#loadVetraPackage();\n this.#registerPackage(vetraPackageWithMeta);\n if (localPackage) {\n this.#localPackage = localPackage;\n this.#registerPackage({\n name: LOCAL_PACKAGE_NAME,\n stylesheetUrl: null,\n importUrl: null,\n loadedPackage: localPackage,\n });\n }\n for (const packageName of this.#storage.keys()) {\n await this.addPackage(packageName);\n }\n }\n\n get packages() {\n return this.#packagesMemo;\n }\n\n getPackageSource(packageName: string) {\n // check vs the constant name we use for common packages\n if (LOCAL_PACKAGES.includes(packageName)) {\n return \"common\";\n }\n // check if the package has the same name as the local project\n if (packageName === this.#localPackage?.manifest.name) return \"project\";\n const packageMeta = this.#storage.get(packageName);\n // if meta does not exist the package is not installed\n if (!packageMeta) return null;\n // if imported from node_modules then the package is installed locally\n if (packageMeta.importUrl === `/node_modules/${packageName}`)\n return \"local-install\";\n // all other import urls point to a registry\n return \"registry-install\";\n }\n\n async addPackage(packageName: string): Promise<PackageManagerInstallResult> {\n const existingPackage = this.#packages.get(packageName);\n if (existingPackage) {\n return {\n type: \"success\",\n package: existingPackage,\n };\n }\n try {\n const packageWithMeta = await this.#loadPackage(packageName);\n this.#registerPackage(packageWithMeta);\n\n return {\n type: \"success\",\n package: packageWithMeta.loadedPackage,\n };\n } catch (error) {\n return {\n type: \"error\",\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }\n\n async addPackages(packageNames: string[]) {\n const results: PackageManagerInstallResult[] = [];\n for (const packageName of packageNames) {\n const result = await this.addPackage(packageName);\n results.push(result);\n }\n return results;\n }\n\n removePackage(name: string) {\n this.#packages.delete(name);\n this.#storage.delete(name);\n this.#unmountStylesheet(name);\n this.#notifyPackagesChanged();\n }\n\n subscribe(handler: IPackagesListener): IPackageListerUnsubscribe {\n this.#subscribers.add(handler);\n return () => {\n this.#subscribers.delete(handler);\n };\n }\n\n load(documentType: string): Promise<DocumentModelModule<any>> {\n const documentModelModule = Array.from(\n this.#packages.values().flatMap((p) => p.documentModels),\n ).find((m) => m.documentModel.global.id === documentType);\n\n if (documentModelModule) return Promise.resolve(documentModelModule);\n return Promise.reject(new Error(\"Model not available\"));\n }\n\n #loadCommonPackage(): PackageWithMeta {\n return {\n name: common.manifest.name,\n importUrl: null,\n stylesheetUrl: null,\n loadedPackage: common,\n };\n }\n\n #loadVetraPackage(): PackageWithMeta {\n return {\n name: vetra.manifest.name,\n importUrl: null,\n stylesheetUrl: null,\n loadedPackage: vetra,\n };\n }\n\n async #loadPackageFromNodeModules(name: string): Promise<PackageWithMeta> {\n const importUrl = `/node_modules/${name}/browser/index.js`;\n const stylesheetUrl = `/node_modules/${name}/style.css`;\n\n const packageWithMeta = await this.#importPackage({\n name,\n importUrl,\n stylesheetUrl,\n });\n\n return packageWithMeta;\n }\n\n async #loadPackageFromRegistry(name: string): Promise<PackageWithMeta> {\n const importUrl = `${this.#cdnUrl}/${name}/browser/index.js`;\n const stylesheetUrl = `${this.#cdnUrl}/${name}/style.css`;\n const packageWithMeta = await this.#importPackage({\n name,\n importUrl,\n stylesheetUrl,\n });\n\n return packageWithMeta;\n }\n\n async #importPackage(packageMeta: PackageMeta) {\n const { name, importUrl, stylesheetUrl } = packageMeta;\n if (!importUrl) {\n throw new Error(`Import url not defined for package \"${name}\".`);\n }\n\n const loadedPackage = (await import(\n /* @vite-ignore */ importUrl\n )) as DocumentModelLib;\n\n return {\n name,\n loadedPackage,\n importUrl,\n stylesheetUrl,\n };\n }\n\n async #loadPackage(packageName: string): Promise<PackageWithMeta> {\n if (LOCAL_PACKAGES.includes(packageName)) {\n throw new Error(\n `Package \"${packageName}\" is a local package and cannot be loaded dynamically.`,\n );\n }\n\n // only attemp to load from node_modules in dev mode\n if (!import.meta.env.PROD) {\n try {\n const packageWithMeta =\n await this.#loadPackageFromNodeModules(packageName);\n return packageWithMeta;\n } catch (error) {\n console.warn(\n `Failed to load package \"${packageName}\" from node_modules:`,\n error,\n );\n }\n }\n\n if (!this.registryUrl) {\n throw new Error(\"Registry url not defined.\");\n }\n\n return await this.#loadPackageFromRegistry(packageName);\n }\n\n #registerPackage(packageWithMeta: PackageWithMeta) {\n const { name, loadedPackage, importUrl, stylesheetUrl } = packageWithMeta;\n\n if (stylesheetUrl !== null) {\n this.#mountStylesheet(name, stylesheetUrl);\n }\n this.#packages.set(name, loadedPackage);\n this.#storage.set(name, {\n name,\n importUrl,\n stylesheetUrl,\n });\n\n this.#notifyPackagesChanged();\n }\n\n #mountStylesheet(name: string, href: string) {\n const existing = this.#stylesheets.get(name);\n\n if (existing) return existing;\n\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = href;\n document.head.appendChild(link);\n\n this.#stylesheets.set(name, link);\n }\n\n #unmountStylesheet(name: string): void {\n const link = this.#stylesheets.get(name);\n if (!link) return;\n\n link.remove();\n this.#stylesheets.delete(name);\n }\n\n #notifyPackagesChanged() {\n this.#packagesMemo = Array.from(this.#packages.values());\n const packages = this.packages;\n this.#subscribers.forEach((handler) => {\n handler({ packages });\n });\n }\n}\n","export type PackagesConfig = {\n packages: string[];\n};\n\nfunction assertPackagesConfig(value: unknown): asserts value is PackagesConfig {\n if (typeof value !== \"object\" || value === null) {\n throw new Error(\"ph-packages.json must be a JSON object\");\n }\n\n const obj = value as Record<string, unknown>;\n\n if (!Array.isArray(obj.packages)) {\n throw new Error(\"ph-packages.json: 'packages' must be an array\");\n }\n\n if (!obj.packages.every((item) => typeof item === \"string\")) {\n throw new Error(\"ph-packages.json: 'packages' must be an array of strings\");\n }\n}\n\nlet cached: PackagesConfig | undefined;\n\nexport async function loadPackagesConfig(): Promise<PackagesConfig> {\n if (cached) return cached;\n\n const basePath = import.meta.env.BASE_URL ?? \"/\";\n const url = `${basePath}ph-packages.json`;\n const res = await fetch(url);\n const json: unknown = await res.json();\n assertPackagesConfig(json);\n cached = json;\n return cached;\n}\n\n/**\n * Returns the cached config synchronously.\n * Must be called after `loadPackagesConfig()` has resolved.\n */\nexport function getPackagesConfig(): PackagesConfig {\n if (!cached) {\n throw new Error(\n \"Packages config not loaded yet. Call loadPackagesConfig() first.\",\n );\n }\n return cached;\n}\n","import { live } from \"@electric-sql/pglite/live\";\nimport { PGliteWorker } from \"@electric-sql/pglite/worker\";\nimport { createRelationalDb } from \"@powerhousedao/shared/processors\";\nimport { Kysely } from \"kysely\";\nimport { PGliteDialect } from \"kysely-pglite-dialect\";\n\nexport async function getDb() {\n const worker = new Worker(new URL(\"./pglite.worker.js\", import.meta.url), {\n type: \"module\",\n });\n\n const pgLite = await PGliteWorker.create(worker, {\n extensions: { live },\n });\n\n const kysely = new Kysely({\n dialect: new PGliteDialect(pgLite),\n });\n\n const relationalDb = createRelationalDb(kysely);\n\n return { pgLite, relationalDb };\n}\n","import { createAnalyticsStore } from \"@powerhousedao/reactor-browser\";\nimport { type IProcessorHostModule } from \"@powerhousedao/shared/processors\";\nimport { getDb } from \"../pglite.db.js\";\n\nexport async function createProcessorHostModule(): Promise<\n IProcessorHostModule | undefined\n> {\n try {\n const { pgLite, relationalDb } = await getDb();\n const { store: analyticsStore } = await createAnalyticsStore({\n pgLite,\n });\n const processorApp = \"connect\" as const;\n return {\n relationalDb,\n analyticsStore,\n processorApp,\n };\n } catch (error) {\n console.error(`Failed to initialize processor host module:`);\n console.error(error);\n }\n}\n","import { phGlobalConfigFromEnv } from \"@powerhousedao/connect/config\";\nimport { toast } from \"@powerhousedao/connect/services\";\nimport {\n addDefaultDrivesForNewReactor,\n createBrowserReactor,\n getDefaultDrivesFromEnv,\n} from \"@powerhousedao/connect/utils\";\nimport {\n addPHEventHandlers,\n addRemoteDrive,\n DocumentCache,\n DocumentChangeType,\n dropAllReactorStorage,\n extractDriveSlugFromPath,\n extractNodeSlugFromPath,\n getDrives,\n login,\n refreshReactorDataClient,\n setDefaultPHGlobalConfig,\n setDocumentCache,\n setDrives,\n setFeatures,\n setPHToast,\n setReactorClient,\n setReactorClientModule,\n setRenown,\n setSelectedDrive,\n setSelectedNode,\n setVetraPackageManager,\n type PHToastFn,\n} from \"@powerhousedao/reactor-browser\";\nimport {\n BrowserKeyStorage,\n RenownBuilder,\n RenownCryptoBuilder,\n} from \"@renown/sdk\";\nimport { logger, type DocumentModelLib } from \"document-model\";\nimport { initFeatureFlags } from \"../feature-flags.js\";\nimport { BrowserPackageManager } from \"../package-manager.js\";\nimport { loadPackagesConfig } from \"../packages.config.js\";\nimport { createProcessorHostModule } from \"./processor-host-module.js\";\n\nexport async function clearReactorStorage() {\n const pg = window.ph?.reactorClientModule?.pg;\n if (!pg) {\n throw new Error(\"PGlite not found\");\n }\n\n await dropAllReactorStorage(pg);\n\n await pg.close();\n}\n\nexport async function createReactor(localPackage?: DocumentModelLib) {\n if (!window.ph) {\n window.ph = {};\n }\n if (window.ph.loading) return;\n\n window.ph.loading = true;\n\n // add window event handlers for updates\n addPHEventHandlers();\n\n // register toast function for use in editor components\n setPHToast(toast as PHToastFn);\n\n // initialize feature flags\n const features = await initFeatureFlags();\n\n logger.info(\n \"Features: @features\",\n JSON.stringify(Object.fromEntries(features), null, 2),\n );\n\n // initialize renown crypto\n const keyPairStorage = await BrowserKeyStorage.create();\n const renownCrypto = await new RenownCryptoBuilder()\n .withKeyPairStorage(keyPairStorage)\n .build();\n\n // initialize Renown\n const renown = await new RenownBuilder(\"connect\", {\n basename: phGlobalConfigFromEnv.routerBasename,\n baseUrl: phGlobalConfigFromEnv.renownUrl,\n })\n .withCrypto(renownCrypto)\n .build();\n\n // load packages list from ph-packages.json (replaceable post-build)\n const packagesConfig = await loadPackagesConfig();\n\n // initialize package manager\n const packageManager = new BrowserPackageManager(\n phGlobalConfigFromEnv.routerBasename ?? \"\",\n PH_PACKAGE_REGISTRY_URL,\n );\n setVetraPackageManager(packageManager);\n await packageManager.init(localPackage);\n const packagesResult = await packageManager.addPackages(\n packagesConfig.packages,\n );\n packagesResult.map((r) => {\n if (r.type === \"error\") console.error(r.error);\n });\n\n // get document models to set in the reactor (all versions)\n const documentModelModules = packageManager.packages\n .flatMap((pkg) => pkg.documentModels)\n .filter(\n (module, index, modules) =>\n // deduplicate by documentType and version\n modules.findIndex(\n (m) =>\n m.documentModel.global.id === module.documentModel.global.id &&\n m.version === module.version,\n ) === index,\n );\n\n // get upgrade manifests from packages\n const upgradeManifests = packageManager.packages\n .flatMap((pkg) => pkg.upgradeManifests)\n .filter((u) => u !== undefined);\n\n // create reactor v2 with all versions and upgrade manifests\n const reactorClientModule = await createBrowserReactor(\n documentModelModules,\n upgradeManifests,\n renown,\n );\n\n // get the drives from the reactor\n const drives = await getDrives(reactorClientModule.client);\n\n // set the selected drive and node from the path\n const path = window.location.pathname;\n const driveSlug = extractDriveSlugFromPath(path);\n const nodeSlug = extractNodeSlugFromPath(path);\n\n // initialize user from URL parameter\n const didFromUrl = getDidFromUrl();\n await login(didFromUrl, renown);\n\n const documentCache = new DocumentCache(reactorClientModule.client);\n\n // dispatch the events to set the values in the window object\n setDefaultPHGlobalConfig(phGlobalConfigFromEnv);\n setReactorClientModule(reactorClientModule);\n setReactorClient(reactorClientModule.client);\n setDocumentCache(documentCache);\n setRenown(renown);\n setDrives(drives);\n setSelectedDrive(driveSlug);\n setSelectedNode(nodeSlug);\n setFeatures(features);\n\n // Add default drives for new reactor (after window.ph is set up)\n const defaultDrivesConfig = getDefaultDrivesFromEnv();\n if (defaultDrivesConfig.length > 0) {\n await addDefaultDrivesForNewReactor(defaultDrivesConfig);\n }\n\n // if remoteUrl is set and drive not already existing add remote drive and open it\n const remoteUrl = getDriveUrl();\n if (remoteUrl) {\n try {\n await addRemoteDrive(remoteUrl);\n } catch (error) {\n console.error(`Failed to add remote drive from ${remoteUrl}:`, error);\n }\n }\n\n // Subscribe via ReactorClient interface\n const reactorClient = reactorClientModule.client;\n reactorClient.subscribe({ type: \"powerhouse/document-drive\" }, (event) => {\n logger.verbose(\"ReactorClient subscription event: @event\", event);\n refreshReactorDataClient(reactorClientModule.client).catch((e) =>\n logger.error(\"@error\", e),\n );\n });\n\n // Redirect when a currently-viewed document or drive is deleted remotely\n reactorClient.subscribe({}, (event) => {\n if (event.type !== DocumentChangeType.Deleted) return;\n const deletedId = event.context?.childId;\n if (!deletedId) return;\n\n const selectedDriveId = window.ph?.selectedDriveId;\n const selectedNodeId = window.ph?.selectedNodeId;\n\n if (selectedDriveId && deletedId === selectedDriveId) {\n setSelectedDrive(undefined);\n toast(\"The drive you were viewing has been deleted\");\n return;\n }\n\n if (selectedNodeId && deletedId === selectedNodeId) {\n setSelectedNode(undefined);\n toast(\"The document you were editing has been deleted\");\n }\n });\n\n // Refresh from ReactorClient to pick up any synced drives\n await refreshReactorDataClient(reactorClientModule.client);\n\n // Setup processor factories for packages that have them\n const packagesWithProcessorFactories = packageManager.packages.filter(\n (pkg) => pkg.processorFactory !== undefined,\n );\n\n if (packagesWithProcessorFactories.length > 0) {\n const processorHostModule = await createProcessorHostModule();\n if (processorHostModule !== undefined) {\n await Promise.all(\n packagesWithProcessorFactories.map(async (pkg) => {\n const { manifest, processorFactory } = pkg;\n const name = manifest.name;\n const id = manifest.name;\n logger.info(\"Loading processor factory: @name\", name);\n try {\n const factory = await processorFactory?.(processorHostModule);\n if (!factory) return;\n await reactorClientModule.reactorModule?.processorManager.registerFactory(\n id,\n factory,\n );\n } catch (error) {\n logger.error(`Error registering processor: @name`, name);\n logger.error(\"@error\", error);\n }\n }),\n );\n }\n }\n\n window.ph.loading = false;\n}\n\nfunction getDidFromUrl() {\n const searchParams = new URLSearchParams(window.location.search);\n const didComponent = searchParams.get(\"user\");\n const did = didComponent ? decodeURIComponent(didComponent) : undefined;\n return did;\n}\n\nfunction getDriveUrl() {\n const searchParams = new URLSearchParams(window.location.search);\n const driveUrl = searchParams.get(\"driveUrl\");\n const url = driveUrl ? decodeURIComponent(driveUrl) : undefined;\n return url;\n}\n"],"mappings":"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"}
|
|
@@ -472,8 +472,8 @@ const AppSkeleton = () => {
|
|
|
472
472
|
};
|
|
473
473
|
//#endregion
|
|
474
474
|
//#region src/components/modal/modals-container.tsx
|
|
475
|
-
const AddDriveModal$1 = lazy(() => import("./AddDriveModal-
|
|
476
|
-
const ClearStorageModal = lazy(() => import("./ClearStorageModal-
|
|
475
|
+
const AddDriveModal$1 = lazy(() => import("./AddDriveModal-CBK9gEWg.js").then((m) => ({ default: m.AddDriveModal })));
|
|
476
|
+
const ClearStorageModal = lazy(() => import("./ClearStorageModal-D3E7NK-K.js").then((m) => ({ default: m.ClearStorageModal })));
|
|
477
477
|
const CookiesPolicyModal = lazy(() => import("./CookiesPolicyModal-Gae1QuhA.js").then((m) => ({ default: m.CookiesPolicyModal })));
|
|
478
478
|
const CreateDocumentModal$1 = lazy(() => import("./CreateDocumentModal-5i6rmv3C.js").then((m) => ({ default: m.CreateDocumentModal })));
|
|
479
479
|
const DebugSettingsModal = lazy(() => import("./DebugSettingsModal-ZNWhlMQN.js").then((m) => ({ default: m.DebugSettingsModal })));
|
|
@@ -482,7 +482,7 @@ const DeleteItemModal = lazy(() => import("./DeleteItemModal-CkWegLlh.js").then(
|
|
|
482
482
|
const DisclaimerModal = lazy(() => import("./DisclaimerModal-CCnvwoB5.js").then((m) => ({ default: m.DisclaimerModal })));
|
|
483
483
|
const DriveSettingsModal$1 = lazy(() => import("./DriveSettingsModal-DxMjOsLg.js").then((m) => ({ default: m.DriveSettingsModal })));
|
|
484
484
|
const ExportDocumentWithErrorsModal = lazy(() => import("./ExportDocumentWithErrorsModal-hgliF8Gy.js").then((m) => ({ default: m.ExportDocumentWithErrorsModal })));
|
|
485
|
-
const SettingsModal$1 = lazy(() => import("./SettingsModal-
|
|
485
|
+
const SettingsModal$1 = lazy(() => import("./SettingsModal-DKMukahc.js").then((m) => ({ default: m.SettingsModal })));
|
|
486
486
|
const UpgradeDriveModal = lazy(() => import("./UpgradeDriveModal-DldcNCaT.js").then((m) => ({ default: m.UpgradeDriveModal })));
|
|
487
487
|
const modalComponents = {
|
|
488
488
|
addDrive: AddDriveModal$1,
|
|
@@ -498,7 +498,7 @@ const modalComponents = {
|
|
|
498
498
|
inspector: lazy(() => import("./InspectorModal-C4rE0Y5E.js").then((m) => ({ default: m.InspectorModal }))),
|
|
499
499
|
settings: SettingsModal$1,
|
|
500
500
|
upgradeDrive: UpgradeDriveModal,
|
|
501
|
-
missingPackage: lazy(() => import("./MissingPackageModal-
|
|
501
|
+
missingPackage: lazy(() => import("./MissingPackageModal-DM-yLsFK.js").then((m) => ({ default: m.ConnectMissingPackageModal })))
|
|
502
502
|
};
|
|
503
503
|
const ModalsContainer = lazy(async () => {
|
|
504
504
|
return { default: () => {
|
|
@@ -518,7 +518,7 @@ const ModalsContainer = lazy(async () => {
|
|
|
518
518
|
//#endregion
|
|
519
519
|
//#region src/components/app-loader.tsx
|
|
520
520
|
const AppLoader = (props) => {
|
|
521
|
-
const Load = lazy(() => import("./load-
|
|
521
|
+
const Load = lazy(() => import("./load-BlDFD8IU.js").then((m) => m.loadComponent(props.localPackage)));
|
|
522
522
|
return /* @__PURE__ */ jsxs(StrictMode, { children: [
|
|
523
523
|
/* @__PURE__ */ jsx(Suspense, {
|
|
524
524
|
fallback: /* @__PURE__ */ jsx(AppSkeleton, {}),
|
|
@@ -756,7 +756,7 @@ const DocumentEditor = (props) => {
|
|
|
756
756
|
return /* @__PURE__ */ jsx("div", {
|
|
757
757
|
className: "relative h-full",
|
|
758
758
|
id: "document-editor-context",
|
|
759
|
-
"data-editor": editorModule.id,
|
|
759
|
+
"data-editor": editorModule.config.id,
|
|
760
760
|
"data-document-type": documentType,
|
|
761
761
|
children: revisionHistoryVisible ? isLoadingOperations ? /* @__PURE__ */ jsx(EditorLoader, { message: "Loading operations" }) : /* @__PURE__ */ jsx(RevisionHistory, {
|
|
762
762
|
documentTitle: documentName ?? "",
|
|
@@ -831,7 +831,7 @@ function ContentContainer({ children }) {
|
|
|
831
831
|
});
|
|
832
832
|
}
|
|
833
833
|
function DriveItem({ drive }) {
|
|
834
|
-
const description = useAppModuleById(drive.header.meta?.preferredEditor)?.name || "Drive Explorer App";
|
|
834
|
+
const description = useAppModuleById(drive.header.meta?.preferredEditor)?.config.name || "Drive Explorer App";
|
|
835
835
|
return /* @__PURE__ */ jsx(HomeScreenItem, {
|
|
836
836
|
title: drive.state.global.name,
|
|
837
837
|
description,
|
|
@@ -1144,4 +1144,4 @@ function Sidebar() {
|
|
|
1144
1144
|
//#endregion
|
|
1145
1145
|
export { AppLoader as t };
|
|
1146
1146
|
|
|
1147
|
-
//# sourceMappingURL=sidebar-
|
|
1147
|
+
//# sourceMappingURL=sidebar-ChKKUvXH.js.map
|