@powerhousedao/connect 1.0.21-staging.0 → 1.0.22-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/.env +1 -1
  2. package/dist/assets/{app-B2txMMB6.js → app-B-5qYsgM.js} +8796 -3328
  3. package/dist/assets/app-B-5qYsgM.js.map +1 -0
  4. package/dist/assets/{app-CDOWlDp2.css → app-CmlD3Pwe.css} +119 -1
  5. package/dist/assets/{app-loader-uTr5bb-C.js → app-loader-DXPAMQYN.js} +681 -375
  6. package/dist/assets/app-loader-DXPAMQYN.js.map +1 -0
  7. package/dist/assets/{app-loader-DiF8OhX3.css → app-loader-DaCxVT0x.css} +134 -0
  8. package/dist/assets/browser-DC1g4ocI.js +27235 -0
  9. package/dist/assets/browser-DC1g4ocI.js.map +1 -0
  10. package/dist/assets/{ccip-Eu5ix3yZ.js → ccip-B4L3odPP.js} +5 -3
  11. package/dist/assets/ccip-B4L3odPP.js.map +1 -0
  12. package/dist/assets/{content-ZNvpO_Bf.js → content-D22zsKwo.js} +1052 -374
  13. package/dist/assets/content-D22zsKwo.js.map +1 -0
  14. package/dist/assets/{index-CdCNoFiu.js → index-CCV8LLva.js} +4 -3
  15. package/dist/assets/index-CCV8LLva.js.map +1 -0
  16. package/dist/assets/{index-CXtQlZED.js → index-CKPKk_m5.js} +24 -171
  17. package/dist/assets/index-CKPKk_m5.js.map +1 -0
  18. package/dist/assets/index-CWah4bZB.js +209 -0
  19. package/dist/assets/index-CWah4bZB.js.map +1 -0
  20. package/dist/assets/{index-BQuSynqj.js → index-bTL_WhmE.js} +8 -6
  21. package/dist/assets/index-bTL_WhmE.js.map +1 -0
  22. package/dist/assets/{main.D6_W-5oY.js → main.B0yzXDFz.js} +2 -1
  23. package/dist/assets/main.B0yzXDFz.js.map +1 -0
  24. package/dist/assets/reactor-analytics-BF1jqSpK.js +45 -0
  25. package/dist/assets/reactor-analytics-BF1jqSpK.js.map +1 -0
  26. package/dist/assets/router-C1-W7Dq7.js +1585 -0
  27. package/dist/assets/router-C1-W7Dq7.js.map +1 -0
  28. package/dist/assets/{style-Ce3V83BE.css → style-BPUyhu8E.css} +3 -0
  29. package/dist/external-packages.js +1 -0
  30. package/dist/external-packages.js.map +1 -0
  31. package/dist/hmr.js +1 -0
  32. package/dist/hmr.js.map +1 -0
  33. package/dist/index.html +1 -1
  34. package/dist/service-worker.js +1 -0
  35. package/dist/service-worker.js.map +1 -0
  36. package/dist/vite-envs.sh +1 -1
  37. package/package.json +10 -9
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/app-B2txMMB6.js","assets/main.D6_W-5oY.js","assets/app-CDOWlDp2.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/app-B-5qYsgM.js","assets/main.B0yzXDFz.js","assets/app-CmlD3Pwe.css"])))=>i.map(i=>d[i]);
2
2
  var __defProp = Object.defineProperty;
3
3
  var __typeError = (msg) => {
4
4
  throw TypeError(msg);
@@ -11,9 +11,10 @@ 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, _getDocumentModelModule, _drives, _ReadModeService_instances, parseGraphQLErrors_fn, fetchDrive_fn, _a, _ServiceWorkerManager_instances, handleServiceWorkerMessage_fn, handleServiceWorker_fn;
14
- import { _ as __vitePreload } from "./main.D6_W-5oY.js";
14
+ import { _ as __vitePreload } from "./main.B0yzXDFz.js";
15
15
  import { jsx, jsxs } from "react/jsx-runtime";
16
16
  import { useState, useEffect, Suspense, lazy } from "react";
17
+ import "node:fs";
17
18
  function _mergeNamespaces(n, m) {
18
19
  for (var i = 0; i < m.length; i++) {
19
20
  const e = m[i];
@@ -97,14 +98,51 @@ const trimResultingState = (document) => {
97
98
  });
98
99
  return { ...document, operations: { global: global2, local } };
99
100
  };
101
+ class CacheStorageManager {
102
+ constructor(cache) {
103
+ __publicField(this, "index", 0);
104
+ __publicField(this, "cache");
105
+ this.cache = cache;
106
+ }
107
+ createStorage() {
108
+ const index = this.index;
109
+ this.index += 1;
110
+ function buildKey(key) {
111
+ return `${index}-${key}`;
112
+ }
113
+ const storage = {
114
+ get: (key) => {
115
+ return this.cache.get(buildKey(key));
116
+ },
117
+ set: (key, value) => {
118
+ this.cache.set(buildKey(key), value);
119
+ return storage;
120
+ },
121
+ delete: (key) => {
122
+ return this.cache.delete(buildKey(key));
123
+ },
124
+ clear: () => {
125
+ this.cache.clear();
126
+ }
127
+ };
128
+ return storage;
129
+ }
130
+ }
100
131
  class InMemoryCache {
101
- constructor() {
102
- __publicField(this, "idTodocument", /* @__PURE__ */ new Map());
103
- __publicField(this, "idToDrive", /* @__PURE__ */ new Map());
104
- __publicField(this, "slugToDriveId", /* @__PURE__ */ new Map());
132
+ constructor(cache = /* @__PURE__ */ new Map()) {
133
+ __publicField(this, "cache");
134
+ __publicField(this, "cacheStorageManager");
135
+ __publicField(this, "idToDocument");
136
+ __publicField(this, "idToDrive");
137
+ __publicField(this, "slugToDriveId");
138
+ this.cache = cache;
139
+ this.cacheStorageManager = new CacheStorageManager(cache);
140
+ this.idToDocument = this.cacheStorageManager.createStorage();
141
+ this.idToDrive = this.cacheStorageManager.createStorage();
142
+ this.slugToDriveId = this.cacheStorageManager.createStorage();
105
143
  }
106
144
  clear() {
107
- this.idTodocument.clear();
145
+ this.idToDocument.clear();
108
146
  this.idToDrive.clear();
109
147
  this.slugToDriveId.clear();
110
148
  }
@@ -113,13 +151,13 @@ class InMemoryCache {
113
151
  /////////////////////////////////////////////////////////////////////////////
114
152
  async setDocument(documentId, document) {
115
153
  const doc = trimResultingState(document);
116
- this.idTodocument.set(documentId, doc);
154
+ this.idToDocument.set(documentId, doc);
117
155
  }
118
156
  async getDocument(documentId) {
119
- return this.idTodocument.get(documentId);
157
+ return this.idToDocument.get(documentId);
120
158
  }
121
159
  async deleteDocument(documentId) {
122
- return this.idTodocument.delete(documentId);
160
+ return this.idToDocument.delete(documentId);
123
161
  }
124
162
  async setDrive(driveId, drive) {
125
163
  const doc = trimResultingState(drive);
@@ -133,7 +171,7 @@ class InMemoryCache {
133
171
  if (!drive) {
134
172
  return false;
135
173
  }
136
- const slug = drive.state.global.slug;
174
+ const slug = drive.slug.length > 0 ? drive.slug : driveId;
137
175
  if (slug) {
138
176
  this.slugToDriveId.delete(slug);
139
177
  }
@@ -388,8 +426,8 @@ function isBE() {
388
426
  return buf[0] === 254;
389
427
  }
390
428
  const FileSystemError = new Error("File system not available.");
391
- function generateUUID$1() {
392
- if (!crypto.randomUUID) {
429
+ function generateUUID() {
430
+ if (typeof crypto === "undefined" || !crypto.randomUUID) {
393
431
  throw new Error("generateUUID is not available in unsecure contexts.");
394
432
  }
395
433
  return crypto.randomUUID();
@@ -6777,7 +6815,7 @@ function loadStateOperation(oldDocument, newDocument) {
6777
6815
  };
6778
6816
  }
6779
6817
  function generateId(method) {
6780
- return generateUUID$1();
6818
+ return generateUUID();
6781
6819
  }
6782
6820
  function getUnixTimestamp(date) {
6783
6821
  return (new Date(date).getTime() / 1e3).toFixed(0);
@@ -7117,6 +7155,7 @@ function createReducer(stateReducer2, documentReducer = baseReducer) {
7117
7155
  function baseCreateExtendedState(initialState, createState2) {
7118
7156
  return {
7119
7157
  name: "",
7158
+ slug: "",
7120
7159
  documentType: "",
7121
7160
  revision: {
7122
7161
  global: 0,
@@ -7144,10 +7183,6 @@ function baseCreateDocument(initialState, createState2) {
7144
7183
  function hashDocumentStateForScope(document, scope = "global") {
7145
7184
  return hash(cjsModule(document.state[scope] || ""));
7146
7185
  }
7147
- const hashKey = (date, randomLimit = 1e3) => {
7148
- const random = Math.random() * randomLimit;
7149
- return hash(`${(/* @__PURE__ */ new Date()).toISOString()}${random}`);
7150
- };
7151
7186
  function getDocumentLastModified(document) {
7152
7187
  var _a2;
7153
7188
  const sortedOperations = sortOperations(Object.values(document.operations).flat());
@@ -7196,6 +7231,9 @@ function replayDocument(initialState, operations, reducer2, dispatch, header, sk
7196
7231
  operationsToReplay.push(...Object.values(operations).flat());
7197
7232
  }
7198
7233
  const document = baseCreateDocument(documentState);
7234
+ if (header == null ? void 0 : header.slug) {
7235
+ document.slug = header.slug;
7236
+ }
7199
7237
  document.initialState = initialState;
7200
7238
  document.operations = initialOperations;
7201
7239
  let result = document;
@@ -7534,21 +7572,186 @@ function UpdateStateExampleInputSchema() {
7534
7572
  newExample: z.string()
7535
7573
  });
7536
7574
  }
7575
+ var dist = {};
7576
+ var hasRequiredDist;
7577
+ function requireDist() {
7578
+ if (hasRequiredDist) return dist;
7579
+ hasRequiredDist = 1;
7580
+ (function(exports) {
7581
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
7582
+ function getDefaultExportFromCjs2(x) {
7583
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
7584
+ }
7585
+ var browser = { exports: {} };
7586
+ var process2 = browser.exports = {};
7587
+ var cachedSetTimeout;
7588
+ var cachedClearTimeout;
7589
+ function defaultSetTimout() {
7590
+ throw new Error("setTimeout has not been defined");
7591
+ }
7592
+ function defaultClearTimeout() {
7593
+ throw new Error("clearTimeout has not been defined");
7594
+ }
7595
+ (function() {
7596
+ try {
7597
+ if (typeof setTimeout === "function") {
7598
+ cachedSetTimeout = setTimeout;
7599
+ } else {
7600
+ cachedSetTimeout = defaultSetTimout;
7601
+ }
7602
+ } catch (e) {
7603
+ cachedSetTimeout = defaultSetTimout;
7604
+ }
7605
+ try {
7606
+ if (typeof clearTimeout === "function") {
7607
+ cachedClearTimeout = clearTimeout;
7608
+ } else {
7609
+ cachedClearTimeout = defaultClearTimeout;
7610
+ }
7611
+ } catch (e) {
7612
+ cachedClearTimeout = defaultClearTimeout;
7613
+ }
7614
+ })();
7615
+ function runTimeout(fun) {
7616
+ if (cachedSetTimeout === setTimeout) {
7617
+ return setTimeout(fun, 0);
7618
+ }
7619
+ if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
7620
+ cachedSetTimeout = setTimeout;
7621
+ return setTimeout(fun, 0);
7622
+ }
7623
+ try {
7624
+ return cachedSetTimeout(fun, 0);
7625
+ } catch (e) {
7626
+ try {
7627
+ return cachedSetTimeout.call(null, fun, 0);
7628
+ } catch (e2) {
7629
+ return cachedSetTimeout.call(this, fun, 0);
7630
+ }
7631
+ }
7632
+ }
7633
+ function runClearTimeout(marker) {
7634
+ if (cachedClearTimeout === clearTimeout) {
7635
+ return clearTimeout(marker);
7636
+ }
7637
+ if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
7638
+ cachedClearTimeout = clearTimeout;
7639
+ return clearTimeout(marker);
7640
+ }
7641
+ try {
7642
+ return cachedClearTimeout(marker);
7643
+ } catch (e) {
7644
+ try {
7645
+ return cachedClearTimeout.call(null, marker);
7646
+ } catch (e2) {
7647
+ return cachedClearTimeout.call(this, marker);
7648
+ }
7649
+ }
7650
+ }
7651
+ var queue = [];
7652
+ var draining = false;
7653
+ var currentQueue;
7654
+ var queueIndex = -1;
7655
+ function cleanUpNextTick() {
7656
+ if (!draining || !currentQueue) {
7657
+ return;
7658
+ }
7659
+ draining = false;
7660
+ if (currentQueue.length) {
7661
+ queue = currentQueue.concat(queue);
7662
+ } else {
7663
+ queueIndex = -1;
7664
+ }
7665
+ if (queue.length) {
7666
+ drainQueue();
7667
+ }
7668
+ }
7669
+ function drainQueue() {
7670
+ if (draining) {
7671
+ return;
7672
+ }
7673
+ var timeout = runTimeout(cleanUpNextTick);
7674
+ draining = true;
7675
+ var len = queue.length;
7676
+ while (len) {
7677
+ currentQueue = queue;
7678
+ queue = [];
7679
+ while (++queueIndex < len) {
7680
+ if (currentQueue) {
7681
+ currentQueue[queueIndex].run();
7682
+ }
7683
+ }
7684
+ queueIndex = -1;
7685
+ len = queue.length;
7686
+ }
7687
+ currentQueue = null;
7688
+ draining = false;
7689
+ runClearTimeout(timeout);
7690
+ }
7691
+ process2.nextTick = function(fun) {
7692
+ var args = new Array(arguments.length - 1);
7693
+ if (arguments.length > 1) {
7694
+ for (var i = 1; i < arguments.length; i++) {
7695
+ args[i - 1] = arguments[i];
7696
+ }
7697
+ }
7698
+ queue.push(new Item(fun, args));
7699
+ if (queue.length === 1 && !draining) {
7700
+ runTimeout(drainQueue);
7701
+ }
7702
+ };
7703
+ function Item(fun, array) {
7704
+ this.fun = fun;
7705
+ this.array = array;
7706
+ }
7707
+ Item.prototype.run = function() {
7708
+ this.fun.apply(null, this.array);
7709
+ };
7710
+ process2.title = "browser";
7711
+ process2.browser = true;
7712
+ process2.env = {};
7713
+ process2.argv = [];
7714
+ process2.version = "";
7715
+ process2.versions = {};
7716
+ function noop2() {
7717
+ }
7718
+ process2.on = noop2;
7719
+ process2.addListener = noop2;
7720
+ process2.once = noop2;
7721
+ process2.off = noop2;
7722
+ process2.removeListener = noop2;
7723
+ process2.removeAllListeners = noop2;
7724
+ process2.emit = noop2;
7725
+ process2.prependListener = noop2;
7726
+ process2.prependOnceListener = noop2;
7727
+ process2.listeners = function(name2) {
7728
+ return [];
7729
+ };
7730
+ process2.binding = function(name2) {
7731
+ throw new Error("process.binding is not supported");
7732
+ };
7733
+ process2.cwd = function() {
7734
+ return "/";
7735
+ };
7736
+ process2.chdir = function(dir) {
7737
+ throw new Error("process.chdir is not supported");
7738
+ };
7739
+ process2.umask = function() {
7740
+ return 0;
7741
+ };
7742
+ var browserExports = browser.exports;
7743
+ const process$1 = /* @__PURE__ */ getDefaultExportFromCjs2(browserExports);
7744
+ exports.default = process$1;
7745
+ exports.process = process$1;
7746
+ })(dist);
7747
+ return dist;
7748
+ }
7749
+ var distExports = requireDist();
7750
+ const process = /* @__PURE__ */ getDefaultExportFromCjs(distExports);
7537
7751
  function commonjsRequire(path) {
7538
7752
  throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
7539
7753
  }
7540
7754
  var jszip_min = { exports: {} };
7541
- /*!
7542
-
7543
- JSZip v3.10.1 - A JavaScript class for generating and reading zip files
7544
- <http://stuartk.com/jszip>
7545
-
7546
- (c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
7547
- Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.
7548
-
7549
- JSZip uses the library pako released under the MIT license :
7550
- https://github.com/nodeca/pako/blob/main/LICENSE
7551
- */
7552
7755
  var hasRequiredJszip_min;
7553
7756
  function requireJszip_min() {
7554
7757
  if (hasRequiredJszip_min) return jszip_min.exports;
@@ -10323,9 +10526,10 @@ function validateOperations(operations) {
10323
10526
  }
10324
10527
  function createZip(document) {
10325
10528
  const zip = new JSZip();
10326
- const { name: name2, revision, documentType: documentType2, created, lastModified } = document;
10529
+ const { name: name2, slug, revision, documentType: documentType2, created, lastModified } = document;
10327
10530
  const header = {
10328
10531
  name: name2,
10532
+ slug,
10329
10533
  revision,
10330
10534
  documentType: documentType2,
10331
10535
  created,
@@ -10740,40 +10944,60 @@ const reducer$2 = {
10740
10944
  state.triggers = state.triggers.filter((trigger) => trigger.id !== action.input.triggerId);
10741
10945
  }
10742
10946
  };
10743
- const byteToHex = [];
10744
- for (let i = 0; i < 256; ++i) {
10745
- byteToHex.push((i + 256).toString(16).slice(1));
10947
+ class DocumentModelNotFoundError extends Error {
10948
+ constructor(id, cause) {
10949
+ super(`Document model "${id}" not found`, { cause });
10950
+ __publicField(this, "id");
10951
+ this.id = id;
10952
+ }
10746
10953
  }
10747
- function unsafeStringify(arr, offset = 0) {
10748
- return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
10954
+ class OperationError extends Error {
10955
+ constructor(status, operation, message, cause) {
10956
+ super(message, { cause: cause ?? operation });
10957
+ __publicField(this, "status");
10958
+ __publicField(this, "operation");
10959
+ this.status = status;
10960
+ this.operation = operation;
10961
+ }
10749
10962
  }
10750
- let getRandomValues;
10751
- const rnds8 = new Uint8Array(16);
10752
- function rng() {
10753
- if (!getRandomValues) {
10754
- if (typeof crypto === "undefined" || !crypto.getRandomValues) {
10755
- throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
10756
- }
10757
- getRandomValues = crypto.getRandomValues.bind(crypto);
10963
+ class ConflictOperationError extends OperationError {
10964
+ constructor(existingOperation, newOperation) {
10965
+ super("CONFLICT", newOperation, `Conflicting operation on index ${newOperation.index}`, { existingOperation, newOperation });
10758
10966
  }
10759
- return getRandomValues(rnds8);
10760
10967
  }
10761
- const randomUUID = typeof crypto !== "undefined" && crypto.randomUUID && crypto.randomUUID.bind(crypto);
10762
- const native = { randomUUID };
10763
- function v4(options, buf, offset) {
10764
- var _a2;
10765
- if (native.randomUUID && true && !options) {
10766
- return native.randomUUID();
10968
+ class DocumentIdValidationError extends Error {
10969
+ constructor(documentId) {
10970
+ super(`Invalid document id: ${documentId}`);
10767
10971
  }
10768
- options = options || {};
10769
- const rnds = options.random ?? ((_a2 = options.rng) == null ? void 0 : _a2.call(options)) ?? rng();
10770
- if (rnds.length < 16) {
10771
- throw new Error("Random bytes length must be >= 16");
10972
+ }
10973
+ class DocumentSlugValidationError extends Error {
10974
+ constructor(slug) {
10975
+ super(`Invalid slug: ${slug}`);
10976
+ }
10977
+ }
10978
+ class DocumentAlreadyExistsError extends Error {
10979
+ constructor(documentId) {
10980
+ super(`Document with id ${documentId} uses id or slug that already exists`);
10981
+ __publicField(this, "documentId");
10982
+ this.documentId = documentId;
10772
10983
  }
10773
- rnds[6] = rnds[6] & 15 | 64;
10774
- rnds[8] = rnds[8] & 63 | 128;
10775
- return unsafeStringify(rnds);
10776
10984
  }
10985
+ class DocumentNotFoundError extends Error {
10986
+ constructor(documentId) {
10987
+ super(`Document with id ${documentId} not found`);
10988
+ __publicField(this, "documentId");
10989
+ this.documentId = documentId;
10990
+ }
10991
+ }
10992
+ class SynchronizationUnitNotFoundError extends Error {
10993
+ constructor(message, syncUnitId) {
10994
+ super(message);
10995
+ __publicField(this, "syncUnitId");
10996
+ this.syncUnitId = syncUnitId;
10997
+ }
10998
+ }
10999
+ const isValidDocumentId = (id) => /^[a-zA-Z0-9_-]+$/.test(id);
11000
+ const isValidSlug = (slug) => /^[a-zA-Z0-9_-]+$/.test(slug);
10777
11001
  function isFileNode(node) {
10778
11002
  return node.kind === "file";
10779
11003
  }
@@ -10837,7 +11061,7 @@ function generateNodesCopy(src, idGenerator, nodes) {
10837
11061
  function generateSynchronizationUnitId(nodes) {
10838
11062
  let syncId = "";
10839
11063
  while (!syncId || nodes.find((node) => isFileNode(node) && node.synchronizationUnits.find((unit) => unit.syncId === syncId))) {
10840
- syncId = v4();
11064
+ syncId = generateId();
10841
11065
  }
10842
11066
  return syncId;
10843
11067
  }
@@ -10915,6 +11139,9 @@ const reducer$1 = {
10915
11139
  if (state.nodes.find((node) => node.id === action.input.id)) {
10916
11140
  throw new Error(`Node with id ${action.input.id} already exists!`);
10917
11141
  }
11142
+ if (!isValidDocumentId(action.input.id)) {
11143
+ throw new DocumentIdValidationError(action.input.id);
11144
+ }
10918
11145
  const name2 = handleTargetNameCollisions({
10919
11146
  nodes: state.nodes,
10920
11147
  srcName: action.input.name,
@@ -11007,6 +11234,9 @@ const reducer$1 = {
11007
11234
  if (!node) {
11008
11235
  throw new Error(`Node with id ${action.input.srcId} not found`);
11009
11236
  }
11237
+ if (!isValidDocumentId(action.input.targetId)) {
11238
+ throw new DocumentIdValidationError(action.input.targetId);
11239
+ }
11010
11240
  const duplicatedNode = state.nodes.find((node2) => node2.id === action.input.targetId);
11011
11241
  if (duplicatedNode) {
11012
11242
  throw new Error(`Node with id ${action.input.targetId} already exists`);
@@ -11018,8 +11248,9 @@ const reducer$1 = {
11018
11248
  });
11019
11249
  const newNode = {
11020
11250
  ...node,
11021
- name: name2,
11022
11251
  id: action.input.targetId,
11252
+ slug: action.input.targetId,
11253
+ name: name2,
11023
11254
  parentFolder: action.input.targetParentFolder || null
11024
11255
  };
11025
11256
  const isFile = isFileNode(newNode);
@@ -11154,8 +11385,7 @@ const initialGlobalState = {
11154
11385
  id: "",
11155
11386
  name: "",
11156
11387
  nodes: [],
11157
- icon: null,
11158
- slug: null
11388
+ icon: null
11159
11389
  };
11160
11390
  const initialLocalState = {
11161
11391
  listeners: [],
@@ -11416,8 +11646,7 @@ const driveDocumentModelModule = {
11416
11646
  actions: { ...creators, ...actions },
11417
11647
  utils: { ...documentModelUtils, ...customUtils }
11418
11648
  };
11419
- var define_process_env_default = {};
11420
- const LEVELS = {
11649
+ const LogLevels = {
11421
11650
  verbose: 1,
11422
11651
  debug: 2,
11423
11652
  info: 3,
@@ -11425,6 +11654,10 @@ const LEVELS = {
11425
11654
  error: 5,
11426
11655
  silent: 6
11427
11656
  };
11657
+ function isLogLevel(value) {
11658
+ return typeof value === "string" && value in LogLevels;
11659
+ }
11660
+ var define_process_env_default = {};
11428
11661
  class ConsoleLogger {
11429
11662
  constructor(tags, errorHandler2) {
11430
11663
  __privateAdd(this, _ConsoleLogger_instances);
@@ -11444,6 +11677,10 @@ class ConsoleLogger {
11444
11677
  return __privateGet(this, _levelString);
11445
11678
  }
11446
11679
  set level(level) {
11680
+ if (level !== "env" && !isLogLevel(level)) {
11681
+ throw new Error(`Invalid log level: ${JSON.stringify(level)}.
11682
+ Must be one of ${Object.keys(LogLevels).concat(["env"]).join(", ")}.`);
11683
+ }
11447
11684
  __privateSet(this, _levelString, level);
11448
11685
  }
11449
11686
  get errorHandler() {
@@ -11456,31 +11693,31 @@ class ConsoleLogger {
11456
11693
  return this.debug(...data);
11457
11694
  }
11458
11695
  verbose(...data) {
11459
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.verbose) {
11696
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.verbose) {
11460
11697
  return;
11461
11698
  }
11462
11699
  return this.debug(...data);
11463
11700
  }
11464
11701
  debug(...data) {
11465
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.debug) {
11702
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.debug) {
11466
11703
  return;
11467
11704
  }
11468
11705
  return console.debug(...[...__privateGet(this, _tags), ...data]);
11469
11706
  }
11470
11707
  info(...data) {
11471
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.info) {
11708
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.info) {
11472
11709
  return;
11473
11710
  }
11474
11711
  return console.info(...[...__privateGet(this, _tags), ...data]);
11475
11712
  }
11476
11713
  warn(...data) {
11477
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.warn) {
11714
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.warn) {
11478
11715
  return;
11479
11716
  }
11480
11717
  return console.warn(...[...__privateGet(this, _tags), ...data]);
11481
11718
  }
11482
11719
  error(...data) {
11483
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.error) {
11720
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.error) {
11484
11721
  return;
11485
11722
  }
11486
11723
  if (__privateGet(this, _errorHandler)) {
@@ -11495,16 +11732,16 @@ _errorHandler = new WeakMap();
11495
11732
  _ConsoleLogger_instances = new WeakSet();
11496
11733
  levelValue_get = function() {
11497
11734
  if (__privateGet(this, _levelString) === "env") {
11498
- const envLevel = typeof process !== "undefined" ? define_process_env_default.LOG_LEVEL : void 0;
11735
+ const envLevel = typeof process !== "undefined" && "env" in process ? define_process_env_default.LOG_LEVEL : void 0;
11499
11736
  if (!envLevel) {
11500
- return LEVELS.debug;
11737
+ return LogLevels.debug;
11501
11738
  }
11502
- if (!(envLevel in LEVELS)) {
11503
- return LEVELS.debug;
11739
+ if (!(envLevel in LogLevels)) {
11740
+ return LogLevels.debug;
11504
11741
  }
11505
- return LEVELS[envLevel];
11742
+ return LogLevels[envLevel];
11506
11743
  }
11507
- return LEVELS[__privateGet(this, _levelString)];
11744
+ return LogLevels[__privateGet(this, _levelString)];
11508
11745
  };
11509
11746
  const loggerInstance = new ConsoleLogger();
11510
11747
  let logLevel = "env";
@@ -11526,48 +11763,6 @@ const childLogger = (tags) => {
11526
11763
  logger2.errorHandler = errorHandler;
11527
11764
  return logger2;
11528
11765
  };
11529
- class DocumentModelNotFoundError extends Error {
11530
- constructor(id, cause) {
11531
- super(`Document model "${id}" not found`, { cause });
11532
- __publicField(this, "id");
11533
- this.id = id;
11534
- }
11535
- }
11536
- class OperationError extends Error {
11537
- constructor(status, operation, message, cause) {
11538
- super(message, { cause: cause ?? operation });
11539
- __publicField(this, "status");
11540
- __publicField(this, "operation");
11541
- this.status = status;
11542
- this.operation = operation;
11543
- }
11544
- }
11545
- class ConflictOperationError extends OperationError {
11546
- constructor(existingOperation, newOperation) {
11547
- super("CONFLICT", newOperation, `Conflicting operation on index ${newOperation.index}`, { existingOperation, newOperation });
11548
- }
11549
- }
11550
- class DocumentAlreadyExistsError extends Error {
11551
- constructor(documentId) {
11552
- super(`Document with id ${documentId} already exists`);
11553
- __publicField(this, "documentId");
11554
- this.documentId = documentId;
11555
- }
11556
- }
11557
- class DocumentNotFoundError extends Error {
11558
- constructor(documentId) {
11559
- super(`Document with id ${documentId} not found`);
11560
- __publicField(this, "documentId");
11561
- this.documentId = documentId;
11562
- }
11563
- }
11564
- class SynchronizationUnitNotFoundError extends Error {
11565
- constructor(message, syncUnitId) {
11566
- super(message);
11567
- __publicField(this, "syncUnitId");
11568
- this.syncUnitId = syncUnitId;
11569
- }
11570
- }
11571
11766
  var RunAsap;
11572
11767
  (function(RunAsap2) {
11573
11768
  RunAsap2.useMessageChannel = (() => {
@@ -11707,9 +11902,6 @@ function mergeOperations(currentOperations, newOperations) {
11707
11902
  return { ...acc, [curr.scope]: [...existingOperations, curr] };
11708
11903
  }, currentOperations);
11709
11904
  }
11710
- function generateUUID() {
11711
- return generateId();
11712
- }
11713
11905
  function isBefore(dateA, dateB) {
11714
11906
  return new Date(dateA) < new Date(dateB);
11715
11907
  }
@@ -11810,7 +12002,7 @@ class BaseQueueManager {
11810
12002
  if (!this.delegate) {
11811
12003
  throw new Error("No server delegate defined");
11812
12004
  }
11813
- const jobId = generateUUID();
12005
+ const jobId = generateId();
11814
12006
  const queue = this.getQueue(job.driveId, job.documentId);
11815
12007
  if (await queue.isDeleted()) {
11816
12008
  throw new Error("Queue is deleted");
@@ -22234,7 +22426,7 @@ class ReadModeService {
22234
22426
  return Promise.resolve(result ? { ...result.drive, readContext: result.context } : new ReadDriveNotFoundError(id));
22235
22427
  }
22236
22428
  async getReadDriveBySlug(slug) {
22237
- const readDrive = [...__privateGet(this, _drives).values()].find(({ drive }) => drive.state.global.slug === slug);
22429
+ const readDrive = [...__privateGet(this, _drives).values()].find(({ drive }) => drive.slug === slug);
22238
22430
  return Promise.resolve(readDrive ? { ...readDrive.drive, readContext: readDrive.context } : new ReadDriveSlugNotFoundError(slug));
22239
22431
  }
22240
22432
  getReadDriveContext(id) {
@@ -22699,7 +22891,7 @@ class PullResponderTransmitter {
22699
22891
  static async executePull(driveId, trigger, onStrandUpdate, onError, onRevisions, onAcknowledge) {
22700
22892
  var _a2, _b;
22701
22893
  staticLogger().verbose(`executePull(driveId: ${driveId}), trigger:`, trigger);
22702
- staticLogger().info(`[SYNC DEBUG] PullResponderTransmitter.executePull starting for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
22894
+ staticLogger().debug(`[SYNC DEBUG] PullResponderTransmitter.executePull starting for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
22703
22895
  const { url } = trigger.data;
22704
22896
  let strands;
22705
22897
  let error;
@@ -22863,7 +23055,7 @@ class PullResponderTransmitter {
22863
23055
  };
22864
23056
  const listenerId = await PullResponderTransmitter.registerPullResponder(driveId, url, filter);
22865
23057
  const pullTrigger = {
22866
- id: generateUUID(),
23058
+ id: generateId(),
22867
23059
  type: "PullResponder",
22868
23060
  driveId,
22869
23061
  filter,
@@ -23296,7 +23488,7 @@ class BaseDocumentDriveServer {
23296
23488
  async _initializeDrive(driveId) {
23297
23489
  var _a2, _b, _c;
23298
23490
  const drive = await this.getDrive(driveId);
23299
- this.logger.verbose(`[SYNC DEBUG] Initializing drive ${driveId} with slug "${drive.state.global.slug}"`);
23491
+ this.logger.verbose(`[SYNC DEBUG] Initializing drive ${driveId} with slug "${drive.slug}"`);
23300
23492
  await this.synchronizationManager.initializeDriveSyncStatus(driveId, drive);
23301
23493
  if (this.shouldSyncRemoteDrive(drive)) {
23302
23494
  this.logger.verbose(`[SYNC DEBUG] Starting sync for remote drive ${driveId}`);
@@ -23372,23 +23564,22 @@ class BaseDocumentDriveServer {
23372
23564
  return [...this.documentModelModules];
23373
23565
  }
23374
23566
  async addDrive(input, preferredEditor) {
23375
- const id = input.global.id || generateUUID();
23567
+ const id = input.global.id || generateId();
23376
23568
  if (!id) {
23377
23569
  throw new Error("Invalid Drive Id");
23378
23570
  }
23379
- const drives = await this.legacyStorage.getDrives();
23380
- if (drives.includes(id)) {
23381
- throw new DocumentAlreadyExistsError(id);
23382
- }
23383
23571
  const document = createDocument({
23384
23572
  state: input
23385
23573
  });
23574
+ if (input.slug && input.slug.length > 0) {
23575
+ document.slug = input.slug;
23576
+ }
23386
23577
  document.meta = {
23387
23578
  preferredEditor
23388
23579
  };
23389
- await this.legacyStorage.createDrive(id, document);
23390
- if (input.global.slug) {
23391
- await this.cache.deleteDriveBySlug(input.global.slug);
23580
+ await this.documentStorage.create(id, document);
23581
+ if (input.slug && input.slug.length > 0) {
23582
+ await this.cache.deleteDriveBySlug(input.slug);
23392
23583
  }
23393
23584
  await this._initializeDrive(id);
23394
23585
  this.eventEmitter.emit("driveAdded", document);
@@ -23402,10 +23593,10 @@ class BaseDocumentDriveServer {
23402
23593
  pullInterval
23403
23594
  });
23404
23595
  return await this.addDrive({
23596
+ slug,
23405
23597
  global: {
23406
23598
  id,
23407
23599
  name: name2,
23408
- slug,
23409
23600
  icon: icon ?? null
23410
23601
  },
23411
23602
  local: {
@@ -23421,16 +23612,25 @@ class BaseDocumentDriveServer {
23421
23612
  this.stopSyncRemoteDrive(driveId),
23422
23613
  this.listenerManager.removeDrive(driveId),
23423
23614
  this.cache.deleteDrive(driveId),
23424
- this.legacyStorage.deleteDrive(driveId)
23615
+ this.documentStorage.delete(driveId)
23425
23616
  ]);
23617
+ this.eventEmitter.emit("driveDeleted", driveId);
23426
23618
  result.forEach((r) => {
23427
23619
  if (r.status === "rejected") {
23428
23620
  throw r.reason;
23429
23621
  }
23430
23622
  });
23431
23623
  }
23432
- getDrives() {
23433
- return this.legacyStorage.getDrives();
23624
+ // TODO: paginate
23625
+ async getDrives() {
23626
+ const drives = [];
23627
+ let cursor;
23628
+ do {
23629
+ const { documents, nextCursor } = await this.documentStorage.findByType("powerhouse/document-drive", 100, cursor);
23630
+ drives.push(...documents);
23631
+ cursor = nextCursor;
23632
+ } while (cursor);
23633
+ return drives;
23434
23634
  }
23435
23635
  async getDrive(driveId, options) {
23436
23636
  let document;
@@ -23506,6 +23706,7 @@ class BaseDocumentDriveServer {
23506
23706
  const document = input.document ?? this.getDocumentModelModule(input.documentType).utils.createDocument();
23507
23707
  const documentStorage = {
23508
23708
  name: document.name,
23709
+ slug: document.slug,
23509
23710
  revision: document.revision,
23510
23711
  documentType: document.documentType,
23511
23712
  created: document.created,
@@ -23654,12 +23855,18 @@ class BaseDocumentDriveServer {
23654
23855
  handler = () => this.deleteDocument(driveId, signal.input.id);
23655
23856
  break;
23656
23857
  case "COPY_CHILD_DOCUMENT":
23657
- handler = () => this.getDocument(driveId, signal.input.id).then((documentToCopy) => this.createDocument(driveId, {
23658
- id: signal.input.newId,
23659
- documentType: documentToCopy.documentType,
23660
- document: documentToCopy,
23661
- synchronizationUnits: signal.input.synchronizationUnits
23662
- }));
23858
+ handler = () => this.getDocument(driveId, signal.input.id).then((documentToCopy) => {
23859
+ const doc = {
23860
+ ...documentToCopy,
23861
+ slug: signal.input.newId
23862
+ };
23863
+ return this.createDocument(driveId, {
23864
+ id: signal.input.newId,
23865
+ documentType: documentToCopy.documentType,
23866
+ document: doc,
23867
+ synchronizationUnits: signal.input.synchronizationUnits
23868
+ });
23869
+ });
23663
23870
  break;
23664
23871
  }
23665
23872
  if (handler) {
@@ -23916,13 +24123,6 @@ class BaseDocumentDriveServer {
23916
24123
  addDriveOperation(driveId, operation, options) {
23917
24124
  return this.addDriveOperations(driveId, [operation], options);
23918
24125
  }
23919
- async clearStorage() {
23920
- var _a2, _b;
23921
- for (const drive of await this.getDrives()) {
23922
- await this.deleteDrive(drive);
23923
- }
23924
- await ((_b = (_a2 = this.legacyStorage).clearStorage) == null ? void 0 : _b.call(_a2));
23925
- }
23926
24126
  async _addDriveOperations(driveId, callback) {
23927
24127
  if (!this.legacyStorage.addDriveOperationsWithTransaction) {
23928
24128
  const documentStorage = await this.documentStorage.get(driveId);
@@ -24197,17 +24397,31 @@ class MemoryStorage {
24197
24397
  exists(documentId) {
24198
24398
  return Promise.resolve(!!this.documents[documentId]);
24199
24399
  }
24200
- // TODO: this should throw an error if the document already exists.
24201
24400
  create(documentId, document) {
24202
- var _a2;
24401
+ if (!isValidDocumentId(documentId)) {
24402
+ throw new DocumentIdValidationError(documentId);
24403
+ }
24404
+ if (this.documents[documentId]) {
24405
+ throw new DocumentAlreadyExistsError(documentId);
24406
+ }
24407
+ const slug = document.slug.length > 0 ? document.slug : documentId;
24408
+ if (!isValidSlug(slug)) {
24409
+ throw new DocumentSlugValidationError(slug);
24410
+ }
24411
+ if (slug && this.slugToDocumentId[slug]) {
24412
+ throw new DocumentAlreadyExistsError(documentId);
24413
+ }
24414
+ document.slug = slug;
24203
24415
  this.documents[documentId] = document;
24204
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24205
24416
  if (slug) {
24206
24417
  if (this.slugToDocumentId[slug]) {
24207
- throw new Error(`Document with slug ${slug} already exists`);
24418
+ throw new DocumentAlreadyExistsError(documentId);
24208
24419
  }
24209
24420
  this.slugToDocumentId[slug] = documentId;
24210
24421
  }
24422
+ if (document.documentType === "powerhouse/document-drive") {
24423
+ this.updateDriveManifest(documentId, { documentIds: /* @__PURE__ */ new Set() });
24424
+ }
24211
24425
  return Promise.resolve();
24212
24426
  }
24213
24427
  get(documentId) {
@@ -24224,20 +24438,56 @@ class MemoryStorage {
24224
24438
  }
24225
24439
  return this.get(documentId);
24226
24440
  }
24441
+ async findByType(documentModelType, limit = 100, cursor) {
24442
+ const documentsAndIds = Object.entries(this.documents).filter(([_, doc]) => doc.documentType === documentModelType).map(([id, doc]) => ({
24443
+ id,
24444
+ document: doc
24445
+ }));
24446
+ documentsAndIds.sort((a, b) => {
24447
+ const aDate = new Date(a.document.created);
24448
+ const bDate = new Date(b.document.created);
24449
+ if (aDate.getTime() === bDate.getTime()) {
24450
+ const aId = a.id;
24451
+ const bId = b.id;
24452
+ return aId.localeCompare(bId);
24453
+ }
24454
+ return aDate.getTime() - bDate.getTime();
24455
+ });
24456
+ let startIndex = 0;
24457
+ if (cursor) {
24458
+ const index = documentsAndIds.findIndex(({ id }) => id === cursor);
24459
+ if (index !== -1) {
24460
+ startIndex = index;
24461
+ }
24462
+ }
24463
+ const endIndex = Math.min(startIndex + limit, documentsAndIds.length);
24464
+ let nextCursor;
24465
+ if (endIndex < documentsAndIds.length) {
24466
+ nextCursor = documentsAndIds[endIndex].id;
24467
+ }
24468
+ return {
24469
+ documents: documentsAndIds.slice(startIndex, endIndex).map(({ id }) => id),
24470
+ nextCursor
24471
+ };
24472
+ }
24227
24473
  async delete(documentId) {
24228
- var _a2;
24229
24474
  const document = this.documents[documentId];
24230
24475
  if (document) {
24231
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24476
+ const slug = document.slug.length > 0 ? document.slug : documentId;
24232
24477
  if (slug && this.slugToDocumentId[slug] === documentId) {
24233
24478
  delete this.slugToDocumentId[slug];
24234
24479
  }
24235
24480
  }
24236
- const drives = await this.getDrives();
24237
- for (const driveId of drives) {
24238
- if (driveId === documentId)
24239
- continue;
24240
- await this.removeChild(driveId, documentId);
24481
+ const parents = await this.getParents(documentId);
24482
+ for (const parent of parents) {
24483
+ await this.removeChild(parent, documentId);
24484
+ }
24485
+ const children = await this.getChildren(documentId);
24486
+ for (const child of children) {
24487
+ const childParents = await this.getParents(child);
24488
+ if (childParents.length === 1) {
24489
+ await this.delete(child);
24490
+ }
24241
24491
  }
24242
24492
  delete this.driveManifests[documentId];
24243
24493
  if (this.documents[documentId]) {
@@ -24271,14 +24521,26 @@ class MemoryStorage {
24271
24521
  const manifest = this.getManifest(parentId);
24272
24522
  return [...manifest.documentIds];
24273
24523
  }
24524
+ async getParents(childId) {
24525
+ const parents = [];
24526
+ for (const [driveId, manifest] of Object.entries(this.driveManifests)) {
24527
+ if (manifest.documentIds.has(childId)) {
24528
+ parents.push(driveId);
24529
+ }
24530
+ }
24531
+ return parents;
24532
+ }
24274
24533
  ////////////////////////////////
24275
- // IDriveStorage
24534
+ // IDocumentAdminStorage
24276
24535
  ////////////////////////////////
24277
- async clearStorage() {
24536
+ async clear() {
24278
24537
  this.documents = {};
24279
24538
  this.driveManifests = {};
24280
24539
  this.slugToDocumentId = {};
24281
24540
  }
24541
+ ////////////////////////////////
24542
+ // IDriveStorage
24543
+ ////////////////////////////////
24282
24544
  async addDocumentOperations(drive, id, operations, header) {
24283
24545
  const document = await this.get(id);
24284
24546
  if (!document) {
@@ -24291,13 +24553,6 @@ class MemoryStorage {
24291
24553
  operations: mergedOperations
24292
24554
  };
24293
24555
  }
24294
- async getDrives() {
24295
- return Object.keys(this.driveManifests);
24296
- }
24297
- async createDrive(id, drive) {
24298
- await this.create(id, drive);
24299
- this.updateDriveManifest(id, { documentIds: /* @__PURE__ */ new Set() });
24300
- }
24301
24556
  async addDriveOperations(id, operations, header) {
24302
24557
  const drive = await this.get(id);
24303
24558
  const mergedOperations = mergeOperations(drive.operations, operations);
@@ -24307,32 +24562,6 @@ class MemoryStorage {
24307
24562
  operations: mergedOperations
24308
24563
  };
24309
24564
  }
24310
- async deleteDrive(id) {
24311
- const manifest = this.getManifest(id);
24312
- const drives = await this.getDrives();
24313
- await Promise.all([...manifest.documentIds].map((docId) => {
24314
- var _a2;
24315
- for (const driveId of drives) {
24316
- if (driveId === id) {
24317
- continue;
24318
- }
24319
- const manifest2 = this.getManifest(driveId);
24320
- if (manifest2.documentIds.has(docId)) {
24321
- return;
24322
- }
24323
- }
24324
- const document = this.documents[docId];
24325
- if (document) {
24326
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24327
- if (slug && this.slugToDocumentId[slug] === docId) {
24328
- delete this.slugToDocumentId[slug];
24329
- }
24330
- }
24331
- delete this.documents[docId];
24332
- }));
24333
- delete this.driveManifests[id];
24334
- delete this.documents[id];
24335
- }
24336
24565
  async getSynchronizationUnitsRevision(units) {
24337
24566
  const results = await Promise.allSettled(units.map(async (unit) => {
24338
24567
  try {
@@ -25535,6 +25764,9 @@ function Syncing(props) {
25535
25764
  function Tabler(props) {
25536
25765
  return jsxs("svg", { ...props, width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [jsx("path", { d: "M4.5 9V7.5C4.5 6.30653 4.97411 5.16193 5.81802 4.31802C6.66193 3.47411 7.80653 3 9 3C10.1935 3 11.3381 3.47411 12.182 4.31802C13.0259 5.16193 13.5 6.30653 13.5 7.5V9M3 13.5C3 13.8978 3.15804 14.2794 3.43934 14.5607C3.72064 14.842 4.10218 15 4.5 15C4.89782 15 5.27936 14.842 5.56066 14.5607C5.84196 14.2794 6 13.8978 6 13.5C6 13.1022 5.84196 12.7206 5.56066 12.4393C5.27936 12.158 4.89782 12 4.5 12C4.10218 12 3.72064 12.158 3.43934 12.4393C3.15804 12.7206 3 13.1022 3 13.5ZM12 13.5C12 13.8978 12.158 14.2794 12.4393 14.5607C12.7206 14.842 13.1022 15 13.5 15C13.8978 15 14.2794 14.842 14.5607 14.5607C14.842 14.2794 15 13.8978 15 13.5C15 13.1022 14.842 12.7206 14.5607 12.4393C14.2794 12.158 13.8978 12 13.5 12C13.1022 12 12.7206 12.158 12.4393 12.4393C12.158 12.7206 12 13.1022 12 13.5Z", stroke: "currentcolor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }), jsx("path", { d: "M11.25 6.75L13.5 9L15.75 6.75", stroke: "currentcolor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })] });
25537
25766
  }
25767
+ function TimelineCaret(props) {
25768
+ return jsx("svg", { ...props, width: "10", height: "7", viewBox: "0 0 10 7", fill: "currentcolor", children: jsx("path", { d: "M0.539174 0.830403L0.539396 0.830693L4.81717 6.41675L0.539174 0.830403ZM0.539174 0.830403C0.492941 0.770121 0.486776 0.69618 0.524599 0.622069C0.562768 0.547277 0.632849 0.5 0.721373 0.5L9.27711 0.5C9.36895 0.5 9.44336 0.552912 9.47789 0.620069C9.51177 0.686686 9.50789 0.767089 9.45938 0.830307L9.45889 0.83095M0.539174 0.830403L9.45889 0.83095M9.45889 0.83095C9.05222 1.36269 7.09357 3.91999 5.94678 5.41729C5.588 5.88573 5.30868 6.25042 5.18122 6.41687M9.45889 0.83095L5.18122 6.41687M5.18122 6.41687C5.1428 6.46691 5.07824 6.5 4.99924 6.5M5.18122 6.41687L4.99924 6.5M4.99924 6.5C4.92023 6.5 4.85567 6.46691 4.81726 6.41687L4.99924 6.5Z", fill: "currentcolor", stroke: "currentcolor" }) });
25769
+ }
25538
25770
  function Timeline(props) {
25539
25771
  return jsxs("svg", { ...props, width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentcolor", children: [jsx("rect", { width: "16", height: "16", fill: "url(#pattern0_1256_1508)" }), jsxs("defs", { children: [jsx("pattern", { id: "pattern0_1256_1508", patternContentUnits: "objectBoundingBox", width: "1", height: "1", children: jsx("use", { href: "#image0_1256_1508", transform: "scale(0.00195312)" }) }), jsx("image", { id: "image0_1256_1508", width: "512", height: "512", preserveAspectRatio: "none", href: "data:image/png;base64,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" })] })] });
25540
25772
  }
@@ -25675,6 +25907,7 @@ const iconComponents = {
25675
25907
  Synced,
25676
25908
  Syncing,
25677
25909
  Tabler,
25910
+ TimelineCaret,
25678
25911
  Timeline,
25679
25912
  TrashFill,
25680
25913
  Trash,
@@ -25737,7 +25970,12 @@ const ADD_TRIGGER = "ADD_TRIGGER";
25737
25970
  const ADD_INVALID_TRIGGER = "ADD_INVALID_TRIGGER";
25738
25971
  const defaultDriveOptions = [NEW_FOLDER, RENAME, SETTINGS];
25739
25972
  const defaultFileOptions = [RENAME, DELETE, DUPLICATE];
25740
- const defaultFolderOptions = [RENAME, DELETE, DUPLICATE];
25973
+ const defaultFolderOptions = [
25974
+ NEW_FOLDER,
25975
+ RENAME,
25976
+ DELETE,
25977
+ DUPLICATE
25978
+ ];
25741
25979
  const debugNodeOptions = [
25742
25980
  ADD_TRIGGER,
25743
25981
  REMOVE_TRIGGER,
@@ -25817,7 +26055,7 @@ const nodeOptionsMap = {
25817
26055
  };
25818
26056
  const name = "@powerhousedao/connect";
25819
26057
  const productName = "Powerhouse-Connect";
25820
- const version$1 = "1.0.21-staging.0";
26058
+ const version$1 = "1.0.22-dev.1";
25821
26059
  const description = "Powerhouse Connect";
25822
26060
  const main = "./dist/index.html";
25823
26061
  const type = "module";
@@ -25829,7 +26067,7 @@ const repository = { "type": "git", "url": "git+https://github.com/powerhouse-in
25829
26067
  const bugs = { "url": "https://github.com/powerhouse-inc/document-model-electron/issues" };
25830
26068
  const homepage = "https://github.com/powerhouse-inc/document-model-electron#readme";
25831
26069
  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 .", "lint:nx": "eslint --quiet --fix .", "format": 'prettier --write "**/*.+(js|ts|jsx|tsx|json)"', "dev": "vite -c vite.renderer.config.mts", "dev:nocache": "rm -rf node_modules/.vite && rm -rf node_modules/.cache && npm run dev", "prebuild": "tsc --build --noEmit", "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", "clean": "rimraf dist", "clean:node_modules": "rimraf node_modules" };
25832
- 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:*", "@rollup/plugin-node-resolve": "^15.2.3", "@sentry/browser": "^9.1.0", "@sentry/react": "^7.109.0", "@sentry/vite-plugin": "^2.22.2", "@tailwindcss/vite": "^4.0.9", "@tanstack/react-virtual": "^3.8.1", "@types/node": "^22.13.10", "@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-basic-ssl": "^1.2.0", "@vitejs/plugin-react": "^4.2.1", "asar": "^3.2.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", "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": "^3.0.2", "tailwindcss": "^4.0.9", "uuid": "^9.0.1", "viem": "^2.8.13", "vite": "^6.2.2", "vite-envs": "^4.4.11", "vite-plugin-html": "^3.2.2", "vite-plugin-node-polyfills": "^0.23.0", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.3.2", "xvfb-maybe": "^0.2.1" };
26070
+ 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/diff-analyzer": "^0.0.0-dev.4", "@powerhousedao/reactor-browser": "workspace:*", "@powerhousedao/scalars": "workspace:*", "@rollup/plugin-node-resolve": "^15.2.3", "@sentry/browser": "^9.1.0", "@sentry/react": "^7.109.0", "@sentry/vite-plugin": "^2.22.2", "@tailwindcss/vite": "^4.0.9", "@tanstack/react-virtual": "^3.8.1", "@types/node": "^22.13.10", "@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-basic-ssl": "^1.2.0", "@vitejs/plugin-react": "^4.2.1", "asar": "^3.2.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", "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": "^3.0.2", "tailwindcss": "^4.0.9", "uuid": "^9.0.1", "viem": "^2.8.13", "vite": "^6.2.2", "vite-envs": "^4.4.11", "vite-plugin-html": "^3.2.2", "vite-plugin-node-polyfills": "^0.23.0", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.3.2", "xvfb-maybe": "^0.2.1" };
25833
26071
  const optionalDependencies = { "@esbuild/linux-x64": "^0.21.4", "@rollup/rollup-linux-x64-musl": "4.14.3" };
25834
26072
  const packageJson = {
25835
26073
  name,
@@ -25870,8 +26108,9 @@ const PH_CONNECT_SENTRY_ENV = window.__VITE_ENVS.PH_CONNECT_SENTRY_ENV || "dev";
25870
26108
  const PH_CONNECT_SENTRY_TRACING_ENABLED = window.__VITE_ENVS.PH_CONNECT_SENTRY_TRACING_ENABLED || "false";
25871
26109
  const GA_TRACKING_ID = window.__VITE_ENVS.PH_CONNECT_GA_TRACKING_ID;
25872
26110
  const PH_CONNECT_CLI_VERSION = window.__VITE_ENVS.PH_CONNECT_CLI_VERSION || void 0;
25873
- setLogLevel(window.__VITE_ENVS.LOG_LEVEL);
25874
- logger$1.info(`Setting log level to ${window.__VITE_ENVS.LOG_LEVEL}.`);
26111
+ const LOG_LEVEL = isLogLevel(window.__VITE_ENVS.LOG_LEVEL) ? window.__VITE_ENVS.LOG_LEVEL : "info";
26112
+ setLogLevel(LOG_LEVEL);
26113
+ logger$1.debug(`Setting log level to ${window.__VITE_ENVS.LOG_LEVEL}.`);
25875
26114
  const connectConfig = {
25876
26115
  appVersion: APP_VERSION,
25877
26116
  studioMode: PH_CONNECT_STUDIO_MODE.toString() === "true",
@@ -28610,6 +28849,9 @@ const _BrowserStorage = class _BrowserStorage {
28610
28849
  name: namespace ? `${namespace}:${_BrowserStorage.DBName}` : _BrowserStorage.DBName
28611
28850
  }));
28612
28851
  }
28852
+ ////////////////////////////////
28853
+ // IDocumentAdminStorage
28854
+ ////////////////////////////////
28613
28855
  async clear() {
28614
28856
  const db = await this.db;
28615
28857
  await db.clear();
@@ -28622,19 +28864,34 @@ const _BrowserStorage = class _BrowserStorage {
28622
28864
  const document = await db.getItem(this.buildDocumentKey(documentId));
28623
28865
  return !!document;
28624
28866
  }
28625
- // TODO: this should throw an error if the document already exists.
28626
28867
  async create(documentId, document) {
28627
- var _a2;
28868
+ if (!isValidDocumentId(documentId)) {
28869
+ throw new DocumentIdValidationError(documentId);
28870
+ }
28628
28871
  const db = await this.db;
28872
+ if (await this.exists(documentId)) {
28873
+ throw new DocumentAlreadyExistsError(documentId);
28874
+ }
28875
+ const slug = document.slug.length > 0 ? document.slug : documentId;
28876
+ if (!isValidSlug(slug)) {
28877
+ throw new DocumentSlugValidationError(slug);
28878
+ }
28879
+ const slugManifest = await this.getSlugManifest();
28880
+ if (slugManifest.slugToId[slug]) {
28881
+ throw new DocumentAlreadyExistsError(documentId);
28882
+ }
28883
+ document.slug = slug;
28629
28884
  await db.setItem(this.buildDocumentKey(documentId), document);
28630
- const slug = ((_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug) ?? documentId;
28631
28885
  if (slug) {
28632
- const slugManifest = await this.getSlugManifest();
28633
- if (slugManifest.slugToId[slug]) {
28886
+ const slugManifest2 = await this.getSlugManifest();
28887
+ if (slugManifest2.slugToId[slug]) {
28634
28888
  throw new Error(`Document with slug ${slug} already exists`);
28635
28889
  }
28636
- slugManifest.slugToId[slug] = documentId;
28637
- await this.updateSlugManifest(slugManifest);
28890
+ slugManifest2.slugToId[slug] = documentId;
28891
+ await this.updateSlugManifest(slugManifest2);
28892
+ }
28893
+ if (document.documentType === "powerhouse/document-drive") {
28894
+ this.updateDriveManifest(documentId, { documentIds: [] });
28638
28895
  }
28639
28896
  }
28640
28897
  async get(documentId) {
@@ -28653,15 +28910,56 @@ const _BrowserStorage = class _BrowserStorage {
28653
28910
  }
28654
28911
  return this.get(documentId);
28655
28912
  }
28913
+ async findByType(documentModelType, limit = 100, cursor) {
28914
+ const db = await this.db;
28915
+ const keys = await db.keys();
28916
+ const documentKeys = keys.filter((key) => key.startsWith(`${_BrowserStorage.DOCUMENT_KEY}${_BrowserStorage.SEP}`));
28917
+ const documentsAndIds = [];
28918
+ for (const key of documentKeys) {
28919
+ const documentId = key.slice(_BrowserStorage.DOCUMENT_KEY.length + _BrowserStorage.SEP.length);
28920
+ try {
28921
+ const document = await db.getItem(key);
28922
+ if (!document || document.documentType !== documentModelType) {
28923
+ continue;
28924
+ }
28925
+ documentsAndIds.push({ id: documentId, document });
28926
+ } catch (error) {
28927
+ continue;
28928
+ }
28929
+ }
28930
+ documentsAndIds.sort((a, b) => {
28931
+ const aDate = new Date(a.document.created);
28932
+ const bDate = new Date(b.document.created);
28933
+ if (aDate.getTime() === bDate.getTime()) {
28934
+ return a.id.localeCompare(b.id);
28935
+ }
28936
+ return aDate.getTime() - bDate.getTime();
28937
+ });
28938
+ let startIndex = 0;
28939
+ if (cursor) {
28940
+ const index = documentsAndIds.findIndex(({ id }) => id === cursor);
28941
+ if (index !== -1) {
28942
+ startIndex = index;
28943
+ }
28944
+ }
28945
+ const endIndex = Math.min(startIndex + limit, documentsAndIds.length);
28946
+ let nextCursor;
28947
+ if (endIndex < documentsAndIds.length) {
28948
+ nextCursor = documentsAndIds[endIndex].id;
28949
+ }
28950
+ return {
28951
+ documents: documentsAndIds.slice(startIndex, endIndex).map(({ id }) => id),
28952
+ nextCursor
28953
+ };
28954
+ }
28656
28955
  async delete(documentId) {
28657
- var _a2;
28658
28956
  const db = await this.db;
28659
28957
  const document = await db.getItem(this.buildDocumentKey(documentId));
28660
28958
  if (!document) {
28661
28959
  return false;
28662
28960
  }
28961
+ const slug = document.slug.length > 0 ? document.slug : documentId;
28663
28962
  try {
28664
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
28665
28963
  if (slug) {
28666
28964
  const slugManifest = await this.getSlugManifest();
28667
28965
  if (slugManifest.slugToId[slug] === documentId) {
@@ -28671,11 +28969,16 @@ const _BrowserStorage = class _BrowserStorage {
28671
28969
  }
28672
28970
  } catch (error) {
28673
28971
  }
28674
- const drives = await this.getDrives();
28675
- for (const driveId of drives) {
28676
- if (driveId === documentId)
28677
- continue;
28678
- await this.removeChild(driveId, documentId);
28972
+ const parents = await this.getParents(documentId);
28973
+ for (const parent of parents) {
28974
+ await this.removeChild(parent, documentId);
28975
+ }
28976
+ const children = await this.getChildren(documentId);
28977
+ for (const child of children) {
28978
+ const childParents = await this.getParents(child);
28979
+ if (childParents.length === 1 && childParents[0] === documentId) {
28980
+ await this.delete(child);
28981
+ }
28679
28982
  }
28680
28983
  await db.removeItem(this.buildManifestKey(documentId));
28681
28984
  await db.removeItem(this.buildDocumentKey(documentId));
@@ -28709,6 +29012,20 @@ const _BrowserStorage = class _BrowserStorage {
28709
29012
  const manifest = await this.getManifest(parentId);
28710
29013
  return manifest.documentIds;
28711
29014
  }
29015
+ async getParents(childId) {
29016
+ const db = await this.db;
29017
+ const keys = await db.keys();
29018
+ const parents = [];
29019
+ const manifestKeys = keys.filter((key) => key.startsWith(`${_BrowserStorage.MANIFEST_KEY}${_BrowserStorage.SEP}`));
29020
+ for (const key of manifestKeys) {
29021
+ const driveId = key.slice(_BrowserStorage.MANIFEST_KEY.length + _BrowserStorage.SEP.length);
29022
+ const manifest = await this.getManifest(driveId);
29023
+ if (manifest.documentIds.includes(childId)) {
29024
+ parents.push(driveId);
29025
+ }
29026
+ }
29027
+ return parents;
29028
+ }
28712
29029
  ////////////////////////////////
28713
29030
  // IDriveStorage
28714
29031
  ////////////////////////////////
@@ -28730,9 +29047,6 @@ const _BrowserStorage = class _BrowserStorage {
28730
29047
  const db = await this.db;
28731
29048
  await db.setItem(_BrowserStorage.SLUG_MANIFEST_KEY, manifest);
28732
29049
  }
28733
- async clearStorage() {
28734
- return (await this.db).clear();
28735
- }
28736
29050
  async addDocumentOperations(drive, id, operations, header) {
28737
29051
  const document = await this.get(id);
28738
29052
  if (!document) {
@@ -28746,22 +29060,6 @@ const _BrowserStorage = class _BrowserStorage {
28746
29060
  operations: mergedOperations
28747
29061
  });
28748
29062
  }
28749
- async getDrives() {
28750
- const db = await this.db;
28751
- const keys = await db.keys();
28752
- return keys.filter((key) => key.startsWith(_BrowserStorage.MANIFEST_KEY)).map((key) => key.slice(_BrowserStorage.MANIFEST_KEY.length + _BrowserStorage.SEP.length));
28753
- }
28754
- async createDrive(id, drive) {
28755
- await this.create(id, drive);
28756
- await this.updateDriveManifest(id, { documentIds: [] });
28757
- }
28758
- async deleteDrive(id) {
28759
- const documents = await this.getChildren(id);
28760
- await Promise.all(documents.map((doc) => this.delete(doc)));
28761
- const db = await this.db;
28762
- await db.removeItem(this.buildManifestKey(id));
28763
- return db.removeItem(this.buildDocumentKey(id));
28764
- }
28765
29063
  async addDriveOperations(id, operations, header) {
28766
29064
  const drive = await this.get(id);
28767
29065
  const mergedOperations = mergeOperations(drive.operations, operations);
@@ -28802,12 +29100,16 @@ const _BrowserStorage = class _BrowserStorage {
28802
29100
  }
28803
29101
  // migrates all stored operations from legacy signature to signatures array
28804
29102
  async migrateOperationSignatures() {
28805
- const drives = await this.getDrives();
28806
- for (const drive of drives) {
28807
- await this.migrateDrive(drive);
28808
- const documents = await this.getChildren(drive);
28809
- await Promise.all(documents.map(async (docId) => this.migrateDocument(drive, docId)));
28810
- }
29103
+ let cursor;
29104
+ do {
29105
+ const { documents: drives, nextCursor } = await this.findByType("powerhouse/document-drive", 100, cursor);
29106
+ for (const drive of drives) {
29107
+ await this.migrateDrive(drive);
29108
+ const documents = await this.getChildren(drive);
29109
+ await Promise.all(documents.map(async (docId) => this.migrateDocument(drive, docId)));
29110
+ }
29111
+ cursor = nextCursor;
29112
+ } while (cursor);
28811
29113
  }
28812
29114
  async migrateDrive(driveId) {
28813
29115
  const drive = await this.get(driveId);
@@ -28881,8 +29183,11 @@ const getReactorDefaultDrivesConfig = () => {
28881
29183
  }
28882
29184
  };
28883
29185
  };
28884
- function createBrowserDocumentDriveServer(documentModels, routerBasename) {
28885
- return new ReactorBuilder(documentModels).withStorage(new BrowserStorage(routerBasename)).withCache(new InMemoryCache()).withQueueManager(new BaseQueueManager(1, 10)).withOptions({ ...getReactorDefaultDrivesConfig() }).build();
29186
+ function createBrowserStorage(routerBasename) {
29187
+ return new BrowserStorage(routerBasename);
29188
+ }
29189
+ function createBrowserDocumentDriveServer(documentModels, storage) {
29190
+ return new ReactorBuilder(documentModels).withStorage(storage).withCache(new InMemoryCache()).withQueueManager(new BaseQueueManager(1, 10)).withOptions({ ...getReactorDefaultDrivesConfig() }).build();
28886
29191
  }
28887
29192
  const VERSION_CHECK_INTERVAL = parseInt(window.__VITE_ENVS.PH_CONNECT_VERSION_CHECK_INTERVAL) || 60 * 60 * 1e3;
28888
29193
  const basePath = connectConfig.routerBasename;
@@ -31441,14 +31746,14 @@ if (window.__VITE_ENVS.MODE === "development") {
31441
31746
  } else {
31442
31747
  serviceWorkerManager.registerServiceWorker(false);
31443
31748
  }
31444
- const App = lazy(() => __vitePreload(() => import("./app-B2txMMB6.js").then((n) => n.aY), true ? __vite__mapDeps([0,1,2]) : void 0));
31749
+ const App = lazy(() => __vitePreload(() => import("./app-B-5qYsgM.js").then((n) => n.bs), true ? __vite__mapDeps([0,1,2]) : void 0));
31445
31750
  const AppLoader = /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(App, {}) });
31446
31751
  const appLoader = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
31447
31752
  __proto__: null,
31448
31753
  default: AppLoader
31449
31754
  }, Symbol.toStringTag, { value: "Module" }));
31450
31755
  export {
31451
- getDefaultExportFromCjs as $,
31756
+ Icon as $,
31452
31757
  AddStateExampleInputSchema as A,
31453
31758
  SetModuleDescriptionInputSchema as B,
31454
31759
  SetModuleNameInputSchema as C,
@@ -31475,49 +31780,49 @@ export {
31475
31780
  baseLoadFromFile as X,
31476
31781
  baseLoadFromInput as Y,
31477
31782
  pascalCase as Z,
31478
- Icon as _,
31783
+ logger$1 as _,
31479
31784
  createReducer as a,
31480
- DELETE as a$,
31481
- LOCAL as a0,
31482
- commonjsGlobal as a1,
31483
- PUBLIC as a2,
31484
- SWITCHBOARD as a3,
31485
- locationInfoByLocation as a4,
31486
- sharingTypeOptions as a5,
31487
- objectType as a6,
31488
- recordType as a7,
31489
- stringType as a8,
31490
- capitalCase as a9,
31491
- moveNode as aA,
31492
- generateNodesCopy as aB,
31493
- copyNode as aC,
31494
- createState as aD,
31495
- setDriveName as aE,
31496
- setAvailableOffline as aF,
31497
- setSharingType as aG,
31498
- SynchronizationUnitNotFoundError as aH,
31499
- removeTrigger as aI,
31500
- generateUUID as aJ,
31501
- PullResponderTransmitter as aK,
31502
- addTrigger as aL,
31503
- ReadDriveNotFoundError as aM,
31504
- openUrl as aN,
31505
- getNodeOptions as aO,
31506
- DRIVE as aP,
31507
- FOLDER as aQ,
31508
- requestPublicDrive as aR,
31509
- serviceWorkerManager as aS,
31510
- packageJson as aT,
31511
- t as aU,
31512
- gql as aV,
31513
- request as aW,
31514
- getDimensions as aX,
31515
- READ as aY,
31516
- nodeOptionsMap as aZ,
31517
- defaultFileOptions as a_,
31518
- CLOUD as aa,
31519
- createZip as ab,
31520
- logger$1 as ac,
31785
+ invariant as a$,
31786
+ getDefaultExportFromCjs as a0,
31787
+ LOCAL as a1,
31788
+ commonjsGlobal as a2,
31789
+ PUBLIC as a3,
31790
+ SWITCHBOARD as a4,
31791
+ locationInfoByLocation as a5,
31792
+ sharingTypeOptions as a6,
31793
+ objectType as a7,
31794
+ recordType as a8,
31795
+ stringType as a9,
31796
+ updateNode as aA,
31797
+ FILE as aB,
31798
+ moveNode as aC,
31799
+ generateNodesCopy as aD,
31800
+ copyNode as aE,
31801
+ createState as aF,
31802
+ setDriveName as aG,
31803
+ setAvailableOffline as aH,
31804
+ setSharingType as aI,
31805
+ SynchronizationUnitNotFoundError as aJ,
31806
+ removeTrigger as aK,
31807
+ PullResponderTransmitter as aL,
31808
+ addTrigger as aM,
31809
+ ReadDriveNotFoundError as aN,
31810
+ openUrl as aO,
31811
+ getNodeOptions as aP,
31812
+ DRIVE as aQ,
31813
+ FOLDER as aR,
31814
+ requestPublicDrive as aS,
31815
+ serviceWorkerManager as aT,
31816
+ packageJson as aU,
31817
+ t as aV,
31818
+ gql as aW,
31819
+ request as aX,
31820
+ inspect as aY,
31821
+ GraphQLError as aZ,
31822
+ getNamedType as a_,
31823
+ capitalCase as aa,
31824
+ CLOUD as ab,
31825
+ createZip as ac,
31521
31826
  LZString as ad,
31522
31827
  buildSignedOperation as ae,
31523
31828
  getI18n as af,
@@ -31525,98 +31830,98 @@ export {
31525
31830
  connectConfig as ah,
31526
31831
  hashDocumentStateForScope as ai,
31527
31832
  getAugmentedNamespace as aj,
31528
- setErrorHandler as ak,
31529
- driveDocumentModelModule as al,
31530
- createBrowserDocumentDriveServer as am,
31531
- hashKey as an,
31532
- childLogger as ao,
31533
- reducer as ap,
31534
- isDocumentDrive as aq,
31535
- generateAddNodeAction as ar,
31536
- isFileNode as as,
31537
- uploadDocumentOperations as at,
31538
- updateFile as au,
31539
- addFolder as av,
31540
- isFolderNode as aw,
31541
- deleteNode as ax,
31542
- updateNode as ay,
31543
- FILE as az,
31833
+ childLogger as ak,
31834
+ process as al,
31835
+ setErrorHandler as am,
31836
+ driveDocumentModelModule as an,
31837
+ createBrowserStorage as ao,
31838
+ createBrowserDocumentDriveServer as ap,
31839
+ generateId as aq,
31840
+ reducer as ar,
31841
+ isDocumentDrive as as,
31842
+ generateAddNodeAction as at,
31843
+ isFileNode as au,
31844
+ uploadDocumentOperations as av,
31845
+ updateFile as aw,
31846
+ addFolder as ax,
31847
+ isFolderNode as ay,
31848
+ deleteNode as az,
31544
31849
  SetStateSchemaInputSchema as b,
31545
- GraphQLFloat as b$,
31546
- RENAME as b0,
31547
- WRITE as b1,
31548
- DUPLICATE as b2,
31549
- defaultFolderOptions as b3,
31550
- garbageCollect as b4,
31551
- sortOperations as b5,
31552
- UI_NODE as b6,
31553
- generateId as b7,
31554
- undo as b8,
31555
- redo as b9,
31556
- isListType as bA,
31557
- snakeCase as bB,
31558
- constantCase as bC,
31559
- isAbstractType as bD,
31560
- BREAK as bE,
31561
- GraphQLInputObjectType as bF,
31562
- GraphQLList as bG,
31563
- GraphQLEnumType as bH,
31564
- GraphQLObjectType as bI,
31565
- GraphQLInterfaceType as bJ,
31566
- SchemaMetaFieldDef as bK,
31567
- TypeMetaFieldDef as bL,
31568
- TypeNameMetaFieldDef as bM,
31569
- isCompositeType as bN,
31570
- isOutputType as bO,
31571
- isInputType as bP,
31572
- GraphQLBoolean as bQ,
31573
- assertAbstractType as bR,
31574
- doTypesOverlap as bS,
31575
- DirectiveLocation as bT,
31576
- specifiedRules as bU,
31577
- NoUnusedFragmentsRule as bV,
31578
- ExecutableDefinitionsRule as bW,
31579
- validate as bX,
31580
- validateSchema as bY,
31581
- GraphQLID as bZ,
31582
- GraphQLString as b_,
31583
- useDocumentDispatch as ba,
31584
- inspect as bb,
31585
- GraphQLError as bc,
31586
- getNamedType as bd,
31587
- invariant as be,
31588
- isInputObjectType as bf,
31589
- isScalarType as bg,
31590
- isObjectType as bh,
31591
- isInterfaceType as bi,
31592
- isUnionType as bj,
31593
- isEnumType as bk,
31594
- print as bl,
31595
- isPrintableAsBlockString as bm,
31596
- Kind as bn,
31597
- astFromValue as bo,
31598
- DEFAULT_DEPRECATION_REASON as bp,
31599
- isSpecifiedDirective as bq,
31600
- isSpecifiedScalarType as br,
31601
- isIntrospectionType as bs,
31602
- z as bt,
31603
- GraphQLScalarType as bu,
31604
- parse as bv,
31605
- visit as bw,
31606
- buildASTSchema as bx,
31607
- extendSchema as by,
31608
- getNullableType as bz,
31850
+ DELETE as b$,
31851
+ isInputObjectType as b0,
31852
+ isScalarType as b1,
31853
+ isObjectType as b2,
31854
+ isInterfaceType as b3,
31855
+ isUnionType as b4,
31856
+ isEnumType as b5,
31857
+ print as b6,
31858
+ isPrintableAsBlockString as b7,
31859
+ Kind as b8,
31860
+ astFromValue as b9,
31861
+ isInputType as bA,
31862
+ GraphQLBoolean as bB,
31863
+ assertAbstractType as bC,
31864
+ doTypesOverlap as bD,
31865
+ DirectiveLocation as bE,
31866
+ specifiedRules as bF,
31867
+ NoUnusedFragmentsRule as bG,
31868
+ ExecutableDefinitionsRule as bH,
31869
+ validate as bI,
31870
+ validateSchema as bJ,
31871
+ GraphQLID as bK,
31872
+ GraphQLString as bL,
31873
+ GraphQLFloat as bM,
31874
+ GraphQLInt as bN,
31875
+ GraphQLDirective as bO,
31876
+ GraphQLUnionType as bP,
31877
+ isNonNullType as bQ,
31878
+ GraphQLNonNull as bR,
31879
+ isNamedType as bS,
31880
+ isLeafType as bT,
31881
+ GraphQLSchema as bU,
31882
+ buildSchema as bV,
31883
+ sentenceCase as bW,
31884
+ getDimensions as bX,
31885
+ READ as bY,
31886
+ nodeOptionsMap as bZ,
31887
+ defaultFileOptions as b_,
31888
+ DEFAULT_DEPRECATION_REASON as ba,
31889
+ isSpecifiedDirective as bb,
31890
+ isSpecifiedScalarType as bc,
31891
+ isIntrospectionType as bd,
31892
+ z as be,
31893
+ GraphQLScalarType as bf,
31894
+ parse as bg,
31895
+ visit as bh,
31896
+ buildASTSchema as bi,
31897
+ extendSchema as bj,
31898
+ getNullableType as bk,
31899
+ isListType as bl,
31900
+ snakeCase as bm,
31901
+ constantCase as bn,
31902
+ isAbstractType as bo,
31903
+ BREAK as bp,
31904
+ GraphQLInputObjectType as bq,
31905
+ GraphQLList as br,
31906
+ GraphQLEnumType as bs,
31907
+ GraphQLObjectType as bt,
31908
+ GraphQLInterfaceType as bu,
31909
+ SchemaMetaFieldDef as bv,
31910
+ TypeMetaFieldDef as bw,
31911
+ TypeNameMetaFieldDef as bx,
31912
+ isCompositeType as by,
31913
+ isOutputType as bz,
31609
31914
  createAction as c,
31610
- GraphQLInt as c0,
31611
- GraphQLDirective as c1,
31612
- GraphQLUnionType as c2,
31613
- isNonNullType as c3,
31614
- GraphQLNonNull as c4,
31615
- isNamedType as c5,
31616
- isLeafType as c6,
31617
- GraphQLSchema as c7,
31618
- buildSchema as c8,
31619
- sentenceCase as c9,
31915
+ RENAME as c0,
31916
+ WRITE as c1,
31917
+ DUPLICATE as c2,
31918
+ defaultFolderOptions as c3,
31919
+ garbageCollect as c4,
31920
+ sortOperations as c5,
31921
+ UI_NODE as c6,
31922
+ undo as c7,
31923
+ redo as c8,
31924
+ useDocumentDispatch as c9,
31620
31925
  appLoader as ca,
31621
31926
  ReorderModuleOperationsInputSchema as d,
31622
31927
  DeleteOperationInputSchema as e,
@@ -31642,3 +31947,4 @@ export {
31642
31947
  ReorderModulesInputSchema as y,
31643
31948
  DeleteModuleInputSchema as z
31644
31949
  };
31950
+ //# sourceMappingURL=app-loader-DXPAMQYN.js.map