@powerhousedao/connect 1.0.24-dev.0 → 1.1.0

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-DWlDE8AF.css → app-Dtx0nq4m.css} +181 -240
  3. package/dist/assets/{app-B5yYl0zv.js → app-SJyv410V.js} +33037 -34663
  4. package/dist/assets/{app-loader-NDVZu4bS.css → app-loader-3ipafc56.css} +228 -238
  5. package/dist/assets/{app-loader-CmEZOj3m.js → app-loader-BsJCIY3v.js} +417 -735
  6. package/dist/assets/{ccip-KtRjx9vh.js → ccip-CWiYf37C.js} +8 -6
  7. package/dist/assets/{content-2lJzkjLx.js → content-DrqtiFBt.js} +456 -1094
  8. package/dist/assets/{index-BVVRVlZN.js → index-CS0mQFrd.js} +3 -4
  9. package/dist/assets/{index-BhHOiwFw.js → index-DFoYtrS6.js} +3693 -3516
  10. package/dist/assets/{index-dSMCpjcQ.js → index-n2OSuQ3g.js} +171 -23
  11. package/dist/assets/{main.DA6nl4Ov.js → main.BcxEuVs0.js} +12 -3
  12. package/dist/assets/{style-CdxGKc2g.css → style-0ej1afQi.css} +95 -39
  13. package/dist/external-packages.js +0 -1
  14. package/dist/hmr.js +0 -1
  15. package/dist/index.html +1 -1
  16. package/dist/service-worker.js +0 -1
  17. package/dist/vite-envs.sh +1 -1
  18. package/package.json +20 -21
  19. package/dist/assets/app-B5yYl0zv.js.map +0 -1
  20. package/dist/assets/app-loader-CmEZOj3m.js.map +0 -1
  21. package/dist/assets/browser-D5LEpLBa.js +0 -27224
  22. package/dist/assets/browser-D5LEpLBa.js.map +0 -1
  23. package/dist/assets/ccip-KtRjx9vh.js.map +0 -1
  24. package/dist/assets/content-2lJzkjLx.js.map +0 -1
  25. package/dist/assets/index-BVVRVlZN.js.map +0 -1
  26. package/dist/assets/index-BhHOiwFw.js.map +0 -1
  27. package/dist/assets/index-DZiF5od7.js +0 -208
  28. package/dist/assets/index-DZiF5od7.js.map +0 -1
  29. package/dist/assets/index-dSMCpjcQ.js.map +0 -1
  30. package/dist/assets/main.DA6nl4Ov.js.map +0 -1
  31. package/dist/assets/reactor-analytics-CF_JKt8H.js +0 -42
  32. package/dist/assets/reactor-analytics-CF_JKt8H.js.map +0 -1
  33. package/dist/assets/router-Ch1WZD-6.js +0 -1585
  34. package/dist/assets/router-Ch1WZD-6.js.map +0 -1
  35. package/dist/external-packages.js.map +0 -1
  36. package/dist/hmr.js.map +0 -1
  37. package/dist/service-worker.js.map +0 -1
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/app-B5yYl0zv.js","assets/main.DA6nl4Ov.js","assets/app-DWlDE8AF.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/app-SJyv410V.js","assets/main.BcxEuVs0.js","assets/app-Dtx0nq4m.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.DA6nl4Ov.js";
14
+ import { _ as __vitePreload } from "./main.BcxEuVs0.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,51 +97,14 @@ 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
- }
130
100
  class InMemoryCache {
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();
101
+ constructor() {
102
+ __publicField(this, "idTodocument", /* @__PURE__ */ new Map());
103
+ __publicField(this, "idToDrive", /* @__PURE__ */ new Map());
104
+ __publicField(this, "slugToDriveId", /* @__PURE__ */ new Map());
142
105
  }
143
106
  clear() {
144
- this.idToDocument.clear();
107
+ this.idTodocument.clear();
145
108
  this.idToDrive.clear();
146
109
  this.slugToDriveId.clear();
147
110
  }
@@ -150,13 +113,13 @@ class InMemoryCache {
150
113
  /////////////////////////////////////////////////////////////////////////////
151
114
  async setDocument(documentId, document) {
152
115
  const doc = trimResultingState(document);
153
- this.idToDocument.set(documentId, doc);
116
+ this.idTodocument.set(documentId, doc);
154
117
  }
155
118
  async getDocument(documentId) {
156
- return this.idToDocument.get(documentId);
119
+ return this.idTodocument.get(documentId);
157
120
  }
158
121
  async deleteDocument(documentId) {
159
- return this.idToDocument.delete(documentId);
122
+ return this.idTodocument.delete(documentId);
160
123
  }
161
124
  async setDrive(driveId, drive) {
162
125
  const doc = trimResultingState(drive);
@@ -170,14 +133,14 @@ class InMemoryCache {
170
133
  if (!drive) {
171
134
  return false;
172
135
  }
173
- const slug = drive.slug.length > 0 ? drive.slug : driveId;
136
+ const slug = drive.state.global.slug;
174
137
  if (slug) {
175
138
  this.slugToDriveId.delete(slug);
176
139
  }
177
140
  return this.idToDrive.delete(driveId);
178
141
  }
179
142
  async setDriveBySlug(slug, drive) {
180
- const driveId = drive.id;
143
+ const driveId = drive.state.global.id;
181
144
  this.slugToDriveId.set(slug, driveId);
182
145
  this.setDrive(driveId, drive);
183
146
  }
@@ -425,8 +388,8 @@ function isBE() {
425
388
  return buf[0] === 254;
426
389
  }
427
390
  const FileSystemError = new Error("File system not available.");
428
- function generateUUID() {
429
- if (typeof crypto === "undefined" || !crypto.randomUUID) {
391
+ function generateUUID$1() {
392
+ if (!crypto.randomUUID) {
430
393
  throw new Error("generateUUID is not available in unsecure contexts.");
431
394
  }
432
395
  return crypto.randomUUID();
@@ -6814,7 +6777,7 @@ function loadStateOperation(oldDocument, newDocument) {
6814
6777
  };
6815
6778
  }
6816
6779
  function generateId(method) {
6817
- return generateUUID();
6780
+ return generateUUID$1();
6818
6781
  }
6819
6782
  function getUnixTimestamp(date) {
6820
6783
  return (new Date(date).getTime() / 1e3).toFixed(0);
@@ -6977,7 +6940,6 @@ function processSkipOperation(document, action, customReducer, skipValue, reuseO
6977
6940
  scopeState = resultingStateParser(lastRemainingOperation.resultingState);
6978
6941
  } else {
6979
6942
  const { state } = replayOperations(document.initialState, documentOperations, customReducer, void 0, void 0, void 0, void 0, {
6980
- reuseHash: true,
6981
6943
  reuseOperationResultingState,
6982
6944
  operationResultingStateParser: resultingStateParser
6983
6945
  });
@@ -7004,7 +6966,6 @@ function processUndoOperation(document, scope, customReducer, reuseOperationResu
7004
6966
  const clearedOperations = [...documentOperations[scope]];
7005
6967
  const diff = diffOperations(garbageCollect(sortedOperations), clearedOperations);
7006
6968
  const doc = replayOperations(document.initialState, documentOperations, customReducer, void 0, void 0, void 0, void 0, {
7007
- reuseHash: true,
7008
6969
  reuseOperationResultingState,
7009
6970
  operationResultingStateParser: resultingStateParser
7010
6971
  });
@@ -7154,7 +7115,6 @@ function createReducer(stateReducer2, documentReducer = baseReducer) {
7154
7115
  return reducer2;
7155
7116
  }
7156
7117
  function baseCreateExtendedState(initialState, createState2) {
7157
- const id = (initialState == null ? void 0 : initialState.id) ?? generateUUID();
7158
7118
  return {
7159
7119
  name: "",
7160
7120
  documentType: "",
@@ -7166,8 +7126,6 @@ function baseCreateExtendedState(initialState, createState2) {
7166
7126
  lastModified: (/* @__PURE__ */ new Date()).toISOString(),
7167
7127
  attachments: {},
7168
7128
  ...initialState,
7169
- id,
7170
- slug: (initialState == null ? void 0 : initialState.slug) ?? id,
7171
7129
  state: (createState2 == null ? void 0 : createState2(initialState == null ? void 0 : initialState.state)) ?? ((initialState == null ? void 0 : initialState.state) ?? {
7172
7130
  global: {},
7173
7131
  local: {}
@@ -7186,6 +7144,10 @@ function baseCreateDocument(initialState, createState2) {
7186
7144
  function hashDocumentStateForScope(document, scope = "global") {
7187
7145
  return hash(cjsModule(document.state[scope] || ""));
7188
7146
  }
7147
+ const hashKey = (date, randomLimit = 1e3) => {
7148
+ const random = Math.random() * randomLimit;
7149
+ return hash(`${(/* @__PURE__ */ new Date()).toISOString()}${random}`);
7150
+ };
7189
7151
  function getDocumentLastModified(document) {
7190
7152
  var _a2;
7191
7153
  const sortedOperations = sortOperations(Object.values(document.operations).flat());
@@ -7234,9 +7196,6 @@ function replayDocument(initialState, operations, reducer2, dispatch, header, sk
7234
7196
  operationsToReplay.push(...Object.values(operations).flat());
7235
7197
  }
7236
7198
  const document = baseCreateDocument(documentState);
7237
- if (header == null ? void 0 : header.slug) {
7238
- document.slug = header.slug;
7239
- }
7240
7199
  document.initialState = initialState;
7241
7200
  document.operations = initialOperations;
7242
7201
  let result = document;
@@ -7575,186 +7534,21 @@ function UpdateStateExampleInputSchema() {
7575
7534
  newExample: z.string()
7576
7535
  });
7577
7536
  }
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);
7754
7537
  function commonjsRequire(path) {
7755
7538
  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.');
7756
7539
  }
7757
7540
  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
+ */
7758
7552
  var hasRequiredJszip_min;
7759
7553
  function requireJszip_min() {
7760
7554
  if (hasRequiredJszip_min) return jszip_min.exports;
@@ -10097,6 +9891,7 @@ const types = {
10097
9891
  "application/dash+xml": ["mpd"],
10098
9892
  "application/dash-patch+xml": ["mpp"],
10099
9893
  "application/davmount+xml": ["davmount"],
9894
+ "application/dicom": ["dcm"],
10100
9895
  "application/docbook+xml": ["dbk"],
10101
9896
  "application/dssc+der": ["dssc"],
10102
9897
  "application/dssc+xml": ["xdssc"],
@@ -10183,7 +9978,14 @@ const types = {
10183
9978
  "application/oebps-package+xml": ["opf"],
10184
9979
  "application/ogg": ["ogx"],
10185
9980
  "application/omdoc+xml": ["omdoc"],
10186
- "application/onenote": ["onetoc", "onetoc2", "onetmp", "onepkg"],
9981
+ "application/onenote": [
9982
+ "onetoc",
9983
+ "onetoc2",
9984
+ "onetmp",
9985
+ "onepkg",
9986
+ "one",
9987
+ "onea"
9988
+ ],
10187
9989
  "application/oxps": ["oxps"],
10188
9990
  "application/p2p-overlay+xml": ["relo"],
10189
9991
  "application/patch-ops-error+xml": ["xer"],
@@ -10279,6 +10081,7 @@ const types = {
10279
10081
  "application/yang": ["yang"],
10280
10082
  "application/yin+xml": ["yin"],
10281
10083
  "application/zip": ["zip"],
10084
+ "application/zip+dotlottie": ["lottie"],
10282
10085
  "audio/3gpp": ["*3gpp"],
10283
10086
  "audio/aac": ["adts", "aac"],
10284
10087
  "audio/adpcm": ["adp"],
@@ -10287,7 +10090,7 @@ const types = {
10287
10090
  "audio/midi": ["mid", "midi", "kar", "rmi"],
10288
10091
  "audio/mobile-xmf": ["mxmf"],
10289
10092
  "audio/mp3": ["*mp3"],
10290
- "audio/mp4": ["m4a", "mp4a"],
10093
+ "audio/mp4": ["m4a", "mp4a", "m4b"],
10291
10094
  "audio/mpeg": ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"],
10292
10095
  "audio/ogg": ["oga", "ogg", "spx", "opus"],
10293
10096
  "audio/s3m": ["s3m"],
@@ -10319,11 +10122,12 @@ const types = {
10319
10122
  "image/heif": ["heif"],
10320
10123
  "image/heif-sequence": ["heifs"],
10321
10124
  "image/hej2k": ["hej2"],
10322
- "image/hsj2": ["hsj2"],
10323
10125
  "image/ief": ["ief"],
10126
+ "image/jaii": ["jaii"],
10127
+ "image/jais": ["jais"],
10324
10128
  "image/jls": ["jls"],
10325
10129
  "image/jp2": ["jp2", "jpg2"],
10326
- "image/jpeg": ["jpeg", "jpg", "jpe"],
10130
+ "image/jpeg": ["jpg", "jpeg", "jpe"],
10327
10131
  "image/jph": ["jph"],
10328
10132
  "image/jphc": ["jhc"],
10329
10133
  "image/jpm": ["jpm", "jpgm"],
@@ -10338,6 +10142,7 @@ const types = {
10338
10142
  "image/jxss": ["jxss"],
10339
10143
  "image/ktx": ["ktx"],
10340
10144
  "image/ktx2": ["ktx2"],
10145
+ "image/pjpeg": ["jfif"],
10341
10146
  "image/png": ["png"],
10342
10147
  "image/sgi": ["sgi"],
10343
10148
  "image/svg+xml": ["svg", "svgz"],
@@ -10351,7 +10156,7 @@ const types = {
10351
10156
  "message/global-delivery-status": ["u8dsn"],
10352
10157
  "message/global-disposition-notification": ["u8mdn"],
10353
10158
  "message/global-headers": ["u8hdr"],
10354
- "message/rfc822": ["eml", "mime"],
10159
+ "message/rfc822": ["eml", "mime", "mht", "mhtml"],
10355
10160
  "model/3mf": ["3mf"],
10356
10161
  "model/gltf+json": ["gltf"],
10357
10162
  "model/gltf-binary": ["glb"],
@@ -10361,6 +10166,7 @@ const types = {
10361
10166
  "model/mtl": ["mtl"],
10362
10167
  "model/obj": ["obj"],
10363
10168
  "model/prc": ["prc"],
10169
+ "model/step": ["step", "stp", "stpnc", "p21", "210"],
10364
10170
  "model/step+xml": ["stpx"],
10365
10171
  "model/step+zip": ["stpz"],
10366
10172
  "model/step-xml+zip": ["stpxz"],
@@ -10466,8 +10272,8 @@ class Mime {
10466
10272
  getType(path) {
10467
10273
  if (typeof path !== "string")
10468
10274
  return null;
10469
- const last = path.replace(/^.*[/\\]/, "").toLowerCase();
10470
- const ext = last.replace(/^.*\./, "").toLowerCase();
10275
+ const last = path.replace(/^.*[/\\]/s, "").toLowerCase();
10276
+ const ext = last.replace(/^.*\./s, "").toLowerCase();
10471
10277
  const hasPath = last.length < path.length;
10472
10278
  const hasDot = ext.length < last.length - 1;
10473
10279
  if (!hasDot && hasPath)
@@ -10529,10 +10335,8 @@ function validateOperations(operations) {
10529
10335
  }
10530
10336
  function createZip(document) {
10531
10337
  const zip = new JSZip();
10532
- const { id, slug, name: name2, revision, documentType: documentType2, created, lastModified } = document;
10338
+ const { name: name2, revision, documentType: documentType2, created, lastModified } = document;
10533
10339
  const header = {
10534
- id,
10535
- slug,
10536
10340
  name: name2,
10537
10341
  revision,
10538
10342
  documentType: documentType2,
@@ -10948,60 +10752,40 @@ const reducer$2 = {
10948
10752
  state.triggers = state.triggers.filter((trigger) => trigger.id !== action.input.triggerId);
10949
10753
  }
10950
10754
  };
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
- }
10966
- }
10967
- class ConflictOperationError extends OperationError {
10968
- constructor(existingOperation, newOperation) {
10969
- super("CONFLICT", newOperation, `Conflicting operation on index ${newOperation.index}`, { existingOperation, newOperation });
10970
- }
10971
- }
10972
- class DocumentIdValidationError extends Error {
10973
- constructor(documentId) {
10974
- super(`Invalid document id: ${documentId}`);
10975
- }
10755
+ const byteToHex = [];
10756
+ for (let i = 0; i < 256; ++i) {
10757
+ byteToHex.push((i + 256).toString(16).slice(1));
10976
10758
  }
10977
- class DocumentSlugValidationError extends Error {
10978
- constructor(slug) {
10979
- super(`Invalid slug: ${slug}`);
10980
- }
10759
+ function unsafeStringify(arr, offset = 0) {
10760
+ 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();
10981
10761
  }
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;
10762
+ let getRandomValues;
10763
+ const rnds8 = new Uint8Array(16);
10764
+ function rng() {
10765
+ if (!getRandomValues) {
10766
+ if (typeof crypto === "undefined" || !crypto.getRandomValues) {
10767
+ throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
10768
+ }
10769
+ getRandomValues = crypto.getRandomValues.bind(crypto);
10987
10770
  }
10771
+ return getRandomValues(rnds8);
10988
10772
  }
10989
- class DocumentNotFoundError extends Error {
10990
- constructor(documentId) {
10991
- super(`Document with id ${documentId} not found`);
10992
- __publicField(this, "documentId");
10993
- this.documentId = documentId;
10773
+ const randomUUID = typeof crypto !== "undefined" && crypto.randomUUID && crypto.randomUUID.bind(crypto);
10774
+ const native = { randomUUID };
10775
+ function v4(options, buf, offset) {
10776
+ var _a2;
10777
+ if (native.randomUUID && true && !options) {
10778
+ return native.randomUUID();
10994
10779
  }
10995
- }
10996
- class SynchronizationUnitNotFoundError extends Error {
10997
- constructor(message, syncUnitId) {
10998
- super(message);
10999
- __publicField(this, "syncUnitId");
11000
- this.syncUnitId = syncUnitId;
10780
+ options = options || {};
10781
+ const rnds = options.random ?? ((_a2 = options.rng) == null ? void 0 : _a2.call(options)) ?? rng();
10782
+ if (rnds.length < 16) {
10783
+ throw new Error("Random bytes length must be >= 16");
11001
10784
  }
10785
+ rnds[6] = rnds[6] & 15 | 64;
10786
+ rnds[8] = rnds[8] & 63 | 128;
10787
+ return unsafeStringify(rnds);
11002
10788
  }
11003
- const isValidDocumentId = (id) => id && id.length > 0 && /^[a-zA-Z0-9_-]+$/.test(id);
11004
- const isValidSlug = (slug) => slug && slug.length > 0 && /^[a-zA-Z0-9_-]+$/.test(slug);
11005
10789
  function isFileNode(node) {
11006
10790
  return node.kind === "file";
11007
10791
  }
@@ -11065,7 +10849,7 @@ function generateNodesCopy(src, idGenerator, nodes) {
11065
10849
  function generateSynchronizationUnitId(nodes) {
11066
10850
  let syncId = "";
11067
10851
  while (!syncId || nodes.find((node) => isFileNode(node) && node.synchronizationUnits.find((unit) => unit.syncId === syncId))) {
11068
- syncId = generateId();
10852
+ syncId = v4();
11069
10853
  }
11070
10854
  return syncId;
11071
10855
  }
@@ -11143,9 +10927,6 @@ const reducer$1 = {
11143
10927
  if (state.nodes.find((node) => node.id === action.input.id)) {
11144
10928
  throw new Error(`Node with id ${action.input.id} already exists!`);
11145
10929
  }
11146
- if (!isValidDocumentId(action.input.id)) {
11147
- throw new DocumentIdValidationError(action.input.id);
11148
- }
11149
10930
  const name2 = handleTargetNameCollisions({
11150
10931
  nodes: state.nodes,
11151
10932
  srcName: action.input.name,
@@ -11238,9 +11019,6 @@ const reducer$1 = {
11238
11019
  if (!node) {
11239
11020
  throw new Error(`Node with id ${action.input.srcId} not found`);
11240
11021
  }
11241
- if (!isValidDocumentId(action.input.targetId)) {
11242
- throw new DocumentIdValidationError(action.input.targetId);
11243
- }
11244
11022
  const duplicatedNode = state.nodes.find((node2) => node2.id === action.input.targetId);
11245
11023
  if (duplicatedNode) {
11246
11024
  throw new Error(`Node with id ${action.input.targetId} already exists`);
@@ -11252,9 +11030,8 @@ const reducer$1 = {
11252
11030
  });
11253
11031
  const newNode = {
11254
11032
  ...node,
11255
- id: action.input.targetId,
11256
- slug: action.input.targetId,
11257
11033
  name: name2,
11034
+ id: action.input.targetId,
11258
11035
  parentFolder: action.input.targetParentFolder || null
11259
11036
  };
11260
11037
  const isFile = isFileNode(newNode);
@@ -11386,9 +11163,11 @@ const fileExtension = "phdd";
11386
11163
  const documentType = "powerhouse/document-drive";
11387
11164
  const documentModelName = "DocumentDrive";
11388
11165
  const initialGlobalState = {
11166
+ id: "",
11389
11167
  name: "",
11390
11168
  nodes: [],
11391
- icon: null
11169
+ icon: null,
11170
+ slug: null
11392
11171
  };
11393
11172
  const initialLocalState = {
11394
11173
  listeners: [],
@@ -11649,7 +11428,8 @@ const driveDocumentModelModule = {
11649
11428
  actions: { ...creators, ...actions },
11650
11429
  utils: { ...documentModelUtils, ...customUtils }
11651
11430
  };
11652
- const LogLevels = {
11431
+ var define_process_env_default = {};
11432
+ const LEVELS = {
11653
11433
  verbose: 1,
11654
11434
  debug: 2,
11655
11435
  info: 3,
@@ -11657,10 +11437,6 @@ const LogLevels = {
11657
11437
  error: 5,
11658
11438
  silent: 6
11659
11439
  };
11660
- function isLogLevel(value) {
11661
- return typeof value === "string" && value in LogLevels;
11662
- }
11663
- var define_process_env_default = {};
11664
11440
  class ConsoleLogger {
11665
11441
  constructor(tags, errorHandler2) {
11666
11442
  __privateAdd(this, _ConsoleLogger_instances);
@@ -11680,10 +11456,6 @@ class ConsoleLogger {
11680
11456
  return __privateGet(this, _levelString);
11681
11457
  }
11682
11458
  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
- }
11687
11459
  __privateSet(this, _levelString, level);
11688
11460
  }
11689
11461
  get errorHandler() {
@@ -11696,31 +11468,31 @@ class ConsoleLogger {
11696
11468
  return this.debug(...data);
11697
11469
  }
11698
11470
  verbose(...data) {
11699
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.verbose) {
11471
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.verbose) {
11700
11472
  return;
11701
11473
  }
11702
11474
  return this.debug(...data);
11703
11475
  }
11704
11476
  debug(...data) {
11705
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.debug) {
11477
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.debug) {
11706
11478
  return;
11707
11479
  }
11708
11480
  return console.debug(...[...__privateGet(this, _tags), ...data]);
11709
11481
  }
11710
11482
  info(...data) {
11711
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.info) {
11483
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.info) {
11712
11484
  return;
11713
11485
  }
11714
11486
  return console.info(...[...__privateGet(this, _tags), ...data]);
11715
11487
  }
11716
11488
  warn(...data) {
11717
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.warn) {
11489
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.warn) {
11718
11490
  return;
11719
11491
  }
11720
11492
  return console.warn(...[...__privateGet(this, _tags), ...data]);
11721
11493
  }
11722
11494
  error(...data) {
11723
- if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LogLevels.error) {
11495
+ if (__privateGet(this, _ConsoleLogger_instances, levelValue_get) > LEVELS.error) {
11724
11496
  return;
11725
11497
  }
11726
11498
  if (__privateGet(this, _errorHandler)) {
@@ -11735,16 +11507,16 @@ _errorHandler = new WeakMap();
11735
11507
  _ConsoleLogger_instances = new WeakSet();
11736
11508
  levelValue_get = function() {
11737
11509
  if (__privateGet(this, _levelString) === "env") {
11738
- const envLevel = typeof process !== "undefined" && "env" in process ? define_process_env_default.LOG_LEVEL : void 0;
11510
+ const envLevel = typeof process !== "undefined" ? define_process_env_default.LOG_LEVEL : void 0;
11739
11511
  if (!envLevel) {
11740
- return LogLevels.debug;
11512
+ return LEVELS.debug;
11741
11513
  }
11742
- if (!(envLevel in LogLevels)) {
11743
- return LogLevels.debug;
11514
+ if (!(envLevel in LEVELS)) {
11515
+ return LEVELS.debug;
11744
11516
  }
11745
- return LogLevels[envLevel];
11517
+ return LEVELS[envLevel];
11746
11518
  }
11747
- return LogLevels[__privateGet(this, _levelString)];
11519
+ return LEVELS[__privateGet(this, _levelString)];
11748
11520
  };
11749
11521
  const loggerInstance = new ConsoleLogger();
11750
11522
  let logLevel = "env";
@@ -11766,6 +11538,48 @@ const childLogger = (tags) => {
11766
11538
  logger2.errorHandler = errorHandler;
11767
11539
  return logger2;
11768
11540
  };
11541
+ class DocumentModelNotFoundError extends Error {
11542
+ constructor(id, cause) {
11543
+ super(`Document model "${id}" not found`, { cause });
11544
+ __publicField(this, "id");
11545
+ this.id = id;
11546
+ }
11547
+ }
11548
+ class OperationError extends Error {
11549
+ constructor(status, operation, message, cause) {
11550
+ super(message, { cause: cause ?? operation });
11551
+ __publicField(this, "status");
11552
+ __publicField(this, "operation");
11553
+ this.status = status;
11554
+ this.operation = operation;
11555
+ }
11556
+ }
11557
+ class ConflictOperationError extends OperationError {
11558
+ constructor(existingOperation, newOperation) {
11559
+ super("CONFLICT", newOperation, `Conflicting operation on index ${newOperation.index}`, { existingOperation, newOperation });
11560
+ }
11561
+ }
11562
+ class DocumentAlreadyExistsError extends Error {
11563
+ constructor(documentId) {
11564
+ super(`Document with id ${documentId} already exists`);
11565
+ __publicField(this, "documentId");
11566
+ this.documentId = documentId;
11567
+ }
11568
+ }
11569
+ class DocumentNotFoundError extends Error {
11570
+ constructor(documentId) {
11571
+ super(`Document with id ${documentId} not found`);
11572
+ __publicField(this, "documentId");
11573
+ this.documentId = documentId;
11574
+ }
11575
+ }
11576
+ class SynchronizationUnitNotFoundError extends Error {
11577
+ constructor(message, syncUnitId) {
11578
+ super(message);
11579
+ __publicField(this, "syncUnitId");
11580
+ this.syncUnitId = syncUnitId;
11581
+ }
11582
+ }
11769
11583
  var RunAsap;
11770
11584
  (function(RunAsap2) {
11771
11585
  RunAsap2.useMessageChannel = (() => {
@@ -11905,6 +11719,9 @@ function mergeOperations(currentOperations, newOperations) {
11905
11719
  return { ...acc, [curr.scope]: [...existingOperations, curr] };
11906
11720
  }, currentOperations);
11907
11721
  }
11722
+ function generateUUID() {
11723
+ return generateId();
11724
+ }
11908
11725
  function isBefore(dateA, dateB) {
11909
11726
  return new Date(dateA) < new Date(dateB);
11910
11727
  }
@@ -12005,7 +11822,7 @@ class BaseQueueManager {
12005
11822
  if (!this.delegate) {
12006
11823
  throw new Error("No server delegate defined");
12007
11824
  }
12008
- const jobId = generateId();
11825
+ const jobId = generateUUID();
12009
11826
  const queue = this.getQueue(job.driveId, job.documentId);
12010
11827
  if (await queue.isDeleted()) {
12011
11828
  throw new Error("Queue is deleted");
@@ -22344,18 +22161,14 @@ async function fetchDocument(url, documentId, documentModelModule) {
22344
22161
  local: []
22345
22162
  },
22346
22163
  attachments: {},
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
- },
22164
+ initialState: utils.createExtendedState({
22165
+ // TODO: getDocument should return all the initial state fields
22166
+ created: result.document.created,
22167
+ lastModified: result.document.created,
22168
+ state: utils.createState({
22169
+ global: result.document.initialState.state.global
22170
+ })
22171
+ }),
22359
22172
  clipboard: []
22360
22173
  } : null;
22361
22174
  return {
@@ -22410,13 +22223,7 @@ class ReadModeService {
22410
22223
  return document;
22411
22224
  }
22412
22225
  async addReadDrive(url, options) {
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
- }
22226
+ const { id } = (options == null ? void 0 : options.expectedDriveInfo) ?? await requestPublicDrive(url);
22420
22227
  const result = await __privateMethod(this, _ReadModeService_instances, fetchDrive_fn).call(this, id, url);
22421
22228
  if (result instanceof Error) {
22422
22229
  throw result;
@@ -22439,7 +22246,7 @@ class ReadModeService {
22439
22246
  return Promise.resolve(result ? { ...result.drive, readContext: result.context } : new ReadDriveNotFoundError(id));
22440
22247
  }
22441
22248
  async getReadDriveBySlug(slug) {
22442
- const readDrive = [...__privateGet(this, _drives).values()].find(({ drive }) => drive.slug === slug);
22249
+ const readDrive = [...__privateGet(this, _drives).values()].find(({ drive }) => drive.state.global.slug === slug);
22443
22250
  return Promise.resolve(readDrive ? { ...readDrive.drive, readContext: readDrive.context } : new ReadDriveSlugNotFoundError(slug));
22444
22251
  }
22445
22252
  getReadDriveContext(id) {
@@ -22578,8 +22385,8 @@ class DefaultDrivesManager {
22578
22385
  }
22579
22386
  async preserveDrivesById(driveIdsToPreserve, drives, removeStrategy = "detach") {
22580
22387
  const getAllDrives = drives.map((driveId) => this.server.getDrive(driveId));
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);
22388
+ 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));
22389
+ const driveIds = drivesToRemove.map((drive) => drive.state.global.id);
22583
22390
  if (removeStrategy === "detach") {
22584
22391
  await this.detachDrivesById(driveIds);
22585
22392
  } else {
@@ -22627,7 +22434,7 @@ class DefaultDrivesManager {
22627
22434
  case "remove-all": {
22628
22435
  const getDrives = driveids.map((driveId) => this.server.getDrive(driveId));
22629
22436
  const drives = await Promise.all(getDrives);
22630
- const drivesToRemove = drives.filter((drive) => drive.state.local.listeners.length > 0 || drive.state.local.triggers.length > 0).map((drive) => drive.id);
22437
+ const drivesToRemove = drives.filter((drive) => drive.state.local.listeners.length > 0 || drive.state.local.triggers.length > 0).map((drive) => drive.state.global.id);
22631
22438
  await this.removeDrivesById(drivesToRemove);
22632
22439
  break;
22633
22440
  }
@@ -22904,7 +22711,7 @@ class PullResponderTransmitter {
22904
22711
  static async executePull(driveId, trigger, onStrandUpdate, onError, onRevisions, onAcknowledge) {
22905
22712
  var _a2, _b;
22906
22713
  staticLogger().verbose(`executePull(driveId: ${driveId}), trigger:`, trigger);
22907
- staticLogger().debug(`[SYNC DEBUG] PullResponderTransmitter.executePull starting for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
22714
+ staticLogger().info(`[SYNC DEBUG] PullResponderTransmitter.executePull starting for drive: ${driveId}, listenerId: ${trigger.data.listenerId}`);
22908
22715
  const { url } = trigger.data;
22909
22716
  let strands;
22910
22717
  let error;
@@ -23068,7 +22875,7 @@ class PullResponderTransmitter {
23068
22875
  };
23069
22876
  const listenerId = await PullResponderTransmitter.registerPullResponder(driveId, url, filter);
23070
22877
  const pullTrigger = {
23071
- id: generateId(),
22878
+ id: generateUUID(),
23072
22879
  type: "PullResponder",
23073
22880
  driveId,
23074
22881
  filter,
@@ -23501,7 +23308,7 @@ class BaseDocumentDriveServer {
23501
23308
  async _initializeDrive(driveId) {
23502
23309
  var _a2, _b, _c;
23503
23310
  const drive = await this.getDrive(driveId);
23504
- this.logger.verbose(`[SYNC DEBUG] Initializing drive ${driveId} with slug "${drive.slug}"`);
23311
+ this.logger.verbose(`[SYNC DEBUG] Initializing drive ${driveId} with slug "${drive.state.global.slug}"`);
23505
23312
  await this.synchronizationManager.initializeDriveSyncStatus(driveId, drive);
23506
23313
  if (this.shouldSyncRemoteDrive(drive)) {
23507
23314
  this.logger.verbose(`[SYNC DEBUG] Starting sync for remote drive ${driveId}`);
@@ -23515,7 +23322,7 @@ class BaseDocumentDriveServer {
23515
23322
  this.logger.verbose(`[SYNC DEBUG] Created SwitchboardPush transmitter with URL: ${zodListener.callInfo.data || "none"}`);
23516
23323
  await this.listenerManager.setListener(driveId, {
23517
23324
  block: zodListener.block,
23518
- driveId: drive.id,
23325
+ driveId: drive.state.global.id,
23519
23326
  filter: {
23520
23327
  branch: zodListener.filter.branch ?? [],
23521
23328
  documentId: zodListener.filter.documentId ?? [],
@@ -23577,25 +23384,25 @@ class BaseDocumentDriveServer {
23577
23384
  return [...this.documentModelModules];
23578
23385
  }
23579
23386
  async addDrive(input, preferredEditor) {
23387
+ const id = input.global.id || generateUUID();
23388
+ if (!id) {
23389
+ throw new Error("Invalid Drive Id");
23390
+ }
23391
+ const drives = await this.legacyStorage.getDrives();
23392
+ if (drives.includes(id)) {
23393
+ throw new DocumentAlreadyExistsError(id);
23394
+ }
23580
23395
  const document = createDocument({
23581
- id: input.id,
23582
- slug: input.slug,
23583
- state: {
23584
- global: {
23585
- icon: input.global.icon ?? null,
23586
- name: input.global.name
23587
- },
23588
- local: input.local
23589
- }
23396
+ state: input
23590
23397
  });
23591
23398
  document.meta = {
23592
23399
  preferredEditor
23593
23400
  };
23594
- await this.documentStorage.create(document);
23595
- if (input.slug && input.slug.length > 0) {
23596
- await this.cache.deleteDriveBySlug(input.slug);
23401
+ await this.legacyStorage.createDrive(id, document);
23402
+ if (input.global.slug) {
23403
+ await this.cache.deleteDriveBySlug(input.global.slug);
23597
23404
  }
23598
- await this._initializeDrive(document.id);
23405
+ await this._initializeDrive(id);
23599
23406
  this.eventEmitter.emit("driveAdded", document);
23600
23407
  return document;
23601
23408
  }
@@ -23607,11 +23414,11 @@ class BaseDocumentDriveServer {
23607
23414
  pullInterval
23608
23415
  });
23609
23416
  return await this.addDrive({
23610
- id,
23611
- slug,
23612
23417
  global: {
23418
+ id,
23613
23419
  name: name2,
23614
- icon
23420
+ slug,
23421
+ icon: icon ?? null
23615
23422
  },
23616
23423
  local: {
23617
23424
  triggers: [...triggers, pullTrigger],
@@ -23626,7 +23433,7 @@ class BaseDocumentDriveServer {
23626
23433
  this.stopSyncRemoteDrive(driveId),
23627
23434
  this.listenerManager.removeDrive(driveId),
23628
23435
  this.cache.deleteDrive(driveId),
23629
- this.documentStorage.delete(driveId)
23436
+ this.legacyStorage.deleteDrive(driveId)
23630
23437
  ]);
23631
23438
  this.eventEmitter.emit("driveDeleted", driveId);
23632
23439
  result.forEach((r) => {
@@ -23635,16 +23442,8 @@ class BaseDocumentDriveServer {
23635
23442
  }
23636
23443
  });
23637
23444
  }
23638
- // TODO: paginate
23639
- async getDrives() {
23640
- const drives = [];
23641
- let cursor;
23642
- do {
23643
- const { documents, nextCursor } = await this.documentStorage.findByType("powerhouse/document-drive", 100, cursor);
23644
- drives.push(...documents);
23645
- cursor = nextCursor;
23646
- } while (cursor);
23647
- return drives;
23445
+ getDrives() {
23446
+ return this.legacyStorage.getDrives();
23648
23447
  }
23649
23448
  async getDrive(driveId, options) {
23650
23449
  let document;
@@ -23718,13 +23517,8 @@ class BaseDocumentDriveServer {
23718
23517
  state = doc.state;
23719
23518
  }
23720
23519
  const document = input.document ?? this.getDocumentModelModule(input.documentType).utils.createDocument();
23721
- if (input.id && input.id.length > 0) {
23722
- document.id = input.id;
23723
- }
23724
23520
  const documentStorage = {
23725
- id: document.id,
23726
23521
  name: document.name,
23727
- slug: document.slug,
23728
23522
  revision: document.revision,
23729
23523
  documentType: document.documentType,
23730
23524
  created: document.created,
@@ -23734,7 +23528,7 @@ class BaseDocumentDriveServer {
23734
23528
  clipboard: [],
23735
23529
  state: state ?? document.state
23736
23530
  };
23737
- await this.documentStorage.create(documentStorage);
23531
+ await this.documentStorage.create(input.id, documentStorage);
23738
23532
  try {
23739
23533
  await this.documentStorage.addChild(driveId, input.id);
23740
23534
  } catch (e) {
@@ -23873,18 +23667,12 @@ class BaseDocumentDriveServer {
23873
23667
  handler = () => this.deleteDocument(driveId, signal.input.id);
23874
23668
  break;
23875
23669
  case "COPY_CHILD_DOCUMENT":
23876
- handler = () => this.getDocument(driveId, signal.input.id).then((documentToCopy) => {
23877
- const doc = {
23878
- ...documentToCopy,
23879
- slug: signal.input.newId
23880
- };
23881
- return this.createDocument(driveId, {
23882
- id: signal.input.newId,
23883
- documentType: documentToCopy.documentType,
23884
- document: doc,
23885
- synchronizationUnits: signal.input.synchronizationUnits
23886
- });
23887
- });
23670
+ handler = () => this.getDocument(driveId, signal.input.id).then((documentToCopy) => this.createDocument(driveId, {
23671
+ id: signal.input.newId,
23672
+ documentType: documentToCopy.documentType,
23673
+ document: documentToCopy,
23674
+ synchronizationUnits: signal.input.synchronizationUnits
23675
+ }));
23888
23676
  break;
23889
23677
  }
23890
23678
  if (handler) {
@@ -24141,6 +23929,13 @@ class BaseDocumentDriveServer {
24141
23929
  addDriveOperation(driveId, operation, options) {
24142
23930
  return this.addDriveOperations(driveId, [operation], options);
24143
23931
  }
23932
+ async clearStorage() {
23933
+ var _a2, _b;
23934
+ for (const drive of await this.getDrives()) {
23935
+ await this.deleteDrive(drive);
23936
+ }
23937
+ await ((_b = (_a2 = this.legacyStorage).clearStorage) == null ? void 0 : _b.call(_a2));
23938
+ }
24144
23939
  async _addDriveOperations(driveId, callback) {
24145
23940
  if (!this.legacyStorage.addDriveOperationsWithTransaction) {
24146
23941
  const documentStorage = await this.documentStorage.get(driveId);
@@ -24415,32 +24210,17 @@ class MemoryStorage {
24415
24210
  exists(documentId) {
24416
24211
  return Promise.resolve(!!this.documents[documentId]);
24417
24212
  }
24418
- create(document) {
24419
- const documentId = document.id;
24420
- if (!isValidDocumentId(documentId)) {
24421
- throw new DocumentIdValidationError(documentId);
24422
- }
24423
- if (this.documents[documentId]) {
24424
- throw new DocumentAlreadyExistsError(documentId);
24425
- }
24426
- const slug = document.slug.length > 0 ? document.slug : documentId;
24427
- if (!isValidSlug(slug)) {
24428
- throw new DocumentSlugValidationError(slug);
24429
- }
24430
- if (slug && this.slugToDocumentId[slug]) {
24431
- throw new DocumentAlreadyExistsError(documentId);
24432
- }
24433
- document.slug = slug;
24213
+ // TODO: this should throw an error if the document already exists.
24214
+ create(documentId, document) {
24215
+ var _a2;
24434
24216
  this.documents[documentId] = document;
24217
+ const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24435
24218
  if (slug) {
24436
24219
  if (this.slugToDocumentId[slug]) {
24437
- throw new DocumentAlreadyExistsError(documentId);
24220
+ throw new Error(`Document with slug ${slug} already exists`);
24438
24221
  }
24439
24222
  this.slugToDocumentId[slug] = documentId;
24440
24223
  }
24441
- if (document.documentType === "powerhouse/document-drive") {
24442
- this.updateDriveManifest(documentId, { documentIds: /* @__PURE__ */ new Set() });
24443
- }
24444
24224
  return Promise.resolve();
24445
24225
  }
24446
24226
  get(documentId) {
@@ -24457,56 +24237,20 @@ class MemoryStorage {
24457
24237
  }
24458
24238
  return this.get(documentId);
24459
24239
  }
24460
- async findByType(documentModelType, limit = 100, cursor) {
24461
- const documentsAndIds = Object.entries(this.documents).filter(([_, doc]) => doc.documentType === documentModelType).map(([id, doc]) => ({
24462
- id,
24463
- document: doc
24464
- }));
24465
- documentsAndIds.sort((a, b) => {
24466
- const aDate = new Date(a.document.created);
24467
- const bDate = new Date(b.document.created);
24468
- if (aDate.getTime() === bDate.getTime()) {
24469
- const aId = a.id;
24470
- const bId = b.id;
24471
- return aId.localeCompare(bId);
24472
- }
24473
- return aDate.getTime() - bDate.getTime();
24474
- });
24475
- let startIndex = 0;
24476
- if (cursor) {
24477
- const index = documentsAndIds.findIndex(({ id }) => id === cursor);
24478
- if (index !== -1) {
24479
- startIndex = index;
24480
- }
24481
- }
24482
- const endIndex = Math.min(startIndex + limit, documentsAndIds.length);
24483
- let nextCursor;
24484
- if (endIndex < documentsAndIds.length) {
24485
- nextCursor = documentsAndIds[endIndex].id;
24486
- }
24487
- return {
24488
- documents: documentsAndIds.slice(startIndex, endIndex).map(({ id }) => id),
24489
- nextCursor
24490
- };
24491
- }
24492
24240
  async delete(documentId) {
24241
+ var _a2;
24493
24242
  const document = this.documents[documentId];
24494
24243
  if (document) {
24495
- const slug = document.slug.length > 0 ? document.slug : documentId;
24244
+ const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24496
24245
  if (slug && this.slugToDocumentId[slug] === documentId) {
24497
24246
  delete this.slugToDocumentId[slug];
24498
24247
  }
24499
24248
  }
24500
- const parents = await this.getParents(documentId);
24501
- for (const parent of parents) {
24502
- await this.removeChild(parent, documentId);
24503
- }
24504
- const children = await this.getChildren(documentId);
24505
- for (const child of children) {
24506
- const childParents = await this.getParents(child);
24507
- if (childParents.length === 1) {
24508
- await this.delete(child);
24509
- }
24249
+ const drives = await this.getDrives();
24250
+ for (const driveId of drives) {
24251
+ if (driveId === documentId)
24252
+ continue;
24253
+ await this.removeChild(driveId, documentId);
24510
24254
  }
24511
24255
  delete this.driveManifests[documentId];
24512
24256
  if (this.documents[documentId]) {
@@ -24540,26 +24284,14 @@ class MemoryStorage {
24540
24284
  const manifest = this.getManifest(parentId);
24541
24285
  return [...manifest.documentIds];
24542
24286
  }
24543
- async getParents(childId) {
24544
- const parents = [];
24545
- for (const [driveId, manifest] of Object.entries(this.driveManifests)) {
24546
- if (manifest.documentIds.has(childId)) {
24547
- parents.push(driveId);
24548
- }
24549
- }
24550
- return parents;
24551
- }
24552
24287
  ////////////////////////////////
24553
- // IDocumentAdminStorage
24288
+ // IDriveStorage
24554
24289
  ////////////////////////////////
24555
- async clear() {
24290
+ async clearStorage() {
24556
24291
  this.documents = {};
24557
24292
  this.driveManifests = {};
24558
24293
  this.slugToDocumentId = {};
24559
24294
  }
24560
- ////////////////////////////////
24561
- // IDriveStorage
24562
- ////////////////////////////////
24563
24295
  async addDocumentOperations(drive, id, operations, header) {
24564
24296
  const document = await this.get(id);
24565
24297
  if (!document) {
@@ -24572,6 +24304,13 @@ class MemoryStorage {
24572
24304
  operations: mergedOperations
24573
24305
  };
24574
24306
  }
24307
+ async getDrives() {
24308
+ return Object.keys(this.driveManifests);
24309
+ }
24310
+ async createDrive(id, drive) {
24311
+ await this.create(id, drive);
24312
+ this.updateDriveManifest(id, { documentIds: /* @__PURE__ */ new Set() });
24313
+ }
24575
24314
  async addDriveOperations(id, operations, header) {
24576
24315
  const drive = await this.get(id);
24577
24316
  const mergedOperations = mergeOperations(drive.operations, operations);
@@ -24581,6 +24320,31 @@ class MemoryStorage {
24581
24320
  operations: mergedOperations
24582
24321
  };
24583
24322
  }
24323
+ async deleteDrive(id) {
24324
+ const manifest = this.getManifest(id);
24325
+ const drives = await this.getDrives();
24326
+ await Promise.all([...manifest.documentIds].map((docId) => {
24327
+ var _a2;
24328
+ for (const driveId of drives) {
24329
+ if (driveId === id) {
24330
+ continue;
24331
+ }
24332
+ const manifest2 = this.getManifest(driveId);
24333
+ if (manifest2.documentIds.has(docId)) {
24334
+ return;
24335
+ }
24336
+ }
24337
+ const document = this.documents[docId];
24338
+ if (document) {
24339
+ const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
24340
+ if (slug && this.slugToDocumentId[slug] === docId) {
24341
+ delete this.slugToDocumentId[slug];
24342
+ }
24343
+ }
24344
+ delete this.documents[docId];
24345
+ }));
24346
+ await this.delete(id);
24347
+ }
24584
24348
  async getSynchronizationUnitsRevision(units) {
24585
24349
  const results = await Promise.allSettled(units.map(async (unit) => {
24586
24350
  try {
@@ -25783,9 +25547,6 @@ function Syncing(props) {
25783
25547
  function Tabler(props) {
25784
25548
  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" })] });
25785
25549
  }
25786
- function TimelineCaret(props) {
25787
- 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" }) });
25788
- }
25789
25550
  function Timeline(props) {
25790
25551
  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,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAIABJREFUeJzt3Xm0XmV96PHvyUASCEmYQsIcJpkhzJOASLWK89KrtS6r7RLtba1Xl73qte1VOzm2asVeUMTSah3QAgoqk6gI4gACgowSCFMgCRAyD+fcP573lMPhnOS8797P+9vD97PWb53U1cV+ht9+9vPu/exngyRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiSpFwPRBZDUs62BPYDdgF2BHYAdgbkj/j0DmAVs1fk7A5g+zn/vSWBo1N+ngOUjYimwBFgMPNL5u7r0mknKzgmAVG07APsDB3T+7g/syzMX/Cp4EvgdcE8n7u78vZ00aZBUQU4ApGqYDOwHHNGJhZ2/cyMLVYLFwC2duBm4CbgrtESSACcAUpRZwAnAiZ04Dtg2tET9swy4Afh55+/1pEcNkvrICYDUH9sApwJnAKcDh5B+9Qs2ATcCP+zET4BVoSWSWsAJgJTPQuBM0kX/BNJCPG3ZBtJdgUs7cVtscSRJ2rypwAuBzwKLSCvpjeJxH3A28CJgykQ7Q5KknCaTLkznk1a8R18smx5LgXOB38PJgCSpzwZIt/Q/CzxK/EWxrfEY6c7AsZvvLkmSitkOOAu4lfiLn/Hs+C3wIWDP8TpPkqRuTAJeDHwTWEf8hc7YfGwELun02aQx+lOSpM3alvRr/3biL2pGb3EP8D6qs2OiJKnC9gE+TdqYJvoCZpQTq0hrBfZBkqRRFgIXkjalib5gGXliI/B14CgkSa13ImmzmUHiL1BG/+JK4BQkSa3zfOBq4i9ERmxcQZoESpIa7gjSL/7oC49RrfgecAySpMbZEziH9Bw4+mJjVDe+g4sFJakR5gAfBdYSf3Ex6hHrSZPFnZAk1c5k4O2k7WKjLyhGPWMZ8Of42WZJqo1TgJuIv4AYzYgbgeORJFXWHOAz+C6/UX4MAhcAc5EkVcqbgCXEXyiMZsdSUq5JkoLtBVxO/IXBaFd8B9gVSVKINwMriL8YGO2Mp0gfjBpAktQXOwMXE38BMIwh0h2oXZAkZfU60utZ0YO+YYyMJcDLkCSVbjpphX/0QG8Ym4sLgG2QasBnV6qDg0ifcT0kuiDSBNwGvBa4I7og0uZMii6AtAVvBX6BF3/Vx8GknH1DdEEkqY6mkPbwj76laxhF4hxgK6QK8hGAqmg+cCF+p13NcAPwGuDh6IJIIzkBUNWcSLr4z48uSI2sBhYB93X+LiW9KbGs8+/HSe+sD3b+Qvri3arOvycBszv/ngrM6vzfczr/3oW0Be68TiwA9sbFbt14CHgV8MvogkjDnACoSt4EfBGYFl2QinoEuBW4GbgFuJt00X8sqDxzSROBA0kLNQ/t/N09qDxVt4a0puXr0QWRpKoYAD5E+oUa/cy2KvEEcBnwV8ALgR17bdwAOwEvBf4v8F1gOfHtWZUYBD6CP74kiWnAfxA/MEfHctIvw7eT3nho0hs6k4AjgHcB/0Wa3ES3d3T8O+lxiyS10hzgx8QPxhExSHoe/HfAScDkgm1ZJ1OAU4B/BH5NfF9ExeXAtgXbUpJqZ2fgJuIH4X7HbcD7cO/4kfYk3R24lvY9BroFvyooqUX2Bu4hfvDtV9wAvBsXx03E7qQJ0m3E91u/4l7SOSFJjXYo6X3o6EE3dywHPtupr3pzDPA52vHJ5weB55XTbJJUPQtp/pf8fkx6nXF6SW2mtBfBu0ivPUb3b854FCeMkhpoIWlTmuhBNkdsAr4DHF9aa2ksk4AzSG3d1LUCy4Fjy2owSYp2NM18F/wp4FOkRWzqrwOBfyXtZhidB2XHE8CR5TWVJMU4mua9970C+FvSa4yKNZ+0TmAd8XlRZizFxwGSamx/YAnxg2lZsQr4DOkVRlXLHqQv720gPk/KiiWkrZUlqVYWkFY2Rw+iZcR60op+L/zVdwBpR8WmrBF4EF8RlFQj82nOe/7fIz1vVr0cQdppLzp/yoh7SV9hlKRKm0Pa3Sx60Cwad5A+aKN6ewPN2HfiV7htsKQK2wq4ivjBskisBt5P8z7UMgv4A+ALwM9JnxBe34nHOv/buaQLZtMuNLOBfwE2Ep9fReIHNC8vJTXAAHAB8YNkkfghsF/ZDRNsf+A8untdbhXwRZrXFkeTPsAUnWdF4gL8lLCkivkI8YNjr/EE8DaaNbDOAD5JsVXx64GP06xdDScD7yTt4RCdd73GR0pvFUnq0R8RPyj2GlfQvK+x7QfcSnltdD1pYWeT7AVcQ3z+9RKDwOvLbhBJ6tZxwFriB8VuYy3wHpr1qx/SlsuPUX57LQYO62M9+mES8F7qmb+rgaPKbxJJmpj5wEPED4bdxm+AwzO0R7T9yHPxHzkJaOLraIeT3vqIzstu40Gad2dGUg1MA64jfhDsNs4jPR9vmhmUe9t/vLie1PdNsy3wFeLzs5f+2CpDe0jSuM4lfvDrJtYCZ2VpiWr4JP1ryw/3qU4RzqJ+jwQ+m6UlJGkMbyJ+0OsmFpPWKjTV/vR3D/ynaeajgGEnk/dRSo5wUaCk7A4gXQCiB7yJxo+BuVlaojrOo//t+vm+1CzOAtJakej8nWisIJ2bkpTFDOq1ze9/0Mzn1SPNortNfsqKlcDMPtQv0izgMuLzeKLxG2DrLC0hqfW+QPwgN9H4W5r3it9Y/oC4Nm7DbefJwKeJz+eJxtl5mkFSm72K+MFtIrEeeGumNqiiyEnZOX2oX1W8nf6us+g1BoGXZWoDSS20M/VYFLUaeEmmNqiqnxPX3j/rQ/2q5NXAOuLzfEuxhHTOSlJhlxA/qG0pngZekKsBKuxxYi80bXMmsIb4fN9SXEo7HoFJyuhtxA9mW4ongBNzNUDFRf4iXduH+lXRqdTjTZg/ydUAkppvd6r/1bTHgSNzNUANRLd/W51G9ScBT9C8D11J6pOLiB/ENhdPkr7x3mbRfdBmxwDLiO+DzcV3s9VeUmNFvl42kXgaOCFb7esjuh/a7hjSRDS6HzYXb8xWe0mNswNpgVf0wDVerKadC/7GEt0XSmsCqrww8HHSOS1JW3Q+8YPWeLGe9r3qtznR/aHkFVR7n4A27dkgqUcnkjYTiR6wxos2bfIzEdH9oWe8heqeO5uAY7PVXFLtTSJ2Y5ktxUfyVb22ovtEz/Zh4vtkvPglaWtjSXqOdxA/SI0X/4Ebm4wlul/0bAPAV4jvl/HiT/NVXVJd7QAsJX6AGit+RPO/6ter6L7Rc00DfkJ834wVjwNz8lVdUh19hvjBaax4GJifsd51F90/GtvOwGLi+2es+HjGekuqmQWkbV2jB6bRsR44KWO9myC6jzS+46jmebUO2CdjvSXVyH8SPyiNFWflrHRDRPeRNq+q39L4as5KS6qHo6nmq0tfzFnpBonuJ23ZBcT30+gYxG20pda7kvjBaHT8BpiRs9INEt1X2rKZwJ3E99XouCxnpSVV20nED0KjYy1wRM5KN0x0f2liDiVtYR3dX6Pj5JyVllRdVfz1/56sNW6e6P7SxL2b+P4aHT/IWmNJlXQi8YPP6LiCtBuhJi66zzRxk4AfEt9no+OUnJWWVD2XEz/wjIwngF2z1riZovtN3dmb9Cnr6H4bGd4FkFrkOOIHndHxtqw1bq7oflP3qrjltutupJb4JvEDzsi4Bvf571V036l7A8DVxPfdyPhK1hpLqoQFwEbiB5zhWAsckLXGzRbdf+rN86jWLoEbcXfA1nHBVfu8h2p9EvRDwB3RhZD67E7gY9GFGGEy8K7oQkjKZwdgJfG/NobjDmBq1ho3X3QfqnfTgXuJ78PheBqYnbXGqhTvALTLnwDbRBdihHcDG6ILIQVZC7w3uhAjzATeHF0ISeUbAO4i/lfGcFyRt7qtEd2PKu4HxPfjcNyFC3Klxnkx8YPLcKwHDsxb3daI7ksVdyjVWph7Rt7qSuq3/yJ+YBmOz2aua5tE96XKcT7xfTkc385cV0l9tBvpWXv0wDJEWoS4c97qtkp0f6oce1Kd1wLX4znaCi4CbIc3A1OiC9FxNrAkuhBSxdwP/Gt0ITqmAn8YXQhJ5fgt8b8qhoAVwI6Z69o20X2q8sylOq/p3pq5rpL6oEr7/n8kc13bKLpPVa5/Ir5Ph+OozHWVlNnZxA8kQ8BTwJzMdW2j6H5VuXYB1hDfr0PAv2Suq6SMtgKWEj+QDAGfylzXtoruV5Xv88T36xBprU6Vtg2X1IWXEj+IDJHeQNgzc13bKrpvVb69qc6+AKdnrqsC+RZAs702ugAd3yCtcpa0Zb8DLokuRMfrogsgqXtTgMeJ/wUxBBybua5tFt23yuNU4vt2iDSGVOUVYkkTdAbxg8cQ8OPcFW256P5VPjcS379DwAtzV1QxfATQXK+JLkDHudEFkGrq7OgCdLwiugCSunM/8b8cngC2zl3RlovuY+WzDen12eg+vjd3RRXDOwDNdBiwR3QhgAuA1dGFkGpqFfD16EKQ3ko4ILoQKp8TgGZ6aXQBOr4UXQCp5r4YXYCOM6MLIGlifkT8bcMbstdSEN/Pyu824vv56uy1VN95B6B5ZgMnRhcC+Fp0AaSGqMK5dCKu52kcJwDNcyrx7+0OAd8KLoPUFF8l/m7LNKrxw0IlcgLQPKdGFwD4KfBAdCGkhrgX+GV0IYAXRBdA5XIC0DxVmAB8M7oAUsNU4ZxyQyCpwmYT/xGRQdInTdUf0YvD1B/PI76vNwCzcldU/eMdgGY5ifjPd94IPBxcBqlp7gTuCC7DFOC44DKoRE4AmuWk6AIA34sugNRQVfhC4PHRBVB5nAA0y9HRBQC+H10AqaEuiy4A3gFolIHoAqg0A8BSYPvAMjwBzCWtQ1B/RD+Hdwzpn62AZcDMwDIsA3YiPu9UAu8ANMe+xF78Aa7Ai7+Uy3riP6+9A7BPcBlUEicAzXFsdAGAq6ILIDXcldEFAI6MLoDK4QSgORZGFwC4ProAUsP9MLoApK+NqgGcADTHIcHHf5L00RJJ+dwKrAgugxOAhnAC0BwHBx//OtImQJLy2QT8PLgMTgAawglAM8wGdg0uw3XBx5faIvpc2wOYE1wGlcAJQDMcTPzrWD8LPr7UFtF3AAaAA4LLoBI4AWiGA6MLANwSXQCpJW6KLgCwX3QBVJwTgGaIfi/3YeDx4DJIbfEwsCS4DNFjjkrgBKAZ9g4+vr/+pf66Ofj43gFoACcAzRA9Abg1+PhS20Sfc04AGsAJQDM4AZDa5c7g4y8IPr5K4ASg/maR9ueOFD0YSW0Tfc7tAEwPLoMKcgJQf7tFFwC4L7oAUsvcFXz8AWCX4DKoICcA9bdz8PFXkT5DLKl/HgWeDi5D9OZjKsgJQP3NDz7+Ivw2uBRhcfDxnQDUnBOA+psbfPxFwceX2uqB4OP7CKDmnADU37zg498ffHypraLvAEQvPlZBTgDqb8fg47sDoBTjoeDjbx98fBXkBKD+or/K5QJAKUb0ubdd8PFVkBOA+psVfPzoQUhqq+hzzzsANecEoP6iJwDLg48vtdWy4OM7Aag5JwD1Nzv4+NG/QhTL78LHiZ58bx18fBXkBKD+tg0+/lPBx1esHwIHRheipVYFH9+tgGvOCUD9TQs+/trg4yvWPOAa4JDgcrTR6uDjOwGoOScA9Tc1+Pjrg4+veHOBq3AS0G9OAFSIE4D6mxJ8/A3Bx1c1DE8CDo4uSIusCT7+jODjqyAnAPUXfQdgXfDxVR1zSWsCDo0uSEtEj9/Rx1dBdmD9Rd8B8BGARtqJdCfgsOiCtED0ua+acwJQf9Ff4os+fttV8RHMTqSFgUcFl6PpJgcf33O/5pwA1F/0L/DoRxBttzK6AOPYDvg+cHh0QRos+g6AE4CacwJQf9ETgOhfIW23KLoAm7EjaU3A0dEFaSgnACrECUD9RS/C2yr4+G13c3QBtmD4TsDC6II0UPTke2Pw8VWQE4D6i74DEL0RUdtdE12ACdgBuBI4MrogDRM9AYjeh0AFOQGov+g7ANEfI2q7S4ifBE7E9sAVuDCwTNHrb5wA1JwTgPqLHvyjP0bUdk8AF0YXYoKGJwGuCShH9Nf4nADUnBOA+oveDcw7APE+BgxGF2KCtiNNAo6JLkgDzA0+vhOAmnMCUH/RnwSdE3x8wS3AF6IL0YU5wOXAsdEFqbmdg49f1VdQNUFOAOpvWfDx5wUfX8l7gbuiC9GF4UnA8dEFqbHoCcDS4OOrICcA9Rd9EkYPQkpWAv8DWBFdkC7MJr0i6CSgN9GPAKLvPqogJwD15x0ADbsZeCX1ejY7G/gBcEJ0QWooegIQPfaoICcA9Rd9Es4PPr6e7Rrg5dRrEjCLdCfgxOiC1Ez03bfou48qyAlA/UWfhHsFH1/PdTX1nQScFF2QGom+AxA99qggJwD1F30SLgg+vsZWx0nAtsD3gJOjC1IDA8CewWV4KPj4UusdRPooR2RE/xLR+J4PPE18jnQTK4EX5GiMBtmV+H7aN3stJW3W1qRNYCIHAldxV9vpwCriLxjdxNPAKTkaoyFOI7Z/BoHpuSupvHwEUH+rgceCy3Bg8PG1eXV8HDATuAwnAeOJ/vX9OLA2uAwqyAlAM9wXfPyDg4+vLavjJGAb0iTgtOByVNFBwcdfHHx8lcAJQDMsCj6+E4B6uBr4feq1hes2wKXAC6MLUjGHBx//nuDjqwROAJphUfDxnQDUx0+o32ZBW5M+e3xacDmq5NDg498dfHyVwAlAM0Q/Atgd2Cm4DJq4Oj4O2Bq4GDgyuiAVMI/48+3O4OOrBE4AmuGO6ALg513rpo6PA2YBFwE7RBckWBXeunEC0ABOAJrh1ugC4ASgjur4OGB34FPRhQhWhY2SfAQgVcgDxL4X/N38VVQmddsnYBA4NktL1MPPiG1/dwCUKua7xA4Ky/GOUp3VbRJwSZ5mqLxtgPXEtr2T/YZwwG6OW4KPvx3xK5PVu7qtCTgT2C26EAGOB6YGl+Gm4OOrJE4AmqMK6wBOiy6ACqnTmoBJwGuiCxGgCs//b44ugMrhBKA5ou8AAJwaXQAVVqdXBE+PLkCA50cXAO8ASJUzhfivvj3RKYfqrw5rAu7LVvtqmkp6RBN9jg/krqj6wzsAzbERuCG4DHOAE4PLoHLU4U7AHrRrwnkqaRFgpOE3ENQATgCa5afRBSAtJFMzVH1h4CRg2+hC9FEV1jxUYYyRNIYXE39b1gVCzVPlxwHbZax3lQwADxLf3m1cdyHVwmzSo4DoQWLv3BVV31VxErCJ9jwCOJb49t4AzMxdUfWPjwCa5SngN9GFoBq3KlWuKq4JeIA04W2DV0cXgHR3r6qPg9QDJwDNc110AYDXRhdAWVRtEvDr6AL00auiCwBcFV0ASZv3WuJvFQ6SPtqiZqrK44B35q5oRRxIfFsPAb+Xu6KSiplDelYXPVi8L3dFFSp6ErAJ2DV7Lavhg8Sfz2uAGbkrKqm4HxM/YNyWvZaKFjkJuLgP9auCAeAe4s/nK3JXVFI5PkD8gDEEHJO7ogoXMQkYpD25dQbx5/EQ8L9zV1RSOY4gfsAYAj6Xu6KqhH5PAr7Un2pVwteJP4+HgINzV1RSOQaAh4gfNFaQ9iZQ8z2f/nyL4n5g+z7VKdqOwFriz+N7cldUMXwNsJmGgB9EF4K0TetboguhvujHp4RXdI6xPOMxquStwLToQtCe9RZSY7yM+F8OQ8DdONFsk9NIG1KVnUdP0a7PTQ8AdxJ//g7RrnaXGmEr0qc7owePIdJkRO1xJLCI8vLnd6R1LW1yGvHn7RCwFJict6qScjif+AFkCLg8d0VVOdsBXyat2O81bwZJC/7m9LfolfBt4s/bIeALuSsqKY+XED+ADA/kB2auq6rpWOAS0sY9E82XTaTnzm151W+0Qyg2cSoz/PqfVFNTSbfwogeRIeDzmeuqatsV+AvgIuA+nj0h2NT53y4ibe/blh3+xvNV4s/XIdKbRK7fkWrsC8QPJEOk98TnZ66r6mMy6THBdviMeaT9qMYnvYeAf8pcV0mZvZD4gWQ43BhI2rwvEX+eDkdbH8FIjVGVvcSHgPXA3nmrK9XWHsA64s/TIeAO0tihBvP5TvMNkd4GqIKpwF9FF0KqqPeTXt+tgnNJY4ekmtuFanwieIj0fPOAvNWVamc30id3o8/PIdJdiJ3yVldSP11M/MAyHF/PXFepbr5M/Hnp+Sk1VFW2Bh4iveO8MG91pdo4nO72ScgdL8pbXUn9NhlYTPzgMhzuDiglVxJ/Pg6H3+6QGuqDxA8wI+P1easrVd6riD8PR8Y781ZXUpTt6c832ycaj9DOfd4lgBmkDx1Fn4fD8RQwK2uNJYX6HPEDzcj4bN7qSpX1D8SffyPjE3mrKynaPlRnq9GhTlmOzlpjqXoOoDqb/gyfh3vlrLCkariQ+AFnZPwS94NXe0wCriX+vBsZX8taY0mVcQzxA87ocPGR2uJdxJ9vI2MQOCxrjSVVyk+IH3hGxlN4C1LNtwBYSfz5NjIuzlpjSZXzAuIHntFxDb6DrOaaBPyI+PNsdByXs9KSqulq4gef0fHerDWW4ryf+PNrdFyRtcaSKusk4geg0bGWtDWq1CRHUa1V/8NxYs5KS6q27xE/CI2OO4Btc1Za6qOZpJyOPq9Gh8/+pZY7irQKOHowGh2+lqSmuID482l0bMI7bZKAi4gfkMaKs3JWWuqDPyP+PBorLshZaUn1sT/VfD65Fjg5Y72lnI6jmufVOtLriJIEwKeIH5jGiqXAvhnrLeUwn2p9fntkfDRjvSXV0CzS1/miB6ex4nb8aqDqYzrwM+LPm7FiCTA7X9Ul1dVZxA9Q48X3gSn5qi6VYgD4CvHny3jxx/mqLqnOJpE+zBM9SI0X/5yv6lIp/o7482S8uBF32pS0GadSzdcCh+Pt+aouFfIO4s+P8WITbvojaQK+RPyANV6sB16dr+pST14JbCT+/Bgv/l++qktqku2BR4kftMaLdcCZ2Wovdec0YDXx58V48TAuopXUhdcTP3BtaRLw0my1lybmeGAF8efD5uK12WovqbEuJn7w2lysIv36kiIcCTxB/HmwufhOttpLarTdgKeIH8Q2F0/j4ib131GkTaqi839zsRzYNVcDSGq+txM/kG0pngSOzdUA0ignUP1f/kPAm3I1gKT2uIT4wWxL8TRwRq4GkDpOofrP/IdIH/iSpMLmUt1tgkfGGuAVmdpAeiXVXu0/HEtI56wkleIlVHuDoOHYALwlTxOoxd5Btd/zH45BnARLyuCzxA9wEx0EP0zal10qYgD4W+JzeqLxmTzNIKntpgE3Ez/ITTS+AczI0hJqg2nAvxGfxxONm0lfIpSkLA4mLbiLHuwmGj8B5mVpCTXZLsDPic/ficYKYL8sLSFJI1R9l8DR8SBwXJaWUBMdBzxEfN52E2/M0hKSNIZPET/odRNrgbdlaQk1yZ+TtpmOztduwuf+kvpqCvBD4ge/buObwOwM7aF6mwl8lfj87DZ+CmyVoT0kabN2Jt1ejx4Eu407gYUZ2kP1dBRwB/F52W0sJp2DkhTieNIGPNGDYbexFngPMKn8JlFNTALeD6wnPh+7jTW4rkVSBbyeemwSNFb8CNi7/CZRxS0g9X10/vUSg8Abym8SSerN+4kfGHuNp0k7vblxUPNNAv4CWEl83vUaHyy9VSSpoHOJHxyLxI+BA0tvFVXFAcC1xOdZkTi/9FaRpBJMAb5P/CBZJNaRthF2R7Xm2Br4e+r3et/ouApX/EuqsFnAr4kfLIvGvcCrS24b9d+rgEXE51PR+CXp3JKkSpsL3E78oFlGXA0cXm7zqA8OAi4lPn/KiLvxdT9JNbI7zfjlNUT6DOz5wJ5lNpCy2A34MrCJ+LwpIxYDe5TZQJLUD/tQvz3VNxdrgU8DO5XZSCrFnsDZ1HNPivHiMVyUKqnG9gceJX4wLTNWkvZf363EdlJvFpD6Yi3xeVH2xf/QEttJkkIsBJ4gflAtO9YCnyddhNRfhwBfIT2eic6DsuNx4LDymkqSYi0k/aqJHlxzxEbgW8CppbWWxjIAnAZ8m+Y84x/r4u+iU0mNcxDNWhMwVtwI/Anp63Iqx07Ae0kfcYru35zxKP7yl9RgewH3ED/Y5o4VwAXAGaW0WvsMACcD5wCrie/P3HE/ab2MJDXa7jT/19zIuA34a2DfMhqv4Q4k7XXfhknicNxBOickqRXm0YwdA7uNG4C/xF97wwaAY4F/BH5LfP/0O24kbZwlSa2yLfX/dkCRuAP4GGnxYJv2eJ9KejRyNvAg8f0QFd8nnQOS1EpTSM95owfj6FhJ2rr23cARwOQijVox2wCnA/8XuJJ6f4q3rDiXlPuS1HrvAwaJH5irEiuAK0hfJjwT2KX3pu27ecArgU8CPwM2EN+eVYlB4AO9N61UnoHoAkgjvJ60j7uf4h3bY6R1E7cAd3XiDmBJUHl2BfYjLW48iPQK22G4VfJ4VgNvBb4RXRAJnACoeo4DLsRtdruxEnigE4tJz9WXdWIpaRfGFcD6zt9NPPcRwzY8sw5hEukivhNpgdq8Ef+e3/n3XsDWmerTRPeTPi99U3RBpGFOAFRFOwL/ie/QqxmuBV5L3J0aaUxNWmik5lhNmgBsA5yAE1XV1+eAN5LuvEiSuvBK4EniF28ZRjexAngDkqRCDiItfIse1A1jIvEr3PVRNeAjANXB48D5pE1TjsNHAqqmIdLnoV9PyllJUonOoPlfFDTqF0uAVyBJympH4CLiB33DGAIuI70qKUnqk7NwgaARF0+SNvaRJAWYT9o4KPpiYLQrvoOf8JWkSng57f6ynNGfeBR4M5KkStkOOA8/KmSUH5tIX/BSbQqmAAAQ9ElEQVTbDklSZZ0C3Ej8RcNoRvwMOAZJUi1MIt2qfYT4C4hRz1gGvAv3S5GkWpoFfBxYR/wFxahHrCHlzBwkSbW3L/AtXB9gjB+bgC8DeyBJapyjgO8Sf7ExqhXfBQ5DktR4x5He5Y6+8BixcQUpFyRJLXMKcA3xFyKjv3EpcCySpNY7FvgGsJH4i5ORJ9YDXwGORJKkUfYCPorfGGhSrAA+g4v7JEkTsD3wf4AHiL+AGb3F7cBfkF4FlSSpK5OAM0iPB9YTf1EzNh8bSYs7zwAGxuhPSZK6Nh/4AHAP8Rc649lxC/BeYN64vSdJUkEDwGnAOcDjxF/82hqPAv8MLNxsb0mSlMFk4GTSIrMlxF8Umx5LgQtIn3+eOoH+kSQpu62AM4EvAg8Sf7FsSiwCPke66+KHeaSSuEhGymdv0i/VlwHPB6bFFqc2NgI3kBbzXckzn3aWVCInAFJ/bAu8EDgdOIm07/yU0BJVxwbgl8CPOnEtsDK0RFILOAGQYswEjidNBk7q/Hvb0BL1z+PALzrxU+A6YFVoiaQWcgIgVcNk4HnAoaS7A4d2Yq/AMhU1/Pz+tk78inTRXxRXJEnDnABI1TabNBE4gDQZ2AtY0In5YaV6tkeB+zrxu87f3wC/BZ4OLJekzXACINXXdNKEYDdgJ2CHcWJGJyBNKCaRXqGb2fnfNvDsZ+4rSLfkn+r8ewXwBOnW/WPAI6SL/hJgMbAmQ90kSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZJUAQPRBdAWzQAWALt3Ymdg287/Pr3z/7MWWAM8DSwBFgMPAIs6/7vay/xRr2YBh5PyZy9gD2AXYCtgDjAVmEzKnxXABuBRUt48ANwP/BpY2t9ia6KcAFTLZOAY4GRgIXAksD8wqcf/3iBwF3BjJ34K/ALYVLikqiLzR0XsC7wYeD4pd/alnGvEA6T8uR74AXALMFTCf1eqvTnAW4GvA8tIJ0bOWNY51ls6x1a9mT/q1QBwIvAvwD3kz53heBj4EvD7pEmr1CpTgVcBF5JusfbrxBsda4BvAK/olEn1YP6oiD2AD9Pfi/548Qjwz8DBWWssVcC2wLtIt8SiT7yxTsQPAdvlqrwKM39UxOHABcB64vNlrLgWeDk+mlbDbAd8jLRQJvok21I8Bfwj3t6tEvNHRRwOfI/43Jho/Bw4PUtLSH00HXgv/Xk2W3YsBd4DTCu9VTRR5o+K2B34N9Kizeh86CUuBQ4pvVWkPjgDuJf4k6ho3IOz8Qjmj3o1ifSoaCXx/V80NpDuKA2/sipV2nbAeaRXqKJPnrJiEPgi3tbtB/NHRRxIel0zus/LjjtIr7dKlXUyaROV6JMlVywmvTakPMwfFfFWYBXx/ZwrNgJ/Q+/7WkhZDJBuuVV1dW2ZsYG02tuTsDzmj4qYDpxDfN/2K64G5pXSclJBM4BvE39S9Du+ic/lymD+qIh5wK+I789+xyLgoOLNJ/Vue+AnxJ8MUXE9sFPhVmwv88f8KWIf4G7i+zEqlgOnFG5FqQd7AXcSfxJEx29JO4upO3th/pg/vTuG9KpldP9FxxrSTpRS3+xGM17RKivuBnYt1KLtYv6YP0Uchhf/kbEOeFmhFpUmaGfgduKTvmpxFzC/QLu2hflj/hTxPNInd6P7q2qxDnhJgXaVtmgW8Bvik72qcTNpv3qNzfwxf4rYFXiI+H6qaqwEjui5daXNmAR8h/gkr3pchp/4HIv5Y/4UMR24gfj+qXo8BOzSYxtL4/oU8cldl/hEj23cZOaP+dOrAeCrxPdLXeI6/AaFSvQ64pO6bvGanlq6mcwf86eI/0l8f9QtPtNTS0uj7EY9v8YWHcvx9S4wf8yfYg6k2dv75opB4KU9tLf03yYB1xCfzHWNq2j3lq/mj/lTxFbAjcT3Q13jYWDHrltd6vhz4pO47vGOrlu9Ocwf86eIDxLf/nWP87tudQmYS7oNGZ3AdY/ltHO7V/PH/Clid9JrbdHtX/cYxO2C1YPziU/epsQXu2z7JjB/zJ8iLiS+3ZsStwBTumt+tdmRpJljdOI2JTbRrg06zB/zp4iTiG/zpsUfd9UDarVLiE/YpsW3u+qBejN/zJ8iriC+vZsW9+JdAE2Av97yxCBwdBf9UFfmj/lTxAnEt3VT4y0T7wa11UXEJ2pT41td9ENdmT/mTxGXEt/OTY27aPdrpc8xEF2AitkduA/3Is9lE7APcH90QTIxf/Jqev7sAfwO8yenF5EesQhnQ6OdhSdfTpNp9mIc8yevpufP2zF/cnt7dAGqxDsAz5hC+mXhl6TyegTYE9gQXZCSmT/9Yf6oiI2k/Hk4uiBVUKcJwCzgTOB04HBgL2AOMDWwTP20grQ16uWk91oXAY8Cs0lt8DzgYNItrt8HZoSUUlVl/qgI82dsG4AnSe3xa+Bq0jqOpwPL1Cj7A+fR3g9i3A38GbBNF202E/hT4IEKlN8wf4z6hvnTfawibV61XxdtplFmAJ8kzbCiOzQi1gB/TfogSK+mAR8A1lWgPob5Y9QnzJ/isR74ODC9QBu20n7ArcR3YFTcDxxauBWfcSRwTwXqZZg/RvXD/Ck3rgfmF27FllgIPEZ8p0XFzeRZCDQfuK0C9TPMH6O6Yf7kicXAYYVbseH2o90X/9yrgOeSFqtE19Mwf4zqhfmTNxYD84o2YlPNoN23/ddQ7m238RzdOVZ0fQ3zx6hOmD/9ietJayMqoUqbTnwUeFV0IQJ9BPhmH47zMGlf9Rf24VjqH/NHRZg//bEbqf7XBJcDqM4+APuTng+19WtN95DeoV3fp+NNB35L2ktB9Wf+qAjzp79Wkh53PxpdkKpsBfw+2nvxB/g0/Tv5ANaSXk9RM5g/KsL86a+ZwN9EFwKqcQdgFml7z62jCxJkBWnhzao+H3c26XZcW9u9KcwfFWH+xFhFWhC4MrIQVbgDcCbtTQJI22v2++QDeAq4LOC4Kpf5oyLMnxjbkK59oaowATg9ugDBLg889rWBx1Y5zB8VYf7ECb/2VWECcHh0AYLdEnjsGwKPrXKYPyrC/IkTfu2rwgRgQXQBgi0KPPZDgcdWORYFHtv8qb9Fgcdue/6EX/uqsAhwHcU+OFF300ltEGFrYp7/qTzmj4owf+KsI/hDQVW4A9B2ka8/bgo8tsph/qgI86fFqjABWBFdgGDdfGe7bLMDj61ymD8qwvyJ81R0AaowAbgvugDB9g889t6Bx1Y5zB8VYf7E+V10AaowAfh1dAGCHRJ47PBVqCrM/FER5k+cm6MLUIUJwNXRBQj2osBjt/WDHE1i/qgI8yfOVdEFqMJbADNJH0WIfBYVaS2wM/1fC7ENqd1n9vm4Kpf5oyLMnxhuBdyxEvhadCECTQf+MOC4b6S9J1+TmD8qwvyJ8VWCL/5QjTsAkD6NeBswNbogQRaT2qBf7+NuRfocZ9sX4TSF+aMizJ/+Wg8cSAUWAU6OLkDHcmBb4KToggSZDaymf3tj/yXwuj4dS/mZPyrC/OmvTwAXRheiaqYD1wNDLY31wDGFW3HLTiA994uur2H+GNUJ86c/cR0wrXArNtR80u2o6E6KintI3+bOZXfgkQrU0zB/jOqF+ZM3HiAt/NNmHEa7JwG3AXMLt+Jz7U768ld0/Qzzx6humD954gHg0MKt2BI7AT8ivtOiYjFwXOFWfMYJtHvm3bYwfwzzpzpxHf7y79o04MOkVyWiOzAi1gAfoNjXorbq/Dfa/MytrWH+GOZPbKwD/gGf+RcyD/g87Z0ILAL+lO4+nLENcBZwbwXKb5g/Rn1jEeZPt7ESOIcavOZYlX0AJmImcCbwAuAIYAEwhzTLbIPVwGWkV3VuAB4ClgEbSe2wAFhIap+X0u5NNvRc5o+KMH/Gth54kvRRu5uAH5LaKXyTn4mo0wQgtymk2e6uweVoukeAPYEN0QUpmfnTH03On/vJuwpfacKyJ/BwdEGqoApbAVfFRuBL0YVogS/QvMEbzJ9+aXL+fDm6EC1wMV78/5t3AJ5td9KtnKrskNg0m4B9SL90msj8yavp+bMHaXtY8yefFwFXRBeiKrwD8GyLgUuiC9FgF9HcwRvMn9yanj8PAN+LLkSD3QVcGV0IVdtCYJD4laRNi0Hg8C76oa7MH/OniOOJb+umxpu76Ae12MXEJ2vT4ltd9UC9mT/mTxE/IL69mxb3kBZaSlvkr7hyYxPt+PU2zPwxf4o4kfg2b1q8pZsOkM4jPmmbEud22fZNYP6YP0V8g/h2b0rciAsr1aUdgKXEJ2/dYxnp2w5tY/6YP0XsBjxNfPvXPQZJ3yLQGJwVjW8NaTenM6MLUnP/C/hJdCECmD/laGv+rCBdwM6ILkjNfRk4O7oQqqdJwFXEz2LrGlfQ7ldNzR/zp4ippG13o/uhrvEQ6U6c1LNd8VZuL7GctDFO25k/5k8R++KjgF5iEHhJD+0tPcdriU/ousWre2rpZjJ/zJ8i3kF8f9Qt/qmnlpbG8Unik7ou8bEe27jJzB/zp4h/J75f6hI/Bab11szS2CaRtnmNTu6qx2W4uHQs5o/5U8R04Hri+6fqsQiY21sTS5s3C7iF+CSvatxEe74D3gvzx/wpYj7pexPR/VTVWAEc1nPrShMwF7id+GSvWtwJzCvQrm1h/pg/RewPPEJ8f1UtVgMvKNCu0oTtStpbOjrpqxJ3A7sUatF2MX/MnyIOxTdLRsY63G9DfbYncAfxyR8dt+PrWr0wf8yfIo4CHiO+/6JjNfCygm0p9WQ74MfEnwRRcR2wY+FWbC/zx/wpYm/SN+6j+zEqlgPPL9yKUgEzgG8SfzL0O75GWpmsYswfFbEz8Avi+7PfcR9wQAntJxU2ALyL9Cwq+sTIHRuA93XqrHKYPypiOvAZ4vu2X3EVaeIjVcqJNPs1nQfwy1o5mT8q4o+AVcT3c67YCPw17f4+hCpuDvAF0l7U0SdMWTFI+ib7nBLbSWMzf1TEAcC1xPd52fFb4KQS20nK6nTS603RJ07RuAs4rdym0QSYP+rVJOCdNOMjQuuBv8f1IqqhacC7qec7u4+TnktvVXqraKLMHxWxG/Al0q3z6HzoJS4BDiq9VaQ+mwP8A/Ak8SfVluJJ4O+A2VlaQr0wf1TEocClxOfGRONnwKlZWkIKNJP0q2gR8SfZ6LiPtDrb57TVZf6oiMOAc4A1xOfL6BgErgBenq32UkVMIe1e9XXSTlZRJ91q4D9J22j6Bbb6MH9UxK7A31CNTYQeAj6B7/SrpWYDbyYNpI+T/4R7HPhq55iz+lA/5WX+qIjjSXsI9HMy8CBwHvAinDiGcjOOaplE2uP7JODIzr+fR+8nySbSfvM3Ar8Cftr592DhkqqKzB8VsTfwYuBkUu7sRznv3C8i5c/1wOXArSX8N1UCJwDVN5304Zg9SB9N2Zn0q286aRtZSLdi15EWYD1G2nBlMXA/sLbP5VW1mD/q1bbA4aSJwR6d2IX0dsoc0hsek3gmd9YDS0h580Dn76+BZf0uuCRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJOf1/TBeQ5OE/WfQAAAAASUVORK5CYII=" })] })] });
25791
25552
  }
@@ -25926,7 +25687,6 @@ const iconComponents = {
25926
25687
  Synced,
25927
25688
  Syncing,
25928
25689
  Tabler,
25929
- TimelineCaret,
25930
25690
  Timeline,
25931
25691
  TrashFill,
25932
25692
  Trash,
@@ -25989,12 +25749,7 @@ const ADD_TRIGGER = "ADD_TRIGGER";
25989
25749
  const ADD_INVALID_TRIGGER = "ADD_INVALID_TRIGGER";
25990
25750
  const defaultDriveOptions = [NEW_FOLDER, RENAME, SETTINGS];
25991
25751
  const defaultFileOptions = [RENAME, DELETE, DUPLICATE];
25992
- const defaultFolderOptions = [
25993
- NEW_FOLDER,
25994
- RENAME,
25995
- DELETE,
25996
- DUPLICATE
25997
- ];
25752
+ const defaultFolderOptions = [RENAME, DELETE, DUPLICATE];
25998
25753
  const debugNodeOptions = [
25999
25754
  ADD_TRIGGER,
26000
25755
  REMOVE_TRIGGER,
@@ -26074,7 +25829,7 @@ const nodeOptionsMap = {
26074
25829
  };
26075
25830
  const name = "@powerhousedao/connect";
26076
25831
  const productName = "Powerhouse-Connect";
26077
- const version$1 = "1.0.24-dev.0";
25832
+ const version$1 = "1.1.0";
26078
25833
  const description = "Powerhouse Connect";
26079
25834
  const main = "./dist/index.html";
26080
25835
  const type = "module";
@@ -26085,8 +25840,8 @@ const author = "acaldas@powerhouse.inc";
26085
25840
  const repository = { "type": "git", "url": "git+https://github.com/powerhouse-inc/document-model-electron.git" };
26086
25841
  const bugs = { "url": "https://github.com/powerhouse-inc/document-model-electron/issues" };
26087
25842
  const homepage = "https://github.com/powerhouse-inc/document-model-electron#readme";
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.15.17", "@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" };
25843
+ 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" };
25844
+ 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.23.0", "@tailwindcss/vite": "^4.1.4", "@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": "^2.0.0", "@vitejs/plugin-react": "^4.4.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.1.4", "uuid": "^9.0.1", "viem": "^2.8.13", "vite": "^6.3.3", "vite-envs": "^4.6.0", "vite-plugin-html": "^3.2.2", "vite-plugin-node-polyfills": "^0.23.0", "vite-plugin-svgr": "^4.3.0", "vite-tsconfig-paths": "^5.1.4", "xvfb-maybe": "^0.2.1" };
26090
25845
  const optionalDependencies = { "@esbuild/linux-x64": "^0.21.4", "@rollup/rollup-linux-x64-musl": "4.14.3" };
26091
25846
  const packageJson = {
26092
25847
  name,
@@ -26127,15 +25882,13 @@ const PH_CONNECT_SENTRY_ENV = window.__VITE_ENVS.PH_CONNECT_SENTRY_ENV || "dev";
26127
25882
  const PH_CONNECT_SENTRY_TRACING_ENABLED = window.__VITE_ENVS.PH_CONNECT_SENTRY_TRACING_ENABLED || "false";
26128
25883
  const GA_TRACKING_ID = window.__VITE_ENVS.PH_CONNECT_GA_TRACKING_ID;
26129
25884
  const PH_CONNECT_CLI_VERSION = window.__VITE_ENVS.PH_CONNECT_CLI_VERSION || void 0;
26130
- const LOG_LEVEL = isLogLevel(window.__VITE_ENVS.LOG_LEVEL) ? window.__VITE_ENVS.LOG_LEVEL : "info";
26131
- setLogLevel(LOG_LEVEL);
26132
- logger$1.debug(`Setting log level to ${window.__VITE_ENVS.LOG_LEVEL}.`);
25885
+ setLogLevel(window.__VITE_ENVS.LOG_LEVEL);
25886
+ logger$1.info(`Setting log level to ${window.__VITE_ENVS.LOG_LEVEL}.`);
26133
25887
  const connectConfig = {
26134
25888
  appVersion: APP_VERSION,
26135
25889
  studioMode: PH_CONNECT_STUDIO_MODE.toString() === "true",
26136
25890
  warnOutdatedApp: WARN_OUTDATED_APP === "true",
26137
25891
  routerBasename: PH_CONNECT_ROUTER_BASENAME,
26138
- analyticsDatabaseName: `${PH_CONNECT_ROUTER_BASENAME}:analytics`,
26139
25892
  sentry: {
26140
25893
  dsn: PH_CONNECT_SENTRY_DSN,
26141
25894
  env: PH_CONNECT_SENTRY_ENV,
@@ -26229,7 +25982,6 @@ DriveSections.filter(
26229
25982
  };
26230
25983
  });
26231
25984
  var lzString = { exports: {} };
26232
- lzString.exports;
26233
25985
  var hasRequiredLzString;
26234
25986
  function requireLzString() {
26235
25987
  if (hasRequiredLzString) return lzString.exports;
@@ -28870,9 +28622,6 @@ const _BrowserStorage = class _BrowserStorage {
28870
28622
  name: namespace ? `${namespace}:${_BrowserStorage.DBName}` : _BrowserStorage.DBName
28871
28623
  }));
28872
28624
  }
28873
- ////////////////////////////////
28874
- // IDocumentAdminStorage
28875
- ////////////////////////////////
28876
28625
  async clear() {
28877
28626
  const db = await this.db;
28878
28627
  await db.clear();
@@ -28885,35 +28634,19 @@ const _BrowserStorage = class _BrowserStorage {
28885
28634
  const document = await db.getItem(this.buildDocumentKey(documentId));
28886
28635
  return !!document;
28887
28636
  }
28888
- async create(document) {
28889
- const documentId = document.id;
28890
- if (!isValidDocumentId(documentId)) {
28891
- throw new DocumentIdValidationError(documentId);
28892
- }
28637
+ // TODO: this should throw an error if the document already exists.
28638
+ async create(documentId, document) {
28639
+ var _a2;
28893
28640
  const db = await this.db;
28894
- if (await this.exists(documentId)) {
28895
- throw new DocumentAlreadyExistsError(documentId);
28896
- }
28897
- const slug = document.slug.length > 0 ? document.slug : documentId;
28898
- if (!isValidSlug(slug)) {
28899
- throw new DocumentSlugValidationError(slug);
28900
- }
28901
- const slugManifest = await this.getSlugManifest();
28902
- if (slugManifest.slugToId[slug]) {
28903
- throw new DocumentAlreadyExistsError(documentId);
28904
- }
28905
- document.slug = slug;
28906
28641
  await db.setItem(this.buildDocumentKey(documentId), document);
28642
+ const slug = ((_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug) ?? documentId;
28907
28643
  if (slug) {
28908
- const slugManifest2 = await this.getSlugManifest();
28909
- if (slugManifest2.slugToId[slug]) {
28644
+ const slugManifest = await this.getSlugManifest();
28645
+ if (slugManifest.slugToId[slug]) {
28910
28646
  throw new Error(`Document with slug ${slug} already exists`);
28911
28647
  }
28912
- slugManifest2.slugToId[slug] = documentId;
28913
- await this.updateSlugManifest(slugManifest2);
28914
- }
28915
- if (document.documentType === "powerhouse/document-drive") {
28916
- this.updateDriveManifest(documentId, { documentIds: [] });
28648
+ slugManifest.slugToId[slug] = documentId;
28649
+ await this.updateSlugManifest(slugManifest);
28917
28650
  }
28918
28651
  }
28919
28652
  async get(documentId) {
@@ -28932,56 +28665,15 @@ const _BrowserStorage = class _BrowserStorage {
28932
28665
  }
28933
28666
  return this.get(documentId);
28934
28667
  }
28935
- async findByType(documentModelType, limit = 100, cursor) {
28936
- const db = await this.db;
28937
- const keys = await db.keys();
28938
- const documentKeys = keys.filter((key) => key.startsWith(`${_BrowserStorage.DOCUMENT_KEY}${_BrowserStorage.SEP}`));
28939
- const documentsAndIds = [];
28940
- for (const key of documentKeys) {
28941
- const documentId = key.slice(_BrowserStorage.DOCUMENT_KEY.length + _BrowserStorage.SEP.length);
28942
- try {
28943
- const document = await db.getItem(key);
28944
- if (!document || document.documentType !== documentModelType) {
28945
- continue;
28946
- }
28947
- documentsAndIds.push({ id: documentId, document });
28948
- } catch (error) {
28949
- continue;
28950
- }
28951
- }
28952
- documentsAndIds.sort((a, b) => {
28953
- const aDate = new Date(a.document.created);
28954
- const bDate = new Date(b.document.created);
28955
- if (aDate.getTime() === bDate.getTime()) {
28956
- return a.id.localeCompare(b.id);
28957
- }
28958
- return aDate.getTime() - bDate.getTime();
28959
- });
28960
- let startIndex = 0;
28961
- if (cursor) {
28962
- const index = documentsAndIds.findIndex(({ id }) => id === cursor);
28963
- if (index !== -1) {
28964
- startIndex = index;
28965
- }
28966
- }
28967
- const endIndex = Math.min(startIndex + limit, documentsAndIds.length);
28968
- let nextCursor;
28969
- if (endIndex < documentsAndIds.length) {
28970
- nextCursor = documentsAndIds[endIndex].id;
28971
- }
28972
- return {
28973
- documents: documentsAndIds.slice(startIndex, endIndex).map(({ id }) => id),
28974
- nextCursor
28975
- };
28976
- }
28977
28668
  async delete(documentId) {
28669
+ var _a2;
28978
28670
  const db = await this.db;
28979
28671
  const document = await db.getItem(this.buildDocumentKey(documentId));
28980
28672
  if (!document) {
28981
28673
  return false;
28982
28674
  }
28983
- const slug = document.slug.length > 0 ? document.slug : documentId;
28984
28675
  try {
28676
+ const slug = (_a2 = document.initialState.state.global) == null ? void 0 : _a2.slug;
28985
28677
  if (slug) {
28986
28678
  const slugManifest = await this.getSlugManifest();
28987
28679
  if (slugManifest.slugToId[slug] === documentId) {
@@ -28991,16 +28683,11 @@ const _BrowserStorage = class _BrowserStorage {
28991
28683
  }
28992
28684
  } catch (error) {
28993
28685
  }
28994
- const parents = await this.getParents(documentId);
28995
- for (const parent of parents) {
28996
- await this.removeChild(parent, documentId);
28997
- }
28998
- const children = await this.getChildren(documentId);
28999
- for (const child of children) {
29000
- const childParents = await this.getParents(child);
29001
- if (childParents.length === 1 && childParents[0] === documentId) {
29002
- await this.delete(child);
29003
- }
28686
+ const drives = await this.getDrives();
28687
+ for (const driveId of drives) {
28688
+ if (driveId === documentId)
28689
+ continue;
28690
+ await this.removeChild(driveId, documentId);
29004
28691
  }
29005
28692
  await db.removeItem(this.buildManifestKey(documentId));
29006
28693
  await db.removeItem(this.buildDocumentKey(documentId));
@@ -29034,20 +28721,6 @@ const _BrowserStorage = class _BrowserStorage {
29034
28721
  const manifest = await this.getManifest(parentId);
29035
28722
  return manifest.documentIds;
29036
28723
  }
29037
- async getParents(childId) {
29038
- const db = await this.db;
29039
- const keys = await db.keys();
29040
- const parents = [];
29041
- const manifestKeys = keys.filter((key) => key.startsWith(`${_BrowserStorage.MANIFEST_KEY}${_BrowserStorage.SEP}`));
29042
- for (const key of manifestKeys) {
29043
- const driveId = key.slice(_BrowserStorage.MANIFEST_KEY.length + _BrowserStorage.SEP.length);
29044
- const manifest = await this.getManifest(driveId);
29045
- if (manifest.documentIds.includes(childId)) {
29046
- parents.push(driveId);
29047
- }
29048
- }
29049
- return parents;
29050
- }
29051
28724
  ////////////////////////////////
29052
28725
  // IDriveStorage
29053
28726
  ////////////////////////////////
@@ -29069,6 +28742,9 @@ const _BrowserStorage = class _BrowserStorage {
29069
28742
  const db = await this.db;
29070
28743
  await db.setItem(_BrowserStorage.SLUG_MANIFEST_KEY, manifest);
29071
28744
  }
28745
+ async clearStorage() {
28746
+ return (await this.db).clear();
28747
+ }
29072
28748
  async addDocumentOperations(drive, id, operations, header) {
29073
28749
  const document = await this.get(id);
29074
28750
  if (!document) {
@@ -29082,6 +28758,20 @@ const _BrowserStorage = class _BrowserStorage {
29082
28758
  operations: mergedOperations
29083
28759
  });
29084
28760
  }
28761
+ async getDrives() {
28762
+ const db = await this.db;
28763
+ const keys = await db.keys();
28764
+ return keys.filter((key) => key.startsWith(_BrowserStorage.MANIFEST_KEY)).map((key) => key.slice(_BrowserStorage.MANIFEST_KEY.length + _BrowserStorage.SEP.length));
28765
+ }
28766
+ async createDrive(id, drive) {
28767
+ await this.create(id, drive);
28768
+ await this.updateDriveManifest(id, { documentIds: [] });
28769
+ }
28770
+ async deleteDrive(id) {
28771
+ const documents = await this.getChildren(id);
28772
+ await Promise.all(documents.map((doc) => this.delete(doc)));
28773
+ await this.delete(id);
28774
+ }
29085
28775
  async addDriveOperations(id, operations, header) {
29086
28776
  const drive = await this.get(id);
29087
28777
  const mergedOperations = mergeOperations(drive.operations, operations);
@@ -29122,16 +28812,12 @@ const _BrowserStorage = class _BrowserStorage {
29122
28812
  }
29123
28813
  // migrates all stored operations from legacy signature to signatures array
29124
28814
  async migrateOperationSignatures() {
29125
- let cursor;
29126
- do {
29127
- const { documents: drives, nextCursor } = await this.findByType("powerhouse/document-drive", 100, cursor);
29128
- for (const drive of drives) {
29129
- await this.migrateDrive(drive);
29130
- const documents = await this.getChildren(drive);
29131
- await Promise.all(documents.map(async (docId) => this.migrateDocument(drive, docId)));
29132
- }
29133
- cursor = nextCursor;
29134
- } while (cursor);
28815
+ const drives = await this.getDrives();
28816
+ for (const drive of drives) {
28817
+ await this.migrateDrive(drive);
28818
+ const documents = await this.getChildren(drive);
28819
+ await Promise.all(documents.map(async (docId) => this.migrateDocument(drive, docId)));
28820
+ }
29135
28821
  }
29136
28822
  async migrateDrive(driveId) {
29137
28823
  const drive = await this.get(driveId);
@@ -29205,11 +28891,8 @@ const getReactorDefaultDrivesConfig = () => {
29205
28891
  }
29206
28892
  };
29207
28893
  };
29208
- function createBrowserStorage(routerBasename) {
29209
- return new BrowserStorage(routerBasename);
29210
- }
29211
- function createBrowserDocumentDriveServer(documentModels, storage) {
29212
- return new ReactorBuilder(documentModels).withStorage(storage).withCache(new InMemoryCache()).withQueueManager(new BaseQueueManager(1, 10)).withOptions({ ...getReactorDefaultDrivesConfig() }).build();
28894
+ function createBrowserDocumentDriveServer(documentModels, routerBasename) {
28895
+ return new ReactorBuilder(documentModels).withStorage(new BrowserStorage(routerBasename)).withCache(new InMemoryCache()).withQueueManager(new BaseQueueManager(1, 10)).withOptions({ ...getReactorDefaultDrivesConfig() }).build();
29213
28896
  }
29214
28897
  const VERSION_CHECK_INTERVAL = parseInt(window.__VITE_ENVS.PH_CONNECT_VERSION_CHECK_INTERVAL) || 60 * 60 * 1e3;
29215
28898
  const basePath = connectConfig.routerBasename;
@@ -31768,14 +31451,14 @@ if (window.__VITE_ENVS.MODE === "development") {
31768
31451
  } else {
31769
31452
  serviceWorkerManager.registerServiceWorker(false);
31770
31453
  }
31771
- const App = lazy(() => __vitePreload(() => import("./app-B5yYl0zv.js").then((n) => n.bs), true ? __vite__mapDeps([0,1,2]) : void 0));
31454
+ const App = lazy(() => __vitePreload(() => import("./app-SJyv410V.js").then((n) => n.a_), true ? __vite__mapDeps([0,1,2]) : void 0));
31772
31455
  const AppLoader = /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(App, {}) });
31773
31456
  const appLoader = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
31774
31457
  __proto__: null,
31775
31458
  default: AppLoader
31776
31459
  }, Symbol.toStringTag, { value: "Module" }));
31777
31460
  export {
31778
- Icon as $,
31461
+ getDefaultExportFromCjs as $,
31779
31462
  AddStateExampleInputSchema as A,
31780
31463
  SetModuleDescriptionInputSchema as B,
31781
31464
  SetModuleNameInputSchema as C,
@@ -31802,148 +31485,148 @@ export {
31802
31485
  baseLoadFromFile as X,
31803
31486
  baseLoadFromInput as Y,
31804
31487
  pascalCase as Z,
31805
- logger$1 as _,
31488
+ Icon as _,
31806
31489
  createReducer as a,
31807
- getNamedType as a$,
31808
- getDefaultExportFromCjs as a0,
31809
- LOCAL as a1,
31810
- commonjsGlobal as a2,
31490
+ DELETE as a$,
31491
+ LOCAL as a0,
31492
+ commonjsGlobal as a1,
31493
+ PUBLIC as a2,
31811
31494
  SWITCHBOARD as a3,
31812
- PUBLIC as a4,
31813
- locationInfoByLocation as a5,
31814
- sharingTypeOptions as a6,
31815
- objectType as a7,
31495
+ locationInfoByLocation as a4,
31496
+ sharingTypeOptions as a5,
31497
+ objectType as a6,
31498
+ recordType as a7,
31816
31499
  stringType as a8,
31817
- recordType as a9,
31818
- updateNode as aA,
31819
- FILE as aB,
31820
- moveNode as aC,
31821
- generateNodesCopy as aD,
31822
- copyNode as aE,
31823
- createState as aF,
31824
- setDriveName as aG,
31825
- setAvailableOffline as aH,
31826
- setSharingType as aI,
31827
- SynchronizationUnitNotFoundError as aJ,
31828
- removeTrigger as aK,
31829
- PullResponderTransmitter as aL,
31830
- addTrigger as aM,
31831
- ReadDriveNotFoundError as aN,
31832
- openUrl as aO,
31833
- getNodeOptions as aP,
31834
- DRIVE as aQ,
31835
- FOLDER as aR,
31836
- requestPublicDrive as aS,
31837
- serviceWorkerManager as aT,
31838
- packageJson as aU,
31839
- t as aV,
31840
- gql as aW,
31841
- request as aX,
31842
- inspect as aY,
31843
- GraphQLError as aZ,
31844
- invariant as a_,
31845
- capitalCase as aa,
31846
- CLOUD as ab,
31847
- createZip as ac,
31500
+ capitalCase as a9,
31501
+ moveNode as aA,
31502
+ generateNodesCopy as aB,
31503
+ copyNode as aC,
31504
+ createState as aD,
31505
+ setDriveName as aE,
31506
+ setAvailableOffline as aF,
31507
+ setSharingType as aG,
31508
+ SynchronizationUnitNotFoundError as aH,
31509
+ removeTrigger as aI,
31510
+ generateUUID as aJ,
31511
+ PullResponderTransmitter as aK,
31512
+ addTrigger as aL,
31513
+ ReadDriveNotFoundError as aM,
31514
+ openUrl as aN,
31515
+ getNodeOptions as aO,
31516
+ DRIVE as aP,
31517
+ FOLDER as aQ,
31518
+ requestPublicDrive as aR,
31519
+ serviceWorkerManager as aS,
31520
+ packageJson as aT,
31521
+ t as aU,
31522
+ gql as aV,
31523
+ request as aW,
31524
+ getDimensions as aX,
31525
+ READ as aY,
31526
+ nodeOptionsMap as aZ,
31527
+ defaultFileOptions as a_,
31528
+ CLOUD as aa,
31529
+ createZip as ab,
31530
+ logger$1 as ac,
31848
31531
  LZString as ad,
31849
31532
  buildSignedOperation as ae,
31850
- getDefaults as af,
31851
- getI18n as ag,
31533
+ getI18n as af,
31534
+ getDefaults as ag,
31852
31535
  connectConfig as ah,
31853
31536
  hashDocumentStateForScope as ai,
31854
31537
  getAugmentedNamespace as aj,
31855
- childLogger as ak,
31856
- process as al,
31857
- setErrorHandler as am,
31858
- driveDocumentModelModule as an,
31859
- createBrowserStorage as ao,
31860
- createBrowserDocumentDriveServer as ap,
31861
- generateId as aq,
31862
- reducer as ar,
31863
- isDocumentDrive as as,
31864
- generateAddNodeAction as at,
31865
- isFileNode as au,
31866
- uploadDocumentOperations as av,
31867
- updateFile as aw,
31868
- addFolder as ax,
31869
- isFolderNode as ay,
31870
- deleteNode as az,
31538
+ setErrorHandler as ak,
31539
+ driveDocumentModelModule as al,
31540
+ createBrowserDocumentDriveServer as am,
31541
+ hashKey as an,
31542
+ childLogger as ao,
31543
+ reducer as ap,
31544
+ isDocumentDrive as aq,
31545
+ generateAddNodeAction as ar,
31546
+ isFileNode as as,
31547
+ uploadDocumentOperations as at,
31548
+ updateFile as au,
31549
+ addFolder as av,
31550
+ isFolderNode as aw,
31551
+ deleteNode as ax,
31552
+ updateNode as ay,
31553
+ FILE as az,
31871
31554
  SetStateSchemaInputSchema as b,
31872
- DUPLICATE as b$,
31873
- isInputObjectType as b0,
31874
- isScalarType as b1,
31875
- isObjectType as b2,
31876
- isInterfaceType as b3,
31877
- isUnionType as b4,
31878
- isEnumType as b5,
31879
- astFromValue as b6,
31880
- print as b7,
31881
- DEFAULT_DEPRECATION_REASON as b8,
31882
- Kind as b9,
31883
- isInputType as bA,
31884
- GraphQLBoolean as bB,
31885
- assertAbstractType as bC,
31886
- doTypesOverlap as bD,
31887
- DirectiveLocation as bE,
31888
- specifiedRules as bF,
31889
- NoUnusedFragmentsRule as bG,
31890
- ExecutableDefinitionsRule as bH,
31891
- validate as bI,
31892
- validateSchema as bJ,
31893
- GraphQLID as bK,
31894
- GraphQLString as bL,
31895
- GraphQLFloat as bM,
31896
- GraphQLInt as bN,
31897
- GraphQLDirective as bO,
31898
- GraphQLUnionType as bP,
31899
- isNonNullType as bQ,
31900
- GraphQLNonNull as bR,
31901
- isNamedType as bS,
31902
- isLeafType as bT,
31903
- GraphQLSchema as bU,
31904
- buildSchema as bV,
31905
- sentenceCase as bW,
31906
- getDimensions as bX,
31907
- READ as bY,
31908
- nodeOptionsMap as bZ,
31909
- defaultFileOptions as b_,
31910
- isPrintableAsBlockString as ba,
31911
- isSpecifiedDirective as bb,
31912
- isSpecifiedScalarType as bc,
31913
- isIntrospectionType as bd,
31914
- z as be,
31915
- GraphQLScalarType as bf,
31916
- parse as bg,
31917
- visit as bh,
31918
- buildASTSchema as bi,
31919
- extendSchema as bj,
31920
- getNullableType as bk,
31921
- isListType as bl,
31922
- snakeCase as bm,
31923
- constantCase as bn,
31924
- isAbstractType as bo,
31925
- BREAK as bp,
31926
- GraphQLInputObjectType as bq,
31927
- GraphQLList as br,
31928
- GraphQLEnumType as bs,
31929
- GraphQLObjectType as bt,
31930
- GraphQLInterfaceType as bu,
31931
- SchemaMetaFieldDef as bv,
31932
- TypeMetaFieldDef as bw,
31933
- TypeNameMetaFieldDef as bx,
31934
- isCompositeType as by,
31935
- isOutputType as bz,
31555
+ TypeNameMetaFieldDef as b$,
31556
+ RENAME as b0,
31557
+ WRITE as b1,
31558
+ DUPLICATE as b2,
31559
+ defaultFolderOptions as b3,
31560
+ garbageCollect as b4,
31561
+ sortOperations as b5,
31562
+ UI_NODE as b6,
31563
+ generateId as b7,
31564
+ undo as b8,
31565
+ redo as b9,
31566
+ GraphQLInt as bA,
31567
+ GraphQLDirective as bB,
31568
+ GraphQLObjectType as bC,
31569
+ GraphQLInterfaceType as bD,
31570
+ GraphQLUnionType as bE,
31571
+ GraphQLInputObjectType as bF,
31572
+ GraphQLEnumType as bG,
31573
+ isListType as bH,
31574
+ GraphQLList as bI,
31575
+ isNonNullType as bJ,
31576
+ GraphQLNonNull as bK,
31577
+ isNamedType as bL,
31578
+ getNullableType as bM,
31579
+ isLeafType as bN,
31580
+ GraphQLSchema as bO,
31581
+ buildSchema as bP,
31582
+ buildASTSchema as bQ,
31583
+ parse as bR,
31584
+ validate as bS,
31585
+ visit as bT,
31586
+ extendSchema as bU,
31587
+ snakeCase as bV,
31588
+ constantCase as bW,
31589
+ isAbstractType as bX,
31590
+ BREAK as bY,
31591
+ SchemaMetaFieldDef as bZ,
31592
+ TypeMetaFieldDef as b_,
31593
+ useDocumentDispatch as ba,
31594
+ inspect as bb,
31595
+ GraphQLError as bc,
31596
+ getNamedType as bd,
31597
+ invariant as be,
31598
+ isInputObjectType as bf,
31599
+ isScalarType as bg,
31600
+ isObjectType as bh,
31601
+ isInterfaceType as bi,
31602
+ isUnionType as bj,
31603
+ isEnumType as bk,
31604
+ print as bl,
31605
+ isPrintableAsBlockString as bm,
31606
+ Kind as bn,
31607
+ astFromValue as bo,
31608
+ DEFAULT_DEPRECATION_REASON as bp,
31609
+ isSpecifiedDirective as bq,
31610
+ isSpecifiedScalarType as br,
31611
+ isIntrospectionType as bs,
31612
+ z as bt,
31613
+ GraphQLScalarType as bu,
31614
+ specifiedRules as bv,
31615
+ GraphQLID as bw,
31616
+ GraphQLBoolean as bx,
31617
+ GraphQLString as by,
31618
+ GraphQLFloat as bz,
31936
31619
  createAction as c,
31937
- RENAME as c0,
31938
- WRITE as c1,
31939
- DELETE as c2,
31940
- defaultFolderOptions as c3,
31941
- garbageCollect as c4,
31942
- sortOperations as c5,
31943
- UI_NODE as c6,
31944
- undo as c7,
31945
- redo as c8,
31946
- useDocumentDispatch as c9,
31620
+ isCompositeType as c0,
31621
+ isOutputType as c1,
31622
+ isInputType as c2,
31623
+ assertAbstractType as c3,
31624
+ doTypesOverlap as c4,
31625
+ DirectiveLocation as c5,
31626
+ NoUnusedFragmentsRule as c6,
31627
+ ExecutableDefinitionsRule as c7,
31628
+ validateSchema as c8,
31629
+ sentenceCase as c9,
31947
31630
  appLoader as ca,
31948
31631
  ReorderModuleOperationsInputSchema as d,
31949
31632
  DeleteOperationInputSchema as e,
@@ -31969,4 +31652,3 @@ export {
31969
31652
  ReorderModulesInputSchema as y,
31970
31653
  DeleteModuleInputSchema as z
31971
31654
  };
31972
- //# sourceMappingURL=app-loader-CmEZOj3m.js.map