@powerhousedao/connect 1.0.22-staging.0 → 1.0.23-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-CDOWlDp2.css → app-D5gNm0Gn.css} +186 -27
  3. package/dist/assets/{app-CpNI4xTA.js → app-DCtCV8Sz.js} +10895 -8420
  4. package/dist/assets/app-DCtCV8Sz.js.map +1 -0
  5. package/dist/assets/{app-loader-DADQ7rok.js → app-loader-BAEWEx-m.js} +733 -403
  6. package/dist/assets/app-loader-BAEWEx-m.js.map +1 -0
  7. package/dist/assets/{app-loader-DiF8OhX3.css → app-loader-NDVZu4bS.css} +162 -34
  8. package/dist/assets/browser-BeUBqndM.js +27224 -0
  9. package/dist/assets/browser-BeUBqndM.js.map +1 -0
  10. package/dist/assets/{ccip-DATfa3z8.js → ccip-CMd6tRtn.js} +5 -4
  11. package/dist/assets/ccip-CMd6tRtn.js.map +1 -0
  12. package/dist/assets/{content-CkbffPFR.js → content-DsWyfJvF.js} +1105 -463
  13. package/dist/assets/content-DsWyfJvF.js.map +1 -0
  14. package/dist/assets/{index-GuaHVlAM.js → index-ADsM2QWh.js} +23 -171
  15. package/dist/assets/index-ADsM2QWh.js.map +1 -0
  16. package/dist/assets/{index-BFdIunuJ.js → index-CCDoOj0e.js} +4 -3
  17. package/dist/assets/index-CCDoOj0e.js.map +1 -0
  18. package/dist/assets/{index-CEFMQRxw.js → index-CSN0Iyem.js} +554 -750
  19. package/dist/assets/index-CSN0Iyem.js.map +1 -0
  20. package/dist/assets/index-Dl8ZqWS0.js +208 -0
  21. package/dist/assets/index-Dl8ZqWS0.js.map +1 -0
  22. package/dist/assets/{main.Dqmo52dd.js → main.DW9UCmAK.js} +2 -1
  23. package/dist/assets/main.DW9UCmAK.js.map +1 -0
  24. package/dist/assets/reactor-analytics-hlzA2WG5.js +42 -0
  25. package/dist/assets/reactor-analytics-hlzA2WG5.js.map +1 -0
  26. package/dist/assets/router-DJRPUFad.js +1585 -0
  27. package/dist/assets/router-DJRPUFad.js.map +1 -0
  28. package/dist/assets/{style-Ce3V83BE.css → style-CdxGKc2g.css} +39 -25
  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 +17 -10
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/app-CpNI4xTA.js","assets/main.Dqmo52dd.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-DCtCV8Sz.js","assets/main.DW9UCmAK.js","assets/app-D5gNm0Gn.css"])))=>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, _getDocumentModelModule, _drives, _ReadModeService_instances, parseGraphQLErrors_fn, fetchDrive_fn, _a, _ServiceWorkerManager_instances, handleServiceWorkerMessage_fn, handleServiceWorker_fn;
14
- import { _ as __vitePreload } from "./main.Dqmo52dd.js";
14
+ import { _ as __vitePreload } from "./main.DW9UCmAK.js";
15
15
  import { jsx, jsxs } from "react/jsx-runtime";
16
16
  import { useState, useEffect, Suspense, lazy } from "react";
17
17
  function _mergeNamespaces(n, m) {
@@ -97,14 +97,51 @@ const trimResultingState = (document) => {
97
97
  });
98
98
  return { ...document, operations: { global: global2, local } };
99
99
  };
100
+ class CacheStorageManager {
101
+ constructor(cache) {
102
+ __publicField(this, "index", 0);
103
+ __publicField(this, "cache");
104
+ this.cache = cache;
105
+ }
106
+ createStorage() {
107
+ const index = this.index;
108
+ this.index += 1;
109
+ function buildKey(key) {
110
+ return `${index}-${key}`;
111
+ }
112
+ const storage = {
113
+ get: (key) => {
114
+ return this.cache.get(buildKey(key));
115
+ },
116
+ set: (key, value) => {
117
+ this.cache.set(buildKey(key), value);
118
+ return storage;
119
+ },
120
+ delete: (key) => {
121
+ return this.cache.delete(buildKey(key));
122
+ },
123
+ clear: () => {
124
+ this.cache.clear();
125
+ }
126
+ };
127
+ return storage;
128
+ }
129
+ }
100
130
  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());
131
+ constructor(cache = /* @__PURE__ */ new Map()) {
132
+ __publicField(this, "cache");
133
+ __publicField(this, "cacheStorageManager");
134
+ __publicField(this, "idToDocument");
135
+ __publicField(this, "idToDrive");
136
+ __publicField(this, "slugToDriveId");
137
+ this.cache = cache;
138
+ this.cacheStorageManager = new CacheStorageManager(cache);
139
+ this.idToDocument = this.cacheStorageManager.createStorage();
140
+ this.idToDrive = this.cacheStorageManager.createStorage();
141
+ this.slugToDriveId = this.cacheStorageManager.createStorage();
105
142
  }
106
143
  clear() {
107
- this.idTodocument.clear();
144
+ this.idToDocument.clear();
108
145
  this.idToDrive.clear();
109
146
  this.slugToDriveId.clear();
110
147
  }
@@ -113,13 +150,13 @@ class InMemoryCache {
113
150
  /////////////////////////////////////////////////////////////////////////////
114
151
  async setDocument(documentId, document) {
115
152
  const doc = trimResultingState(document);
116
- this.idTodocument.set(documentId, doc);
153
+ this.idToDocument.set(documentId, doc);
117
154
  }
118
155
  async getDocument(documentId) {
119
- return this.idTodocument.get(documentId);
156
+ return this.idToDocument.get(documentId);
120
157
  }
121
158
  async deleteDocument(documentId) {
122
- return this.idTodocument.delete(documentId);
159
+ return this.idToDocument.delete(documentId);
123
160
  }
124
161
  async setDrive(driveId, drive) {
125
162
  const doc = trimResultingState(drive);
@@ -133,14 +170,14 @@ class InMemoryCache {
133
170
  if (!drive) {
134
171
  return false;
135
172
  }
136
- const slug = drive.state.global.slug;
173
+ const slug = drive.slug.length > 0 ? drive.slug : driveId;
137
174
  if (slug) {
138
175
  this.slugToDriveId.delete(slug);
139
176
  }
140
177
  return this.idToDrive.delete(driveId);
141
178
  }
142
179
  async setDriveBySlug(slug, drive) {
143
- const driveId = drive.state.global.id;
180
+ const driveId = drive.id;
144
181
  this.slugToDriveId.set(slug, driveId);
145
182
  this.setDrive(driveId, drive);
146
183
  }
@@ -388,8 +425,8 @@ function isBE() {
388
425
  return buf[0] === 254;
389
426
  }
390
427
  const FileSystemError = new Error("File system not available.");
391
- function generateUUID$1() {
392
- if (!crypto.randomUUID) {
428
+ function generateUUID() {
429
+ if (typeof crypto === "undefined" || !crypto.randomUUID) {
393
430
  throw new Error("generateUUID is not available in unsecure contexts.");
394
431
  }
395
432
  return crypto.randomUUID();
@@ -6777,7 +6814,7 @@ function loadStateOperation(oldDocument, newDocument) {
6777
6814
  };
6778
6815
  }
6779
6816
  function generateId(method) {
6780
- return generateUUID$1();
6817
+ return generateUUID();
6781
6818
  }
6782
6819
  function getUnixTimestamp(date) {
6783
6820
  return (new Date(date).getTime() / 1e3).toFixed(0);
@@ -6940,6 +6977,7 @@ function processSkipOperation(document, action, customReducer, skipValue, reuseO
6940
6977
  scopeState = resultingStateParser(lastRemainingOperation.resultingState);
6941
6978
  } else {
6942
6979
  const { state } = replayOperations(document.initialState, documentOperations, customReducer, void 0, void 0, void 0, void 0, {
6980
+ reuseHash: true,
6943
6981
  reuseOperationResultingState,
6944
6982
  operationResultingStateParser: resultingStateParser
6945
6983
  });
@@ -6966,6 +7004,7 @@ function processUndoOperation(document, scope, customReducer, reuseOperationResu
6966
7004
  const clearedOperations = [...documentOperations[scope]];
6967
7005
  const diff = diffOperations(garbageCollect(sortedOperations), clearedOperations);
6968
7006
  const doc = replayOperations(document.initialState, documentOperations, customReducer, void 0, void 0, void 0, void 0, {
7007
+ reuseHash: true,
6969
7008
  reuseOperationResultingState,
6970
7009
  operationResultingStateParser: resultingStateParser
6971
7010
  });
@@ -7115,7 +7154,10 @@ function createReducer(stateReducer2, documentReducer = baseReducer) {
7115
7154
  return reducer2;
7116
7155
  }
7117
7156
  function baseCreateExtendedState(initialState, createState2) {
7157
+ const id = generateUUID();
7118
7158
  return {
7159
+ id,
7160
+ slug: id,
7119
7161
  name: "",
7120
7162
  documentType: "",
7121
7163
  revision: {
@@ -7144,10 +7186,6 @@ function baseCreateDocument(initialState, createState2) {
7144
7186
  function hashDocumentStateForScope(document, scope = "global") {
7145
7187
  return hash(cjsModule(document.state[scope] || ""));
7146
7188
  }
7147
- const hashKey = (date, randomLimit = 1e3) => {
7148
- const random = Math.random() * randomLimit;
7149
- return hash(`${(/* @__PURE__ */ new Date()).toISOString()}${random}`);
7150
- };
7151
7189
  function getDocumentLastModified(document) {
7152
7190
  var _a2;
7153
7191
  const sortedOperations = sortOperations(Object.values(document.operations).flat());
@@ -7196,6 +7234,9 @@ function replayDocument(initialState, operations, reducer2, dispatch, header, sk
7196
7234
  operationsToReplay.push(...Object.values(operations).flat());
7197
7235
  }
7198
7236
  const document = baseCreateDocument(documentState);
7237
+ if (header == null ? void 0 : header.slug) {
7238
+ document.slug = header.slug;
7239
+ }
7199
7240
  document.initialState = initialState;
7200
7241
  document.operations = initialOperations;
7201
7242
  let result = document;
@@ -7534,21 +7575,186 @@ function UpdateStateExampleInputSchema() {
7534
7575
  newExample: z.string()
7535
7576
  });
7536
7577
  }
7578
+ var dist = {};
7579
+ var hasRequiredDist;
7580
+ function requireDist() {
7581
+ if (hasRequiredDist) return dist;
7582
+ hasRequiredDist = 1;
7583
+ (function(exports) {
7584
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
7585
+ function getDefaultExportFromCjs2(x) {
7586
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
7587
+ }
7588
+ var browser = { exports: {} };
7589
+ var process2 = browser.exports = {};
7590
+ var cachedSetTimeout;
7591
+ var cachedClearTimeout;
7592
+ function defaultSetTimout() {
7593
+ throw new Error("setTimeout has not been defined");
7594
+ }
7595
+ function defaultClearTimeout() {
7596
+ throw new Error("clearTimeout has not been defined");
7597
+ }
7598
+ (function() {
7599
+ try {
7600
+ if (typeof setTimeout === "function") {
7601
+ cachedSetTimeout = setTimeout;
7602
+ } else {
7603
+ cachedSetTimeout = defaultSetTimout;
7604
+ }
7605
+ } catch (e) {
7606
+ cachedSetTimeout = defaultSetTimout;
7607
+ }
7608
+ try {
7609
+ if (typeof clearTimeout === "function") {
7610
+ cachedClearTimeout = clearTimeout;
7611
+ } else {
7612
+ cachedClearTimeout = defaultClearTimeout;
7613
+ }
7614
+ } catch (e) {
7615
+ cachedClearTimeout = defaultClearTimeout;
7616
+ }
7617
+ })();
7618
+ function runTimeout(fun) {
7619
+ if (cachedSetTimeout === setTimeout) {
7620
+ return setTimeout(fun, 0);
7621
+ }
7622
+ if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
7623
+ cachedSetTimeout = setTimeout;
7624
+ return setTimeout(fun, 0);
7625
+ }
7626
+ try {
7627
+ return cachedSetTimeout(fun, 0);
7628
+ } catch (e) {
7629
+ try {
7630
+ return cachedSetTimeout.call(null, fun, 0);
7631
+ } catch (e2) {
7632
+ return cachedSetTimeout.call(this, fun, 0);
7633
+ }
7634
+ }
7635
+ }
7636
+ function runClearTimeout(marker) {
7637
+ if (cachedClearTimeout === clearTimeout) {
7638
+ return clearTimeout(marker);
7639
+ }
7640
+ if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
7641
+ cachedClearTimeout = clearTimeout;
7642
+ return clearTimeout(marker);
7643
+ }
7644
+ try {
7645
+ return cachedClearTimeout(marker);
7646
+ } catch (e) {
7647
+ try {
7648
+ return cachedClearTimeout.call(null, marker);
7649
+ } catch (e2) {
7650
+ return cachedClearTimeout.call(this, marker);
7651
+ }
7652
+ }
7653
+ }
7654
+ var queue = [];
7655
+ var draining = false;
7656
+ var currentQueue;
7657
+ var queueIndex = -1;
7658
+ function cleanUpNextTick() {
7659
+ if (!draining || !currentQueue) {
7660
+ return;
7661
+ }
7662
+ draining = false;
7663
+ if (currentQueue.length) {
7664
+ queue = currentQueue.concat(queue);
7665
+ } else {
7666
+ queueIndex = -1;
7667
+ }
7668
+ if (queue.length) {
7669
+ drainQueue();
7670
+ }
7671
+ }
7672
+ function drainQueue() {
7673
+ if (draining) {
7674
+ return;
7675
+ }
7676
+ var timeout = runTimeout(cleanUpNextTick);
7677
+ draining = true;
7678
+ var len = queue.length;
7679
+ while (len) {
7680
+ currentQueue = queue;
7681
+ queue = [];
7682
+ while (++queueIndex < len) {
7683
+ if (currentQueue) {
7684
+ currentQueue[queueIndex].run();
7685
+ }
7686
+ }
7687
+ queueIndex = -1;
7688
+ len = queue.length;
7689
+ }
7690
+ currentQueue = null;
7691
+ draining = false;
7692
+ runClearTimeout(timeout);
7693
+ }
7694
+ process2.nextTick = function(fun) {
7695
+ var args = new Array(arguments.length - 1);
7696
+ if (arguments.length > 1) {
7697
+ for (var i = 1; i < arguments.length; i++) {
7698
+ args[i - 1] = arguments[i];
7699
+ }
7700
+ }
7701
+ queue.push(new Item(fun, args));
7702
+ if (queue.length === 1 && !draining) {
7703
+ runTimeout(drainQueue);
7704
+ }
7705
+ };
7706
+ function Item(fun, array) {
7707
+ this.fun = fun;
7708
+ this.array = array;
7709
+ }
7710
+ Item.prototype.run = function() {
7711
+ this.fun.apply(null, this.array);
7712
+ };
7713
+ process2.title = "browser";
7714
+ process2.browser = true;
7715
+ process2.env = {};
7716
+ process2.argv = [];
7717
+ process2.version = "";
7718
+ process2.versions = {};
7719
+ function noop2() {
7720
+ }
7721
+ process2.on = noop2;
7722
+ process2.addListener = noop2;
7723
+ process2.once = noop2;
7724
+ process2.off = noop2;
7725
+ process2.removeListener = noop2;
7726
+ process2.removeAllListeners = noop2;
7727
+ process2.emit = noop2;
7728
+ process2.prependListener = noop2;
7729
+ process2.prependOnceListener = noop2;
7730
+ process2.listeners = function(name2) {
7731
+ return [];
7732
+ };
7733
+ process2.binding = function(name2) {
7734
+ throw new Error("process.binding is not supported");
7735
+ };
7736
+ process2.cwd = function() {
7737
+ return "/";
7738
+ };
7739
+ process2.chdir = function(dir) {
7740
+ throw new Error("process.chdir is not supported");
7741
+ };
7742
+ process2.umask = function() {
7743
+ return 0;
7744
+ };
7745
+ var browserExports = browser.exports;
7746
+ const process$1 = /* @__PURE__ */ getDefaultExportFromCjs2(browserExports);
7747
+ exports.default = process$1;
7748
+ exports.process = process$1;
7749
+ })(dist);
7750
+ return dist;
7751
+ }
7752
+ var distExports = requireDist();
7753
+ const process = /* @__PURE__ */ getDefaultExportFromCjs(distExports);
7537
7754
  function commonjsRequire(path) {
7538
7755
  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
7756
  }
7540
7757
  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
7758
  var hasRequiredJszip_min;
7553
7759
  function requireJszip_min() {
7554
7760
  if (hasRequiredJszip_min) return jszip_min.exports;
@@ -10323,8 +10529,10 @@ function validateOperations(operations) {
10323
10529
  }
10324
10530
  function createZip(document) {
10325
10531
  const zip = new JSZip();
10326
- const { name: name2, revision, documentType: documentType2, created, lastModified } = document;
10532
+ const { id, slug, name: name2, revision, documentType: documentType2, created, lastModified } = document;
10327
10533
  const header = {
10534
+ id,
10535
+ slug,
10328
10536
  name: name2,
10329
10537
  revision,
10330
10538
  documentType: documentType2,
@@ -10740,40 +10948,60 @@ const reducer$2 = {
10740
10948
  state.triggers = state.triggers.filter((trigger) => trigger.id !== action.input.triggerId);
10741
10949
  }
10742
10950
  };
10743
- const byteToHex = [];
10744
- for (let i = 0; i < 256; ++i) {
10745
- byteToHex.push((i + 256).toString(16).slice(1));
10951
+ class DocumentModelNotFoundError extends Error {
10952
+ constructor(id, cause) {
10953
+ super(`Document model "${id}" not found`, { cause });
10954
+ __publicField(this, "id");
10955
+ this.id = id;
10956
+ }
10957
+ }
10958
+ class OperationError extends Error {
10959
+ constructor(status, operation, message, cause) {
10960
+ super(message, { cause: cause ?? operation });
10961
+ __publicField(this, "status");
10962
+ __publicField(this, "operation");
10963
+ this.status = status;
10964
+ this.operation = operation;
10965
+ }
10746
10966
  }
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();
10967
+ class ConflictOperationError extends OperationError {
10968
+ constructor(existingOperation, newOperation) {
10969
+ super("CONFLICT", newOperation, `Conflicting operation on index ${newOperation.index}`, { existingOperation, newOperation });
10970
+ }
10749
10971
  }
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);
10972
+ class DocumentIdValidationError extends Error {
10973
+ constructor(documentId) {
10974
+ super(`Invalid document id: ${documentId}`);
10758
10975
  }
10759
- return getRandomValues(rnds8);
10760
10976
  }
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();
10977
+ class DocumentSlugValidationError extends Error {
10978
+ constructor(slug) {
10979
+ super(`Invalid slug: ${slug}`);
10767
10980
  }
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");
10981
+ }
10982
+ class DocumentAlreadyExistsError extends Error {
10983
+ constructor(documentId) {
10984
+ super(`Document with id ${documentId} uses id or slug that already exists`);
10985
+ __publicField(this, "documentId");
10986
+ this.documentId = documentId;
10772
10987
  }
10773
- rnds[6] = rnds[6] & 15 | 64;
10774
- rnds[8] = rnds[8] & 63 | 128;
10775
- return unsafeStringify(rnds);
10776
10988
  }
10989
+ class DocumentNotFoundError extends Error {
10990
+ constructor(documentId) {
10991
+ super(`Document with id ${documentId} not found`);
10992
+ __publicField(this, "documentId");
10993
+ this.documentId = documentId;
10994
+ }
10995
+ }
10996
+ class SynchronizationUnitNotFoundError extends Error {
10997
+ constructor(message, syncUnitId) {
10998
+ super(message);
10999
+ __publicField(this, "syncUnitId");
11000
+ this.syncUnitId = syncUnitId;
11001
+ }
11002
+ }
11003
+ const isValidDocumentId = (id) => /^[a-zA-Z0-9_-]+$/.test(id);
11004
+ const isValidSlug = (slug) => /^[a-zA-Z0-9_-]+$/.test(slug);
10777
11005
  function isFileNode(node) {
10778
11006
  return node.kind === "file";
10779
11007
  }
@@ -10837,7 +11065,7 @@ function generateNodesCopy(src, idGenerator, nodes) {
10837
11065
  function generateSynchronizationUnitId(nodes) {
10838
11066
  let syncId = "";
10839
11067
  while (!syncId || nodes.find((node) => isFileNode(node) && node.synchronizationUnits.find((unit) => unit.syncId === syncId))) {
10840
- syncId = v4();
11068
+ syncId = generateId();
10841
11069
  }
10842
11070
  return syncId;
10843
11071
  }
@@ -10915,6 +11143,9 @@ const reducer$1 = {
10915
11143
  if (state.nodes.find((node) => node.id === action.input.id)) {
10916
11144
  throw new Error(`Node with id ${action.input.id} already exists!`);
10917
11145
  }
11146
+ if (!isValidDocumentId(action.input.id)) {
11147
+ throw new DocumentIdValidationError(action.input.id);
11148
+ }
10918
11149
  const name2 = handleTargetNameCollisions({
10919
11150
  nodes: state.nodes,
10920
11151
  srcName: action.input.name,
@@ -11007,6 +11238,9 @@ const reducer$1 = {
11007
11238
  if (!node) {
11008
11239
  throw new Error(`Node with id ${action.input.srcId} not found`);
11009
11240
  }
11241
+ if (!isValidDocumentId(action.input.targetId)) {
11242
+ throw new DocumentIdValidationError(action.input.targetId);
11243
+ }
11010
11244
  const duplicatedNode = state.nodes.find((node2) => node2.id === action.input.targetId);
11011
11245
  if (duplicatedNode) {
11012
11246
  throw new Error(`Node with id ${action.input.targetId} already exists`);
@@ -11018,8 +11252,9 @@ const reducer$1 = {
11018
11252
  });
11019
11253
  const newNode = {
11020
11254
  ...node,
11021
- name: name2,
11022
11255
  id: action.input.targetId,
11256
+ slug: action.input.targetId,
11257
+ name: name2,
11023
11258
  parentFolder: action.input.targetParentFolder || null
11024
11259
  };
11025
11260
  const isFile = isFileNode(newNode);
@@ -11151,11 +11386,9 @@ const fileExtension = "phdd";
11151
11386
  const documentType = "powerhouse/document-drive";
11152
11387
  const documentModelName = "DocumentDrive";
11153
11388
  const initialGlobalState = {
11154
- id: "",
11155
11389
  name: "",
11156
11390
  nodes: [],
11157
- icon: null,
11158
- slug: null
11391
+ icon: null
11159
11392
  };
11160
11393
  const initialLocalState = {
11161
11394
  listeners: [],
@@ -11416,8 +11649,7 @@ const driveDocumentModelModule = {
11416
11649
  actions: { ...creators, ...actions },
11417
11650
  utils: { ...documentModelUtils, ...customUtils }
11418
11651
  };
11419
- var define_process_env_default = {};
11420
- const LEVELS = {
11652
+ const LogLevels = {
11421
11653
  verbose: 1,
11422
11654
  debug: 2,
11423
11655
  info: 3,
@@ -11425,6 +11657,10 @@ const LEVELS = {
11425
11657
  error: 5,
11426
11658
  silent: 6
11427
11659
  };
11660
+ function isLogLevel(value) {
11661
+ return typeof value === "string" && value in LogLevels;
11662
+ }
11663
+ var define_process_env_default = {};
11428
11664
  class ConsoleLogger {
11429
11665
  constructor(tags, errorHandler2) {
11430
11666
  __privateAdd(this, _ConsoleLogger_instances);
@@ -11444,6 +11680,10 @@ class ConsoleLogger {
11444
11680
  return __privateGet(this, _levelString);
11445
11681
  }
11446
11682
  set level(level) {
11683
+ if (level !== "env" && !isLogLevel(level)) {
11684
+ throw new Error(`Invalid log level: ${JSON.stringify(level)}.
11685
+ Must be one of ${Object.keys(LogLevels).concat(["env"]).join(", ")}.`);
11686
+ }
11447
11687
  __privateSet(this, _levelString, level);
11448
11688
  }
11449
11689
  get errorHandler() {
@@ -11456,31 +11696,31 @@ class ConsoleLogger {
11456
11696
  return this.debug(...data);
11457
11697
  }
11458
11698
  verbose(...data) {
11459
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.verbose) {
11699
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.verbose) {
11460
11700
  return;
11461
11701
  }
11462
11702
  return this.debug(...data);
11463
11703
  }
11464
11704
  debug(...data) {
11465
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.debug) {
11705
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.debug) {
11466
11706
  return;
11467
11707
  }
11468
11708
  return console.debug(...[...__privateGet(this, _tags), ...data]);
11469
11709
  }
11470
11710
  info(...data) {
11471
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.info) {
11711
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.info) {
11472
11712
  return;
11473
11713
  }
11474
11714
  return console.info(...[...__privateGet(this, _tags), ...data]);
11475
11715
  }
11476
11716
  warn(...data) {
11477
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.warn) {
11717
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.warn) {
11478
11718
  return;
11479
11719
  }
11480
11720
  return console.warn(...[...__privateGet(this, _tags), ...data]);
11481
11721
  }
11482
11722
  error(...data) {
11483
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.error) {
11723
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.error) {
11484
11724
  return;
11485
11725
  }
11486
11726
  if (__privateGet(this, _errorHandler)) {
@@ -11495,16 +11735,16 @@ _errorHandler = new WeakMap();
11495
11735
  _ConsoleLogger_instances = new WeakSet();
11496
11736
  levelValue_get = function() {
11497
11737
  if (__privateGet(this, _levelString) === "env") {
11498
- const envLevel = typeof process !== "undefined" ? define_process_env_default.LOG_LEVEL : void 0;
11738
+ const envLevel = typeof process !== "undefined" && "env" in process ? define_process_env_default.LOG_LEVEL : void 0;
11499
11739
  if (!envLevel) {
11500
- return LEVELS.debug;
11740
+ return LogLevels.debug;
11501
11741
  }
11502
- if (!(envLevel in LEVELS)) {
11503
- return LEVELS.debug;
11742
+ if (!(envLevel in LogLevels)) {
11743
+ return LogLevels.debug;
11504
11744
  }
11505
- return LEVELS[envLevel];
11745
+ return LogLevels[envLevel];
11506
11746
  }
11507
- return LEVELS[__privateGet(this, _levelString)];
11747
+ return LogLevels[__privateGet(this, _levelString)];
11508
11748
  };
11509
11749
  const loggerInstance = new ConsoleLogger();
11510
11750
  let logLevel = "env";
@@ -11526,48 +11766,6 @@ const childLogger = (tags) => {
11526
11766
  logger2.errorHandler = errorHandler;
11527
11767
  return logger2;
11528
11768
  };
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
11769
  var RunAsap;
11572
11770
  (function(RunAsap2) {
11573
11771
  RunAsap2.useMessageChannel = (() => {
@@ -11707,9 +11905,6 @@ function mergeOperations(currentOperations, newOperations) {
11707
11905
  return { ...acc, [curr.scope]: [...existingOperations, curr] };
11708
11906
  }, currentOperations);
11709
11907
  }
11710
- function generateUUID() {
11711
- return generateId();
11712
- }
11713
11908
  function isBefore(dateA, dateB) {
11714
11909
  return new Date(dateA) < new Date(dateB);
11715
11910
  }
@@ -11810,7 +12005,7 @@ class BaseQueueManager {
11810
12005
  if (!this.delegate) {
11811
12006
  throw new Error("No server delegate defined");
11812
12007
  }
11813
- const jobId = generateUUID();
12008
+ const jobId = generateId();
11814
12009
  const queue = this.getQueue(job.driveId, job.documentId);
11815
12010
  if (await queue.isDeleted()) {
11816
12011
  throw new Error("Queue is deleted");
@@ -22149,14 +22344,18 @@ async function fetchDocument(url, documentId, documentModelModule) {
22149
22344
  local: []
22150
22345
  },
22151
22346
  attachments: {},
22152
- initialState: utils.createExtendedState({
22153
- // TODO: getDocument should return all the initial state fields
22154
- created: result.document.created,
22155
- lastModified: result.document.created,
22156
- state: utils.createState({
22157
- global: result.document.initialState.state.global
22158
- })
22159
- }),
22347
+ initialState: {
22348
+ ...utils.createExtendedState({
22349
+ // TODO: getDocument should return all the initial state fields
22350
+ created: result.document.created,
22351
+ lastModified: result.document.created,
22352
+ state: utils.createState({
22353
+ global: result.document.initialState.state.global
22354
+ })
22355
+ }),
22356
+ id: result.document.id,
22357
+ slug: result.document.slug
22358
+ },
22160
22359
  clipboard: []
22161
22360
  } : null;
22162
22361
  return {
@@ -22211,7 +22410,13 @@ class ReadModeService {
22211
22410
  return document;
22212
22411
  }
22213
22412
  async addReadDrive(url, options) {
22214
- const { id } = (options == null ? void 0 : options.expectedDriveInfo) ?? await requestPublicDrive(url);
22413
+ let id;
22414
+ if (options == null ? void 0 : options.expectedDriveInfo) {
22415
+ id = options.expectedDriveInfo.id;
22416
+ } else {
22417
+ const drive = await requestPublicDrive(url);
22418
+ id = drive.id;
22419
+ }
22215
22420
  const result = await __privateMethod(this, _ReadModeService_instances, fetchDrive_fn).call(this, id, url);
22216
22421
  if (result instanceof Error) {
22217
22422
  throw result;
@@ -22234,7 +22439,7 @@ class ReadModeService {
22234
22439
  return Promise.resolve(result ? { ...result.drive, readContext: result.context } : new ReadDriveNotFoundError(id));
22235
22440
  }
22236
22441
  async getReadDriveBySlug(slug) {
22237
- const readDrive = [...__privateGet(this, _drives).values()].find(({ drive }) => drive.state.global.slug === slug);
22442
+ const readDrive = [...__privateGet(this, _drives).values()].find(({ drive }) => drive.slug === slug);
22238
22443
  return Promise.resolve(readDrive ? { ...readDrive.drive, readContext: readDrive.context } : new ReadDriveSlugNotFoundError(slug));
22239
22444
  }
22240
22445
  getReadDriveContext(id) {
@@ -22373,8 +22578,8 @@ class DefaultDrivesManager {
22373
22578
  }
22374
22579
  async preserveDrivesById(driveIdsToPreserve, drives, removeStrategy = "detach") {
22375
22580
  const getAllDrives = drives.map((driveId) => this.server.getDrive(driveId));
22376
- const drivesToRemove = (await Promise.all(getAllDrives)).filter((drive) => drive.state.local.listeners.length > 0 || drive.state.local.triggers.length > 0).filter((drive) => !driveIdsToPreserve.includes(drive.state.global.id));
22377
- const driveIds = drivesToRemove.map((drive) => drive.state.global.id);
22581
+ const drivesToRemove = (await Promise.all(getAllDrives)).filter((drive) => drive.state.local.listeners.length > 0 || drive.state.local.triggers.length > 0).filter((drive) => !driveIdsToPreserve.includes(drive.id));
22582
+ const driveIds = drivesToRemove.map((drive) => drive.id);
22378
22583
  if (removeStrategy === "detach") {
22379
22584
  await this.detachDrivesById(driveIds);
22380
22585
  } else {
@@ -22422,7 +22627,7 @@ class DefaultDrivesManager {
22422
22627
  case "remove-all": {
22423
22628
  const getDrives = driveids.map((driveId) => this.server.getDrive(driveId));
22424
22629
  const drives = await Promise.all(getDrives);
22425
- const drivesToRemove = drives.filter((drive) => drive.state.local.listeners.length > 0 || drive.state.local.triggers.length > 0).map((drive) => drive.state.global.id);
22630
+ const drivesToRemove = drives.filter((drive) => drive.state.local.listeners.length > 0 || drive.state.local.triggers.length > 0).map((drive) => drive.id);
22426
22631
  await this.removeDrivesById(drivesToRemove);
22427
22632
  break;
22428
22633
  }
@@ -22699,7 +22904,7 @@ class PullResponderTransmitter {
22699
22904
  static async executePull(driveId, trigger, onStrandUpdate, onError, onRevisions, onAcknowledge) {
22700
22905
  var _a2, _b;
22701
22906
  staticLogger().verbose(`executePull(driveId: ${driveId}), trigger:`, trigger);
22702
- staticLogger().info(`[SYNC DEBUG] PullResponderTransmitter.executePull starting for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
22907
+ staticLogger().debug(`[SYNC DEBUG] PullResponderTransmitter.executePull starting for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
22703
22908
  const { url } = trigger.data;
22704
22909
  let strands;
22705
22910
  let error;
@@ -22863,7 +23068,7 @@ class PullResponderTransmitter {
22863
23068
  };
22864
23069
  const listenerId = await PullResponderTransmitter.registerPullResponder(driveId, url, filter);
22865
23070
  const pullTrigger = {
22866
- id: generateUUID(),
23071
+ id: generateId(),
22867
23072
  type: "PullResponder",
22868
23073
  driveId,
22869
23074
  filter,
@@ -23296,7 +23501,7 @@ class BaseDocumentDriveServer {
23296
23501
  async _initializeDrive(driveId) {
23297
23502
  var _a2, _b, _c;
23298
23503
  const drive = await this.getDrive(driveId);
23299
- this.logger.verbose(`[SYNC DEBUG] Initializing drive ${driveId} with slug "${drive.state.global.slug}"`);
23504
+ this.logger.verbose(`[SYNC DEBUG] Initializing drive ${driveId} with slug "${drive.slug}"`);
23300
23505
  await this.synchronizationManager.initializeDriveSyncStatus(driveId, drive);
23301
23506
  if (this.shouldSyncRemoteDrive(drive)) {
23302
23507
  this.logger.verbose(`[SYNC DEBUG] Starting sync for remote drive ${driveId}`);
@@ -23310,7 +23515,7 @@ class BaseDocumentDriveServer {
23310
23515
  this.logger.verbose(`[SYNC DEBUG] Created SwitchboardPush transmitter with URL: ${zodListener.callInfo.data || "none"}`);
23311
23516
  await this.listenerManager.setListener(driveId, {
23312
23517
  block: zodListener.block,
23313
- driveId: drive.state.global.id,
23518
+ driveId: drive.id,
23314
23519
  filter: {
23315
23520
  branch: zodListener.filter.branch ?? [],
23316
23521
  documentId: zodListener.filter.documentId ?? [],
@@ -23372,25 +23577,24 @@ class BaseDocumentDriveServer {
23372
23577
  return [...this.documentModelModules];
23373
23578
  }
23374
23579
  async addDrive(input, preferredEditor) {
23375
- const id = input.global.id || generateUUID();
23376
- if (!id) {
23377
- throw new Error("Invalid Drive Id");
23378
- }
23379
- const drives = await this.legacyStorage.getDrives();
23380
- if (drives.includes(id)) {
23381
- throw new DocumentAlreadyExistsError(id);
23382
- }
23383
23580
  const document = createDocument({
23384
23581
  state: input
23385
23582
  });
23583
+ if (input.id && input.id.length > 0) {
23584
+ document.id = document.initialState.id = input.id;
23585
+ document.slug = document.initialState.slug = input.id;
23586
+ }
23587
+ if (input.slug && input.slug.length > 0) {
23588
+ document.slug = document.initialState.slug = input.slug;
23589
+ }
23386
23590
  document.meta = {
23387
23591
  preferredEditor
23388
23592
  };
23389
- await this.legacyStorage.createDrive(id, document);
23390
- if (input.global.slug) {
23391
- await this.cache.deleteDriveBySlug(input.global.slug);
23593
+ await this.documentStorage.create(document);
23594
+ if (input.slug && input.slug.length > 0) {
23595
+ await this.cache.deleteDriveBySlug(input.slug);
23392
23596
  }
23393
- await this._initializeDrive(id);
23597
+ await this._initializeDrive(document.id);
23394
23598
  this.eventEmitter.emit("driveAdded", document);
23395
23599
  return document;
23396
23600
  }
@@ -23402,10 +23606,10 @@ class BaseDocumentDriveServer {
23402
23606
  pullInterval
23403
23607
  });
23404
23608
  return await this.addDrive({
23609
+ id,
23610
+ slug,
23405
23611
  global: {
23406
- id,
23407
23612
  name: name2,
23408
- slug,
23409
23613
  icon: icon ?? null
23410
23614
  },
23411
23615
  local: {
@@ -23421,7 +23625,7 @@ class BaseDocumentDriveServer {
23421
23625
  this.stopSyncRemoteDrive(driveId),
23422
23626
  this.listenerManager.removeDrive(driveId),
23423
23627
  this.cache.deleteDrive(driveId),
23424
- this.legacyStorage.deleteDrive(driveId)
23628
+ this.documentStorage.delete(driveId)
23425
23629
  ]);
23426
23630
  this.eventEmitter.emit("driveDeleted", driveId);
23427
23631
  result.forEach((r) => {
@@ -23430,8 +23634,16 @@ class BaseDocumentDriveServer {
23430
23634
  }
23431
23635
  });
23432
23636
  }
23433
- getDrives() {
23434
- return this.legacyStorage.getDrives();
23637
+ // TODO: paginate
23638
+ async getDrives() {
23639
+ const drives = [];
23640
+ let cursor;
23641
+ do {
23642
+ const { documents, nextCursor } = await this.documentStorage.findByType("powerhouse/document-drive", 100, cursor);
23643
+ drives.push(...documents);
23644
+ cursor = nextCursor;
23645
+ } while (cursor);
23646
+ return drives;
23435
23647
  }
23436
23648
  async getDrive(driveId, options) {
23437
23649
  let document;
@@ -23505,8 +23717,13 @@ class BaseDocumentDriveServer {
23505
23717
  state = doc.state;
23506
23718
  }
23507
23719
  const document = input.document ?? this.getDocumentModelModule(input.documentType).utils.createDocument();
23720
+ if (input.id && input.id.length > 0) {
23721
+ document.id = input.id;
23722
+ }
23508
23723
  const documentStorage = {
23724
+ id: document.id,
23509
23725
  name: document.name,
23726
+ slug: document.slug,
23510
23727
  revision: document.revision,
23511
23728
  documentType: document.documentType,
23512
23729
  created: document.created,
@@ -23516,7 +23733,7 @@ class BaseDocumentDriveServer {
23516
23733
  clipboard: [],
23517
23734
  state: state ?? document.state
23518
23735
  };
23519
- await this.documentStorage.create(input.id, documentStorage);
23736
+ await this.documentStorage.create(documentStorage);
23520
23737
  try {
23521
23738
  await this.documentStorage.addChild(driveId, input.id);
23522
23739
  } catch (e) {
@@ -23655,12 +23872,18 @@ class BaseDocumentDriveServer {
23655
23872
  handler = () => this.deleteDocument(driveId, signal.input.id);
23656
23873
  break;
23657
23874
  case "COPY_CHILD_DOCUMENT":
23658
- handler = () => this.getDocument(driveId, signal.input.id).then((documentToCopy) => this.createDocument(driveId, {
23659
- id: signal.input.newId,
23660
- documentType: documentToCopy.documentType,
23661
- document: documentToCopy,
23662
- synchronizationUnits: signal.input.synchronizationUnits
23663
- }));
23875
+ handler = () => this.getDocument(driveId, signal.input.id).then((documentToCopy) => {
23876
+ const doc = {
23877
+ ...documentToCopy,
23878
+ slug: signal.input.newId
23879
+ };
23880
+ return this.createDocument(driveId, {
23881
+ id: signal.input.newId,
23882
+ documentType: documentToCopy.documentType,
23883
+ document: doc,
23884
+ synchronizationUnits: signal.input.synchronizationUnits
23885
+ });
23886
+ });
23664
23887
  break;
23665
23888
  }
23666
23889
  if (handler) {
@@ -23917,13 +24140,6 @@ class BaseDocumentDriveServer {
23917
24140
  addDriveOperation(driveId, operation, options) {
23918
24141
  return this.addDriveOperations(driveId, [operation], options);
23919
24142
  }
23920
- async clearStorage() {
23921
- var _a2, _b;
23922
- for (const drive of await this.getDrives()) {
23923
- await this.deleteDrive(drive);
23924
- }
23925
- await ((_b = (_a2 = this.legacyStorage).clearStorage) == null ? void 0 : _b.call(_a2));
23926
- }
23927
24143
  async _addDriveOperations(driveId, callback) {
23928
24144
  if (!this.legacyStorage.addDriveOperationsWithTransaction) {
23929
24145
  const documentStorage = await this.documentStorage.get(driveId);
@@ -24198,17 +24414,32 @@ class MemoryStorage {
24198
24414
  exists(documentId) {
24199
24415
  return Promise.resolve(!!this.documents[documentId]);
24200
24416
  }
24201
- // TODO: this should throw an error if the document already exists.
24202
- create(documentId, document) {
24203
- var _a2;
24417
+ create(document) {
24418
+ const documentId = document.id;
24419
+ if (!isValidDocumentId(documentId)) {
24420
+ throw new DocumentIdValidationError(documentId);
24421
+ }
24422
+ if (this.documents[documentId]) {
24423
+ throw new DocumentAlreadyExistsError(documentId);
24424
+ }
24425
+ const slug = document.slug.length > 0 ? document.slug : documentId;
24426
+ if (!isValidSlug(slug)) {
24427
+ throw new DocumentSlugValidationError(slug);
24428
+ }
24429
+ if (slug && this.slugToDocumentId[slug]) {
24430
+ throw new DocumentAlreadyExistsError(documentId);
24431
+ }
24432
+ document.slug = slug;
24204
24433
  this.documents[documentId] = document;
24205
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24206
24434
  if (slug) {
24207
24435
  if (this.slugToDocumentId[slug]) {
24208
- throw new Error(`Document with slug ${slug} already exists`);
24436
+ throw new DocumentAlreadyExistsError(documentId);
24209
24437
  }
24210
24438
  this.slugToDocumentId[slug] = documentId;
24211
24439
  }
24440
+ if (document.documentType === "powerhouse/document-drive") {
24441
+ this.updateDriveManifest(documentId, { documentIds: /* @__PURE__ */ new Set() });
24442
+ }
24212
24443
  return Promise.resolve();
24213
24444
  }
24214
24445
  get(documentId) {
@@ -24225,20 +24456,56 @@ class MemoryStorage {
24225
24456
  }
24226
24457
  return this.get(documentId);
24227
24458
  }
24459
+ async findByType(documentModelType, limit = 100, cursor) {
24460
+ const documentsAndIds = Object.entries(this.documents).filter(([_, doc]) => doc.documentType === documentModelType).map(([id, doc]) => ({
24461
+ id,
24462
+ document: doc
24463
+ }));
24464
+ documentsAndIds.sort((a, b) => {
24465
+ const aDate = new Date(a.document.created);
24466
+ const bDate = new Date(b.document.created);
24467
+ if (aDate.getTime() === bDate.getTime()) {
24468
+ const aId = a.id;
24469
+ const bId = b.id;
24470
+ return aId.localeCompare(bId);
24471
+ }
24472
+ return aDate.getTime() - bDate.getTime();
24473
+ });
24474
+ let startIndex = 0;
24475
+ if (cursor) {
24476
+ const index = documentsAndIds.findIndex(({ id }) => id === cursor);
24477
+ if (index !== -1) {
24478
+ startIndex = index;
24479
+ }
24480
+ }
24481
+ const endIndex = Math.min(startIndex + limit, documentsAndIds.length);
24482
+ let nextCursor;
24483
+ if (endIndex < documentsAndIds.length) {
24484
+ nextCursor = documentsAndIds[endIndex].id;
24485
+ }
24486
+ return {
24487
+ documents: documentsAndIds.slice(startIndex, endIndex).map(({ id }) => id),
24488
+ nextCursor
24489
+ };
24490
+ }
24228
24491
  async delete(documentId) {
24229
- var _a2;
24230
24492
  const document = this.documents[documentId];
24231
24493
  if (document) {
24232
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24494
+ const slug = document.slug.length > 0 ? document.slug : documentId;
24233
24495
  if (slug && this.slugToDocumentId[slug] === documentId) {
24234
24496
  delete this.slugToDocumentId[slug];
24235
24497
  }
24236
24498
  }
24237
- const drives = await this.getDrives();
24238
- for (const driveId of drives) {
24239
- if (driveId === documentId)
24240
- continue;
24241
- await this.removeChild(driveId, documentId);
24499
+ const parents = await this.getParents(documentId);
24500
+ for (const parent of parents) {
24501
+ await this.removeChild(parent, documentId);
24502
+ }
24503
+ const children = await this.getChildren(documentId);
24504
+ for (const child of children) {
24505
+ const childParents = await this.getParents(child);
24506
+ if (childParents.length === 1) {
24507
+ await this.delete(child);
24508
+ }
24242
24509
  }
24243
24510
  delete this.driveManifests[documentId];
24244
24511
  if (this.documents[documentId]) {
@@ -24272,14 +24539,26 @@ class MemoryStorage {
24272
24539
  const manifest = this.getManifest(parentId);
24273
24540
  return [...manifest.documentIds];
24274
24541
  }
24542
+ async getParents(childId) {
24543
+ const parents = [];
24544
+ for (const [driveId, manifest] of Object.entries(this.driveManifests)) {
24545
+ if (manifest.documentIds.has(childId)) {
24546
+ parents.push(driveId);
24547
+ }
24548
+ }
24549
+ return parents;
24550
+ }
24275
24551
  ////////////////////////////////
24276
- // IDriveStorage
24552
+ // IDocumentAdminStorage
24277
24553
  ////////////////////////////////
24278
- async clearStorage() {
24554
+ async clear() {
24279
24555
  this.documents = {};
24280
24556
  this.driveManifests = {};
24281
24557
  this.slugToDocumentId = {};
24282
24558
  }
24559
+ ////////////////////////////////
24560
+ // IDriveStorage
24561
+ ////////////////////////////////
24283
24562
  async addDocumentOperations(drive, id, operations, header) {
24284
24563
  const document = await this.get(id);
24285
24564
  if (!document) {
@@ -24292,13 +24571,6 @@ class MemoryStorage {
24292
24571
  operations: mergedOperations
24293
24572
  };
24294
24573
  }
24295
- async getDrives() {
24296
- return Object.keys(this.driveManifests);
24297
- }
24298
- async createDrive(id, drive) {
24299
- await this.create(id, drive);
24300
- this.updateDriveManifest(id, { documentIds: /* @__PURE__ */ new Set() });
24301
- }
24302
24574
  async addDriveOperations(id, operations, header) {
24303
24575
  const drive = await this.get(id);
24304
24576
  const mergedOperations = mergeOperations(drive.operations, operations);
@@ -24308,32 +24580,6 @@ class MemoryStorage {
24308
24580
  operations: mergedOperations
24309
24581
  };
24310
24582
  }
24311
- async deleteDrive(id) {
24312
- const manifest = this.getManifest(id);
24313
- const drives = await this.getDrives();
24314
- await Promise.all([...manifest.documentIds].map((docId) => {
24315
- var _a2;
24316
- for (const driveId of drives) {
24317
- if (driveId === id) {
24318
- continue;
24319
- }
24320
- const manifest2 = this.getManifest(driveId);
24321
- if (manifest2.documentIds.has(docId)) {
24322
- return;
24323
- }
24324
- }
24325
- const document = this.documents[docId];
24326
- if (document) {
24327
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24328
- if (slug && this.slugToDocumentId[slug] === docId) {
24329
- delete this.slugToDocumentId[slug];
24330
- }
24331
- }
24332
- delete this.documents[docId];
24333
- }));
24334
- delete this.driveManifests[id];
24335
- delete this.documents[id];
24336
- }
24337
24583
  async getSynchronizationUnitsRevision(units) {
24338
24584
  const results = await Promise.allSettled(units.map(async (unit) => {
24339
24585
  try {
@@ -25536,6 +25782,9 @@ function Syncing(props) {
25536
25782
  function Tabler(props) {
25537
25783
  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" })] });
25538
25784
  }
25785
+ function TimelineCaret(props) {
25786
+ 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" }) });
25787
+ }
25539
25788
  function Timeline(props) {
25540
25789
  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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" })] })] });
25541
25790
  }
@@ -25676,6 +25925,7 @@ const iconComponents = {
25676
25925
  Synced,
25677
25926
  Syncing,
25678
25927
  Tabler,
25928
+ TimelineCaret,
25679
25929
  Timeline,
25680
25930
  TrashFill,
25681
25931
  Trash,
@@ -25738,7 +25988,12 @@ const ADD_TRIGGER = "ADD_TRIGGER";
25738
25988
  const ADD_INVALID_TRIGGER = "ADD_INVALID_TRIGGER";
25739
25989
  const defaultDriveOptions = [NEW_FOLDER, RENAME, SETTINGS];
25740
25990
  const defaultFileOptions = [RENAME, DELETE, DUPLICATE];
25741
- const defaultFolderOptions = [RENAME, DELETE, DUPLICATE];
25991
+ const defaultFolderOptions = [
25992
+ NEW_FOLDER,
25993
+ RENAME,
25994
+ DELETE,
25995
+ DUPLICATE
25996
+ ];
25742
25997
  const debugNodeOptions = [
25743
25998
  ADD_TRIGGER,
25744
25999
  REMOVE_TRIGGER,
@@ -25818,20 +26073,22 @@ const nodeOptionsMap = {
25818
26073
  };
25819
26074
  const name = "@powerhousedao/connect";
25820
26075
  const productName = "Powerhouse-Connect";
25821
- const version$1 = "1.0.22-staging.0";
26076
+ const version$1 = "1.0.23-dev.1";
25822
26077
  const description = "Powerhouse Connect";
25823
26078
  const main = "./dist/index.html";
25824
26079
  const type = "module";
25825
26080
  const engines = { "node": ">=20.0.0" };
26081
+ const bin = { "connect": "serve ./dist" };
25826
26082
  const files$1 = ["dist", "nginx.conf", "nginx.sh", "scripts"];
25827
26083
  const license = "AGPL-3.0-only";
25828
26084
  const author = "acaldas@powerhouse.inc";
25829
26085
  const repository = { "type": "git", "url": "git+https://github.com/powerhouse-inc/document-model-electron.git" };
25830
26086
  const bugs = { "url": "https://github.com/powerhouse-inc/document-model-electron/issues" };
25831
26087
  const homepage = "https://github.com/powerhouse-inc/document-model-electron#readme";
25832
- 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" };
25833
- 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" };
26088
+ 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": "npm run clean && 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" };
26089
+ 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" };
25834
26090
  const optionalDependencies = { "@esbuild/linux-x64": "^0.21.4", "@rollup/rollup-linux-x64-musl": "4.14.3" };
26091
+ const dependencies = { "serve": "^14.2.4" };
25835
26092
  const packageJson = {
25836
26093
  name,
25837
26094
  productName,
@@ -25840,6 +26097,7 @@ const packageJson = {
25840
26097
  main,
25841
26098
  type,
25842
26099
  engines,
26100
+ bin,
25843
26101
  files: files$1,
25844
26102
  license,
25845
26103
  author,
@@ -25848,7 +26106,8 @@ const packageJson = {
25848
26106
  homepage,
25849
26107
  scripts,
25850
26108
  devDependencies,
25851
- optionalDependencies
26109
+ optionalDependencies,
26110
+ dependencies
25852
26111
  };
25853
26112
  const version = packageJson.version;
25854
26113
  const APP_VERSION = window.__VITE_ENVS.APP_VERSION || version;
@@ -25871,13 +26130,15 @@ const PH_CONNECT_SENTRY_ENV = window.__VITE_ENVS.PH_CONNECT_SENTRY_ENV || "dev";
25871
26130
  const PH_CONNECT_SENTRY_TRACING_ENABLED = window.__VITE_ENVS.PH_CONNECT_SENTRY_TRACING_ENABLED || "false";
25872
26131
  const GA_TRACKING_ID = window.__VITE_ENVS.PH_CONNECT_GA_TRACKING_ID;
25873
26132
  const PH_CONNECT_CLI_VERSION = window.__VITE_ENVS.PH_CONNECT_CLI_VERSION || void 0;
25874
- setLogLevel(window.__VITE_ENVS.LOG_LEVEL);
25875
- logger$1.info(`Setting log level to ${window.__VITE_ENVS.LOG_LEVEL}.`);
26133
+ const LOG_LEVEL = isLogLevel(window.__VITE_ENVS.LOG_LEVEL) ? window.__VITE_ENVS.LOG_LEVEL : "info";
26134
+ setLogLevel(LOG_LEVEL);
26135
+ logger$1.debug(`Setting log level to ${window.__VITE_ENVS.LOG_LEVEL}.`);
25876
26136
  const connectConfig = {
25877
26137
  appVersion: APP_VERSION,
25878
26138
  studioMode: PH_CONNECT_STUDIO_MODE.toString() === "true",
25879
26139
  warnOutdatedApp: WARN_OUTDATED_APP === "true",
25880
26140
  routerBasename: PH_CONNECT_ROUTER_BASENAME,
26141
+ analyticsDatabaseName: `${PH_CONNECT_ROUTER_BASENAME}:analytics`,
25881
26142
  sentry: {
25882
26143
  dsn: PH_CONNECT_SENTRY_DSN,
25883
26144
  env: PH_CONNECT_SENTRY_ENV,
@@ -25971,6 +26232,7 @@ DriveSections.filter(
25971
26232
  };
25972
26233
  });
25973
26234
  var lzString = { exports: {} };
26235
+ lzString.exports;
25974
26236
  var hasRequiredLzString;
25975
26237
  function requireLzString() {
25976
26238
  if (hasRequiredLzString) return lzString.exports;
@@ -26902,12 +27164,12 @@ function requireLocalforage() {
26902
27164
  var toString = Object.prototype.toString;
26903
27165
  var READ_ONLY = "readonly";
26904
27166
  var READ_WRITE = "readwrite";
26905
- function _binStringToArrayBuffer(bin) {
26906
- var length2 = bin.length;
27167
+ function _binStringToArrayBuffer(bin2) {
27168
+ var length2 = bin2.length;
26907
27169
  var buf = new ArrayBuffer(length2);
26908
27170
  var arr = new Uint8Array(buf);
26909
27171
  for (var i = 0; i < length2; i++) {
26910
- arr[i] = bin.charCodeAt(i);
27172
+ arr[i] = bin2.charCodeAt(i);
26911
27173
  }
26912
27174
  return buf;
26913
27175
  }
@@ -28611,6 +28873,9 @@ const _BrowserStorage = class _BrowserStorage {
28611
28873
  name: namespace ? `${namespace}:${_BrowserStorage.DBName}` : _BrowserStorage.DBName
28612
28874
  }));
28613
28875
  }
28876
+ ////////////////////////////////
28877
+ // IDocumentAdminStorage
28878
+ ////////////////////////////////
28614
28879
  async clear() {
28615
28880
  const db = await this.db;
28616
28881
  await db.clear();
@@ -28623,19 +28888,35 @@ const _BrowserStorage = class _BrowserStorage {
28623
28888
  const document = await db.getItem(this.buildDocumentKey(documentId));
28624
28889
  return !!document;
28625
28890
  }
28626
- // TODO: this should throw an error if the document already exists.
28627
- async create(documentId, document) {
28628
- var _a2;
28891
+ async create(document) {
28892
+ const documentId = document.id;
28893
+ if (!isValidDocumentId(documentId)) {
28894
+ throw new DocumentIdValidationError(documentId);
28895
+ }
28629
28896
  const db = await this.db;
28897
+ if (await this.exists(documentId)) {
28898
+ throw new DocumentAlreadyExistsError(documentId);
28899
+ }
28900
+ const slug = document.slug.length > 0 ? document.slug : documentId;
28901
+ if (!isValidSlug(slug)) {
28902
+ throw new DocumentSlugValidationError(slug);
28903
+ }
28904
+ const slugManifest = await this.getSlugManifest();
28905
+ if (slugManifest.slugToId[slug]) {
28906
+ throw new DocumentAlreadyExistsError(documentId);
28907
+ }
28908
+ document.slug = slug;
28630
28909
  await db.setItem(this.buildDocumentKey(documentId), document);
28631
- const slug = ((_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug) ?? documentId;
28632
28910
  if (slug) {
28633
- const slugManifest = await this.getSlugManifest();
28634
- if (slugManifest.slugToId[slug]) {
28911
+ const slugManifest2 = await this.getSlugManifest();
28912
+ if (slugManifest2.slugToId[slug]) {
28635
28913
  throw new Error(`Document with slug ${slug} already exists`);
28636
28914
  }
28637
- slugManifest.slugToId[slug] = documentId;
28638
- await this.updateSlugManifest(slugManifest);
28915
+ slugManifest2.slugToId[slug] = documentId;
28916
+ await this.updateSlugManifest(slugManifest2);
28917
+ }
28918
+ if (document.documentType === "powerhouse/document-drive") {
28919
+ this.updateDriveManifest(documentId, { documentIds: [] });
28639
28920
  }
28640
28921
  }
28641
28922
  async get(documentId) {
@@ -28654,15 +28935,56 @@ const _BrowserStorage = class _BrowserStorage {
28654
28935
  }
28655
28936
  return this.get(documentId);
28656
28937
  }
28938
+ async findByType(documentModelType, limit = 100, cursor) {
28939
+ const db = await this.db;
28940
+ const keys = await db.keys();
28941
+ const documentKeys = keys.filter((key) => key.startsWith(`${_BrowserStorage.DOCUMENT_KEY}${_BrowserStorage.SEP}`));
28942
+ const documentsAndIds = [];
28943
+ for (const key of documentKeys) {
28944
+ const documentId = key.slice(_BrowserStorage.DOCUMENT_KEY.length + _BrowserStorage.SEP.length);
28945
+ try {
28946
+ const document = await db.getItem(key);
28947
+ if (!document || document.documentType !== documentModelType) {
28948
+ continue;
28949
+ }
28950
+ documentsAndIds.push({ id: documentId, document });
28951
+ } catch (error) {
28952
+ continue;
28953
+ }
28954
+ }
28955
+ documentsAndIds.sort((a, b) => {
28956
+ const aDate = new Date(a.document.created);
28957
+ const bDate = new Date(b.document.created);
28958
+ if (aDate.getTime() === bDate.getTime()) {
28959
+ return a.id.localeCompare(b.id);
28960
+ }
28961
+ return aDate.getTime() - bDate.getTime();
28962
+ });
28963
+ let startIndex = 0;
28964
+ if (cursor) {
28965
+ const index = documentsAndIds.findIndex(({ id }) => id === cursor);
28966
+ if (index !== -1) {
28967
+ startIndex = index;
28968
+ }
28969
+ }
28970
+ const endIndex = Math.min(startIndex + limit, documentsAndIds.length);
28971
+ let nextCursor;
28972
+ if (endIndex < documentsAndIds.length) {
28973
+ nextCursor = documentsAndIds[endIndex].id;
28974
+ }
28975
+ return {
28976
+ documents: documentsAndIds.slice(startIndex, endIndex).map(({ id }) => id),
28977
+ nextCursor
28978
+ };
28979
+ }
28657
28980
  async delete(documentId) {
28658
- var _a2;
28659
28981
  const db = await this.db;
28660
28982
  const document = await db.getItem(this.buildDocumentKey(documentId));
28661
28983
  if (!document) {
28662
28984
  return false;
28663
28985
  }
28986
+ const slug = document.slug.length > 0 ? document.slug : documentId;
28664
28987
  try {
28665
- const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
28666
28988
  if (slug) {
28667
28989
  const slugManifest = await this.getSlugManifest();
28668
28990
  if (slugManifest.slugToId[slug] === documentId) {
@@ -28672,11 +28994,16 @@ const _BrowserStorage = class _BrowserStorage {
28672
28994
  }
28673
28995
  } catch (error) {
28674
28996
  }
28675
- const drives = await this.getDrives();
28676
- for (const driveId of drives) {
28677
- if (driveId === documentId)
28678
- continue;
28679
- await this.removeChild(driveId, documentId);
28997
+ const parents = await this.getParents(documentId);
28998
+ for (const parent of parents) {
28999
+ await this.removeChild(parent, documentId);
29000
+ }
29001
+ const children = await this.getChildren(documentId);
29002
+ for (const child of children) {
29003
+ const childParents = await this.getParents(child);
29004
+ if (childParents.length === 1 && childParents[0] === documentId) {
29005
+ await this.delete(child);
29006
+ }
28680
29007
  }
28681
29008
  await db.removeItem(this.buildManifestKey(documentId));
28682
29009
  await db.removeItem(this.buildDocumentKey(documentId));
@@ -28710,6 +29037,20 @@ const _BrowserStorage = class _BrowserStorage {
28710
29037
  const manifest = await this.getManifest(parentId);
28711
29038
  return manifest.documentIds;
28712
29039
  }
29040
+ async getParents(childId) {
29041
+ const db = await this.db;
29042
+ const keys = await db.keys();
29043
+ const parents = [];
29044
+ const manifestKeys = keys.filter((key) => key.startsWith(`${_BrowserStorage.MANIFEST_KEY}${_BrowserStorage.SEP}`));
29045
+ for (const key of manifestKeys) {
29046
+ const driveId = key.slice(_BrowserStorage.MANIFEST_KEY.length + _BrowserStorage.SEP.length);
29047
+ const manifest = await this.getManifest(driveId);
29048
+ if (manifest.documentIds.includes(childId)) {
29049
+ parents.push(driveId);
29050
+ }
29051
+ }
29052
+ return parents;
29053
+ }
28713
29054
  ////////////////////////////////
28714
29055
  // IDriveStorage
28715
29056
  ////////////////////////////////
@@ -28731,9 +29072,6 @@ const _BrowserStorage = class _BrowserStorage {
28731
29072
  const db = await this.db;
28732
29073
  await db.setItem(_BrowserStorage.SLUG_MANIFEST_KEY, manifest);
28733
29074
  }
28734
- async clearStorage() {
28735
- return (await this.db).clear();
28736
- }
28737
29075
  async addDocumentOperations(drive, id, operations, header) {
28738
29076
  const document = await this.get(id);
28739
29077
  if (!document) {
@@ -28747,22 +29085,6 @@ const _BrowserStorage = class _BrowserStorage {
28747
29085
  operations: mergedOperations
28748
29086
  });
28749
29087
  }
28750
- async getDrives() {
28751
- const db = await this.db;
28752
- const keys = await db.keys();
28753
- return keys.filter((key) => key.startsWith(_BrowserStorage.MANIFEST_KEY)).map((key) => key.slice(_BrowserStorage.MANIFEST_KEY.length + _BrowserStorage.SEP.length));
28754
- }
28755
- async createDrive(id, drive) {
28756
- await this.create(id, drive);
28757
- await this.updateDriveManifest(id, { documentIds: [] });
28758
- }
28759
- async deleteDrive(id) {
28760
- const documents = await this.getChildren(id);
28761
- await Promise.all(documents.map((doc) => this.delete(doc)));
28762
- const db = await this.db;
28763
- await db.removeItem(this.buildManifestKey(id));
28764
- return db.removeItem(this.buildDocumentKey(id));
28765
- }
28766
29088
  async addDriveOperations(id, operations, header) {
28767
29089
  const drive = await this.get(id);
28768
29090
  const mergedOperations = mergeOperations(drive.operations, operations);
@@ -28803,12 +29125,16 @@ const _BrowserStorage = class _BrowserStorage {
28803
29125
  }
28804
29126
  // migrates all stored operations from legacy signature to signatures array
28805
29127
  async migrateOperationSignatures() {
28806
- const drives = await this.getDrives();
28807
- for (const drive of drives) {
28808
- await this.migrateDrive(drive);
28809
- const documents = await this.getChildren(drive);
28810
- await Promise.all(documents.map(async (docId) => this.migrateDocument(drive, docId)));
28811
- }
29128
+ let cursor;
29129
+ do {
29130
+ const { documents: drives, nextCursor } = await this.findByType("powerhouse/document-drive", 100, cursor);
29131
+ for (const drive of drives) {
29132
+ await this.migrateDrive(drive);
29133
+ const documents = await this.getChildren(drive);
29134
+ await Promise.all(documents.map(async (docId) => this.migrateDocument(drive, docId)));
29135
+ }
29136
+ cursor = nextCursor;
29137
+ } while (cursor);
28812
29138
  }
28813
29139
  async migrateDrive(driveId) {
28814
29140
  const drive = await this.get(driveId);
@@ -28882,8 +29208,11 @@ const getReactorDefaultDrivesConfig = () => {
28882
29208
  }
28883
29209
  };
28884
29210
  };
28885
- function createBrowserDocumentDriveServer(documentModels, routerBasename) {
28886
- return new ReactorBuilder(documentModels).withStorage(new BrowserStorage(routerBasename)).withCache(new InMemoryCache()).withQueueManager(new BaseQueueManager(1, 10)).withOptions({ ...getReactorDefaultDrivesConfig() }).build();
29211
+ function createBrowserStorage(routerBasename) {
29212
+ return new BrowserStorage(routerBasename);
29213
+ }
29214
+ function createBrowserDocumentDriveServer(documentModels, storage) {
29215
+ return new ReactorBuilder(documentModels).withStorage(storage).withCache(new InMemoryCache()).withQueueManager(new BaseQueueManager(1, 10)).withOptions({ ...getReactorDefaultDrivesConfig() }).build();
28887
29216
  }
28888
29217
  const VERSION_CHECK_INTERVAL = parseInt(window.__VITE_ENVS.PH_CONNECT_VERSION_CHECK_INTERVAL) || 60 * 60 * 1e3;
28889
29218
  const basePath = connectConfig.routerBasename;
@@ -31442,14 +31771,14 @@ if (window.__VITE_ENVS.MODE === "development") {
31442
31771
  } else {
31443
31772
  serviceWorkerManager.registerServiceWorker(false);
31444
31773
  }
31445
- const App = lazy(() => __vitePreload(() => import("./app-CpNI4xTA.js").then((n) => n.aY), true ? __vite__mapDeps([0,1,2]) : void 0));
31774
+ const App = lazy(() => __vitePreload(() => import("./app-DCtCV8Sz.js").then((n) => n.bs), true ? __vite__mapDeps([0,1,2]) : void 0));
31446
31775
  const AppLoader = /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(App, {}) });
31447
31776
  const appLoader = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
31448
31777
  __proto__: null,
31449
31778
  default: AppLoader
31450
31779
  }, Symbol.toStringTag, { value: "Module" }));
31451
31780
  export {
31452
- getDefaultExportFromCjs as $,
31781
+ Icon as $,
31453
31782
  AddStateExampleInputSchema as A,
31454
31783
  SetModuleDescriptionInputSchema as B,
31455
31784
  SetModuleNameInputSchema as C,
@@ -31476,148 +31805,148 @@ export {
31476
31805
  baseLoadFromFile as X,
31477
31806
  baseLoadFromInput as Y,
31478
31807
  pascalCase as Z,
31479
- Icon as _,
31808
+ logger$1 as _,
31480
31809
  createReducer as a,
31481
- DELETE as a$,
31482
- LOCAL as a0,
31483
- commonjsGlobal as a1,
31484
- PUBLIC as a2,
31810
+ getNamedType as a$,
31811
+ getDefaultExportFromCjs as a0,
31812
+ LOCAL as a1,
31813
+ commonjsGlobal as a2,
31485
31814
  SWITCHBOARD as a3,
31486
- locationInfoByLocation as a4,
31487
- sharingTypeOptions as a5,
31488
- objectType as a6,
31489
- recordType as a7,
31815
+ PUBLIC as a4,
31816
+ locationInfoByLocation as a5,
31817
+ sharingTypeOptions as a6,
31818
+ objectType as a7,
31490
31819
  stringType as a8,
31491
- capitalCase as a9,
31492
- moveNode as aA,
31493
- generateNodesCopy as aB,
31494
- copyNode as aC,
31495
- createState as aD,
31496
- setDriveName as aE,
31497
- setAvailableOffline as aF,
31498
- setSharingType as aG,
31499
- SynchronizationUnitNotFoundError as aH,
31500
- removeTrigger as aI,
31501
- generateUUID as aJ,
31502
- PullResponderTransmitter as aK,
31503
- addTrigger as aL,
31504
- ReadDriveNotFoundError as aM,
31505
- openUrl as aN,
31506
- getNodeOptions as aO,
31507
- DRIVE as aP,
31508
- FOLDER as aQ,
31509
- requestPublicDrive as aR,
31510
- serviceWorkerManager as aS,
31511
- packageJson as aT,
31512
- t as aU,
31513
- gql as aV,
31514
- request as aW,
31515
- getDimensions as aX,
31516
- READ as aY,
31517
- nodeOptionsMap as aZ,
31518
- defaultFileOptions as a_,
31519
- CLOUD as aa,
31520
- createZip as ab,
31521
- logger$1 as ac,
31820
+ recordType as a9,
31821
+ updateNode as aA,
31822
+ FILE as aB,
31823
+ moveNode as aC,
31824
+ generateNodesCopy as aD,
31825
+ copyNode as aE,
31826
+ createState as aF,
31827
+ setDriveName as aG,
31828
+ setAvailableOffline as aH,
31829
+ setSharingType as aI,
31830
+ SynchronizationUnitNotFoundError as aJ,
31831
+ removeTrigger as aK,
31832
+ PullResponderTransmitter as aL,
31833
+ addTrigger as aM,
31834
+ ReadDriveNotFoundError as aN,
31835
+ openUrl as aO,
31836
+ getNodeOptions as aP,
31837
+ DRIVE as aQ,
31838
+ FOLDER as aR,
31839
+ requestPublicDrive as aS,
31840
+ serviceWorkerManager as aT,
31841
+ packageJson as aU,
31842
+ t as aV,
31843
+ gql as aW,
31844
+ request as aX,
31845
+ inspect as aY,
31846
+ GraphQLError as aZ,
31847
+ invariant as a_,
31848
+ capitalCase as aa,
31849
+ CLOUD as ab,
31850
+ createZip as ac,
31522
31851
  LZString as ad,
31523
31852
  buildSignedOperation as ae,
31524
- getI18n as af,
31525
- getDefaults as ag,
31853
+ getDefaults as af,
31854
+ getI18n as ag,
31526
31855
  connectConfig as ah,
31527
31856
  hashDocumentStateForScope as ai,
31528
31857
  getAugmentedNamespace as aj,
31529
- setErrorHandler as ak,
31530
- driveDocumentModelModule as al,
31531
- createBrowserDocumentDriveServer as am,
31532
- hashKey as an,
31533
- childLogger as ao,
31534
- reducer as ap,
31535
- isDocumentDrive as aq,
31536
- generateAddNodeAction as ar,
31537
- isFileNode as as,
31538
- uploadDocumentOperations as at,
31539
- updateFile as au,
31540
- addFolder as av,
31541
- isFolderNode as aw,
31542
- deleteNode as ax,
31543
- updateNode as ay,
31544
- FILE as az,
31858
+ childLogger as ak,
31859
+ process as al,
31860
+ setErrorHandler as am,
31861
+ driveDocumentModelModule as an,
31862
+ createBrowserStorage as ao,
31863
+ createBrowserDocumentDriveServer as ap,
31864
+ generateId as aq,
31865
+ reducer as ar,
31866
+ isDocumentDrive as as,
31867
+ generateAddNodeAction as at,
31868
+ isFileNode as au,
31869
+ uploadDocumentOperations as av,
31870
+ updateFile as aw,
31871
+ addFolder as ax,
31872
+ isFolderNode as ay,
31873
+ deleteNode as az,
31545
31874
  SetStateSchemaInputSchema as b,
31546
- GraphQLFloat as b$,
31547
- RENAME as b0,
31548
- WRITE as b1,
31549
- DUPLICATE as b2,
31550
- defaultFolderOptions as b3,
31551
- garbageCollect as b4,
31552
- sortOperations as b5,
31553
- UI_NODE as b6,
31554
- generateId as b7,
31555
- undo as b8,
31556
- redo as b9,
31557
- isListType as bA,
31558
- snakeCase as bB,
31559
- constantCase as bC,
31560
- isAbstractType as bD,
31561
- BREAK as bE,
31562
- GraphQLInputObjectType as bF,
31563
- GraphQLList as bG,
31564
- GraphQLEnumType as bH,
31565
- GraphQLObjectType as bI,
31566
- GraphQLInterfaceType as bJ,
31567
- SchemaMetaFieldDef as bK,
31568
- TypeMetaFieldDef as bL,
31569
- TypeNameMetaFieldDef as bM,
31570
- isCompositeType as bN,
31571
- isOutputType as bO,
31572
- isInputType as bP,
31573
- GraphQLBoolean as bQ,
31574
- assertAbstractType as bR,
31575
- doTypesOverlap as bS,
31576
- DirectiveLocation as bT,
31577
- specifiedRules as bU,
31578
- NoUnusedFragmentsRule as bV,
31579
- ExecutableDefinitionsRule as bW,
31580
- validate as bX,
31581
- validateSchema as bY,
31582
- GraphQLID as bZ,
31583
- GraphQLString as b_,
31584
- useDocumentDispatch as ba,
31585
- inspect as bb,
31586
- GraphQLError as bc,
31587
- getNamedType as bd,
31588
- invariant as be,
31589
- isInputObjectType as bf,
31590
- isScalarType as bg,
31591
- isObjectType as bh,
31592
- isInterfaceType as bi,
31593
- isUnionType as bj,
31594
- isEnumType as bk,
31595
- print as bl,
31596
- isPrintableAsBlockString as bm,
31597
- Kind as bn,
31598
- astFromValue as bo,
31599
- DEFAULT_DEPRECATION_REASON as bp,
31600
- isSpecifiedDirective as bq,
31601
- isSpecifiedScalarType as br,
31602
- isIntrospectionType as bs,
31603
- z as bt,
31604
- GraphQLScalarType as bu,
31605
- parse as bv,
31606
- visit as bw,
31607
- buildASTSchema as bx,
31608
- extendSchema as by,
31609
- getNullableType as bz,
31875
+ DUPLICATE as b$,
31876
+ isInputObjectType as b0,
31877
+ isScalarType as b1,
31878
+ isObjectType as b2,
31879
+ isInterfaceType as b3,
31880
+ isUnionType as b4,
31881
+ isEnumType as b5,
31882
+ astFromValue as b6,
31883
+ print as b7,
31884
+ DEFAULT_DEPRECATION_REASON as b8,
31885
+ Kind as b9,
31886
+ isInputType as bA,
31887
+ GraphQLBoolean as bB,
31888
+ assertAbstractType as bC,
31889
+ doTypesOverlap as bD,
31890
+ DirectiveLocation as bE,
31891
+ specifiedRules as bF,
31892
+ NoUnusedFragmentsRule as bG,
31893
+ ExecutableDefinitionsRule as bH,
31894
+ validate as bI,
31895
+ validateSchema as bJ,
31896
+ GraphQLID as bK,
31897
+ GraphQLString as bL,
31898
+ GraphQLFloat as bM,
31899
+ GraphQLInt as bN,
31900
+ GraphQLDirective as bO,
31901
+ GraphQLUnionType as bP,
31902
+ isNonNullType as bQ,
31903
+ GraphQLNonNull as bR,
31904
+ isNamedType as bS,
31905
+ isLeafType as bT,
31906
+ GraphQLSchema as bU,
31907
+ buildSchema as bV,
31908
+ sentenceCase as bW,
31909
+ getDimensions as bX,
31910
+ READ as bY,
31911
+ nodeOptionsMap as bZ,
31912
+ defaultFileOptions as b_,
31913
+ isPrintableAsBlockString as ba,
31914
+ isSpecifiedDirective as bb,
31915
+ isSpecifiedScalarType as bc,
31916
+ isIntrospectionType as bd,
31917
+ z as be,
31918
+ GraphQLScalarType as bf,
31919
+ parse as bg,
31920
+ visit as bh,
31921
+ buildASTSchema as bi,
31922
+ extendSchema as bj,
31923
+ getNullableType as bk,
31924
+ isListType as bl,
31925
+ snakeCase as bm,
31926
+ constantCase as bn,
31927
+ isAbstractType as bo,
31928
+ BREAK as bp,
31929
+ GraphQLInputObjectType as bq,
31930
+ GraphQLList as br,
31931
+ GraphQLEnumType as bs,
31932
+ GraphQLObjectType as bt,
31933
+ GraphQLInterfaceType as bu,
31934
+ SchemaMetaFieldDef as bv,
31935
+ TypeMetaFieldDef as bw,
31936
+ TypeNameMetaFieldDef as bx,
31937
+ isCompositeType as by,
31938
+ isOutputType as bz,
31610
31939
  createAction as c,
31611
- GraphQLInt as c0,
31612
- GraphQLDirective as c1,
31613
- GraphQLUnionType as c2,
31614
- isNonNullType as c3,
31615
- GraphQLNonNull as c4,
31616
- isNamedType as c5,
31617
- isLeafType as c6,
31618
- GraphQLSchema as c7,
31619
- buildSchema as c8,
31620
- sentenceCase as c9,
31940
+ RENAME as c0,
31941
+ WRITE as c1,
31942
+ DELETE as c2,
31943
+ defaultFolderOptions as c3,
31944
+ garbageCollect as c4,
31945
+ sortOperations as c5,
31946
+ UI_NODE as c6,
31947
+ undo as c7,
31948
+ redo as c8,
31949
+ useDocumentDispatch as c9,
31621
31950
  appLoader as ca,
31622
31951
  ReorderModuleOperationsInputSchema as d,
31623
31952
  DeleteOperationInputSchema as e,
@@ -31643,3 +31972,4 @@ export {
31643
31972
  ReorderModulesInputSchema as y,
31644
31973
  DeleteModuleInputSchema as z
31645
31974
  };
31975
+ //# sourceMappingURL=app-loader-BAEWEx-m.js.map