@powerhousedao/connect 1.0.0-dev.219 → 1.0.0-dev.221
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/assets/{app-C_MB7aVz.js → app-B8nf-deX.js} +77 -35
- package/dist/assets/{app-loader-BHzYXoRU.js → app-loader-BDXofohd.js} +5 -5
- package/dist/assets/{browser-D0BVwVhB.js → browser-E-4rGFna.js} +5 -5
- package/dist/assets/{ccip-D-Y5JcPZ.js → ccip-BLPIQK-p.js} +5 -5
- package/dist/assets/{content-DiXJBJae.js → content-Bov1x3ah.js} +57 -9
- package/dist/assets/{getEnsName-DlKDhRFF.js → getEnsName-DVtbpogo.js} +4 -4
- package/dist/assets/{index-D-Bw4Z2V.js → index-BGTpM-hv.js} +6 -6
- package/dist/assets/{index-C7ujl-B9.js → index-C6rLvt8a.js} +3 -3
- package/dist/assets/{index-CDOFuuSr.js → index-DWpJ5RMK.js} +3 -3
- package/dist/assets/{isAddressEqual-DMjZ-faf.js → isAddressEqual-HNfnZOzP.js} +1 -1
- package/dist/assets/{main.Cv8enYlq.js → main.Bikg5D0d.js} +1 -1
- package/dist/assets/{react-error-boundary.esm-Sx5R2LB-.js → react-error-boundary.esm-BjyDQG6F.js} +2 -2
- package/dist/assets/{root-BwxG_iOp.js → root-BsPsBTqn.js} +6 -6
- package/dist/assets/{router-C5nCDdMp.js → router-CyGnAURP.js} +7 -8
- package/dist/index.html +11 -10
- package/dist/modules/@powerhousedao/reactor-browser/{chunk-2M5MUZC5.js → chunk-22MXJF6S.js} +56 -24
- package/dist/modules/@powerhousedao/reactor-browser/{chunk-APULBRCC.js → chunk-2JKTZCPP.js} +2 -2
- package/dist/modules/@powerhousedao/reactor-browser/{chunk-CSDGLPMX.js → chunk-7K3IYNHM.js} +1 -1
- package/dist/modules/@powerhousedao/reactor-browser/{chunk-KCWUXJON.js → chunk-FQF4YAVC.js} +8113 -8112
- package/dist/modules/@powerhousedao/reactor-browser/{chunk-PXVJIFZD.js → chunk-IQTSFTNF.js} +1 -1
- package/dist/modules/@powerhousedao/reactor-browser/{chunk-ISFL4WXH.js → chunk-LRNZZ3SR.js} +1 -1
- package/dist/modules/@powerhousedao/reactor-browser/{chunk-EAJA6RP7.js → chunk-LX4MYGDV.js} +1 -1
- package/dist/modules/@powerhousedao/reactor-browser/{chunk-OLDD444V.js → chunk-QDQLULSM.js} +2 -3
- package/dist/modules/@powerhousedao/reactor-browser/{chunk-YXS2F7C2.js → chunk-R3DNAUCO.js} +4 -4
- package/dist/modules/@powerhousedao/reactor-browser/chunk-Y7NTRTMT.js +25 -0
- package/dist/modules/@powerhousedao/reactor-browser/context/index.js +3 -3
- package/dist/modules/@powerhousedao/reactor-browser/context/read-mode.js +3 -3
- package/dist/modules/@powerhousedao/reactor-browser/document-model.js +2 -2
- package/dist/modules/@powerhousedao/reactor-browser/hooks/index.js +24 -24
- package/dist/modules/@powerhousedao/reactor-browser/hooks/useDocumentEditor.js +3 -3
- package/dist/modules/@powerhousedao/reactor-browser/hooks/useDriveActions.js +3 -3
- package/dist/modules/@powerhousedao/reactor-browser/hooks/useDriveActionsWithUiNodes.js +4 -4
- package/dist/modules/@powerhousedao/reactor-browser/index.js +32 -28
- package/dist/modules/@powerhousedao/reactor-browser/reactor.js +3 -3
- package/dist/modules/@powerhousedao/reactor-browser/utils/export-document.js +8 -0
- package/dist/modules/@powerhousedao/reactor-browser/utils/signature.js +2 -2
- package/dist/vite-envs.sh +1 -1
- package/package.json +8 -13
- /package/dist/modules/@powerhousedao/reactor-browser/{chunk-KCFZEFYJ.js → chunk-DI2LBUDE.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-C6rLvt8a.js","assets/main.Bikg5D0d.js","assets/app-loader-BDXofohd.js","assets/app-loader-DaEnUcee.css","assets/browser-E-4rGFna.js","assets/getEnsName-DVtbpogo.js","assets/isAddressEqual-HNfnZOzP.js","assets/router-CyGnAURP.js","assets/PeopleFill-BxcdOZRn.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __typeError = (msg) => {
|
|
4
4
|
throw TypeError(msg);
|
|
@@ -19,9 +19,9 @@ var __privateWrapper = (obj, member, setter, getter) => ({
|
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
21
|
var _focused, _cleanup, _setup, _a, _online, _cleanup2, _setup2, _b, _gcTimeout, _c, _initialState, _revertState, _cache, _client, _retryer, _defaultOptions, _abortSignalConsumed, _Query_instances, dispatch_fn, _d, _queries, _e, _observers, _mutationCache, _retryer2, _Mutation_instances, dispatch_fn2, _f, _mutations, _scopes, _mutationId, _g, _queryCache, _mutationCache2, _defaultOptions2, _queryDefaults, _mutationDefaults, _mountCount, _unsubscribeFocus, _unsubscribeOnline, _h, _getDocumentModelModule, _drives, _ReadModeService_instances, parseGraphQLErrors_fn, fetchDrive_fn, _InternalTransmitter_instances, buildInternalOperationUpdate_fn, _i;
|
|
22
|
-
import { _ as __vitePreload } from "./main.
|
|
22
|
+
import { _ as __vitePreload } from "./main.Bikg5D0d.js";
|
|
23
23
|
import { jsx as jsx$1, jsxs, Fragment as Fragment$1 } from "react/jsx-runtime";
|
|
24
|
-
import { g as getI18n, a as getDefaults, o as o$3, s as s$4, n as n$4, L as L$1, c as connectConfig, l as logger$2, b as childLogger, d as serviceWorkerManager, p as packageJson, t as t$4 } from "./app-loader-
|
|
24
|
+
import { g as getI18n, a as getDefaults, o as o$3, s as s$4, n as n$4, L as L$1, c as connectConfig, l as logger$2, b as childLogger, d as serviceWorkerManager, p as packageJson, t as t$4 } from "./app-loader-BDXofohd.js";
|
|
25
25
|
import * as React from "react";
|
|
26
26
|
import React__default, { createElement, isValidElement, cloneElement, Children, createContext, useContext, useState, useRef, useEffect, useMemo, useLayoutEffect, useCallback, Suspense, lazy, forwardRef, Component, Fragment, useId as useId$1, useSyncExternalStore, useReducer, useDebugValue } from "react";
|
|
27
27
|
import * as ReactDOM from "react-dom";
|
|
@@ -50198,7 +50198,8 @@ buildInternalOperationUpdate_fn = async function(strand) {
|
|
|
50198
50198
|
}
|
|
50199
50199
|
return operations;
|
|
50200
50200
|
};
|
|
50201
|
-
const PULL_DRIVE_INTERVAL =
|
|
50201
|
+
const PULL_DRIVE_INTERVAL = 1500;
|
|
50202
|
+
const MAX_REVISIONS_PER_ACK = 100;
|
|
50202
50203
|
const _PullResponderTransmitter = class _PullResponderTransmitter {
|
|
50203
50204
|
constructor(listener, manager) {
|
|
50204
50205
|
__publicField(this, "logger", childLogger([
|
|
@@ -50307,25 +50308,37 @@ const _PullResponderTransmitter = class _PullResponderTransmitter {
|
|
|
50307
50308
|
}))
|
|
50308
50309
|
}));
|
|
50309
50310
|
}
|
|
50310
|
-
static async acknowledgeStrands(
|
|
50311
|
-
var _a2;
|
|
50311
|
+
static async acknowledgeStrands(url, listenerId, revisions) {
|
|
50312
50312
|
this.staticLogger.verbose(`acknowledgeStrands(url: ${url}, listener: ${listenerId})`, revisions);
|
|
50313
|
-
const
|
|
50314
|
-
|
|
50315
|
-
|
|
50316
|
-
$revisions: [ListenerRevisionInput]
|
|
50317
|
-
) {
|
|
50318
|
-
acknowledge(listenerId: $listenerId, revisions: $revisions)
|
|
50319
|
-
}
|
|
50320
|
-
`, { listenerId, revisions });
|
|
50321
|
-
const error = (_a2 = result.errors) == null ? void 0 : _a2.at(0);
|
|
50322
|
-
if (error) {
|
|
50323
|
-
throw error;
|
|
50313
|
+
const chunks = [];
|
|
50314
|
+
for (let i2 = 0; i2 < revisions.length; i2 += MAX_REVISIONS_PER_ACK) {
|
|
50315
|
+
chunks.push(revisions.slice(i2, i2 + MAX_REVISIONS_PER_ACK));
|
|
50324
50316
|
}
|
|
50325
|
-
if (
|
|
50317
|
+
if (chunks.length > 1) {
|
|
50318
|
+
this.staticLogger.verbose(`Breaking strand acknowledgement into ${chunks.length} chunks...`);
|
|
50319
|
+
}
|
|
50320
|
+
const results = await Promise.allSettled(chunks.map(async (chunk) => {
|
|
50321
|
+
var _a2;
|
|
50322
|
+
const result = await requestGraphql(url, gql`
|
|
50323
|
+
mutation acknowledge(
|
|
50324
|
+
$listenerId: String!
|
|
50325
|
+
$revisions: [ListenerRevisionInput]
|
|
50326
|
+
) {
|
|
50327
|
+
acknowledge(listenerId: $listenerId, revisions: $revisions)
|
|
50328
|
+
}
|
|
50329
|
+
`, { listenerId, revisions: chunk });
|
|
50330
|
+
const error = (_a2 = result.errors) == null ? void 0 : _a2.at(0);
|
|
50331
|
+
if (error) {
|
|
50332
|
+
throw error;
|
|
50333
|
+
}
|
|
50334
|
+
if (result.acknowledge === null || !result.acknowledge) {
|
|
50335
|
+
throw new Error("Error acknowledging strands");
|
|
50336
|
+
}
|
|
50337
|
+
}));
|
|
50338
|
+
const errors = results.filter((result) => result.status === "rejected");
|
|
50339
|
+
if (errors.length > 0) {
|
|
50326
50340
|
throw new Error("Error acknowledging strands");
|
|
50327
50341
|
}
|
|
50328
|
-
return result.acknowledge;
|
|
50329
50342
|
}
|
|
50330
50343
|
static async executePull(driveId, trigger, onStrandUpdate, onError, onRevisions, onAcknowledge) {
|
|
50331
50344
|
var _a2;
|
|
@@ -50333,8 +50346,10 @@ const _PullResponderTransmitter = class _PullResponderTransmitter {
|
|
|
50333
50346
|
try {
|
|
50334
50347
|
const { url, listenerId } = trigger.data;
|
|
50335
50348
|
const strands = await _PullResponderTransmitter.pullStrands(driveId, url, listenerId);
|
|
50349
|
+
this.staticLogger.verbose("Pulled strands...");
|
|
50336
50350
|
if (!strands.length) {
|
|
50337
50351
|
onRevisions == null ? void 0 : onRevisions([]);
|
|
50352
|
+
this.staticLogger.verbose("No new strands, skipping...");
|
|
50338
50353
|
return;
|
|
50339
50354
|
}
|
|
50340
50355
|
const listenerRevisions = [];
|
|
@@ -50344,6 +50359,7 @@ const _PullResponderTransmitter = class _PullResponderTransmitter {
|
|
|
50344
50359
|
scope: strand.scope,
|
|
50345
50360
|
branch: strand.branch
|
|
50346
50361
|
}));
|
|
50362
|
+
this.staticLogger.verbose("Processing strand...");
|
|
50347
50363
|
let error = void 0;
|
|
50348
50364
|
try {
|
|
50349
50365
|
const result = await onStrandUpdate(strand, {
|
|
@@ -50367,12 +50383,27 @@ const _PullResponderTransmitter = class _PullResponderTransmitter {
|
|
|
50367
50383
|
error
|
|
50368
50384
|
});
|
|
50369
50385
|
}
|
|
50386
|
+
this.staticLogger.verbose("Processed strands...");
|
|
50370
50387
|
onRevisions == null ? void 0 : onRevisions(listenerRevisions);
|
|
50371
|
-
|
|
50372
|
-
|
|
50373
|
-
|
|
50374
|
-
|
|
50388
|
+
this.staticLogger.verbose("Acknowledging strands...");
|
|
50389
|
+
let success = false;
|
|
50390
|
+
try {
|
|
50391
|
+
await _PullResponderTransmitter.acknowledgeStrands(url, listenerId, listenerRevisions.map((revision) => {
|
|
50392
|
+
const { error, ...rest } = revision;
|
|
50393
|
+
return rest;
|
|
50394
|
+
}));
|
|
50395
|
+
success = true;
|
|
50396
|
+
} catch (error) {
|
|
50397
|
+
this.staticLogger.error("ACK error", error);
|
|
50398
|
+
}
|
|
50399
|
+
if (success) {
|
|
50400
|
+
this.staticLogger.verbose("Acknowledged strands successfully.");
|
|
50401
|
+
} else {
|
|
50402
|
+
this.staticLogger.error("Failed to acknowledge strands");
|
|
50403
|
+
}
|
|
50404
|
+
onAcknowledge == null ? void 0 : onAcknowledge(success);
|
|
50375
50405
|
} catch (error) {
|
|
50406
|
+
this.staticLogger.error("Pull error", error);
|
|
50376
50407
|
onError(error);
|
|
50377
50408
|
}
|
|
50378
50409
|
}
|
|
@@ -51899,7 +51930,7 @@ const _ListenerManager = class _ListenerManager {
|
|
|
51899
51930
|
this.logger.verbose(`Abandoning push for sync unit ${syncUnit.syncId}: already up-to-date (${unitState.listenerRev} >= ${syncUnit.revision})`);
|
|
51900
51931
|
return;
|
|
51901
51932
|
} else {
|
|
51902
|
-
this.logger.verbose(`Listener out-of-date for sync unit ${syncUnit.
|
|
51933
|
+
this.logger.verbose(`Listener out-of-date for sync unit (${syncUnit.driveId}, ${syncUnit.scope}, ${syncUnit.documentId}): ${unitState == null ? void 0 : unitState.listenerRev} < ${syncUnit.revision}`);
|
|
51903
51934
|
}
|
|
51904
51935
|
const opData = [];
|
|
51905
51936
|
try {
|
|
@@ -52328,6 +52359,7 @@ class SynchronizationManager {
|
|
|
52328
52359
|
__publicField(this, "documentModelModules");
|
|
52329
52360
|
__publicField(this, "eventEmitter");
|
|
52330
52361
|
__publicField(this, "syncStatus", /* @__PURE__ */ new Map());
|
|
52362
|
+
__publicField(this, "logger", childLogger(["SynchronizationManager"]));
|
|
52331
52363
|
this.storage = storage;
|
|
52332
52364
|
this.cache = cache;
|
|
52333
52365
|
this.documentModelModules = documentModelModules;
|
|
@@ -52453,7 +52485,7 @@ class SynchronizationManager {
|
|
|
52453
52485
|
return cachedDocument;
|
|
52454
52486
|
}
|
|
52455
52487
|
} catch (e2) {
|
|
52456
|
-
logger
|
|
52488
|
+
this.logger.error("Error getting drive from cache", e2);
|
|
52457
52489
|
}
|
|
52458
52490
|
const driveStorage = await this.storage.getDrive(driveId);
|
|
52459
52491
|
const result = this._buildDocument(driveStorage);
|
|
@@ -52469,7 +52501,7 @@ class SynchronizationManager {
|
|
|
52469
52501
|
return cachedDocument;
|
|
52470
52502
|
}
|
|
52471
52503
|
} catch (e2) {
|
|
52472
|
-
logger
|
|
52504
|
+
this.logger.error("Error getting document from cache", e2);
|
|
52473
52505
|
}
|
|
52474
52506
|
const documentStorage = await this.storage.getDocument(driveId, documentId);
|
|
52475
52507
|
return this._buildDocument(documentStorage);
|
|
@@ -55360,8 +55392,7 @@ const getReactorDefaultDrivesConfig = () => {
|
|
|
55360
55392
|
system: true
|
|
55361
55393
|
}
|
|
55362
55394
|
],
|
|
55363
|
-
triggers: []
|
|
55364
|
-
pullInterval: 3e3
|
|
55395
|
+
triggers: []
|
|
55365
55396
|
}
|
|
55366
55397
|
})
|
|
55367
55398
|
);
|
|
@@ -55447,7 +55478,7 @@ const connectCrypto = (async () => {
|
|
|
55447
55478
|
return window.connectCrypto;
|
|
55448
55479
|
}
|
|
55449
55480
|
const { ConnectCrypto } = await __vitePreload(async () => {
|
|
55450
|
-
const { ConnectCrypto: ConnectCrypto2 } = await import("./index-
|
|
55481
|
+
const { ConnectCrypto: ConnectCrypto2 } = await import("./index-C6rLvt8a.js");
|
|
55451
55482
|
return { ConnectCrypto: ConnectCrypto2 };
|
|
55452
55483
|
}, true ? __vite__mapDeps([0,1,2,3]) : void 0);
|
|
55453
55484
|
const { BrowserKeyStorage } = await __vitePreload(async () => {
|
|
@@ -55500,7 +55531,7 @@ function useRenown() {
|
|
|
55500
55531
|
return;
|
|
55501
55532
|
}
|
|
55502
55533
|
const { initRenownBrowser } = await __vitePreload(async () => {
|
|
55503
|
-
const { initRenownBrowser: initRenownBrowser2 } = await import("./browser-
|
|
55534
|
+
const { initRenownBrowser: initRenownBrowser2 } = await import("./browser-E-4rGFna.js");
|
|
55504
55535
|
return { initRenownBrowser: initRenownBrowser2 };
|
|
55505
55536
|
}, true ? __vite__mapDeps([4,5,1,6,2,3]) : void 0);
|
|
55506
55537
|
const renownBrowser = initRenownBrowser(did2);
|
|
@@ -73206,6 +73237,16 @@ function useDocumentDriveServer() {
|
|
|
73206
73237
|
},
|
|
73207
73238
|
[reactor]
|
|
73208
73239
|
);
|
|
73240
|
+
const getDocumentsIds = useCallback(
|
|
73241
|
+
async (driveId) => {
|
|
73242
|
+
if (!reactor) {
|
|
73243
|
+
throw new Error("Reactor is not loaded");
|
|
73244
|
+
}
|
|
73245
|
+
const ids = await reactor.getDocuments(driveId);
|
|
73246
|
+
return ids;
|
|
73247
|
+
},
|
|
73248
|
+
[reactor]
|
|
73249
|
+
);
|
|
73209
73250
|
const _addDriveOperation = useCallback(
|
|
73210
73251
|
async (driveId, action) => {
|
|
73211
73252
|
if (!reactor) {
|
|
@@ -73770,7 +73811,8 @@ function useDocumentDriveServer() {
|
|
|
73770
73811
|
clearStorage,
|
|
73771
73812
|
removeTrigger: handleRemoveTrigger,
|
|
73772
73813
|
addTrigger: handleAddTrigger,
|
|
73773
|
-
registerNewPullResponderTrigger
|
|
73814
|
+
registerNewPullResponderTrigger,
|
|
73815
|
+
getDocumentsIds
|
|
73774
73816
|
}),
|
|
73775
73817
|
[
|
|
73776
73818
|
addDocument,
|
|
@@ -73799,7 +73841,8 @@ function useDocumentDriveServer() {
|
|
|
73799
73841
|
renameNode,
|
|
73800
73842
|
setDriveAvailableOffline,
|
|
73801
73843
|
setDriveSharingType,
|
|
73802
|
-
handleUpdateFile
|
|
73844
|
+
handleUpdateFile,
|
|
73845
|
+
getDocumentsIds
|
|
73803
73846
|
]
|
|
73804
73847
|
);
|
|
73805
73848
|
}
|
|
@@ -75629,8 +75672,7 @@ function useUiNodes() {
|
|
|
75629
75672
|
system: true
|
|
75630
75673
|
}
|
|
75631
75674
|
],
|
|
75632
|
-
triggers: []
|
|
75633
|
-
pullInterval: 3e3
|
|
75675
|
+
triggers: []
|
|
75634
75676
|
});
|
|
75635
75677
|
p(t2("notifications.addDriveSuccess"), {
|
|
75636
75678
|
type: "connect-success"
|
|
@@ -80307,7 +80349,7 @@ const Analytics = () => {
|
|
|
80307
80349
|
return null;
|
|
80308
80350
|
};
|
|
80309
80351
|
const Router = React__default.lazy(async () => {
|
|
80310
|
-
const createRouterComponent = await __vitePreload(() => import("./router-
|
|
80352
|
+
const createRouterComponent = await __vitePreload(() => import("./router-CyGnAURP.js").then((n2) => n2.r), true ? __vite__mapDeps([7,1,8,2,3]) : void 0);
|
|
80311
80353
|
const router = await createRouterComponent.default();
|
|
80312
80354
|
return { default: router };
|
|
80313
80355
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/app-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/app-B8nf-deX.js","assets/main.Bikg5D0d.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __typeError = (msg) => {
|
|
4
4
|
throw TypeError(msg);
|
|
@@ -11,7 +11,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
11
11
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
12
12
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
13
13
|
var _tags, _levelString, _errorHandler, _ConsoleLogger_instances, levelValue_get, _ServiceWorkerManager_instances, handleServiceWorkerMessage_fn, handleServiceWorker_fn;
|
|
14
|
-
import { _ as __vitePreload } from "./main.
|
|
14
|
+
import { _ as __vitePreload } from "./main.Bikg5D0d.js";
|
|
15
15
|
import { jsx } from "react/jsx-runtime";
|
|
16
16
|
import { Suspense, lazy } from "react";
|
|
17
17
|
const isString = (obj) => typeof obj === "string";
|
|
@@ -2639,7 +2639,7 @@ const childLogger = (tags) => {
|
|
|
2639
2639
|
};
|
|
2640
2640
|
const name = "@powerhousedao/connect";
|
|
2641
2641
|
const productName = "Powerhouse-Connect";
|
|
2642
|
-
const version = "1.0.0-dev.
|
|
2642
|
+
const version = "1.0.0-dev.221";
|
|
2643
2643
|
const description = "Powerhouse Connect";
|
|
2644
2644
|
const main = "./dist/index.html";
|
|
2645
2645
|
const imports = { "#*": "./src/*.js" };
|
|
@@ -2653,7 +2653,7 @@ const bugs = { "url": "https://github.com/powerhouse-inc/document-model-electron
|
|
|
2653
2653
|
const homepage = "https://github.com/powerhouse-inc/document-model-electron#readme";
|
|
2654
2654
|
const scripts = { "build:tsc": "tsc --build", "start": "electron-forge start", "package": "electron-forge package", "make": "PH_CONNECT_BASE_HREF=./ electron-forge make", "make:mac": "PH_CONNECT_BASE_HREF=./ electron-forge make -p darwin", "make:linux": "PH_CONNECT_BASE_HREF=./ electron-forge make -p linux", "make:windows": "PH_CONNECT_BASE_HREF=./ electron-forge make -p win32", "publish:electron": "electron-forge publish", "prepublishOnly": "npm run build", "lint": "eslint .", "lint:fix": "eslint --fix .", "format": 'prettier --write "**/*.+(js|ts|jsx|tsx|json)"', "dev:web": "vite -c vite.renderer.config.mts", "dev:nocache": "rm -rf node_modules/.vite && rm -rf node_modules/.cache && npm run dev:web", "build": "NODE_OPTIONS=--max-old-space-size=6144 vite build -c vite.renderer.config.mts", "preview:web": "vite preview -c vite.renderer.config.mts", "e2e": "playwright test", "cy:open": "cypress open", "build:service-worker": "tsc --build ./tsconfig.sw.json" };
|
|
2655
2655
|
const dependencies = {};
|
|
2656
|
-
const devDependencies = { "@electron-forge/cli": "^6.1.1", "@electron-forge/maker-deb": "^6.1.1", "@electron-forge/maker-rpm": "^6.1.1", "@electron-forge/maker-squirrel": "^6.1.1", "@electron-forge/maker-zip": "^6.1.1", "@electron-forge/plugin-vite": "^6.1.1", "@electron-forge/publisher-electron-release-server": "^6.2.1", "@electron-forge/publisher-github": "^7.2.0", "@electron-forge/shared-types": "^7.7.0", "@playwright/test": "^1.41.2", "@powerhousedao/builder-tools": "workspace:*", "@powerhousedao/common": "workspace:*", "@powerhousedao/config": "workspace:*", "@powerhousedao/design-system": "workspace:*", "@powerhousedao/reactor-browser": "workspace:*", "@powerhousedao/scalars": "workspace:*", "@sentry/browser": "^9.1.0", "@sentry/react": "^7.109.0", "@sentry/vite-plugin": "^2.22.2", "@tanstack/react-virtual": "^3.8.1", "@types/react": "^18.2.79", "@types/react-dom": "^18.2.18", "@types/uuid": "^9.0.7", "@types/wicg-file-system-access": "^2020.9.6", "@vitejs/plugin-react": "^4.2.1", "asar": "^3.2.0", "autoprefixer": "^10.4.14", "cypress": "^13.11.0", "did-key-creator": "^1.2.0", "document-drive": "workspace:*", "document-model": "workspace:*", "electron": "30.0.0", "electron-is-dev": "^3.0.1", "electron-playwright-helpers": "^1.7.1", "electron-squirrel-startup": "^1.0.0", "electron-store": "^8.1.0", "esbuild": "^0.24.0", "graphql": "^16.8.1", "graphql-request": "^6.1.0", "i18next": "^23.7.6", "jotai": "^2.1.0", "jotai-effect": "^1.1.6", "localforage": "^1.10.0", "lz-string": "^1.5.0", "playwright": "^1.41.2", "playwright-core": "^1.41.2", "postcss": "^8.4.33", "react": "^18.2.0", "react-dom": "^18.2.0", "react-error-boundary": "^4.0.11", "react-hotkeys-hook": "^4.5.0", "react-i18next": "^13.5.0", "react-router-dom": "^6.11.2", "
|
|
2656
|
+
const devDependencies = { "@electron-forge/cli": "^6.1.1", "@electron-forge/maker-deb": "^6.1.1", "@electron-forge/maker-rpm": "^6.1.1", "@electron-forge/maker-squirrel": "^6.1.1", "@electron-forge/maker-zip": "^6.1.1", "@electron-forge/plugin-vite": "^6.1.1", "@electron-forge/publisher-electron-release-server": "^6.2.1", "@electron-forge/publisher-github": "^7.2.0", "@electron-forge/shared-types": "^7.7.0", "@playwright/test": "^1.41.2", "@powerhousedao/builder-tools": "workspace:*", "@powerhousedao/common": "workspace:*", "@powerhousedao/config": "workspace:*", "@powerhousedao/design-system": "workspace:*", "@powerhousedao/reactor-browser": "workspace:*", "@powerhousedao/scalars": "workspace:*", "@sentry/browser": "^9.1.0", "@sentry/react": "^7.109.0", "@sentry/vite-plugin": "^2.22.2", "@tanstack/react-virtual": "^3.8.1", "@types/react": "^18.2.79", "@types/react-dom": "^18.2.18", "@types/uuid": "^9.0.7", "@types/wicg-file-system-access": "^2020.9.6", "@vitejs/plugin-react": "^4.2.1", "asar": "^3.2.0", "autoprefixer": "^10.4.14", "cypress": "^13.11.0", "did-key-creator": "^1.2.0", "document-drive": "workspace:*", "document-model": "workspace:*", "electron": "30.0.0", "electron-is-dev": "^3.0.1", "electron-playwright-helpers": "^1.7.1", "electron-squirrel-startup": "^1.0.0", "electron-store": "^8.1.0", "esbuild": "^0.24.0", "graphql": "^16.8.1", "graphql-request": "^6.1.0", "i18next": "^23.7.6", "jotai": "^2.1.0", "jotai-effect": "^1.1.6", "localforage": "^1.10.0", "lz-string": "^1.5.0", "playwright": "^1.41.2", "playwright-core": "^1.41.2", "postcss": "^8.4.33", "react": "^18.2.0", "react-dom": "^18.2.0", "react-error-boundary": "^4.0.11", "react-hotkeys-hook": "^4.5.0", "react-i18next": "^13.5.0", "react-router-dom": "^6.11.2", "tailwind-merge": "^1.14.0", "tailwind-scrollbar": "^3.1.0", "tailwindcss": "^3.4.1", "tailwindcss-animate": "^1.0.7", "tw-colors": "^1.2.6", "uuid": "^9.0.1", "viem": "^2.8.13", "vite": "^6.1.1", "vite-envs": "^4.4.11", "vite-plugin-html": "^3.2.2", "vite-plugin-node-polyfills": "^0.23.0", "vite-plugin-svgr": "^4.2.0", "xvfb-maybe": "^0.2.1" };
|
|
2657
2657
|
const optionalDependencies = { "@esbuild/linux-x64": "^0.21.4", "@rollup/rollup-linux-x64-musl": "4.14.3" };
|
|
2658
2658
|
const packageJson = {
|
|
2659
2659
|
name,
|
|
@@ -2827,7 +2827,7 @@ if (window.__VITE_ENVS.MODE === "development") {
|
|
|
2827
2827
|
} else {
|
|
2828
2828
|
serviceWorkerManager.registerServiceWorker(false);
|
|
2829
2829
|
}
|
|
2830
|
-
const App = lazy(() => __vitePreload(() => import("./app-
|
|
2830
|
+
const App = lazy(() => __vitePreload(() => import("./app-B8nf-deX.js").then((n2) => n2.dm), true ? __vite__mapDeps([0,1]) : void 0));
|
|
2831
2831
|
const AppLoader = /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(App, {}) });
|
|
2832
2832
|
const appLoader = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2833
2833
|
__proto__: null,
|
|
@@ -7,11 +7,11 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
7
7
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
8
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
9
9
|
var _baseUrl, _store, _connectId, _eventEmitter, _Renown_instances, updateUser_fn, getCredential_fn, _store2, _namespace, _BaseStorage_instances, buildKey_fn;
|
|
10
|
-
import { B as BaseError$1, q as keccak256$1, s as checksumAddress, v as isHex, w as toHex, x as hexToBigInt, y as hexToNumber$1, z as bytesToHex$1, A as hexToBytes$1, C as numberToHex, F as parseAccount, H as Hash, G as createView, I as aexists, J as toBytes, K as aoutput, L as wrapConstructor, M as rotr, N as toBytes$1, O as size$2, P as trim, Q as keccak_256, T as stringify$1, U as isAddress, V as InvalidAddressError$1, W as stringToHex, X as wait, Y as InvalidInputRpcError, Z as withResolvers, _ as withRetry, $ as ahash, a0 as abytes$1, a1 as randomBytes, a2 as concatBytes$1, a3 as hexToBool, a4 as getAddress, a5 as createClient, a6 as defineChain, a7 as pad$2, a8 as mainnet, a9 as http, aa as RENOWN_URL } from "./app-
|
|
11
|
-
import { c as createCursor, a as concatHex, f as formatGwei, d as defineFormatter, g as getAction, p as prettyPrint, b as formatEther, e as getNodeError, U as UnknownNodeError, s as serializeStateOverride, h as assertRequest, i as formatTransactionRequest, j as extract, I as InvalidSerializableTransactionError, k as parseSignature, l as parseStructs, m as isStructSignature, n as InvalidAbiItemError, o as getChainContractAddress, q as encodeFunctionData, r as namehash, t as addressResolverAbi, u as packetToBytes, v as universalResolverResolveAbi, w as readContract, x as decodeFunctionResult, y as isNullUniversalResolverError, z as getCallError, A as getAbiItem, B as AbiEventNotFoundError, C as formatAbiItem, D as toEventSelector, E as encodeAbiParameters, F as getContractError, G as AbiEventSignatureEmptyTopicsError, H as AbiEventSignatureNotFoundError, J as DecodeLogTopicsMismatch, K as decodeAbiParameters, L as AbiDecodingDataSizeTooSmallError, P as PositionOutOfBoundsError, M as DecodeLogDataMismatch, T as TransactionNotFoundError, N as TransactionReceiptNotFoundError, O as multicall3Abi, Q as AbiDecodingZeroDataError, R as RawContractError, S as formatAbiItem$1, V as concat$1, W as integerRegex$1, X as bytesRegex$1, Y as BytesSizeMismatchError$1, Z as sliceHex, _ as InvalidChainIdError, $ as maxUint256, a0 as FeeCapTooHighError, a1 as TipAboveFeeCapError, a2 as slice$1, a3 as InvalidStorageKeySizeError, a4 as InvalidLegacyVError, a5 as deploylessCallViaBytecodeBytecode, a6 as WaitForTransactionReceiptTimeoutError, a7 as call, a8 as universalSignatureValidatorAbi, a9 as encodeDeployData, aa as universalSignatureValidatorByteCode, ab as CallExecutionError, ac as getEnsText, ad as getEnsName, ae as getEnsAvatar, af as maxUint16, ag as defineTransactionRequest } from "./getEnsName-
|
|
12
|
-
import { _ as __vitePreload } from "./main.
|
|
13
|
-
import { i as isAddressEqual } from "./isAddressEqual-
|
|
14
|
-
import { l as logger, c as connectConfig } from "./app-loader-
|
|
10
|
+
import { B as BaseError$1, q as keccak256$1, s as checksumAddress, v as isHex, w as toHex, x as hexToBigInt, y as hexToNumber$1, z as bytesToHex$1, A as hexToBytes$1, C as numberToHex, F as parseAccount, H as Hash, G as createView, I as aexists, J as toBytes, K as aoutput, L as wrapConstructor, M as rotr, N as toBytes$1, O as size$2, P as trim, Q as keccak_256, T as stringify$1, U as isAddress, V as InvalidAddressError$1, W as stringToHex, X as wait, Y as InvalidInputRpcError, Z as withResolvers, _ as withRetry, $ as ahash, a0 as abytes$1, a1 as randomBytes, a2 as concatBytes$1, a3 as hexToBool, a4 as getAddress, a5 as createClient, a6 as defineChain, a7 as pad$2, a8 as mainnet, a9 as http, aa as RENOWN_URL } from "./app-B8nf-deX.js";
|
|
11
|
+
import { c as createCursor, a as concatHex, f as formatGwei, d as defineFormatter, g as getAction, p as prettyPrint, b as formatEther, e as getNodeError, U as UnknownNodeError, s as serializeStateOverride, h as assertRequest, i as formatTransactionRequest, j as extract, I as InvalidSerializableTransactionError, k as parseSignature, l as parseStructs, m as isStructSignature, n as InvalidAbiItemError, o as getChainContractAddress, q as encodeFunctionData, r as namehash, t as addressResolverAbi, u as packetToBytes, v as universalResolverResolveAbi, w as readContract, x as decodeFunctionResult, y as isNullUniversalResolverError, z as getCallError, A as getAbiItem, B as AbiEventNotFoundError, C as formatAbiItem, D as toEventSelector, E as encodeAbiParameters, F as getContractError, G as AbiEventSignatureEmptyTopicsError, H as AbiEventSignatureNotFoundError, J as DecodeLogTopicsMismatch, K as decodeAbiParameters, L as AbiDecodingDataSizeTooSmallError, P as PositionOutOfBoundsError, M as DecodeLogDataMismatch, T as TransactionNotFoundError, N as TransactionReceiptNotFoundError, O as multicall3Abi, Q as AbiDecodingZeroDataError, R as RawContractError, S as formatAbiItem$1, V as concat$1, W as integerRegex$1, X as bytesRegex$1, Y as BytesSizeMismatchError$1, Z as sliceHex, _ as InvalidChainIdError, $ as maxUint256, a0 as FeeCapTooHighError, a1 as TipAboveFeeCapError, a2 as slice$1, a3 as InvalidStorageKeySizeError, a4 as InvalidLegacyVError, a5 as deploylessCallViaBytecodeBytecode, a6 as WaitForTransactionReceiptTimeoutError, a7 as call, a8 as universalSignatureValidatorAbi, a9 as encodeDeployData, aa as universalSignatureValidatorByteCode, ab as CallExecutionError, ac as getEnsText, ad as getEnsName, ae as getEnsAvatar, af as maxUint16, ag as defineTransactionRequest } from "./getEnsName-DVtbpogo.js";
|
|
12
|
+
import { _ as __vitePreload } from "./main.Bikg5D0d.js";
|
|
13
|
+
import { i as isAddressEqual } from "./isAddressEqual-HNfnZOzP.js";
|
|
14
|
+
import { l as logger, c as connectConfig } from "./app-loader-BDXofohd.js";
|
|
15
15
|
import "react/jsx-runtime";
|
|
16
16
|
import "react";
|
|
17
17
|
import "react-dom";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ah as decodeErrorResult, a7 as call, V as concat, E as encodeAbiParameters } from "./getEnsName-
|
|
2
|
-
import { B as BaseError, bN as getUrl, T as stringify, bO as HttpRequestError, v as isHex } from "./app-
|
|
3
|
-
import { i as isAddressEqual } from "./isAddressEqual-
|
|
4
|
-
import "./main.
|
|
1
|
+
import { ah as decodeErrorResult, a7 as call, V as concat, E as encodeAbiParameters } from "./getEnsName-DVtbpogo.js";
|
|
2
|
+
import { B as BaseError, bN as getUrl, T as stringify, bO as HttpRequestError, v as isHex } from "./app-B8nf-deX.js";
|
|
3
|
+
import { i as isAddressEqual } from "./isAddressEqual-HNfnZOzP.js";
|
|
4
|
+
import "./main.Bikg5D0d.js";
|
|
5
5
|
import "react/jsx-runtime";
|
|
6
|
-
import "./app-loader-
|
|
6
|
+
import "./app-loader-BDXofohd.js";
|
|
7
7
|
import "react";
|
|
8
8
|
import "react-dom";
|
|
9
9
|
import "@powerhousedao/reactor-browser/hooks/useUiNodesContext";
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BGTpM-hv.js","assets/app-B8nf-deX.js","assets/main.Bikg5D0d.js","assets/app-loader-BDXofohd.js","assets/app-loader-DaEnUcee.css","assets/react-error-boundary.esm-BjyDQG6F.js","assets/getEnsName-DVtbpogo.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
import { jsx, jsxs, Fragment as Fragment$1 } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import React__default, { useState, useRef, useLayoutEffect, useCallback, Fragment, useMemo, memo as memo$1, useEffect, createElement, useContext, createContext, Suspense, useSyncExternalStore } from "react";
|
|
5
|
-
import { aR as n$2, aS as useOnClickOutside, aT as useEventListener, t as twMerge$1, S as S$1, aw as o$2, aU as c$2, ax as E, av as s$1, aV as N$4, au as C$2, as as I, aW as S$2, aX as t$2, aY as I$1, aZ as y$1, a_ as u$4, a$ as b, b0 as i, b1 as n$3, b2 as D, b3 as a$1, b4 as A$5, b5 as Provider, b6 as Root3, b7 as Trigger, b8 as Portal, b9 as Content2, ba as useCopyToClipboard, bb as B, bc as w$3, bd as m$3, be as garbageCollect, bf as sortOperations, bg as n$4, bh as M, bi as a$2, bj as g$2, bk as C$3, bl as validateInitialState, bm as validateStateSchemaName, bn as validateModules, bo as useDefaultDocumentModelEditor, bp as useAtomValue, bq as unwrap, br as atom, bs as atomWithLazy, bt as externalPackagesAtom, bu as loadable, bv as themeAtom, bw as useUser, bx as useConnectDid, by as useConnectCrypto, bz as useGetDocumentModelModule, bA as useDocumentDispatch, bB as useUserPermissions, bC as isSameDocument, bD as addActionContext, bE as undo, bF as redo, e as useNavigate, ay as useModal, bG as signOperation, an as useTranslation, g as useUiNodes, bH as exportFile, i as useUnwrappedReactor, h as useDocumentDriveServer, bI as R$1, bJ as driveDocumentModelModule, aq as useAsyncReactor, bK as useFilteredDocumentModels, bL as useDriveEditor, bM as useDocumentDriveById } from "./app-
|
|
6
|
-
import { _ as __vitePreload } from "./main.
|
|
5
|
+
import { aR as n$2, aS as useOnClickOutside, aT as useEventListener, t as twMerge$1, S as S$1, aw as o$2, aU as c$2, ax as E, av as s$1, aV as N$4, au as C$2, as as I, aW as S$2, aX as t$2, aY as I$1, aZ as y$1, a_ as u$4, a$ as b, b0 as i, b1 as n$3, b2 as D, b3 as a$1, b4 as A$5, b5 as Provider, b6 as Root3, b7 as Trigger, b8 as Portal, b9 as Content2, ba as useCopyToClipboard, bb as B, bc as w$3, bd as m$3, be as garbageCollect, bf as sortOperations, bg as n$4, bh as M, bi as a$2, bj as g$2, bk as C$3, bl as validateInitialState, bm as validateStateSchemaName, bn as validateModules, bo as useDefaultDocumentModelEditor, bp as useAtomValue, bq as unwrap, br as atom, bs as atomWithLazy, bt as externalPackagesAtom, bu as loadable, bv as themeAtom, bw as useUser, bx as useConnectDid, by as useConnectCrypto, bz as useGetDocumentModelModule, bA as useDocumentDispatch, bB as useUserPermissions, bC as isSameDocument, bD as addActionContext, bE as undo, bF as redo, e as useNavigate, ay as useModal, bG as signOperation, an as useTranslation, g as useUiNodes, bH as exportFile, i as useUnwrappedReactor, h as useDocumentDriveServer, bI as R$1, bJ as driveDocumentModelModule, aq as useAsyncReactor, bK as useFilteredDocumentModels, bL as useDriveEditor, bM as useDocumentDriveById } from "./app-B8nf-deX.js";
|
|
6
|
+
import { _ as __vitePreload } from "./main.Bikg5D0d.js";
|
|
7
7
|
import { flushSync } from "react-dom";
|
|
8
|
-
import { N as N$5, E as ErrorBoundary } from "./react-error-boundary.esm-
|
|
9
|
-
import { l as logger } from "./app-loader-
|
|
8
|
+
import { N as N$5, E as ErrorBoundary } from "./react-error-boundary.esm-BjyDQG6F.js";
|
|
9
|
+
import { l as logger } from "./app-loader-BDXofohd.js";
|
|
10
10
|
import { useDocument, useDocumentEditorProps } from "@powerhousedao/reactor-browser";
|
|
11
11
|
import { useDriveActionsWithUiNodes } from "@powerhousedao/reactor-browser/hooks/useDriveActionsWithUiNodes";
|
|
12
12
|
import { useDriveContext, DriveContextProvider } from "@powerhousedao/reactor-browser/hooks/useDriveContext";
|
|
13
13
|
import { useUiNodesContext, FILE } from "@powerhousedao/reactor-browser/hooks/useUiNodesContext";
|
|
14
14
|
import "@powerhousedao/reactor-browser/uiNodes/constants";
|
|
15
|
-
import {
|
|
15
|
+
import { makeDriveDocumentStateHook } from "@powerhousedao/reactor-browser/hooks/document-state";
|
|
16
16
|
const A$4 = "data:video/mp4;base64,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";
|
|
17
17
|
function f$1(i2) {
|
|
18
18
|
var t2, o2;
|
|
@@ -3980,7 +3980,7 @@ const useUndoRedoShortcuts = (props) => {
|
|
|
3980
3980
|
const LOCAL_DOCUMENT_EDITORS = window.__VITE_ENVS.LOCAL_DOCUMENT_EDITORS;
|
|
3981
3981
|
async function loadBaseEditors() {
|
|
3982
3982
|
const documentModelEditorModule = (await __vitePreload(async () => {
|
|
3983
|
-
const { documentModelEditorModule: documentModelEditorModule2 } = await import("./index-
|
|
3983
|
+
const { documentModelEditorModule: documentModelEditorModule2 } = await import("./index-BGTpM-hv.js");
|
|
3984
3984
|
return { documentModelEditorModule: documentModelEditorModule2 };
|
|
3985
3985
|
}, true ? __vite__mapDeps([0,1,2,3,4,5,6]) : void 0)).documentModelEditorModule;
|
|
3986
3986
|
return [documentModelEditorModule];
|
|
@@ -4572,6 +4572,55 @@ function useEditorProps(document2, node, documentDispatch, onAddOperation) {
|
|
|
4572
4572
|
isAllowedToEditDocuments: (userPermissions == null ? void 0 : userPermissions.isAllowedToEditDocuments) ?? false
|
|
4573
4573
|
};
|
|
4574
4574
|
}
|
|
4575
|
+
function useGetDriveDocuments(props) {
|
|
4576
|
+
const { driveId } = props;
|
|
4577
|
+
const [documents, setDocuments] = useState({});
|
|
4578
|
+
const { getDocumentsIds, onStrandUpdate, openFile } = useDocumentDriveServer();
|
|
4579
|
+
const fetchDocuments = async (_driveId, _documentIds) => {
|
|
4580
|
+
let documentIds = _documentIds;
|
|
4581
|
+
if (!documentIds || documentIds.length === 0) {
|
|
4582
|
+
documentIds = await getDocumentsIds(_driveId);
|
|
4583
|
+
}
|
|
4584
|
+
const getDocumentsPromise = documentIds.map(async (documentId) => {
|
|
4585
|
+
const document2 = await openFile(_driveId, documentId);
|
|
4586
|
+
return [documentId, document2];
|
|
4587
|
+
});
|
|
4588
|
+
const docs = await Promise.all(getDocumentsPromise);
|
|
4589
|
+
const newDocumentsState = docs.reduce(
|
|
4590
|
+
(acc, [documentId, document2]) => {
|
|
4591
|
+
acc[documentId] = {
|
|
4592
|
+
...document2.state,
|
|
4593
|
+
documentType: document2.documentType,
|
|
4594
|
+
revision: document2.revision,
|
|
4595
|
+
created: document2.created,
|
|
4596
|
+
lastModified: document2.lastModified
|
|
4597
|
+
};
|
|
4598
|
+
return acc;
|
|
4599
|
+
},
|
|
4600
|
+
{}
|
|
4601
|
+
);
|
|
4602
|
+
setDocuments((prevState) => ({
|
|
4603
|
+
...prevState,
|
|
4604
|
+
...newDocumentsState
|
|
4605
|
+
}));
|
|
4606
|
+
};
|
|
4607
|
+
useEffect(() => {
|
|
4608
|
+
if (driveId) {
|
|
4609
|
+
fetchDocuments(driveId).catch(console.error);
|
|
4610
|
+
}
|
|
4611
|
+
}, [driveId]);
|
|
4612
|
+
useEffect(() => {
|
|
4613
|
+
const removeListener = onStrandUpdate((update) => {
|
|
4614
|
+
if (driveId && update.driveId === driveId && update.documentId) {
|
|
4615
|
+
fetchDocuments(driveId, [update.documentId]).catch(
|
|
4616
|
+
console.error
|
|
4617
|
+
);
|
|
4618
|
+
}
|
|
4619
|
+
});
|
|
4620
|
+
return removeListener;
|
|
4621
|
+
}, [onStrandUpdate, driveId]);
|
|
4622
|
+
return documents;
|
|
4623
|
+
}
|
|
4575
4624
|
function useSyncStatus(driveId, documentId) {
|
|
4576
4625
|
const { getSyncStatusSync, onSyncStatus, documentDrives } = useDocumentDriveServer();
|
|
4577
4626
|
const syncStatus = useSyncExternalStore(
|
|
@@ -7552,7 +7601,6 @@ function DriveEditorContainer() {
|
|
|
7552
7601
|
);
|
|
7553
7602
|
const { addFile } = useDocumentDriveServer();
|
|
7554
7603
|
const documentModels = useFilteredDocumentModels();
|
|
7555
|
-
const useDriveDocumentStates = makeDriveDocumentStatesHook(reactor);
|
|
7556
7604
|
const useDriveDocumentState = makeDriveDocumentStateHook(reactor);
|
|
7557
7605
|
const driveContext = useMemo(
|
|
7558
7606
|
() => ({
|
|
@@ -7566,7 +7614,7 @@ function DriveEditorContainer() {
|
|
|
7566
7614
|
showCreateDocumentModal,
|
|
7567
7615
|
useSyncStatus,
|
|
7568
7616
|
useDocumentEditorProps: useDocumentEditor,
|
|
7569
|
-
useDriveDocumentStates,
|
|
7617
|
+
useDriveDocumentStates: useGetDriveDocuments,
|
|
7570
7618
|
useDriveDocumentState
|
|
7571
7619
|
}),
|
|
7572
7620
|
[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ccip-
|
|
2
|
-
import { B as BaseError$1, O as size, v as isHex, ab as SliceOffsetOutOfBoundsError, C as numberToHex, U as isAddress, V as InvalidAddressError, ac as padHex, ad as boolToHex, ae as IntegerOutOfRangeError, W as stringToHex, z as bytesToHex, F as parseAccount, af as InvalidBytesLengthError, ag as assertSize, y as hexToNumber, P as trim, ah as InvalidBytesBooleanError, x as hexToBigInt, A as hexToBytes, s as checksumAddress, q as keccak256, N as toBytes, T as stringify, ai as getContractAddress, aj as stringToBytes, ak as InternalRpcError, al as RpcRequestError, am as createBatchScheduler, w as toHex } from "./app-
|
|
3
|
-
import { _ as __vitePreload } from "./main.
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ccip-BLPIQK-p.js","assets/app-B8nf-deX.js","assets/main.Bikg5D0d.js","assets/app-loader-BDXofohd.js","assets/app-loader-DaEnUcee.css","assets/isAddressEqual-HNfnZOzP.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import { B as BaseError$1, O as size, v as isHex, ab as SliceOffsetOutOfBoundsError, C as numberToHex, U as isAddress, V as InvalidAddressError, ac as padHex, ad as boolToHex, ae as IntegerOutOfRangeError, W as stringToHex, z as bytesToHex, F as parseAccount, af as InvalidBytesLengthError, ag as assertSize, y as hexToNumber, P as trim, ah as InvalidBytesBooleanError, x as hexToBigInt, A as hexToBytes, s as checksumAddress, q as keccak256, N as toBytes, T as stringify, ai as getContractAddress, aj as stringToBytes, ak as InternalRpcError, al as RpcRequestError, am as createBatchScheduler, w as toHex } from "./app-B8nf-deX.js";
|
|
3
|
+
import { _ as __vitePreload } from "./main.Bikg5D0d.js";
|
|
4
4
|
function formatAbiItem$1(abiItem, { includeName = false } = {}) {
|
|
5
5
|
if (abiItem.type !== "function" && abiItem.type !== "event" && abiItem.type !== "error")
|
|
6
6
|
throw new InvalidDefinitionTypeError(abiItem.type);
|
|
@@ -3191,7 +3191,7 @@ async function call(client, args) {
|
|
|
3191
3191
|
} catch (err) {
|
|
3192
3192
|
const data2 = getRevertErrorData(err);
|
|
3193
3193
|
const { offchainLookup, offchainLookupSignature } = await __vitePreload(async () => {
|
|
3194
|
-
const { offchainLookup: offchainLookup2, offchainLookupSignature: offchainLookupSignature2 } = await import("./ccip-
|
|
3194
|
+
const { offchainLookup: offchainLookup2, offchainLookupSignature: offchainLookupSignature2 } = await import("./ccip-BLPIQK-p.js");
|
|
3195
3195
|
return { offchainLookup: offchainLookup2, offchainLookupSignature: offchainLookupSignature2 };
|
|
3196
3196
|
}, true ? __vite__mapDeps([0,1,2,3,4,5]) : void 0);
|
|
3197
3197
|
if (client.ccipRead !== false && (data2 == null ? void 0 : data2.slice(0, 10)) === offchainLookupSignature && to)
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { bP as inspect$1, bQ as GraphQLError$1, bR as getNamedType, bS as invariant$2, bT as isInputObjectType, bU as isScalarType, bV as isObjectType, bW as isInterfaceType, bX as isUnionType, bY as isEnumType, bZ as print, b_ as isPrintableAsBlockString, b$ as Kind, c0 as astFromValue$1, c1 as DEFAULT_DEPRECATION_REASON, c2 as isSpecifiedDirective, c3 as isSpecifiedScalarType, c4 as isIntrospectionType, c5 as z, c6 as GraphQLScalarType, c7 as clsx, c8 as pascalCase, c9 as parse, ca as visit, cb as buildASTSchema, cc as extendSchema, cd as getNullableType, ce as isListType, cf as get, cg as set, ch as appendErrors, p as getDefaultExportFromCjs, ci as snakeCase, cj as constantCase, ck as useFormContext, cl as Primitive, cm as cva, cn as FormProvider, co as Controller, cp as Slot, cq as useForm, cr as isAbstractType, cs as BREAK, ct as GraphQLInputObjectType, cu as GraphQLList, cv as GraphQLEnumType, cw as GraphQLObjectType, cx as GraphQLInterfaceType, cy as SchemaMetaFieldDef, cz as TypeMetaFieldDef, cA as TypeNameMetaFieldDef, cB as isCompositeType, cC as isOutputType, cD as isInputType, cE as GraphQLBoolean, cF as assertAbstractType, cG as doTypesOverlap, cH as DirectiveLocation, cI as specifiedRules$1, cJ as NoUnusedFragmentsRule$1, cK as ExecutableDefinitionsRule$1, cL as validate$2, cM as validateSchema, cN as GraphQLID, cO as GraphQLString, cP as GraphQLFloat, cQ as GraphQLInt, cR as GraphQLDirective, cS as GraphQLUnionType, cT as isNonNullType, cU as GraphQLNonNull, cV as isNamedType, cW as isLeafType, cX as GraphQLSchema, cY as buildSchema, cZ as sentenceCase, c_ as Root2, c$ as List, d0 as Trigger, d1 as Content, d2 as setModelName, d3 as setModelId, d4 as setModelDescription, d5 as setModelExtension, d6 as setAuthorName, d7 as setAuthorWebsite, d8 as setStateSchema, d9 as setInitialState, da as hashKey, db as addModule, dc as setModuleName, dd as deleteModule, de as addOperation, df as setOperationName, dg as setOperationSchema, dh as setOperationDescription, di as deleteOperation, dj as addOperationError, dk as deleteOperationError, dl as setOperationErrorName } from "./app-
|
|
2
|
+
import { bP as inspect$1, bQ as GraphQLError$1, bR as getNamedType, bS as invariant$2, bT as isInputObjectType, bU as isScalarType, bV as isObjectType, bW as isInterfaceType, bX as isUnionType, bY as isEnumType, bZ as print, b_ as isPrintableAsBlockString, b$ as Kind, c0 as astFromValue$1, c1 as DEFAULT_DEPRECATION_REASON, c2 as isSpecifiedDirective, c3 as isSpecifiedScalarType, c4 as isIntrospectionType, c5 as z, c6 as GraphQLScalarType, c7 as clsx, c8 as pascalCase, c9 as parse, ca as visit, cb as buildASTSchema, cc as extendSchema, cd as getNullableType, ce as isListType, cf as get, cg as set, ch as appendErrors, p as getDefaultExportFromCjs, ci as snakeCase, cj as constantCase, ck as useFormContext, cl as Primitive, cm as cva, cn as FormProvider, co as Controller, cp as Slot, cq as useForm, cr as isAbstractType, cs as BREAK, ct as GraphQLInputObjectType, cu as GraphQLList, cv as GraphQLEnumType, cw as GraphQLObjectType, cx as GraphQLInterfaceType, cy as SchemaMetaFieldDef, cz as TypeMetaFieldDef, cA as TypeNameMetaFieldDef, cB as isCompositeType, cC as isOutputType, cD as isInputType, cE as GraphQLBoolean, cF as assertAbstractType, cG as doTypesOverlap, cH as DirectiveLocation, cI as specifiedRules$1, cJ as NoUnusedFragmentsRule$1, cK as ExecutableDefinitionsRule$1, cL as validate$2, cM as validateSchema, cN as GraphQLID, cO as GraphQLString, cP as GraphQLFloat, cQ as GraphQLInt, cR as GraphQLDirective, cS as GraphQLUnionType, cT as isNonNullType, cU as GraphQLNonNull, cV as isNamedType, cW as isLeafType, cX as GraphQLSchema, cY as buildSchema, cZ as sentenceCase, c_ as Root2, c$ as List, d0 as Trigger, d1 as Content, d2 as setModelName, d3 as setModelId, d4 as setModelDescription, d5 as setModelExtension, d6 as setAuthorName, d7 as setAuthorWebsite, d8 as setStateSchema, d9 as setInitialState, da as hashKey, db as addModule, dc as setModuleName, dd as deleteModule, de as addOperation, df as setOperationName, dg as setOperationSchema, dh as setOperationDescription, di as deleteOperation, dj as addOperationError, dk as deleteOperationError, dl as setOperationErrorName } from "./app-B8nf-deX.js";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import React__default, { forwardRef, useRef, useCallback, useImperativeHandle, useEffect, useState, createContext, useContext, memo, useId, useMemo } from "react";
|
|
5
|
-
import { t as twMerge } from "./content-
|
|
6
|
-
import "./main.
|
|
7
|
-
import "./app-loader-
|
|
5
|
+
import { t as twMerge } from "./content-Bov1x3ah.js";
|
|
6
|
+
import "./main.Bikg5D0d.js";
|
|
7
|
+
import "./app-loader-BDXofohd.js";
|
|
8
8
|
import "react-dom";
|
|
9
9
|
import "@powerhousedao/reactor-browser/hooks/useUiNodesContext";
|
|
10
|
-
import "./react-error-boundary.esm-
|
|
11
|
-
import "./getEnsName-
|
|
10
|
+
import "./react-error-boundary.esm-BjyDQG6F.js";
|
|
11
|
+
import "./getEnsName-DVtbpogo.js";
|
|
12
12
|
import "@powerhousedao/reactor-browser";
|
|
13
13
|
import "@powerhousedao/reactor-browser/hooks/useDriveActionsWithUiNodes";
|
|
14
14
|
import "@powerhousedao/reactor-browser/hooks/useDriveContext";
|
|
@@ -10,10 +10,10 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
10
10
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
11
11
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
12
12
|
var _subtleCrypto, _keyPair, _keyPairStorage, _did, _ConnectCrypto_instances, initCrypto_fn, initialize_fn, parseDid_fn, generateECDSAKeyPair_fn, exportKeyPair_fn, importKeyPair_fn, _sign, _verify;
|
|
13
|
-
import { _ as __vitePreload } from "./main.
|
|
14
|
-
import { o as getAugmentedNamespace, p as getDefaultExportFromCjs } from "./app-
|
|
13
|
+
import { _ as __vitePreload } from "./main.Bikg5D0d.js";
|
|
14
|
+
import { o as getAugmentedNamespace, p as getDefaultExportFromCjs } from "./app-B8nf-deX.js";
|
|
15
15
|
import "react/jsx-runtime";
|
|
16
|
-
import "./app-loader-
|
|
16
|
+
import "./app-loader-BDXofohd.js";
|
|
17
17
|
import "react";
|
|
18
18
|
import "react-dom";
|
|
19
19
|
import "@powerhousedao/reactor-browser/hooks/useUiNodesContext";
|