@powerhousedao/connect 6.2.0-dev.5 → 6.2.0-dev.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AddDriveModal-kzL41qdg.js → AddDriveModal-D-nbV40j.js} +5 -8
- package/dist/{AddDriveModal-kzL41qdg.js.map → AddDriveModal-D-nbV40j.js.map} +1 -1
- package/dist/{ClearStorageModal-BSNg-Ymg.js → ClearStorageModal-Diwwy202.js} +4 -4
- package/dist/{ClearStorageModal-BSNg-Ymg.js.map → ClearStorageModal-Diwwy202.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-BuAYgDSn.js → DebugSettingsModal-BPtsm2ux.js} +10 -10
- package/dist/DebugSettingsModal-BPtsm2ux.js.map +1 -0
- 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-B5-ZfKsb.js +36 -0
- package/dist/DriveAuthRequiredModal-B5-ZfKsb.js.map +1 -0
- package/dist/{DriveSettingsModal-L5sM-rIh.js → DriveSettingsModal-kR3hQnh4.js} +5 -5
- package/dist/DriveSettingsModal-kR3hQnh4.js.map +1 -0
- package/dist/{InspectorModal-DyrVQ4fu.js → InspectorModal-Dp1FBq9d.js} +84 -35
- package/dist/InspectorModal-Dp1FBq9d.js.map +1 -0
- package/dist/{MissingPackageModal-D_N96M6a.js → MissingPackageModal-BQcCQbOn.js} +4 -4
- package/dist/{MissingPackageModal-D_N96M6a.js.map → MissingPackageModal-BQcCQbOn.js.map} +1 -1
- package/dist/{SettingsModal-xaWk_n_D.js → SettingsModal-muq2HR8F.js} +36 -43
- package/dist/SettingsModal-muq2HR8F.js.map +1 -0
- package/dist/{UpgradeDriveModal-CyAUDCU7.js → UpgradeDriveModal-BZGSE9_r.js} +3 -3
- package/dist/{UpgradeDriveModal-CyAUDCU7.js.map → UpgradeDriveModal-BZGSE9_r.js.map} +1 -1
- package/dist/{app-loader-0E0DoHDu.js → app-loader-AudT2qbl.js} +241 -286
- package/dist/app-loader-AudT2qbl.js.map +1 -0
- package/dist/app-loader-DXGHddpJ.js +4 -0
- package/dist/{build-info-AU2BqmyC.js → build-info-CfGW54mJ.js} +8 -5
- package/dist/{build-info-AU2BqmyC.js.map → build-info-CfGW54mJ.js.map} +1 -1
- package/dist/components-DpeD6Icw.js +5 -0
- package/dist/{connect.config-aPx3rHZQ.js → connect.config-BG681xG9.js} +9 -5
- package/dist/connect.config-BG681xG9.js.map +1 -0
- package/dist/connection-state-Cig644T0.js +126 -0
- package/dist/connection-state-Cig644T0.js.map +1 -0
- package/dist/{load-BBnRfGjk.js → load-MsCco4SR.js} +11 -11
- package/dist/{load-BBnRfGjk.js.map → load-MsCco4SR.js.map} +1 -1
- package/dist/main.js +1 -1
- package/dist/{package-Z50_4mCC.js → package-CiQlaJud.js} +7 -5
- package/dist/package-CiQlaJud.js.map +1 -0
- package/dist/{pglite-runtime-toc1-TWa.js → pglite-major-B39aOEiE.js} +8 -51
- 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-D8oSKkep.js → pglite-seed-9rjhdCs5.js} +4 -4
- package/dist/{pglite-seed-D8oSKkep.js.map → pglite-seed-9rjhdCs5.js.map} +1 -1
- package/dist/{reactor-RZaraEfU.js → reactor-DAj2miMQ.js} +239 -36
- package/dist/reactor-DAj2miMQ.js.map +1 -0
- package/dist/reactor.worker.d.ts +1 -0
- package/dist/reactor.worker.js +316 -0
- package/dist/reactor.worker.js.map +1 -0
- package/dist/{registerServiceWorker-B7uKpkci.js → registerServiceWorker-2tRbkdJj.js} +4 -4
- package/dist/{registerServiceWorker-B7uKpkci.js.map → registerServiceWorker-2tRbkdJj.js.map} +1 -1
- package/dist/{reload-connect-toast-CwvSc6F-.js → reload-connect-toast-qibmlgQm.js} +3 -3
- package/dist/{reload-connect-toast-CwvSc6F-.js.map → reload-connect-toast-qibmlgQm.js.map} +1 -1
- package/dist/start-connect.js +1 -1
- package/dist/style.css +851 -2392
- 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-Bh0luCvV.js → useRegistryPackages-BaYtekjQ.js} +44 -8
- package/dist/useRegistryPackages-BaYtekjQ.js.map +1 -0
- package/package.json +13 -11
- package/dist/DebugSettingsModal-BuAYgDSn.js.map +0 -1
- package/dist/DriveSettingsModal-L5sM-rIh.js.map +0 -1
- package/dist/InspectorModal-DyrVQ4fu.js.map +0 -1
- package/dist/SettingsModal-xaWk_n_D.js.map +0 -1
- package/dist/app-loader-0E0DoHDu.js.map +0 -1
- package/dist/app-loader-Gype1CUN.js +0 -4
- package/dist/components-9-WKOGBP.js +0 -5
- package/dist/connect.config-aPx3rHZQ.js.map +0 -1
- package/dist/package-Z50_4mCC.js.map +0 -1
- package/dist/pglite-runtime-toc1-TWa.js.map +0 -1
- package/dist/reactor-RZaraEfU.js.map +0 -1
- package/dist/useRegistryPackages-Bh0luCvV.js.map +0 -1
|
@@ -0,0 +1,316 @@
|
|
|
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]="8c1df25e-941e-518a-9c1d-ab758077d702")}catch(e){}}();
|
|
3
|
+
import { a as resolvePgMajorForRuntime, r as loadPGliteModule, t as coerceMajor, u as readPgVersionFile } from "./pglite-major-B39aOEiE.js";
|
|
4
|
+
import { a as writeFileData, i as readFileData, r as migrateIdb, t as clearFileData } from "./pglite-migrate-core-Boxqqx-c.js";
|
|
5
|
+
import { createRelationalDb } from "@powerhousedao/shared/processors";
|
|
6
|
+
import { ChannelScheme, DocumentIntegrityService, DriveCollectionId, InMemoryQueue, ReactorBuilder, ReactorClientBuilder } from "@powerhousedao/reactor";
|
|
7
|
+
import { baseDocumentModels } from "@powerhousedao/reactor-browser/base-document-models";
|
|
8
|
+
import { FORWARDED_EVENT_TYPES, ReactorHost, SYNC_STATUS_CHANGED_EVENT, WorkerPackageLoader } from "@powerhousedao/reactor-browser/rpc";
|
|
9
|
+
import * as commonDocumentModels from "@powerhousedao/powerhouse-vetra-packages/document-models";
|
|
10
|
+
import * as vetraDocumentModels from "@powerhousedao/vetra/document-models";
|
|
11
|
+
import { BrowserKeyStorage, RenownCryptoBuilder, RenownCryptoSigner, createSignatureVerifier } from "@renown/sdk/crypto";
|
|
12
|
+
import { Kysely } from "kysely";
|
|
13
|
+
import { PGliteDialect } from "kysely-pglite-dialect";
|
|
14
|
+
//#region src/reactor.worker.ts
|
|
15
|
+
console.info("[reactor.worker] module evaluating");
|
|
16
|
+
const RENOWN_APP_NAME = "connect";
|
|
17
|
+
const bundledDocumentModels = [...Object.values(commonDocumentModels), ...Object.values(vetraDocumentModels)].filter((m) => typeof m === "object" && m !== null && "documentModel" in m && "reducer" in m);
|
|
18
|
+
let loader;
|
|
19
|
+
let registry;
|
|
20
|
+
let signer;
|
|
21
|
+
let syncManager;
|
|
22
|
+
const relational = {};
|
|
23
|
+
const owned = {};
|
|
24
|
+
let inspectorQueue;
|
|
25
|
+
let inspectorProcessors;
|
|
26
|
+
let inspectorIntegrity;
|
|
27
|
+
let currentIdentity = null;
|
|
28
|
+
const registeredKeys = /* @__PURE__ */ new Set();
|
|
29
|
+
function modelKey(module) {
|
|
30
|
+
return `${module.documentModel.global.id}@${module.version ?? 1}`;
|
|
31
|
+
}
|
|
32
|
+
function toWireRemote(remote) {
|
|
33
|
+
return {
|
|
34
|
+
meta: remote.meta,
|
|
35
|
+
connectionState: remote.channel.getConnectionState()
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function registerNewModules() {
|
|
39
|
+
if (!loader || !registry) return;
|
|
40
|
+
const fresh = loader.models.filter((m) => !registeredKeys.has(modelKey(m)));
|
|
41
|
+
if (fresh.length === 0) return;
|
|
42
|
+
registry.registerModules(...fresh);
|
|
43
|
+
for (const m of fresh) registeredKeys.add(modelKey(m));
|
|
44
|
+
}
|
|
45
|
+
async function buildWorkerCrypto() {
|
|
46
|
+
const keyStorage = await BrowserKeyStorage.create();
|
|
47
|
+
return new RenownCryptoBuilder().withKeyPairStorage(keyStorage).build();
|
|
48
|
+
}
|
|
49
|
+
async function openReactorPglite(namespace) {
|
|
50
|
+
const detected = coerceMajor(await readPgVersionFile(`/pglite/${namespace}`));
|
|
51
|
+
const major = resolvePgMajorForRuntime(detected);
|
|
52
|
+
if (major !== 17) console.warn(`[reactor.worker] Running against legacy PGlite data dir (Postgres ${major}). Migrate to PG17 from the Connect banner or the Inspector.`);
|
|
53
|
+
const { PGlite } = await loadPGliteModule(major);
|
|
54
|
+
return {
|
|
55
|
+
pg: new PGlite(`idb://${namespace}`, { relaxedDurability: true }),
|
|
56
|
+
detected
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function loadPgLive(major) {
|
|
60
|
+
if (major === 16) return import("pglite-legacy-02/live");
|
|
61
|
+
return import("@electric-sql/pglite/live");
|
|
62
|
+
}
|
|
63
|
+
async function openRelational(namespace) {
|
|
64
|
+
try {
|
|
65
|
+
const detected = coerceMajor(await readPgVersionFile(`/pglite/${namespace}`));
|
|
66
|
+
const major = resolvePgMajorForRuntime(detected);
|
|
67
|
+
if (major !== 17) console.warn(`[reactor.worker] Relational store opening legacy PGlite data dir (Postgres ${major}). Migrate to PG17 from the Connect banner or the Inspector.`);
|
|
68
|
+
const [{ PGlite }, { live }] = await Promise.all([loadPGliteModule(major), loadPgLive(major)]);
|
|
69
|
+
const pg = new PGlite(`idb://${namespace}`, {
|
|
70
|
+
relaxedDurability: true,
|
|
71
|
+
extensions: { live }
|
|
72
|
+
});
|
|
73
|
+
relational.pg = pg;
|
|
74
|
+
relational.db = createRelationalDb(new Kysely({ dialect: new PGliteDialect(pg) }));
|
|
75
|
+
console.info(`[reactor.worker] Relational store opened: idb://${namespace} (Postgres ${major}).`);
|
|
76
|
+
return detected;
|
|
77
|
+
} catch (error) {
|
|
78
|
+
console.error("[reactor.worker] Failed to open the relational store:", error);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
let migrationState = { status: "idle" };
|
|
83
|
+
function setMigration(state) {
|
|
84
|
+
migrationState = state;
|
|
85
|
+
host.setMigrationState(state);
|
|
86
|
+
}
|
|
87
|
+
const inMemoryBackup = {
|
|
88
|
+
snapshot: (idbName) => readFileData(idbName),
|
|
89
|
+
rollback: (handle, idbName) => writeFileData(idbName, handle),
|
|
90
|
+
discard: () => Promise.resolve(),
|
|
91
|
+
commit: () => Promise.resolve()
|
|
92
|
+
};
|
|
93
|
+
const host = new ReactorHost({
|
|
94
|
+
namespace: self.name ?? "",
|
|
95
|
+
onAdminRestart: () => host.broadcastReload("admin restart", crypto.randomUUID()),
|
|
96
|
+
onAdminClearStorage: async () => {
|
|
97
|
+
await relational.pg?.close();
|
|
98
|
+
await owned.reactorPg?.close();
|
|
99
|
+
for (const idbName of [owned.reactorIdb, owned.relationalIdb]) if (idbName) await clearFileData(idbName);
|
|
100
|
+
host.broadcastReload("storage cleared", crypto.randomUUID());
|
|
101
|
+
},
|
|
102
|
+
onAdminMigrate: async () => {
|
|
103
|
+
setMigration({
|
|
104
|
+
status: "migrating",
|
|
105
|
+
legacyMajor: migrationState.legacyMajor
|
|
106
|
+
});
|
|
107
|
+
if (relational.pg) await relational.pg.close().catch(() => void 0);
|
|
108
|
+
if (owned.reactorPg) await owned.reactorPg.close().catch(() => void 0);
|
|
109
|
+
try {
|
|
110
|
+
for (const idbName of [owned.reactorIdb, owned.relationalIdb]) if (idbName) await migrateIdb(idbName, (phase) => setMigration({
|
|
111
|
+
status: "migrating",
|
|
112
|
+
legacyMajor: migrationState.legacyMajor,
|
|
113
|
+
phase
|
|
114
|
+
}), inMemoryBackup);
|
|
115
|
+
host.broadcastReload("migration complete", crypto.randomUUID());
|
|
116
|
+
} catch (error) {
|
|
117
|
+
console.error("[reactor.worker] Migration failed:", error);
|
|
118
|
+
setMigration({
|
|
119
|
+
status: "failed",
|
|
120
|
+
error: error instanceof Error ? error.message : String(error)
|
|
121
|
+
});
|
|
122
|
+
host.broadcastReload("migration failed", crypto.randomUUID());
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
build: async (raw) => {
|
|
126
|
+
let phase = "init";
|
|
127
|
+
try {
|
|
128
|
+
const construct = raw;
|
|
129
|
+
phase = "loading packages";
|
|
130
|
+
console.info(`[reactor.worker] boot: ${phase}`);
|
|
131
|
+
loader = new WorkerPackageLoader({
|
|
132
|
+
cdnUrl: construct.cdnUrl,
|
|
133
|
+
importPackage: (url) => import(
|
|
134
|
+
/* @vite-ignore */
|
|
135
|
+
url
|
|
136
|
+
)
|
|
137
|
+
});
|
|
138
|
+
const loaded = await loader.loadPackages(construct.packageSpecs);
|
|
139
|
+
const models = baseDocumentModels.concat(bundledDocumentModels, loaded);
|
|
140
|
+
phase = "opening pglite stores";
|
|
141
|
+
console.info(`[reactor.worker] boot: ${phase}`);
|
|
142
|
+
const [reactor, relationalMajor] = await Promise.all([openReactorPglite(construct.namespace), openRelational(construct.relationalNamespace)]);
|
|
143
|
+
const pg = reactor.pg;
|
|
144
|
+
owned.reactorPg = pg;
|
|
145
|
+
owned.reactorIdb = `/pglite/${construct.namespace}`;
|
|
146
|
+
owned.relationalIdb = `/pglite/${construct.relationalNamespace}`;
|
|
147
|
+
const legacyMajor = [reactor.detected, relationalMajor].find((m) => m !== null && m !== 17);
|
|
148
|
+
if (legacyMajor !== void 0) setMigration({
|
|
149
|
+
status: "needed",
|
|
150
|
+
legacyMajor
|
|
151
|
+
});
|
|
152
|
+
phase = "building crypto";
|
|
153
|
+
console.info(`[reactor.worker] boot: ${phase}`);
|
|
154
|
+
const crypto = await buildWorkerCrypto();
|
|
155
|
+
signer = new RenownCryptoSigner(crypto, RENOWN_APP_NAME, currentIdentity ?? void 0);
|
|
156
|
+
const jwtHandler = async () => currentIdentity ? crypto.getBearerToken(currentIdentity.address, { expiresIn: 10 }) : void 0;
|
|
157
|
+
phase = "building reactor module";
|
|
158
|
+
console.info(`[reactor.worker] boot: ${phase}`);
|
|
159
|
+
const builder = new ReactorClientBuilder().withSigner({
|
|
160
|
+
signer,
|
|
161
|
+
verifier: createSignatureVerifier()
|
|
162
|
+
}).withReactorBuilder(new ReactorBuilder().withDocumentModels(models).withChannelScheme(ChannelScheme.CONNECT).withJwtHandler(jwtHandler).withKysely(new Kysely({ dialect: new PGliteDialect(pg) })));
|
|
163
|
+
builder.withDocumentModelLoader(loader);
|
|
164
|
+
const module = await builder.buildModule();
|
|
165
|
+
registry = module.reactorModule?.documentModelRegistry;
|
|
166
|
+
syncManager = module.reactorModule?.syncModule?.syncManager;
|
|
167
|
+
const rm = module.reactorModule;
|
|
168
|
+
if (rm) {
|
|
169
|
+
inspectorQueue = rm.queue instanceof InMemoryQueue ? rm.queue : void 0;
|
|
170
|
+
inspectorProcessors = rm.processorManager;
|
|
171
|
+
inspectorIntegrity = new DocumentIntegrityService(rm.keyframeStore, rm.operationStore, rm.writeCache, rm.documentView, rm.documentModelRegistry);
|
|
172
|
+
}
|
|
173
|
+
for (const m of models) registeredKeys.add(modelKey(m));
|
|
174
|
+
for (const type of FORWARDED_EVENT_TYPES) module.eventBus.subscribe(type, (forwardedType, event) => host.broadcastBusEvent(forwardedType, event));
|
|
175
|
+
syncManager?.onSyncStatusChange((documentId, status) => host.broadcastBusEvent(SYNC_STATUS_CHANGED_EVENT, {
|
|
176
|
+
documentId,
|
|
177
|
+
status
|
|
178
|
+
}));
|
|
179
|
+
console.info("[reactor.worker] boot: complete");
|
|
180
|
+
return module.client;
|
|
181
|
+
} catch (error) {
|
|
182
|
+
console.error(`[reactor.worker] boot failed at phase "${phase}":`, error);
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
registerPackages: async (specs) => {
|
|
187
|
+
if (!loader) return;
|
|
188
|
+
await loader.loadPackages(specs);
|
|
189
|
+
registerNewModules();
|
|
190
|
+
},
|
|
191
|
+
onIdentity: (user) => {
|
|
192
|
+
currentIdentity = user;
|
|
193
|
+
if (signer) signer.user = user ?? void 0;
|
|
194
|
+
},
|
|
195
|
+
onSyncOp: async (method, args) => {
|
|
196
|
+
if (!syncManager) throw new Error("SyncManager not available");
|
|
197
|
+
switch (method) {
|
|
198
|
+
case "list": return syncManager.list().map(toWireRemote);
|
|
199
|
+
case "add": {
|
|
200
|
+
const [name, collectionIdKey, channelConfig, filter, options] = args;
|
|
201
|
+
return toWireRemote(await syncManager.add(name, DriveCollectionId.fromKey(collectionIdKey), channelConfig, filter, options));
|
|
202
|
+
}
|
|
203
|
+
case "remove":
|
|
204
|
+
await syncManager.remove(args[0]);
|
|
205
|
+
return;
|
|
206
|
+
case "triggerPull":
|
|
207
|
+
syncManager.triggerPull(args[0]);
|
|
208
|
+
return;
|
|
209
|
+
default: throw new Error(`Unknown sync op: ${method}`);
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
onDbOp: async (method, args) => {
|
|
213
|
+
if (!relational.pg) throw new Error("Relational store not available");
|
|
214
|
+
switch (method) {
|
|
215
|
+
case "query": {
|
|
216
|
+
const [sql, params] = args;
|
|
217
|
+
return (await relational.pg.query(sql, params)).rows;
|
|
218
|
+
}
|
|
219
|
+
default: throw new Error(`Unknown db op: ${method}`);
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
onLiveQuery: async (sql, params, onResults) => {
|
|
223
|
+
if (!relational.pg) throw new Error("Relational store not available");
|
|
224
|
+
const live = await relational.pg.live.query(sql, params, (results) => onResults(results));
|
|
225
|
+
return () => {
|
|
226
|
+
live.unsubscribe();
|
|
227
|
+
};
|
|
228
|
+
},
|
|
229
|
+
onInspectorOp: async (method, args) => {
|
|
230
|
+
switch (method) {
|
|
231
|
+
case "queue.getState": {
|
|
232
|
+
if (!inspectorQueue) return {
|
|
233
|
+
isPaused: false,
|
|
234
|
+
pendingJobs: [],
|
|
235
|
+
executingJobs: [],
|
|
236
|
+
totalPending: 0,
|
|
237
|
+
totalExecuting: 0
|
|
238
|
+
};
|
|
239
|
+
const pendingJobs = inspectorQueue.getPendingJobs();
|
|
240
|
+
const executingJobs = [];
|
|
241
|
+
for (const jobIds of inspectorQueue.getExecutingJobIds().values()) for (const jobId of jobIds) {
|
|
242
|
+
const job = inspectorQueue.getJob(jobId);
|
|
243
|
+
if (job) executingJobs.push(job);
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
isPaused: inspectorQueue.paused,
|
|
247
|
+
pendingJobs,
|
|
248
|
+
executingJobs,
|
|
249
|
+
totalPending: pendingJobs.length,
|
|
250
|
+
totalExecuting: executingJobs.length
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
case "queue.pause":
|
|
254
|
+
inspectorQueue?.pause();
|
|
255
|
+
return;
|
|
256
|
+
case "queue.resume":
|
|
257
|
+
await inspectorQueue?.resume();
|
|
258
|
+
return;
|
|
259
|
+
case "processors.getAll": return (inspectorProcessors?.getAll() ?? []).map((tracked) => ({
|
|
260
|
+
processorId: tracked.processorId,
|
|
261
|
+
factoryId: tracked.factoryId,
|
|
262
|
+
driveId: tracked.driveId,
|
|
263
|
+
processorIndex: tracked.processorIndex,
|
|
264
|
+
lastOrdinal: tracked.lastOrdinal,
|
|
265
|
+
status: tracked.status,
|
|
266
|
+
lastError: tracked.lastError,
|
|
267
|
+
lastErrorTimestamp: tracked.lastErrorTimestamp
|
|
268
|
+
}));
|
|
269
|
+
case "processors.retry": {
|
|
270
|
+
const [processorId] = args;
|
|
271
|
+
await inspectorProcessors?.get(processorId)?.retry();
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
case "integrity.validate": {
|
|
275
|
+
if (!inspectorIntegrity) throw new Error("Integrity service not available");
|
|
276
|
+
const [documentId, branch] = args;
|
|
277
|
+
return inspectorIntegrity.validateDocument(documentId, branch);
|
|
278
|
+
}
|
|
279
|
+
case "integrity.rebuildKeyframes": {
|
|
280
|
+
if (!inspectorIntegrity) throw new Error("Integrity service not available");
|
|
281
|
+
const [documentId, branch] = args;
|
|
282
|
+
return inspectorIntegrity.rebuildKeyframes(documentId, branch);
|
|
283
|
+
}
|
|
284
|
+
case "integrity.rebuildSnapshots": {
|
|
285
|
+
if (!inspectorIntegrity) throw new Error("Integrity service not available");
|
|
286
|
+
const [documentId, branch] = args;
|
|
287
|
+
return inspectorIntegrity.rebuildSnapshots(documentId, branch);
|
|
288
|
+
}
|
|
289
|
+
case "db.query": {
|
|
290
|
+
if (!owned.reactorPg) throw new Error("Reactor store not available");
|
|
291
|
+
const [sql, params] = args;
|
|
292
|
+
return (await owned.reactorPg.query(sql, params)).rows;
|
|
293
|
+
}
|
|
294
|
+
default: throw new Error(`Unknown inspector op: ${method}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
const globalScope = self;
|
|
299
|
+
globalScope.addEventListener("error", (event) => {
|
|
300
|
+
console.error("[reactor.worker] uncaught error", event.message ?? event.error ?? event);
|
|
301
|
+
});
|
|
302
|
+
globalScope.addEventListener("unhandledrejection", (event) => {
|
|
303
|
+
console.error("[reactor.worker] unhandled rejection", event.reason);
|
|
304
|
+
});
|
|
305
|
+
globalScope.onconnect = (event) => {
|
|
306
|
+
const port = event.ports[0];
|
|
307
|
+
if (port) try {
|
|
308
|
+
host.connectPort(port);
|
|
309
|
+
} catch (error) {
|
|
310
|
+
console.error("[reactor.worker] failed to connect port", error);
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
//#endregion
|
|
314
|
+
|
|
315
|
+
//# sourceMappingURL=reactor.worker.js.map
|
|
316
|
+
//# debugId=8c1df25e-941e-518a-9c1d-ab758077d702
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactor.worker.js","sources":["../src/reactor.worker.ts"],"sourcesContent":["import {\n ChannelScheme,\n DocumentIntegrityService,\n DriveCollectionId,\n InMemoryQueue,\n ReactorBuilder,\n ReactorClientBuilder,\n type ChannelConfig,\n type Database,\n type ISyncManager,\n type JwtHandler,\n type Remote,\n type RemoteFilter,\n type RemoteOptions,\n} from \"@powerhousedao/reactor\";\nimport { baseDocumentModels } from \"@powerhousedao/reactor-browser/base-document-models\";\nimport {\n FORWARDED_EVENT_TYPES,\n ReactorHost,\n SYNC_STATUS_CHANGED_EVENT,\n WorkerPackageLoader,\n type ReactorIdentity,\n type WorkerMigrationState,\n} from \"@powerhousedao/reactor-browser/rpc\";\nimport type { DocumentModelModule } from \"@powerhousedao/shared/document-model\";\nimport {\n createRelationalDb,\n type IProcessorManager,\n type IRelationalDb,\n} from \"@powerhousedao/shared/processors\";\nimport * as commonDocumentModels from \"@powerhousedao/powerhouse-vetra-packages/document-models\";\nimport * as vetraDocumentModels from \"@powerhousedao/vetra/document-models\";\nimport {\n BrowserKeyStorage,\n createSignatureVerifier,\n RenownCryptoBuilder,\n RenownCryptoSigner,\n} from \"@renown/sdk/crypto\";\nimport type * as PgLiveModuleNs from \"@electric-sql/pglite/live\";\nimport { Kysely } from \"kysely\";\nimport { PGliteDialect } from \"kysely-pglite-dialect\";\nimport { readPgVersionFile } from \"./utils/pglite-idb.js\";\nimport {\n coerceMajor,\n CURRENT_PG_MAJOR,\n type DetectedMajor,\n loadPGliteModule,\n resolvePgMajorForRuntime,\n type SupportedPgMajor,\n} from \"./utils/pglite-major.js\";\nimport {\n type BackupStrategy,\n type FileDataEntry,\n clearFileData,\n migrateIdb,\n readFileData,\n writeFileData,\n} from \"./utils/pglite-migrate-core.js\";\n\nconsole.info(\"[reactor.worker] module evaluating\");\n\n// Matches the main thread's RenownBuilder(\"connect\").\nconst RENOWN_APP_NAME = \"connect\";\n\n// Studio models the tab bundles as local packages; not CDN-loadable, so the worker imports them directly.\nconst bundledModelCandidates: unknown[] = [\n ...Object.values(commonDocumentModels),\n ...Object.values(vetraDocumentModels),\n];\nconst bundledDocumentModels = bundledModelCandidates.filter(\n (m): m is DocumentModelModule =>\n typeof m === \"object\" &&\n m !== null &&\n \"documentModel\" in m &&\n \"reducer\" in m,\n);\n\ntype WorkerConstruct = {\n namespace: string;\n relationalNamespace: string;\n cdnUrl: string;\n packageSpecs: string[];\n};\n\ntype ModelRegistry = {\n registerModules: (...modules: DocumentModelModule[]) => void;\n};\n\nlet loader: WorkerPackageLoader | undefined;\nlet registry: ModelRegistry | undefined;\nlet signer: RenownCryptoSigner | undefined;\nlet syncManager: ISyncManager | undefined;\ntype RelationalState = {\n pg?: PgLiveModuleNs.PGliteWithLive;\n db?: IRelationalDb;\n};\nconst relational: RelationalState = {};\ntype OwnedStorage = {\n reactorPg?: {\n close: () => Promise<void>;\n query: (sql: string, params?: unknown[]) => Promise<{ rows: unknown[] }>;\n };\n reactorIdb?: string;\n relationalIdb?: string;\n};\nconst owned: OwnedStorage = {};\nlet inspectorQueue: InMemoryQueue | undefined;\nlet inspectorProcessors: IProcessorManager | undefined;\nlet inspectorIntegrity: DocumentIntegrityService | undefined;\nlet currentIdentity: ReactorIdentity | null = null;\nconst registeredKeys = new Set<string>();\n\nfunction modelKey(module: DocumentModelModule): string {\n return `${module.documentModel.global.id}@${module.version ?? 1}`;\n}\n\n// Cloneable projection of a Remote: meta (carries channelConfig) + connection snapshot.\nfunction toWireRemote(remote: Remote) {\n return {\n meta: remote.meta,\n connectionState: remote.channel.getConnectionState(),\n };\n}\n\n// Register only the delta; the registry rejects duplicate (type, version) pairs.\nfunction registerNewModules(): void {\n if (!loader || !registry) {\n return;\n }\n const fresh = loader.models.filter((m) => !registeredKeys.has(modelKey(m)));\n if (fresh.length === 0) {\n return;\n }\n registry.registerModules(...fresh);\n for (const m of fresh) {\n registeredKeys.add(modelKey(m));\n }\n}\n\n// Rebuild renown crypto from the shared renownKeyDB keypair (origin-scoped IndexedDB).\nasync function buildWorkerCrypto() {\n const keyStorage = await BrowserKeyStorage.create();\n return new RenownCryptoBuilder().withKeyPairStorage(keyStorage).build();\n}\n\n// Open against the major already on disk so a legacy PG16 dir isn't read by PG17.\nasync function openReactorPglite(namespace: string) {\n const detected = coerceMajor(await readPgVersionFile(`/pglite/${namespace}`));\n const major = resolvePgMajorForRuntime(detected);\n if (major !== 17) {\n console.warn(\n `[reactor.worker] Running against legacy PGlite data dir (Postgres ${major}). Migrate to PG17 from the Connect banner or the Inspector.`,\n );\n }\n const { PGlite } = await loadPGliteModule(major);\n const pg = new PGlite(`idb://${namespace}`, { relaxedDurability: true });\n return { pg, detected };\n}\n\ntype PgLiveModule = typeof PgLiveModuleNs;\n\nasync function loadPgLive(major: SupportedPgMajor): Promise<PgLiveModule> {\n if (major === 16) {\n return import(\"pglite-legacy-02/live\") as unknown as Promise<PgLiveModule>;\n }\n return import(\"@electric-sql/pglite/live\");\n}\n\nasync function openRelational(namespace: string): Promise<DetectedMajor> {\n try {\n const detected = coerceMajor(\n await readPgVersionFile(`/pglite/${namespace}`),\n );\n const major = resolvePgMajorForRuntime(detected);\n if (major !== 17) {\n console.warn(\n `[reactor.worker] Relational store opening legacy PGlite data dir (Postgres ${major}). Migrate to PG17 from the Connect banner or the Inspector.`,\n );\n }\n const [{ PGlite }, { live }] = await Promise.all([\n loadPGliteModule(major),\n loadPgLive(major),\n ]);\n const pg = new PGlite(`idb://${namespace}`, {\n relaxedDurability: true,\n extensions: { live },\n });\n relational.pg = pg as unknown as PgLiveModuleNs.PGliteWithLive;\n relational.db = createRelationalDb(\n new Kysely({ dialect: new PGliteDialect(pg) }),\n );\n console.info(\n `[reactor.worker] Relational store opened: idb://${namespace} (Postgres ${major}).`,\n );\n return detected;\n } catch (error) {\n console.error(\n \"[reactor.worker] Failed to open the relational store:\",\n error,\n );\n return null;\n }\n}\n\nlet migrationState: WorkerMigrationState = { status: \"idle\" };\n\nfunction setMigration(state: WorkerMigrationState): void {\n migrationState = state;\n host.setMigrationState(state);\n}\n\nconst inMemoryBackup: BackupStrategy = {\n snapshot: (idbName) => readFileData(idbName),\n rollback: (handle, idbName) =>\n writeFileData(idbName, handle as FileDataEntry[]),\n discard: () => Promise.resolve(),\n commit: () => Promise.resolve(),\n};\n\nconst workerName = (self as { name?: string }).name ?? \"\";\n\nconst host = new ReactorHost({\n namespace: workerName,\n onAdminRestart: () =>\n host.broadcastReload(\"admin restart\", crypto.randomUUID()),\n onAdminClearStorage: async () => {\n await relational.pg?.close();\n await owned.reactorPg?.close();\n for (const idbName of [owned.reactorIdb, owned.relationalIdb]) {\n if (idbName) {\n await clearFileData(idbName);\n }\n }\n host.broadcastReload(\"storage cleared\", crypto.randomUUID());\n },\n onAdminMigrate: async () => {\n setMigration({\n status: \"migrating\",\n legacyMajor: migrationState.legacyMajor,\n });\n if (relational.pg) await relational.pg.close().catch(() => undefined);\n if (owned.reactorPg) await owned.reactorPg.close().catch(() => undefined);\n try {\n for (const idbName of [owned.reactorIdb, owned.relationalIdb]) {\n if (idbName) {\n await migrateIdb(\n idbName,\n (phase) =>\n setMigration({\n status: \"migrating\",\n legacyMajor: migrationState.legacyMajor,\n phase,\n }),\n inMemoryBackup,\n );\n }\n }\n host.broadcastReload(\"migration complete\", crypto.randomUUID());\n } catch (error) {\n console.error(\"[reactor.worker] Migration failed:\", error);\n setMigration({\n status: \"failed\",\n error: error instanceof Error ? error.message : String(error),\n });\n host.broadcastReload(\"migration failed\", crypto.randomUUID());\n }\n },\n build: async (raw) => {\n let phase = \"init\";\n try {\n const construct = raw as WorkerConstruct;\n phase = \"loading packages\";\n console.info(`[reactor.worker] boot: ${phase}`);\n loader = new WorkerPackageLoader({\n cdnUrl: construct.cdnUrl,\n importPackage: (url) =>\n import(/* @vite-ignore */ url) as Promise<Record<string, unknown>>,\n });\n const loaded = await loader.loadPackages(construct.packageSpecs);\n const models = baseDocumentModels.concat(bundledDocumentModels, loaded);\n phase = \"opening pglite stores\";\n console.info(`[reactor.worker] boot: ${phase}`);\n const [reactor, relationalMajor] = await Promise.all([\n openReactorPglite(construct.namespace),\n openRelational(construct.relationalNamespace),\n ]);\n const pg = reactor.pg;\n owned.reactorPg = pg;\n owned.reactorIdb = `/pglite/${construct.namespace}`;\n owned.relationalIdb = `/pglite/${construct.relationalNamespace}`;\n // A store is migratable when coerceMajor kept it (a supported legacy\n // major) and it is not the current one; openers already read PG_VERSION.\n const legacyMajor = [reactor.detected, relationalMajor].find(\n (m): m is SupportedPgMajor => m !== null && m !== CURRENT_PG_MAJOR,\n );\n if (legacyMajor !== undefined) {\n setMigration({ status: \"needed\", legacyMajor });\n }\n phase = \"building crypto\";\n console.info(`[reactor.worker] boot: ${phase}`);\n const crypto = await buildWorkerCrypto();\n signer = new RenownCryptoSigner(\n crypto,\n RENOWN_APP_NAME,\n currentIdentity ?? undefined,\n );\n const jwtHandler: JwtHandler = async () =>\n currentIdentity\n ? crypto.getBearerToken(currentIdentity.address, { expiresIn: 10 })\n : undefined;\n phase = \"building reactor module\";\n console.info(`[reactor.worker] boot: ${phase}`);\n const builder = new ReactorClientBuilder()\n .withSigner({ signer, verifier: createSignatureVerifier() })\n .withReactorBuilder(\n new ReactorBuilder()\n .withDocumentModels(models)\n .withChannelScheme(ChannelScheme.CONNECT)\n .withJwtHandler(jwtHandler)\n .withKysely(\n new Kysely<Database>({ dialect: new PGliteDialect(pg) }),\n ),\n );\n builder.withDocumentModelLoader(loader);\n const module = await builder.buildModule();\n registry = module.reactorModule?.documentModelRegistry;\n syncManager = module.reactorModule?.syncModule?.syncManager;\n const rm = module.reactorModule;\n if (rm) {\n inspectorQueue =\n rm.queue instanceof InMemoryQueue ? rm.queue : undefined;\n inspectorProcessors = rm.processorManager;\n inspectorIntegrity = new DocumentIntegrityService(\n rm.keyframeStore,\n rm.operationStore,\n rm.writeCache,\n rm.documentView,\n rm.documentModelRegistry,\n );\n }\n for (const m of models) {\n registeredKeys.add(modelKey(m));\n }\n for (const type of FORWARDED_EVENT_TYPES) {\n module.eventBus.subscribe(type, (forwardedType, event) =>\n host.broadcastBusEvent(forwardedType, event),\n );\n }\n syncManager?.onSyncStatusChange((documentId, status) =>\n host.broadcastBusEvent(SYNC_STATUS_CHANGED_EVENT, {\n documentId,\n status,\n }),\n );\n console.info(\"[reactor.worker] boot: complete\");\n return module.client;\n } catch (error) {\n console.error(`[reactor.worker] boot failed at phase \"${phase}\":`, error);\n throw error;\n }\n },\n registerPackages: async (specs) => {\n if (!loader) {\n return;\n }\n await loader.loadPackages(specs);\n registerNewModules();\n },\n onIdentity: (user) => {\n currentIdentity = user;\n if (signer) {\n signer.user = user ?? undefined;\n }\n },\n onSyncOp: async (method, args) => {\n if (!syncManager) {\n throw new Error(\"SyncManager not available\");\n }\n switch (method) {\n case \"list\":\n return syncManager.list().map(toWireRemote);\n case \"add\": {\n const [name, collectionIdKey, channelConfig, filter, options] =\n args as [\n string,\n string,\n ChannelConfig,\n RemoteFilter | undefined,\n RemoteOptions | undefined,\n ];\n const remote = await syncManager.add(\n name,\n DriveCollectionId.fromKey(collectionIdKey),\n channelConfig,\n filter,\n options,\n );\n return toWireRemote(remote);\n }\n case \"remove\":\n await syncManager.remove(args[0] as string);\n return undefined;\n case \"triggerPull\":\n syncManager.triggerPull(args[0] as string);\n return undefined;\n default:\n throw new Error(`Unknown sync op: ${method}`);\n }\n },\n onDbOp: async (method, args) => {\n if (!relational.pg) {\n throw new Error(\"Relational store not available\");\n }\n switch (method) {\n case \"query\": {\n const [sql, params] = args as [string, unknown[]];\n const result = await relational.pg.query(sql, params);\n return result.rows;\n }\n default:\n throw new Error(`Unknown db op: ${method}`);\n }\n },\n onLiveQuery: async (sql, params, onResults) => {\n if (!relational.pg) {\n throw new Error(\"Relational store not available\");\n }\n const live = await relational.pg.live.query(sql, params, (results) =>\n onResults(results),\n );\n return () => {\n void live.unsubscribe();\n };\n },\n onInspectorOp: async (method, args) => {\n switch (method) {\n case \"queue.getState\": {\n if (!inspectorQueue) {\n return {\n isPaused: false,\n pendingJobs: [],\n executingJobs: [],\n totalPending: 0,\n totalExecuting: 0,\n };\n }\n const pendingJobs = inspectorQueue.getPendingJobs();\n const executingJobs = [];\n for (const jobIds of inspectorQueue.getExecutingJobIds().values()) {\n for (const jobId of jobIds) {\n const job = inspectorQueue.getJob(jobId);\n if (job) {\n executingJobs.push(job);\n }\n }\n }\n return {\n isPaused: inspectorQueue.paused,\n pendingJobs,\n executingJobs,\n totalPending: pendingJobs.length,\n totalExecuting: executingJobs.length,\n };\n }\n case \"queue.pause\":\n inspectorQueue?.pause();\n return undefined;\n case \"queue.resume\":\n await inspectorQueue?.resume();\n return undefined;\n case \"processors.getAll\":\n return (inspectorProcessors?.getAll() ?? []).map((tracked) => ({\n processorId: tracked.processorId,\n factoryId: tracked.factoryId,\n driveId: tracked.driveId,\n processorIndex: tracked.processorIndex,\n lastOrdinal: tracked.lastOrdinal,\n status: tracked.status,\n lastError: tracked.lastError,\n lastErrorTimestamp: tracked.lastErrorTimestamp,\n }));\n case \"processors.retry\": {\n const [processorId] = args as [string];\n await inspectorProcessors?.get(processorId)?.retry();\n return undefined;\n }\n case \"integrity.validate\": {\n if (!inspectorIntegrity) {\n throw new Error(\"Integrity service not available\");\n }\n const [documentId, branch] = args as [string, string?];\n return inspectorIntegrity.validateDocument(documentId, branch);\n }\n case \"integrity.rebuildKeyframes\": {\n if (!inspectorIntegrity) {\n throw new Error(\"Integrity service not available\");\n }\n const [documentId, branch] = args as [string, string?];\n return inspectorIntegrity.rebuildKeyframes(documentId, branch);\n }\n case \"integrity.rebuildSnapshots\": {\n if (!inspectorIntegrity) {\n throw new Error(\"Integrity service not available\");\n }\n const [documentId, branch] = args as [string, string?];\n return inspectorIntegrity.rebuildSnapshots(documentId, branch);\n }\n case \"db.query\": {\n if (!owned.reactorPg) {\n throw new Error(\"Reactor store not available\");\n }\n const [sql, params] = args as [string, unknown[]];\n const result = await owned.reactorPg.query(sql, params);\n return result.rows;\n }\n default:\n throw new Error(`Unknown inspector op: ${method}`);\n }\n },\n});\n\ntype WorkerGlobalErrorEvent = {\n message?: string;\n error?: unknown;\n reason?: unknown;\n};\n\nconst globalScope = self as unknown as {\n addEventListener: (\n type: \"error\" | \"unhandledrejection\",\n listener: (event: WorkerGlobalErrorEvent) => void,\n ) => void;\n onconnect: ((event: MessageEvent) => void) | null;\n};\n\nglobalScope.addEventListener(\"error\", (event) => {\n console.error(\n \"[reactor.worker] uncaught error\",\n event.message ?? event.error ?? event,\n );\n});\nglobalScope.addEventListener(\"unhandledrejection\", (event) => {\n console.error(\"[reactor.worker] unhandled rejection\", event.reason);\n});\n\nglobalScope.onconnect = (event) => {\n const port = event.ports[0];\n if (port) {\n try {\n host.connectPort(port);\n } catch (error) {\n console.error(\"[reactor.worker] failed to connect port\", error);\n }\n }\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA2DA,QAAQ,KAAK,qCAAqC;AAGlD,MAAM,kBAAkB;AAOxB,MAAM,wBAJoC,CACxC,GAAG,OAAO,OAAO,qBAAqB,EACtC,GAAG,OAAO,OAAO,oBAAoB,CACtC,CACoD,QAClD,MACC,OAAO,MAAM,YACb,MAAM,QACN,mBAAmB,KACnB,aAAa,EAChB;AAaD,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI;AAKJ,MAAM,aAA8B,EAAE;AAStC,MAAM,QAAsB,EAAE;AAC9B,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI,kBAA0C;AAC9C,MAAM,iCAAiB,IAAI,KAAa;AAExC,SAAS,SAAS,QAAqC;AACrD,QAAO,GAAG,OAAO,cAAc,OAAO,GAAG,GAAG,OAAO,WAAW;;AAIhE,SAAS,aAAa,QAAgB;AACpC,QAAO;EACL,MAAM,OAAO;EACb,iBAAiB,OAAO,QAAQ,oBAAoB;EACrD;;AAIH,SAAS,qBAA2B;AAClC,KAAI,CAAC,UAAU,CAAC,SACd;CAEF,MAAM,QAAQ,OAAO,OAAO,QAAQ,MAAM,CAAC,eAAe,IAAI,SAAS,EAAE,CAAC,CAAC;AAC3E,KAAI,MAAM,WAAW,EACnB;AAEF,UAAS,gBAAgB,GAAG,MAAM;AAClC,MAAK,MAAM,KAAK,MACd,gBAAe,IAAI,SAAS,EAAE,CAAC;;AAKnC,eAAe,oBAAoB;CACjC,MAAM,aAAa,MAAM,kBAAkB,QAAQ;AACnD,QAAO,IAAI,qBAAqB,CAAC,mBAAmB,WAAW,CAAC,OAAO;;AAIzE,eAAe,kBAAkB,WAAmB;CAClD,MAAM,WAAW,YAAY,MAAM,kBAAkB,WAAW,YAAY,CAAC;CAC7E,MAAM,QAAQ,yBAAyB,SAAS;AAChD,KAAI,UAAU,GACZ,SAAQ,KACN,qEAAqE,MAAM,8DAC5E;CAEH,MAAM,EAAE,WAAW,MAAM,iBAAiB,MAAM;AAEhD,QAAO;EAAE,IADE,IAAI,OAAO,SAAS,aAAa,EAAE,mBAAmB,MAAM,CAAC;EAC3D;EAAU;;AAKzB,eAAe,WAAW,OAAgD;AACxE,KAAI,UAAU,GACZ,QAAO,OAAO;AAEhB,QAAO,OAAO;;AAGhB,eAAe,eAAe,WAA2C;AACvE,KAAI;EACF,MAAM,WAAW,YACf,MAAM,kBAAkB,WAAW,YAAY,CAChD;EACD,MAAM,QAAQ,yBAAyB,SAAS;AAChD,MAAI,UAAU,GACZ,SAAQ,KACN,8EAA8E,MAAM,8DACrF;EAEH,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,MAAM,QAAQ,IAAI,CAC/C,iBAAiB,MAAM,EACvB,WAAW,MAAM,CAClB,CAAC;EACF,MAAM,KAAK,IAAI,OAAO,SAAS,aAAa;GAC1C,mBAAmB;GACnB,YAAY,EAAE,MAAM;GACrB,CAAC;AACF,aAAW,KAAK;AAChB,aAAW,KAAK,mBACd,IAAI,OAAO,EAAE,SAAS,IAAI,cAAc,GAAG,EAAE,CAAC,CAC/C;AACD,UAAQ,KACN,mDAAmD,UAAU,aAAa,MAAM,IACjF;AACD,SAAO;UACA,OAAO;AACd,UAAQ,MACN,yDACA,MACD;AACD,SAAO;;;AAIX,IAAI,iBAAuC,EAAE,QAAQ,QAAQ;AAE7D,SAAS,aAAa,OAAmC;AACvD,kBAAiB;AACjB,MAAK,kBAAkB,MAAM;;AAG/B,MAAM,iBAAiC;CACrC,WAAW,YAAY,aAAa,QAAQ;CAC5C,WAAW,QAAQ,YACjB,cAAc,SAAS,OAA0B;CACnD,eAAe,QAAQ,SAAS;CAChC,cAAc,QAAQ,SAAS;CAChC;AAID,MAAM,OAAO,IAAI,YAAY;CAC3B,WAHkB,KAA2B,QAAQ;CAIrD,sBACE,KAAK,gBAAgB,iBAAiB,OAAO,YAAY,CAAC;CAC5D,qBAAqB,YAAY;AAC/B,QAAM,WAAW,IAAI,OAAO;AAC5B,QAAM,MAAM,WAAW,OAAO;AAC9B,OAAK,MAAM,WAAW,CAAC,MAAM,YAAY,MAAM,cAAc,CAC3D,KAAI,QACF,OAAM,cAAc,QAAQ;AAGhC,OAAK,gBAAgB,mBAAmB,OAAO,YAAY,CAAC;;CAE9D,gBAAgB,YAAY;AAC1B,eAAa;GACX,QAAQ;GACR,aAAa,eAAe;GAC7B,CAAC;AACF,MAAI,WAAW,GAAI,OAAM,WAAW,GAAG,OAAO,CAAC,YAAY,KAAA,EAAU;AACrE,MAAI,MAAM,UAAW,OAAM,MAAM,UAAU,OAAO,CAAC,YAAY,KAAA,EAAU;AACzE,MAAI;AACF,QAAK,MAAM,WAAW,CAAC,MAAM,YAAY,MAAM,cAAc,CAC3D,KAAI,QACF,OAAM,WACJ,UACC,UACC,aAAa;IACX,QAAQ;IACR,aAAa,eAAe;IAC5B;IACD,CAAC,EACJ,eACD;AAGL,QAAK,gBAAgB,sBAAsB,OAAO,YAAY,CAAC;WACxD,OAAO;AACd,WAAQ,MAAM,sCAAsC,MAAM;AAC1D,gBAAa;IACX,QAAQ;IACR,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;IAC9D,CAAC;AACF,QAAK,gBAAgB,oBAAoB,OAAO,YAAY,CAAC;;;CAGjE,OAAO,OAAO,QAAQ;EACpB,IAAI,QAAQ;AACZ,MAAI;GACF,MAAM,YAAY;AAClB,WAAQ;AACR,WAAQ,KAAK,0BAA0B,QAAQ;AAC/C,YAAS,IAAI,oBAAoB;IAC/B,QAAQ,UAAU;IAClB,gBAAgB,QACd;;KAA0B;;IAC7B,CAAC;GACF,MAAM,SAAS,MAAM,OAAO,aAAa,UAAU,aAAa;GAChE,MAAM,SAAS,mBAAmB,OAAO,uBAAuB,OAAO;AACvE,WAAQ;AACR,WAAQ,KAAK,0BAA0B,QAAQ;GAC/C,MAAM,CAAC,SAAS,mBAAmB,MAAM,QAAQ,IAAI,CACnD,kBAAkB,UAAU,UAAU,EACtC,eAAe,UAAU,oBAAoB,CAC9C,CAAC;GACF,MAAM,KAAK,QAAQ;AACnB,SAAM,YAAY;AAClB,SAAM,aAAa,WAAW,UAAU;AACxC,SAAM,gBAAgB,WAAW,UAAU;GAG3C,MAAM,cAAc,CAAC,QAAQ,UAAU,gBAAgB,CAAC,MACrD,MAA6B,MAAM,QAAQ,MAAA,GAC7C;AACD,OAAI,gBAAgB,KAAA,EAClB,cAAa;IAAE,QAAQ;IAAU;IAAa,CAAC;AAEjD,WAAQ;AACR,WAAQ,KAAK,0BAA0B,QAAQ;GAC/C,MAAM,SAAS,MAAM,mBAAmB;AACxC,YAAS,IAAI,mBACX,QACA,iBACA,mBAAmB,KAAA,EACpB;GACD,MAAM,aAAyB,YAC7B,kBACI,OAAO,eAAe,gBAAgB,SAAS,EAAE,WAAW,IAAI,CAAC,GACjE,KAAA;AACN,WAAQ;AACR,WAAQ,KAAK,0BAA0B,QAAQ;GAC/C,MAAM,UAAU,IAAI,sBAAsB,CACvC,WAAW;IAAE;IAAQ,UAAU,yBAAyB;IAAE,CAAC,CAC3D,mBACC,IAAI,gBAAgB,CACjB,mBAAmB,OAAO,CAC1B,kBAAkB,cAAc,QAAQ,CACxC,eAAe,WAAW,CAC1B,WACC,IAAI,OAAiB,EAAE,SAAS,IAAI,cAAc,GAAG,EAAE,CAAC,CACzD,CACJ;AACH,WAAQ,wBAAwB,OAAO;GACvC,MAAM,SAAS,MAAM,QAAQ,aAAa;AAC1C,cAAW,OAAO,eAAe;AACjC,iBAAc,OAAO,eAAe,YAAY;GAChD,MAAM,KAAK,OAAO;AAClB,OAAI,IAAI;AACN,qBACE,GAAG,iBAAiB,gBAAgB,GAAG,QAAQ,KAAA;AACjD,0BAAsB,GAAG;AACzB,yBAAqB,IAAI,yBACvB,GAAG,eACH,GAAG,gBACH,GAAG,YACH,GAAG,cACH,GAAG,sBACJ;;AAEH,QAAK,MAAM,KAAK,OACd,gBAAe,IAAI,SAAS,EAAE,CAAC;AAEjC,QAAK,MAAM,QAAQ,sBACjB,QAAO,SAAS,UAAU,OAAO,eAAe,UAC9C,KAAK,kBAAkB,eAAe,MAAM,CAC7C;AAEH,gBAAa,oBAAoB,YAAY,WAC3C,KAAK,kBAAkB,2BAA2B;IAChD;IACA;IACD,CAAC,CACH;AACD,WAAQ,KAAK,kCAAkC;AAC/C,UAAO,OAAO;WACP,OAAO;AACd,WAAQ,MAAM,0CAA0C,MAAM,KAAK,MAAM;AACzE,SAAM;;;CAGV,kBAAkB,OAAO,UAAU;AACjC,MAAI,CAAC,OACH;AAEF,QAAM,OAAO,aAAa,MAAM;AAChC,sBAAoB;;CAEtB,aAAa,SAAS;AACpB,oBAAkB;AAClB,MAAI,OACF,QAAO,OAAO,QAAQ,KAAA;;CAG1B,UAAU,OAAO,QAAQ,SAAS;AAChC,MAAI,CAAC,YACH,OAAM,IAAI,MAAM,4BAA4B;AAE9C,UAAQ,QAAR;GACE,KAAK,OACH,QAAO,YAAY,MAAM,CAAC,IAAI,aAAa;GAC7C,KAAK,OAAO;IACV,MAAM,CAAC,MAAM,iBAAiB,eAAe,QAAQ,WACnD;AAcF,WAAO,aAPQ,MAAM,YAAY,IAC/B,MACA,kBAAkB,QAAQ,gBAAgB,EAC1C,eACA,QACA,QACD,CAC0B;;GAE7B,KAAK;AACH,UAAM,YAAY,OAAO,KAAK,GAAa;AAC3C;GACF,KAAK;AACH,gBAAY,YAAY,KAAK,GAAa;AAC1C;GACF,QACE,OAAM,IAAI,MAAM,oBAAoB,SAAS;;;CAGnD,QAAQ,OAAO,QAAQ,SAAS;AAC9B,MAAI,CAAC,WAAW,GACd,OAAM,IAAI,MAAM,iCAAiC;AAEnD,UAAQ,QAAR;GACE,KAAK,SAAS;IACZ,MAAM,CAAC,KAAK,UAAU;AAEtB,YADe,MAAM,WAAW,GAAG,MAAM,KAAK,OAAO,EACvC;;GAEhB,QACE,OAAM,IAAI,MAAM,kBAAkB,SAAS;;;CAGjD,aAAa,OAAO,KAAK,QAAQ,cAAc;AAC7C,MAAI,CAAC,WAAW,GACd,OAAM,IAAI,MAAM,iCAAiC;EAEnD,MAAM,OAAO,MAAM,WAAW,GAAG,KAAK,MAAM,KAAK,SAAS,YACxD,UAAU,QAAQ,CACnB;AACD,eAAa;AACN,QAAK,aAAa;;;CAG3B,eAAe,OAAO,QAAQ,SAAS;AACrC,UAAQ,QAAR;GACE,KAAK,kBAAkB;AACrB,QAAI,CAAC,eACH,QAAO;KACL,UAAU;KACV,aAAa,EAAE;KACf,eAAe,EAAE;KACjB,cAAc;KACd,gBAAgB;KACjB;IAEH,MAAM,cAAc,eAAe,gBAAgB;IACnD,MAAM,gBAAgB,EAAE;AACxB,SAAK,MAAM,UAAU,eAAe,oBAAoB,CAAC,QAAQ,CAC/D,MAAK,MAAM,SAAS,QAAQ;KAC1B,MAAM,MAAM,eAAe,OAAO,MAAM;AACxC,SAAI,IACF,eAAc,KAAK,IAAI;;AAI7B,WAAO;KACL,UAAU,eAAe;KACzB;KACA;KACA,cAAc,YAAY;KAC1B,gBAAgB,cAAc;KAC/B;;GAEH,KAAK;AACH,oBAAgB,OAAO;AACvB;GACF,KAAK;AACH,UAAM,gBAAgB,QAAQ;AAC9B;GACF,KAAK,oBACH,SAAQ,qBAAqB,QAAQ,IAAI,EAAE,EAAE,KAAK,aAAa;IAC7D,aAAa,QAAQ;IACrB,WAAW,QAAQ;IACnB,SAAS,QAAQ;IACjB,gBAAgB,QAAQ;IACxB,aAAa,QAAQ;IACrB,QAAQ,QAAQ;IAChB,WAAW,QAAQ;IACnB,oBAAoB,QAAQ;IAC7B,EAAE;GACL,KAAK,oBAAoB;IACvB,MAAM,CAAC,eAAe;AACtB,UAAM,qBAAqB,IAAI,YAAY,EAAE,OAAO;AACpD;;GAEF,KAAK,sBAAsB;AACzB,QAAI,CAAC,mBACH,OAAM,IAAI,MAAM,kCAAkC;IAEpD,MAAM,CAAC,YAAY,UAAU;AAC7B,WAAO,mBAAmB,iBAAiB,YAAY,OAAO;;GAEhE,KAAK,8BAA8B;AACjC,QAAI,CAAC,mBACH,OAAM,IAAI,MAAM,kCAAkC;IAEpD,MAAM,CAAC,YAAY,UAAU;AAC7B,WAAO,mBAAmB,iBAAiB,YAAY,OAAO;;GAEhE,KAAK,8BAA8B;AACjC,QAAI,CAAC,mBACH,OAAM,IAAI,MAAM,kCAAkC;IAEpD,MAAM,CAAC,YAAY,UAAU;AAC7B,WAAO,mBAAmB,iBAAiB,YAAY,OAAO;;GAEhE,KAAK,YAAY;AACf,QAAI,CAAC,MAAM,UACT,OAAM,IAAI,MAAM,8BAA8B;IAEhD,MAAM,CAAC,KAAK,UAAU;AAEtB,YADe,MAAM,MAAM,UAAU,MAAM,KAAK,OAAO,EACzC;;GAEhB,QACE,OAAM,IAAI,MAAM,yBAAyB,SAAS;;;CAGzD,CAAC;AAQF,MAAM,cAAc;AAQpB,YAAY,iBAAiB,UAAU,UAAU;AAC/C,SAAQ,MACN,mCACA,MAAM,WAAW,MAAM,SAAS,MACjC;EACD;AACF,YAAY,iBAAiB,uBAAuB,UAAU;AAC5D,SAAQ,MAAM,wCAAwC,MAAM,OAAO;EACnE;AAEF,YAAY,aAAa,UAAU;CACjC,MAAM,OAAO,MAAM,MAAM;AACzB,KAAI,KACF,KAAI;AACF,OAAK,YAAY,KAAK;UACf,OAAO;AACd,UAAQ,MAAM,2CAA2C,MAAM","debug_id":"8c1df25e-941e-518a-9c1d-ab758077d702"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
3
|
-
import { r as connectConfig } from "./connect.config-
|
|
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]="b8602ba1-4b6a-54f4-b893-aa37f682e4b3")}catch(e){}}();
|
|
3
|
+
import { r as connectConfig } from "./connect.config-BG681xG9.js";
|
|
4
4
|
//#region src/utils/registerServiceWorker.ts
|
|
5
5
|
const serviceWorkerScriptPath = [connectConfig.routerBasename, "service-worker.js"].join("/").replace(/\/{2,}/gm, "/");
|
|
6
6
|
var ServiceWorkerManager = class {
|
|
@@ -77,5 +77,5 @@ const serviceWorkerManager = new ServiceWorkerManager();
|
|
|
77
77
|
//#endregion
|
|
78
78
|
export { serviceWorkerManager as t };
|
|
79
79
|
|
|
80
|
-
//# sourceMappingURL=registerServiceWorker-
|
|
81
|
-
//# debugId=
|
|
80
|
+
//# sourceMappingURL=registerServiceWorker-2tRbkdJj.js.map
|
|
81
|
+
//# debugId=b8602ba1-4b6a-54f4-b893-aa37f682e4b3
|
package/dist/{registerServiceWorker-B7uKpkci.js.map → registerServiceWorker-2tRbkdJj.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerServiceWorker-
|
|
1
|
+
{"version":3,"file":"registerServiceWorker-2tRbkdJj.js","sources":["../src/utils/registerServiceWorker.ts"],"sourcesContent":["import { connectConfig } from \"@powerhousedao/connect/config\";\n\nconst basePath = connectConfig.routerBasename;\n\nconst serviceWorkerScriptPath = [basePath, \"service-worker.js\"]\n .join(\"/\")\n .replace(/\\/{2,}/gm, \"/\");\n\nclass ServiceWorkerManager {\n ready = false;\n debug = false;\n registration: ServiceWorkerRegistration | null = null;\n\n constructor(debug = false) {\n this.debug = debug;\n }\n\n setDebug(debug: boolean) {\n this.debug = debug;\n }\n\n #handleServiceWorkerMessage(\n event: MessageEvent<{\n type: \"NEW_VERSION_AVAILABLE\";\n version: string;\n requiresHardRefresh: boolean;\n }>,\n ) {\n if (this.debug) {\n console.log(\"ServiceWorker message: \", event);\n }\n const message = \"type\" in event.data ? event : null;\n switch (message?.data.type) {\n case \"NEW_VERSION_AVAILABLE\": {\n if (message.data.version === connectConfig.appVersion) {\n return;\n }\n if (message.data.requiresHardRefresh) {\n if (this.debug) {\n console.log(\"New version available\");\n }\n\n window.location.reload(); // Reload the page to load the new version\n }\n break;\n }\n default: {\n console.warn(\"Unhandled message:\", message);\n break;\n }\n }\n }\n\n #handleServiceWorker(registration: ServiceWorkerRegistration) {\n {\n // Listen for messages from the service worker\n if (this.debug) {\n console.log(\"ServiceWorker registered: \", registration);\n }\n\n navigator.serviceWorker.addEventListener(\n \"message\",\n this.#handleServiceWorkerMessage.bind(this),\n );\n\n this.registration = registration;\n this.ready = true;\n }\n }\n\n async #register() {\n try {\n // checks if there is a service worker installed already and calls\n // its the update method to check if there is a new version available\n const existingRegistration =\n await navigator.serviceWorker.getRegistration();\n if (existingRegistration) {\n await existingRegistration.update();\n this.#handleServiceWorker(existingRegistration);\n }\n\n // if no service worker is installed then registers the service worker\n else {\n const registration = await navigator.serviceWorker.register(\n serviceWorkerScriptPath,\n );\n this.#handleServiceWorker(registration);\n\n registration.addEventListener(\"updatefound\", () => {\n this.#handleServiceWorker(registration);\n });\n }\n\n // calls the update on an interval to force\n // the browser to check for a new version\n const intervalId = setInterval(() => {\n void (async () => {\n const existingRegistration =\n await navigator.serviceWorker.getRegistration();\n if (existingRegistration) {\n await existingRegistration.update();\n } else {\n clearInterval(intervalId);\n this.registerServiceWorker();\n }\n })();\n }, connectConfig.appVersionCheckInterval);\n } catch (error) {\n console.error(\"ServiceWorker registration failed: \", error);\n }\n }\n\n registerServiceWorker(debug = false) {\n this.debug = debug;\n\n if (!(\"serviceWorker\" in navigator)) {\n console.warn(\"Service Worker not available\");\n return;\n }\n window.addEventListener(\"load\", () => {\n this.#register().catch(console.error);\n });\n }\n}\n\nexport const serviceWorkerManager = new ServiceWorkerManager();\n"],"names":["#handleServiceWorkerMessage","#register","#handleServiceWorker"],"mappings":";;;;AAIA,MAAM,0BAA0B,CAFf,cAAc,gBAEY,oBAAoB,CAC5D,KAAK,IAAI,CACT,QAAQ,YAAY,IAAI;AAE3B,IAAM,uBAAN,MAA2B;CACzB,QAAQ;CACR,QAAQ;CACR,eAAiD;CAEjD,YAAY,QAAQ,OAAO;AACzB,OAAK,QAAQ;;CAGf,SAAS,OAAgB;AACvB,OAAK,QAAQ;;CAGf,4BACE,OAKA;AACA,MAAI,KAAK,MACP,SAAQ,IAAI,2BAA2B,MAAM;EAE/C,MAAM,UAAU,UAAU,MAAM,OAAO,QAAQ;AAC/C,UAAQ,SAAS,KAAK,MAAtB;GACE,KAAK;AACH,QAAI,QAAQ,KAAK,YAAY,cAAc,WACzC;AAEF,QAAI,QAAQ,KAAK,qBAAqB;AACpC,SAAI,KAAK,MACP,SAAQ,IAAI,wBAAwB;AAGtC,YAAO,SAAS,QAAQ;;AAE1B;GAEF;AACE,YAAQ,KAAK,sBAAsB,QAAQ;AAC3C;;;CAKN,qBAAqB,cAAyC;AAG1D,MAAI,KAAK,MACP,SAAQ,IAAI,8BAA8B,aAAa;AAGzD,YAAU,cAAc,iBACtB,WACA,MAAA,2BAAiC,KAAK,KAAK,CAC5C;AAED,OAAK,eAAe;AACpB,OAAK,QAAQ;;CAIjB,OAAA,WAAkB;AAChB,MAAI;GAGF,MAAM,uBACJ,MAAM,UAAU,cAAc,iBAAiB;AACjD,OAAI,sBAAsB;AACxB,UAAM,qBAAqB,QAAQ;AACnC,UAAA,oBAA0B,qBAAqB;UAI5C;IACH,MAAM,eAAe,MAAM,UAAU,cAAc,SACjD,wBACD;AACD,UAAA,oBAA0B,aAAa;AAEvC,iBAAa,iBAAiB,qBAAqB;AACjD,WAAA,oBAA0B,aAAa;MACvC;;GAKJ,MAAM,aAAa,kBAAkB;AACnC,KAAM,YAAY;KAChB,MAAM,uBACJ,MAAM,UAAU,cAAc,iBAAiB;AACjD,SAAI,qBACF,OAAM,qBAAqB,QAAQ;UAC9B;AACL,oBAAc,WAAW;AACzB,WAAK,uBAAuB;;QAE5B;MACH,cAAc,wBAAwB;WAClC,OAAO;AACd,WAAQ,MAAM,uCAAuC,MAAM;;;CAI/D,sBAAsB,QAAQ,OAAO;AACnC,OAAK,QAAQ;AAEb,MAAI,EAAE,mBAAmB,YAAY;AACnC,WAAQ,KAAK,+BAA+B;AAC5C;;AAEF,SAAO,iBAAiB,cAAc;AACpC,SAAA,UAAgB,CAAC,MAAM,QAAQ,MAAM;IACrC;;;AAIN,MAAa,uBAAuB,IAAI,sBAAsB","debug_id":"b8602ba1-4b6a-54f4-b893-aa37f682e4b3"}
|
|
@@ -1,5 +1,5 @@
|
|
|
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]="fc4a7fdd-e366-589a-9881-ac3437c86c95")}catch(e){}}();
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
import i18n from "i18next";
|
|
5
5
|
import { initReactI18next, useTranslation } from "react-i18next";
|
|
@@ -138,5 +138,5 @@ const ReloadConnectToast = () => {
|
|
|
138
138
|
//#endregion
|
|
139
139
|
export { i18n as n, ReloadConnectToast as t };
|
|
140
140
|
|
|
141
|
-
//# sourceMappingURL=reload-connect-toast-
|
|
142
|
-
//# debugId=
|
|
141
|
+
//# sourceMappingURL=reload-connect-toast-qibmlgQm.js.map
|
|
142
|
+
//# debugId=fc4a7fdd-e366-589a-9881-ac3437c86c95
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reload-connect-toast-
|
|
1
|
+
{"version":3,"file":"reload-connect-toast-qibmlgQm.js","sources":["../src/i18n/locales/en.json","../src/i18n/index.ts","../src/components/reload-connect-toast.tsx"],"sourcesContent":["","import type { Resource } from \"i18next\";\nimport i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport translationEN from \"./locales/en.json\" with { type: \"json\" };\n\nconst resources: Resource = {\n en: {\n code: \"en\",\n name: \"English\",\n translation: translationEN,\n },\n};\n\ni18n\n .use(initReactI18next)\n .init({\n resources,\n fallbackLng: \"en\",\n debug: false,\n interpolation: {\n escapeValue: false,\n },\n })\n .catch((e: unknown) => {\n console.error(e);\n });\n\nexport { i18n };\nexport default i18n;\n","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"],"names":["translationEN"],"mappings":";;;;;ACcA,KACG,IAAI,iBAAiB,CACrB,KAAK;CACJ,WAXwB,EAC1B,IAAI;EACF,MAAM;EACN,MAAM;EACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EACD,EACF;CAMG,aAAa;CACb,OAAO;CACP,eAAe,EACb,aAAa,OACd;CACF,CAAC,CACD,OAAO,MAAe;AACrB,SAAQ,MAAM,EAAE;EAChB;;;ACxBJ,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","debug_id":"fc4a7fdd-e366-589a-9881-ac3437c86c95"}
|
package/dist/start-connect.js
CHANGED
|
@@ -5,7 +5,7 @@ import { createRoot } from "react-dom/client";
|
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
6
|
//#region start-connect.tsx
|
|
7
7
|
await loadRuntimeConfig();
|
|
8
|
-
const { AppLoader } = await import("./components-
|
|
8
|
+
const { AppLoader } = await import("./components-DpeD6Icw.js");
|
|
9
9
|
function updateLocalPackage(pkg) {
|
|
10
10
|
window.ph?.vetraPackageManager?.updateLocalPackage(pkg);
|
|
11
11
|
}
|