@powerhousedao/connect 6.2.1 → 6.2.2-dev.1
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-vA-eqqPS.js → AddDriveModal-MMHlkJBJ.js} +10 -14
- package/dist/AddDriveModal-MMHlkJBJ.js.map +1 -0
- package/dist/{ClearStorageModal-Dm00WyUu.js → ClearStorageModal-BigtCV_M.js} +4 -4
- package/dist/{ClearStorageModal-Dm00WyUu.js.map → ClearStorageModal-BigtCV_M.js.map} +1 -1
- package/dist/{CookiesPolicyModal-1nOh6oN3.js → CookiesPolicyModal-CkcUKPLb.js} +3 -3
- package/dist/{CookiesPolicyModal-1nOh6oN3.js.map → CookiesPolicyModal-CkcUKPLb.js.map} +1 -1
- package/dist/{CreateDocumentModal-nQbLVDq3.js → CreateDocumentModal-CvsTh0HM.js} +3 -3
- package/dist/{CreateDocumentModal-nQbLVDq3.js.map → CreateDocumentModal-CvsTh0HM.js.map} +1 -1
- package/dist/{DebugSettingsModal-CWZkbU7v.js → DebugSettingsModal-Bti38_qt.js} +6 -6
- package/dist/{DebugSettingsModal-CWZkbU7v.js.map → DebugSettingsModal-Bti38_qt.js.map} +1 -1
- package/dist/{DeleteDriveModal-6P0T1QgD.js → DeleteDriveModal-DSTK8FYk.js} +4 -4
- package/dist/{DeleteDriveModal-6P0T1QgD.js.map → DeleteDriveModal-DSTK8FYk.js.map} +1 -1
- package/dist/{DeleteItemModal-BmV1aQyZ.js → DeleteItemModal-B2nJmjsP.js} +4 -4
- package/dist/{DeleteItemModal-BmV1aQyZ.js.map → DeleteItemModal-B2nJmjsP.js.map} +1 -1
- package/dist/{DisclaimerModal-CVTFfN0_.js → DisclaimerModal-D5FO34u9.js} +3 -3
- package/dist/{DisclaimerModal-CVTFfN0_.js.map → DisclaimerModal-D5FO34u9.js.map} +1 -1
- package/dist/{DownloadDocumentWithErrorsModal-CXeFUtaz.js → DownloadDocumentWithErrorsModal-tEr3bbtN.js} +3 -3
- package/dist/{DownloadDocumentWithErrorsModal-CXeFUtaz.js.map → DownloadDocumentWithErrorsModal-tEr3bbtN.js.map} +1 -1
- package/dist/{DriveAuthRequiredModal-DDlfeXD_.js → DriveAuthRequiredModal-BA2vS3oF.js} +3 -3
- package/dist/{DriveAuthRequiredModal-DDlfeXD_.js.map → DriveAuthRequiredModal-BA2vS3oF.js.map} +1 -1
- package/dist/{DriveSettingsModal-CsNFEJ9E.js → DriveSettingsModal-kR3hQnh4.js} +4 -4
- package/dist/DriveSettingsModal-kR3hQnh4.js.map +1 -0
- package/dist/{InspectorModal-wChBJ6R5.js → InspectorModal-B2Zbsa4l.js} +84 -35
- package/dist/InspectorModal-B2Zbsa4l.js.map +1 -0
- package/dist/{MissingPackageModal-Bn036mWQ.js → MissingPackageModal-BQcCQbOn.js} +4 -4
- package/dist/{MissingPackageModal-Bn036mWQ.js.map → MissingPackageModal-BQcCQbOn.js.map} +1 -1
- package/dist/{SettingsModal-1i3Dr5eT.js → SettingsModal-BnHg4yeC.js} +9 -9
- package/dist/SettingsModal-BnHg4yeC.js.map +1 -0
- package/dist/{UpgradeDriveModal-C7lV4rAX.js → UpgradeDriveModal-BZGSE9_r.js} +3 -3
- package/dist/{UpgradeDriveModal-C7lV4rAX.js.map → UpgradeDriveModal-BZGSE9_r.js.map} +1 -1
- package/dist/app-loader-B_HyriND.js +4 -0
- package/dist/{app-loader-C5IWlQ7x.js → app-loader-CuYQDicM.js} +199 -264
- package/dist/app-loader-CuYQDicM.js.map +1 -0
- package/dist/{build-info-zGvEjLMy.js → build-info-D0TYDOtW.js} +8 -5
- package/dist/{build-info-zGvEjLMy.js.map → build-info-D0TYDOtW.js.map} +1 -1
- package/dist/components-xBFneZuJ.js +5 -0
- package/dist/{connect.config-BDYNejx3.js → connect.config-vgUeFoNp.js} +16 -6
- package/dist/connect.config-vgUeFoNp.js.map +1 -0
- package/dist/connection-state-DO_2lAEJ.js +126 -0
- package/dist/connection-state-DO_2lAEJ.js.map +1 -0
- package/dist/{load-Bt4B0U-v.js → load-DajsG0zi.js} +11 -11
- package/dist/{load-Bt4B0U-v.js.map → load-DajsG0zi.js.map} +1 -1
- package/dist/main.js +1 -1
- package/dist/{package-CNJ1Q-58.js → package-CX2sgCBs.js} +5 -4
- package/dist/package-CX2sgCBs.js.map +1 -0
- package/dist/{pglite-runtime-CHa5UyCw.js → pglite-major-B39aOEiE.js} +8 -47
- package/dist/pglite-major-B39aOEiE.js.map +1 -0
- package/dist/pglite-migrate-core-Boxqqx-c.js +143 -0
- package/dist/pglite-migrate-core-Boxqqx-c.js.map +1 -0
- package/dist/{pglite-seed-CvnZdEbx.js → pglite-seed-z3B1JA38.js} +4 -4
- package/dist/{pglite-seed-CvnZdEbx.js.map → pglite-seed-z3B1JA38.js.map} +1 -1
- package/dist/{reactor-DWY9_ifj.js → reactor-Bo6Lut7c.js} +271 -37
- package/dist/reactor-Bo6Lut7c.js.map +1 -0
- package/dist/reactor.worker.d.ts +1 -0
- package/dist/reactor.worker.js +323 -0
- package/dist/reactor.worker.js.map +1 -0
- package/dist/{registerServiceWorker-Dc4QY0Sd.js → registerServiceWorker-nJIc0yEY.js} +4 -4
- package/dist/{registerServiceWorker-Dc4QY0Sd.js.map → registerServiceWorker-nJIc0yEY.js.map} +1 -1
- package/dist/{reload-connect-toast-DIFQ9FCX.js → reload-connect-toast-D1Iqw9E_.js} +3 -3
- package/dist/{reload-connect-toast-DIFQ9FCX.js.map → reload-connect-toast-D1Iqw9E_.js.map} +1 -1
- package/dist/start-connect.js +1 -1
- package/dist/{toast-BEy42aYx.js → toast-4t-VimvD.js} +3 -3
- package/dist/{toast-BEy42aYx.js.map → toast-4t-VimvD.js.map} +1 -1
- package/dist/{useRegistryPackages-B-gFECmd.js → useRegistryPackages-BaYtekjQ.js} +3 -3
- package/dist/{useRegistryPackages-B-gFECmd.js.map → useRegistryPackages-BaYtekjQ.js.map} +1 -1
- package/package.json +11 -10
- package/dist/AddDriveModal-vA-eqqPS.js.map +0 -1
- package/dist/DriveSettingsModal-CsNFEJ9E.js.map +0 -1
- package/dist/InspectorModal-wChBJ6R5.js.map +0 -1
- package/dist/SettingsModal-1i3Dr5eT.js.map +0 -1
- package/dist/app-loader-C5IWlQ7x.js.map +0 -1
- package/dist/app-loader-DYpRh5ax.js +0 -4
- package/dist/components-CiPNtuf_.js +0 -5
- package/dist/connect.config-BDYNejx3.js.map +0 -1
- package/dist/package-CNJ1Q-58.js.map +0 -1
- package/dist/pglite-runtime-CHa5UyCw.js.map +0 -1
- package/dist/reactor-DWY9_ifj.js.map +0 -1
|
@@ -1,46 +1,67 @@
|
|
|
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]="
|
|
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]="a1393f51-b593-56ea-8200-57f565bcd3ca")}catch(e){}}();
|
|
3
3
|
import { n as getRuntimeConfig } from "./runtime-config-DL3QjcfM.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { n as
|
|
4
|
+
import { a as resolvePgMajorForRuntime, r as loadPGliteModule } from "./pglite-major-B39aOEiE.js";
|
|
5
|
+
import { r as getVersion, t as getGitSha } from "./build-info-D0TYDOtW.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";
|
|
7
9
|
import { createRelationalDb } from "@powerhousedao/shared/processors";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { BrowserKeyStorage, RenownBuilder, RenownCryptoBuilder, createSignatureVerifier } from "@renown/sdk";
|
|
10
|
+
import { DocumentModelRegistry, DocumentModelResolver, ReactorEventTypes } from "@powerhousedao/reactor";
|
|
11
|
+
import { MessageRouter, RPC_PROTOCOL_VERSION, SyncManagerProxy, connectReactorClient, createInspectorProxy, createPortTransport, createReactorEventBusProxy, createRelationalPgliteProxy, createWorkerAdminClient, postReactorIdentity } from "@powerhousedao/reactor-browser/rpc";
|
|
11
12
|
import { Kysely } from "kysely";
|
|
12
13
|
import { PGliteDialect } from "kysely-pglite-dialect";
|
|
14
|
+
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
|
+
import { ConsoleLogger, logger, setLogLevel as setLogLevel$1 } from "document-model";
|
|
16
|
+
import { BrowserKeyStorage, RenownBuilder, RenownCryptoBuilder, createSignatureVerifier } from "@renown/sdk";
|
|
13
17
|
import { createAttachmentClient, createRemoteAttachmentService } from "@powerhousedao/reactor-attachments/client";
|
|
14
18
|
import { OpenFeature } from "@openfeature/web-sdk";
|
|
15
19
|
import * as common from "@powerhousedao/powerhouse-vetra-packages";
|
|
16
20
|
import commonPkg from "@powerhousedao/powerhouse-vetra-packages/package.json" with { type: "json" };
|
|
17
|
-
import * as vetra from "@powerhousedao/vetra";
|
|
18
21
|
import vetraPkg from "@powerhousedao/vetra/package.json" with { type: "json" };
|
|
19
22
|
//#region src/pglite.db.ts
|
|
20
|
-
async function createMainThreadPGlite(major) {
|
|
23
|
+
async function createMainThreadPGlite(major, dbName) {
|
|
21
24
|
const { PGlite } = await loadPGliteModule(major);
|
|
22
25
|
const { live } = major === 16 ? await import("pglite-legacy-02/live") : await import("@electric-sql/pglite/live");
|
|
23
|
-
return new PGlite(`idb://${
|
|
26
|
+
return new PGlite(`idb://${dbName}`, {
|
|
24
27
|
relaxedDurability: true,
|
|
25
28
|
extensions: { live }
|
|
26
29
|
});
|
|
27
30
|
}
|
|
28
|
-
let
|
|
29
|
-
function
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const major = resolvePgMajorForRuntime(await detectReactorPgMajor());
|
|
33
|
-
if (major !== 17) console.warn(`[reactor] Opening legacy Postgres ${major} data dir. Migrate to PG17 from the banner or the Inspector → Debug tab.`);
|
|
34
|
-
return createMainThreadPGlite(major);
|
|
35
|
-
})();
|
|
36
|
-
sharedPGlite = pending;
|
|
37
|
-
pending.catch(() => {
|
|
38
|
-
if (sharedPGlite === pending) sharedPGlite = void 0;
|
|
39
|
-
});
|
|
31
|
+
let bootChain = Promise.resolve();
|
|
32
|
+
function chainedCreate(create) {
|
|
33
|
+
const pending = bootChain.then(create, create);
|
|
34
|
+
bootChain = pending.catch(() => void 0);
|
|
40
35
|
return pending;
|
|
41
36
|
}
|
|
37
|
+
function pgliteSingleton(opts) {
|
|
38
|
+
let cached;
|
|
39
|
+
return function getPGlite() {
|
|
40
|
+
if (cached) return cached;
|
|
41
|
+
const pending = chainedCreate(async () => {
|
|
42
|
+
const major = resolvePgMajorForRuntime(await opts.detectMajor());
|
|
43
|
+
if (major !== 17) console.warn(`[${opts.label}] Opening legacy Postgres ${major} data dir. Migrate to PG17 from the banner or the Inspector → Debug tab.`);
|
|
44
|
+
return createMainThreadPGlite(major, opts.dbName);
|
|
45
|
+
});
|
|
46
|
+
cached = pending;
|
|
47
|
+
pending.catch(() => {
|
|
48
|
+
if (cached === pending) cached = void 0;
|
|
49
|
+
});
|
|
50
|
+
return pending;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const getReactorPGlite = pgliteSingleton({
|
|
54
|
+
dbName: REACTOR_PGLITE_NAME,
|
|
55
|
+
detectMajor: detectReactorPgMajor,
|
|
56
|
+
label: "reactor"
|
|
57
|
+
});
|
|
58
|
+
const getRelationalPGlite = pgliteSingleton({
|
|
59
|
+
dbName: RELATIONAL_PGLITE_NAME,
|
|
60
|
+
detectMajor: detectRelationalPgMajor,
|
|
61
|
+
label: "relational"
|
|
62
|
+
});
|
|
42
63
|
async function getDb() {
|
|
43
|
-
const pgLite = await
|
|
64
|
+
const pgLite = await getRelationalPGlite();
|
|
44
65
|
return {
|
|
45
66
|
pgLite,
|
|
46
67
|
relationalDb: createRelationalDb(new Kysely({ dialect: new PGliteDialect(pgLite) }))
|
|
@@ -61,13 +82,18 @@ async function createBrowserReactor(documentModelModules, upgradeManifests, reno
|
|
|
61
82
|
if (!renown.user) return;
|
|
62
83
|
return renown.getBearerToken({ expiresIn: 10 });
|
|
63
84
|
};
|
|
64
|
-
const pg = await
|
|
85
|
+
const pg = await getReactorPGlite();
|
|
65
86
|
const logger = new ConsoleLogger(["reactor-client"]);
|
|
66
|
-
const builder = new ReactorClientBuilder().withLogger(logger).withSigner(signerConfig).withReactorBuilder(new ReactorBuilder().withDocumentModels(documentModelModules).withUpgradeManifests(upgradeManifests).withChannelScheme(ChannelScheme.CONNECT).withJwtHandler(jwtHandler).withKysely(new Kysely({ dialect: new PGliteDialect(pg) })));
|
|
87
|
+
const builder = new ReactorClientBuilder$1().withLogger(logger).withSigner(signerConfig).withReactorBuilder(new ReactorBuilder$1().withDocumentModels(documentModelModules).withUpgradeManifests(upgradeManifests).withChannelScheme(ChannelScheme$1.CONNECT).withJwtHandler(jwtHandler).withKysely(new Kysely({ dialect: new PGliteDialect(pg) })));
|
|
67
88
|
if (documentModelLoader) builder.withDocumentModelLoader(documentModelLoader);
|
|
89
|
+
const module = await builder.buildModule();
|
|
68
90
|
return {
|
|
69
|
-
...
|
|
70
|
-
|
|
91
|
+
...module,
|
|
92
|
+
kind: "browser",
|
|
93
|
+
reactorModule: module.reactorModule ? {
|
|
94
|
+
...module.reactorModule,
|
|
95
|
+
pg
|
|
96
|
+
} : void 0
|
|
71
97
|
};
|
|
72
98
|
}
|
|
73
99
|
function getDefaultDrives(runtimeConfig) {
|
|
@@ -584,9 +610,12 @@ var BrowserPackageManager = class {
|
|
|
584
610
|
if (baseUrl.includes("/-/cdn")) return baseUrl;
|
|
585
611
|
return `${baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl}/-/cdn`;
|
|
586
612
|
}
|
|
587
|
-
async init(localPackage, localPackageVersion) {
|
|
613
|
+
async init(localPackage, localPackageVersion, studioMode) {
|
|
588
614
|
this.addLocalPackage(common.manifest.name, common, commonPkg.version);
|
|
589
|
-
|
|
615
|
+
if (studioMode) {
|
|
616
|
+
const vetra = await import("@powerhousedao/vetra");
|
|
617
|
+
this.addLocalPackage(vetra.manifest.name, vetra, vetraPkg.version);
|
|
618
|
+
}
|
|
590
619
|
if (localPackage) this.updateLocalPackage(localPackage, localPackageVersion);
|
|
591
620
|
for (const packageName of this.#storage.keys()) {
|
|
592
621
|
const specForReload = this.#storage.get(packageName)?.spec ?? packageName;
|
|
@@ -803,6 +832,167 @@ var BrowserPackageManager = class {
|
|
|
803
832
|
}
|
|
804
833
|
};
|
|
805
834
|
//#endregion
|
|
835
|
+
//#region src/reactor-worker-name.ts
|
|
836
|
+
const GEN_KEY_PREFIX = "ph-reactor-gen:";
|
|
837
|
+
function reactorWorkerName(namespace) {
|
|
838
|
+
const gen = readWorkerGen(namespace);
|
|
839
|
+
return gen ? `ph-reactor:${namespace}#${gen}` : `ph-reactor:${namespace}`;
|
|
840
|
+
}
|
|
841
|
+
function readWorkerGen(namespace) {
|
|
842
|
+
try {
|
|
843
|
+
return localStorage.getItem(GEN_KEY_PREFIX + namespace);
|
|
844
|
+
} catch {
|
|
845
|
+
return null;
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
function bumpWorkerGen(namespace, gen) {
|
|
849
|
+
try {
|
|
850
|
+
localStorage.setItem(GEN_KEY_PREFIX + namespace, gen);
|
|
851
|
+
} catch {}
|
|
852
|
+
}
|
|
853
|
+
//#endregion
|
|
854
|
+
//#region src/reactor-worker-client.ts
|
|
855
|
+
const PING_INTERVAL_MS = 2e3;
|
|
856
|
+
const PING_DEADLINE_MS = 3e3;
|
|
857
|
+
const MAX_MISSED_PINGS = 2;
|
|
858
|
+
function toReactorIdentity(user) {
|
|
859
|
+
if (!user) return null;
|
|
860
|
+
return {
|
|
861
|
+
address: user.address,
|
|
862
|
+
chainId: user.chainId,
|
|
863
|
+
networkId: user.networkId
|
|
864
|
+
};
|
|
865
|
+
}
|
|
866
|
+
function createWorkerReactorClientModule(args) {
|
|
867
|
+
const workerUrl = new URL("./reactor.worker.js", import.meta.url);
|
|
868
|
+
console.info(`[reactor-worker] constructing SharedWorker ${reactorWorkerName(args.namespace)} from ${workerUrl.href}`);
|
|
869
|
+
const worker = new SharedWorker(workerUrl, {
|
|
870
|
+
name: reactorWorkerName(args.namespace),
|
|
871
|
+
type: "module"
|
|
872
|
+
});
|
|
873
|
+
worker.addEventListener("error", (event) => {
|
|
874
|
+
console.error(`[reactor-worker] SharedWorker failed to load from ${workerUrl.href}`, event.message || event);
|
|
875
|
+
});
|
|
876
|
+
worker.port.onmessageerror = (event) => {
|
|
877
|
+
console.error("[reactor-worker] port message could not be deserialized", event);
|
|
878
|
+
};
|
|
879
|
+
const transport = createPortTransport(worker.port);
|
|
880
|
+
const router = new MessageRouter();
|
|
881
|
+
router.attach(transport);
|
|
882
|
+
const documentModelRegistry = new DocumentModelRegistry();
|
|
883
|
+
documentModelRegistry.registerModules(...args.documentModelModules);
|
|
884
|
+
documentModelRegistry.registerUpgradeManifests(...args.upgradeManifests);
|
|
885
|
+
const gitSha = getGitSha();
|
|
886
|
+
const clientProxy = connectReactorClient(router, {
|
|
887
|
+
version: {
|
|
888
|
+
appBuildId: gitSha !== "unknown" ? gitSha : getVersion(),
|
|
889
|
+
rpcProtocolVersion: RPC_PROTOCOL_VERSION,
|
|
890
|
+
models: args.documentModelModules.map((m) => ({
|
|
891
|
+
id: m.documentModel.global.id,
|
|
892
|
+
version: m.version ?? 1
|
|
893
|
+
}))
|
|
894
|
+
},
|
|
895
|
+
construct: {
|
|
896
|
+
namespace: args.namespace,
|
|
897
|
+
relationalNamespace: args.relationalNamespace,
|
|
898
|
+
cdnUrl: args.cdnUrl,
|
|
899
|
+
packageSpecs: args.packageSpecs,
|
|
900
|
+
studioMode: args.studioMode
|
|
901
|
+
},
|
|
902
|
+
packages: args.packageSpecs
|
|
903
|
+
}, args.onReload, documentModelRegistry);
|
|
904
|
+
const busProxy = createReactorEventBusProxy(router);
|
|
905
|
+
const syncManagerProxy = new SyncManagerProxy(router, busProxy);
|
|
906
|
+
const modelResolver = new DocumentModelResolver(documentModelRegistry, args.documentModelLoader);
|
|
907
|
+
busProxy.subscribe(ReactorEventTypes.MODEL_LOADED, (_type, event) => {
|
|
908
|
+
const { documentType } = event;
|
|
909
|
+
modelResolver.ensureModelLoaded(documentType).catch((error) => {
|
|
910
|
+
console.error(`Failed to load model "${documentType}" into tab registry`, error);
|
|
911
|
+
});
|
|
912
|
+
});
|
|
913
|
+
setPGliteDB({
|
|
914
|
+
db: createRelationalPgliteProxy(router),
|
|
915
|
+
isLoading: false,
|
|
916
|
+
error: null
|
|
917
|
+
});
|
|
918
|
+
postReactorIdentity(router, toReactorIdentity(args.renown.user));
|
|
919
|
+
args.renown.on("user", (user) => postReactorIdentity(router, toReactorIdentity(user)));
|
|
920
|
+
const reactorClientModule = {
|
|
921
|
+
kind: "worker",
|
|
922
|
+
client: clientProxy,
|
|
923
|
+
adminClient: createWorkerAdminClient(router),
|
|
924
|
+
inspector: createInspectorProxy(router),
|
|
925
|
+
reactorModule: {
|
|
926
|
+
documentModelRegistry,
|
|
927
|
+
syncModule: { syncManager: syncManagerProxy },
|
|
928
|
+
eventBus: busProxy
|
|
929
|
+
}
|
|
930
|
+
};
|
|
931
|
+
let pingCounter = 0;
|
|
932
|
+
let missedPings = 0;
|
|
933
|
+
const pingDeadlines = /* @__PURE__ */ new Map();
|
|
934
|
+
router.on("pong", (msg) => {
|
|
935
|
+
const timer = pingDeadlines.get(msg.id);
|
|
936
|
+
if (timer === void 0) return;
|
|
937
|
+
clearTimeout(timer);
|
|
938
|
+
pingDeadlines.delete(msg.id);
|
|
939
|
+
missedPings = 0;
|
|
940
|
+
setWorkerConnectionStatus("connected");
|
|
941
|
+
});
|
|
942
|
+
const pingInterval = setInterval(() => {
|
|
943
|
+
const id = `ping${++pingCounter}`;
|
|
944
|
+
const timer = setTimeout(() => {
|
|
945
|
+
pingDeadlines.delete(id);
|
|
946
|
+
missedPings += 1;
|
|
947
|
+
if (missedPings >= MAX_MISSED_PINGS) setWorkerConnectionStatus("lost");
|
|
948
|
+
}, PING_DEADLINE_MS);
|
|
949
|
+
pingDeadlines.set(id, timer);
|
|
950
|
+
router.post({
|
|
951
|
+
k: "ping",
|
|
952
|
+
id
|
|
953
|
+
});
|
|
954
|
+
}, PING_INTERVAL_MS);
|
|
955
|
+
const dispose = () => {
|
|
956
|
+
clearInterval(pingInterval);
|
|
957
|
+
for (const timer of pingDeadlines.values()) clearTimeout(timer);
|
|
958
|
+
pingDeadlines.clear();
|
|
959
|
+
};
|
|
960
|
+
return {
|
|
961
|
+
reactorClientModule,
|
|
962
|
+
syncManagerProxy,
|
|
963
|
+
dispose
|
|
964
|
+
};
|
|
965
|
+
}
|
|
966
|
+
//#endregion
|
|
967
|
+
//#region src/utils/reactor-worker-flag.ts
|
|
968
|
+
const REACTOR_WORKER_QUERY_KEY = "reactorWorker";
|
|
969
|
+
const REACTOR_WORKER_STORAGE_KEY = "ph:reactorWorker";
|
|
970
|
+
function resolveReactorWorkerEnabled(input) {
|
|
971
|
+
const fromQuery = parseFlag(input.queryParam);
|
|
972
|
+
if (fromQuery !== void 0) return fromQuery;
|
|
973
|
+
const fromStore = parseFlag(input.storedValue);
|
|
974
|
+
if (fromStore !== void 0) return fromStore;
|
|
975
|
+
return input.configFlag;
|
|
976
|
+
}
|
|
977
|
+
function isReactorWorkerEnabled() {
|
|
978
|
+
const configFlag = getRuntimeConfig().connect.instance?.reactorWorker ?? false;
|
|
979
|
+
if (typeof window === "undefined") return configFlag;
|
|
980
|
+
const queryParam = new URLSearchParams(window.location.search).get(REACTOR_WORKER_QUERY_KEY);
|
|
981
|
+
const enabled = resolveReactorWorkerEnabled({
|
|
982
|
+
configFlag,
|
|
983
|
+
queryParam,
|
|
984
|
+
storedValue: window.localStorage.getItem(REACTOR_WORKER_STORAGE_KEY)
|
|
985
|
+
});
|
|
986
|
+
if (parseFlag(queryParam) !== void 0) window.localStorage.setItem(REACTOR_WORKER_STORAGE_KEY, enabled ? "true" : "false");
|
|
987
|
+
return enabled;
|
|
988
|
+
}
|
|
989
|
+
function parseFlag(value) {
|
|
990
|
+
if (value === null || value === void 0) return;
|
|
991
|
+
const normalized = value.trim().toLowerCase();
|
|
992
|
+
if (normalized === "true" || normalized === "1") return true;
|
|
993
|
+
if (normalized === "false" || normalized === "0") return false;
|
|
994
|
+
}
|
|
995
|
+
//#endregion
|
|
806
996
|
//#region src/store/processor-host-module.ts
|
|
807
997
|
var NullAttachmentService = class {
|
|
808
998
|
reserve() {
|
|
@@ -910,7 +1100,12 @@ function subscribeToPackagesChannel(packageManager) {
|
|
|
910
1100
|
source.addEventListener("error", () => {});
|
|
911
1101
|
}
|
|
912
1102
|
async function clearReactorStorage() {
|
|
913
|
-
|
|
1103
|
+
const module = window.ph?.reactorClientModule;
|
|
1104
|
+
if (module?.kind === "worker") {
|
|
1105
|
+
await module.adminClient.clearStorage();
|
|
1106
|
+
return;
|
|
1107
|
+
}
|
|
1108
|
+
if (module?.kind === "browser") await module.reactorModule?.pg?.close();
|
|
914
1109
|
const targets = (await indexedDB.databases()).map((d) => d.name).filter((n) => !!n && !n.startsWith("ph-pglite-backup::") && /pglite|reactor/i.test(n));
|
|
915
1110
|
await Promise.all(targets.map((name) => new Promise((resolve) => {
|
|
916
1111
|
const req = indexedDB.deleteDatabase(name);
|
|
@@ -934,7 +1129,7 @@ async function createReactor(localPackage) {
|
|
|
934
1129
|
const runtimeConfig = getRuntimeConfig();
|
|
935
1130
|
const packageManager = new BrowserPackageManager(phGlobalConfig.routerBasename ?? "", runtimeConfig.packageRegistryUrl ?? null);
|
|
936
1131
|
setVetraPackageManager(packageManager);
|
|
937
|
-
await packageManager.init(localPackage, runtimeConfig.localPackage?.version);
|
|
1132
|
+
await packageManager.init(localPackage, runtimeConfig.localPackage?.version, phGlobalConfig.studioMode);
|
|
938
1133
|
try {
|
|
939
1134
|
const { default: registerBundledPackages } = await import("ph-bundled-packages-virtual");
|
|
940
1135
|
registerBundledPackages(packageManager);
|
|
@@ -951,7 +1146,44 @@ async function createReactor(localPackage) {
|
|
|
951
1146
|
storageKey: phGlobalConfig.routerBasename ?? ""
|
|
952
1147
|
}) : new NoRegistryDiscoveryService(packageManager);
|
|
953
1148
|
setPackageDiscoveryService(discoveryService);
|
|
954
|
-
|
|
1149
|
+
let reactorClientModule;
|
|
1150
|
+
if (isReactorWorkerEnabled()) {
|
|
1151
|
+
const packageSpecs = packageManager.getRegistryPackages().map((p) => p.version ? `${p.name}@${p.version}` : p.name);
|
|
1152
|
+
const registryClient = new RegistryClient(packageManager.cdnUrl ?? "");
|
|
1153
|
+
const workerClient = createWorkerReactorClientModule({
|
|
1154
|
+
namespace: REACTOR_INSTANCE_NAMESPACE,
|
|
1155
|
+
relationalNamespace: RELATIONAL_PGLITE_NAME,
|
|
1156
|
+
cdnUrl: packageManager.cdnUrl ?? "",
|
|
1157
|
+
packageSpecs,
|
|
1158
|
+
studioMode: phGlobalConfig.studioMode,
|
|
1159
|
+
documentModelModules,
|
|
1160
|
+
upgradeManifests,
|
|
1161
|
+
documentModelLoader: { async load(documentType) {
|
|
1162
|
+
const names = packageManager.cdnUrl ? await registryClient.getPackagesByDocumentType(documentType) : [];
|
|
1163
|
+
for (const name of names) {
|
|
1164
|
+
const result = await packageManager.addPackage(name);
|
|
1165
|
+
if (result.type === "error") throw new Error(`Failed to install package "${name}" for document model: ${documentType}`, { cause: result.error });
|
|
1166
|
+
}
|
|
1167
|
+
const module = packageManager.packages.flatMap((p) => p.documentModels).find((m) => m.documentModel.global.id === documentType);
|
|
1168
|
+
if (!module) throw new Error(names.length > 0 ? `Installed [${names.join(", ")}] but document model not available: ${documentType}` : `No package found for document model: ${documentType} (cdnUrl: ${packageManager.cdnUrl ?? "none"})`);
|
|
1169
|
+
return module;
|
|
1170
|
+
} },
|
|
1171
|
+
renown,
|
|
1172
|
+
onReload: (reason, workerGen) => {
|
|
1173
|
+
logger.warn("Reactor worker requested reload: @reason", reason);
|
|
1174
|
+
if (workerGen) bumpWorkerGen(REACTOR_INSTANCE_NAMESPACE, workerGen);
|
|
1175
|
+
window.location.reload();
|
|
1176
|
+
}
|
|
1177
|
+
});
|
|
1178
|
+
reactorClientModule = workerClient.reactorClientModule;
|
|
1179
|
+
try {
|
|
1180
|
+
await workerClient.syncManagerProxy.startup();
|
|
1181
|
+
} catch (error) {
|
|
1182
|
+
window.ph.loading = false;
|
|
1183
|
+
logger.error("Reactor worker failed to start: @error", error);
|
|
1184
|
+
throw error;
|
|
1185
|
+
}
|
|
1186
|
+
} else reactorClientModule = await createBrowserReactor(documentModelModules, upgradeManifests, renown, discoveryService);
|
|
955
1187
|
const drives = await getDrives(reactorClientModule.client);
|
|
956
1188
|
await login(getDidFromUrl(), renown);
|
|
957
1189
|
const documentCache = new DocumentCache(reactorClientModule.client);
|
|
@@ -1011,8 +1243,10 @@ async function createReactor(localPackage) {
|
|
|
1011
1243
|
});
|
|
1012
1244
|
await refreshReactorDataClient(reactorClientModule.client);
|
|
1013
1245
|
const packagesWithProcessorFactories = packageManager.packages.filter((pkg) => pkg.processorFactory !== void 0);
|
|
1014
|
-
|
|
1015
|
-
|
|
1246
|
+
const reactorModule = reactorClientModule.kind === "browser" ? reactorClientModule.reactorModule : void 0;
|
|
1247
|
+
if (packagesWithProcessorFactories.length > 0 && !reactorModule) for (const pkg of packagesWithProcessorFactories) logger.warn("Skipping processor factory @name: processors are not supported on the worker reactor path yet", pkg.manifest.name);
|
|
1248
|
+
else if (packagesWithProcessorFactories.length > 0 && reactorModule) {
|
|
1249
|
+
const readModels = reactorModule.readModelCoordinator.readModels;
|
|
1016
1250
|
const processorHostModule = await createProcessorHostModule(reactorClientModule.client, readModels, window.ph?.attachmentService);
|
|
1017
1251
|
if (processorHostModule !== void 0) await Promise.all(packagesWithProcessorFactories.map(async (pkg) => {
|
|
1018
1252
|
const { manifest, processorFactory } = pkg;
|
|
@@ -1024,7 +1258,7 @@ async function createReactor(localPackage) {
|
|
|
1024
1258
|
try {
|
|
1025
1259
|
const factory = await processorFactory?.(processorHostModule);
|
|
1026
1260
|
if (!factory) return;
|
|
1027
|
-
await
|
|
1261
|
+
await reactorModule.processorManager.registerFactory(id, factory);
|
|
1028
1262
|
} catch (error) {
|
|
1029
1263
|
logger.error(`Error registering processor: @label`, label);
|
|
1030
1264
|
logger.error("@error", error);
|
|
@@ -1044,5 +1278,5 @@ function getDriveUrl() {
|
|
|
1044
1278
|
//#endregion
|
|
1045
1279
|
export { createReactor as n, clearReactorStorage as t };
|
|
1046
1280
|
|
|
1047
|
-
//# sourceMappingURL=reactor-
|
|
1048
|
-
//# debugId=
|
|
1281
|
+
//# sourceMappingURL=reactor-Bo6Lut7c.js.map
|
|
1282
|
+
//# debugId=a1393f51-b593-56ea-8200-57f565bcd3ca
|