@symbo.ls/sdk 2.32.19 → 2.32.25

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/cjs/services/AuthService.js +6 -0
  2. package/dist/cjs/services/BaseService.js +1 -1
  3. package/dist/cjs/services/CollabService.js +24 -6
  4. package/dist/cjs/utils/changePreprocessor.js +58 -2
  5. package/dist/cjs/utils/services.js +1 -0
  6. package/dist/esm/index.js +887 -806
  7. package/dist/esm/services/AdminService.js +1 -1
  8. package/dist/esm/services/AuthService.js +7 -1
  9. package/dist/esm/services/BaseService.js +1 -1
  10. package/dist/esm/services/BranchService.js +1 -1
  11. package/dist/esm/services/CollabService.js +180 -106
  12. package/dist/esm/services/DnsService.js +1 -1
  13. package/dist/esm/services/FileService.js +1 -1
  14. package/dist/esm/services/PaymentService.js +1 -1
  15. package/dist/esm/services/PlanService.js +1 -1
  16. package/dist/esm/services/ProjectService.js +59 -3
  17. package/dist/esm/services/PullRequestService.js +1 -1
  18. package/dist/esm/services/ScreenshotService.js +1 -1
  19. package/dist/esm/services/SubscriptionService.js +1 -1
  20. package/dist/esm/services/TrackingService.js +701 -701
  21. package/dist/esm/services/index.js +886 -806
  22. package/dist/esm/utils/CollabClient.js +95 -95
  23. package/dist/esm/utils/changePreprocessor.js +58 -2
  24. package/dist/esm/utils/jsonDiff.js +26 -26
  25. package/dist/esm/utils/services.js +1 -0
  26. package/dist/esm/utils/validation.js +2 -2
  27. package/dist/node/services/AuthService.js +6 -0
  28. package/dist/node/services/BaseService.js +1 -1
  29. package/dist/node/services/CollabService.js +24 -6
  30. package/dist/node/utils/changePreprocessor.js +58 -2
  31. package/dist/node/utils/services.js +1 -0
  32. package/package.json +6 -6
  33. package/src/services/AuthService.js +7 -0
  34. package/src/services/BaseService.js +1 -1
  35. package/src/services/CollabService.js +27 -6
  36. package/src/utils/changePreprocessor.js +76 -2
  37. package/src/utils/services.js +1 -0
@@ -340,6 +340,48 @@ function getByPathSafe(root, path) {
340
340
  return null;
341
341
  }
342
342
  }
343
+ function resolveNextValueFromTuples(tuples, path) {
344
+ if (!Array.isArray(tuples) || !Array.isArray(path)) {
345
+ return null;
346
+ }
347
+ for (let i = tuples.length - 1; i >= 0; i--) {
348
+ const t = tuples[i];
349
+ if (!Array.isArray(t) || t.length < 3) {
350
+ continue;
351
+ }
352
+ const [action, tuplePath, tupleValue] = t;
353
+ if (action !== "update" && action !== "set" || !Array.isArray(tuplePath)) {
354
+ continue;
355
+ }
356
+ if (tuplePath.length > path.length) {
357
+ continue;
358
+ }
359
+ let isPrefix = true;
360
+ for (let j = 0; j < tuplePath.length; j++) {
361
+ if (tuplePath[j] !== path[j]) {
362
+ isPrefix = false;
363
+ break;
364
+ }
365
+ }
366
+ if (!isPrefix) {
367
+ continue;
368
+ }
369
+ if (tuplePath.length === path.length) {
370
+ return tupleValue;
371
+ }
372
+ let current = tupleValue;
373
+ for (let j = tuplePath.length; j < path.length; j++) {
374
+ if (current == null) {
375
+ return null;
376
+ }
377
+ current = current[path[j]];
378
+ }
379
+ if (current !== null) {
380
+ return current;
381
+ }
382
+ }
383
+ return null;
384
+ }
343
385
  function preprocessChanges(root, tuples = [], options = {}) {
344
386
  const expandTuple = (t) => {
345
387
  const [action, path, value] = t || [];
@@ -414,7 +456,21 @@ function preprocessChanges(root, tuples = [], options = {}) {
414
456
  return Array.isArray(tuples) ? tuples.slice() : [];
415
457
  }
416
458
  })();
417
- const baseOrders = computeOrdersForTuples(root, granularChanges);
459
+ const hydratedGranularChanges = granularChanges.map((t) => {
460
+ if (!Array.isArray(t) || t.length < 3) {
461
+ return t;
462
+ }
463
+ const [action, path] = t;
464
+ if (action !== "update" && action !== "set" || !Array.isArray(path)) {
465
+ return t;
466
+ }
467
+ const nextValue = resolveNextValueFromTuples(tuples, path);
468
+ if (nextValue === null) {
469
+ return t;
470
+ }
471
+ return [action, path, nextValue];
472
+ });
473
+ const baseOrders = computeOrdersForTuples(root, hydratedGranularChanges);
418
474
  const preferOrdersMap = /* @__PURE__ */ new Map();
419
475
  for (let i = 0; i < tuples.length; i++) {
420
476
  const t = tuples[i];
@@ -444,7 +500,7 @@ function preprocessChanges(root, tuples = [], options = {}) {
444
500
  mergedOrders.push(v);
445
501
  }
446
502
  }
447
- return { granularChanges, orders: mergedOrders };
503
+ return { granularChanges: hydratedGranularChanges, orders: mergedOrders };
448
504
  }
449
505
  export {
450
506
  preprocessChanges
@@ -1,4 +1,4 @@
1
- // ../../node_modules/lib0/map.js
1
+ // ../../../node_modules/lib0/map.js
2
2
  var create = () => /* @__PURE__ */ new Map();
3
3
  var copy = (m) => {
4
4
  const r = create();
@@ -30,15 +30,15 @@ var any = (m, f) => {
30
30
  return false;
31
31
  };
32
32
 
33
- // ../../node_modules/lib0/set.js
33
+ // ../../../node_modules/lib0/set.js
34
34
  var create2 = () => /* @__PURE__ */ new Set();
35
35
 
36
- // ../../node_modules/lib0/array.js
36
+ // ../../../node_modules/lib0/array.js
37
37
  var last = (arr) => arr[arr.length - 1];
38
38
  var from = Array.from;
39
39
  var isArray = Array.isArray;
40
40
 
41
- // ../../node_modules/lib0/observable.js
41
+ // ../../../node_modules/lib0/observable.js
42
42
  var ObservableV2 = class {
43
43
  constructor() {
44
44
  this._observers = create();
@@ -109,7 +109,7 @@ var ObservableV2 = class {
109
109
  }
110
110
  };
111
111
 
112
- // ../../node_modules/lib0/math.js
112
+ // ../../../node_modules/lib0/math.js
113
113
  var floor = Math.floor;
114
114
  var abs = Math.abs;
115
115
  var min = (a, b) => a < b ? a : b;
@@ -117,7 +117,7 @@ var max = (a, b) => a > b ? a : b;
117
117
  var isNaN = Number.isNaN;
118
118
  var isNegativeZero = (n) => n !== 0 ? n < 0 : 1 / n < 0;
119
119
 
120
- // ../../node_modules/lib0/binary.js
120
+ // ../../../node_modules/lib0/binary.js
121
121
  var BIT1 = 1;
122
122
  var BIT2 = 2;
123
123
  var BIT3 = 4;
@@ -159,7 +159,7 @@ var BITS29 = BIT30 - 1;
159
159
  var BITS30 = BIT31 - 1;
160
160
  var BITS31 = 2147483647;
161
161
 
162
- // ../../node_modules/lib0/number.js
162
+ // ../../../node_modules/lib0/number.js
163
163
  var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER;
164
164
  var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER;
165
165
  var LOWEST_INT32 = 1 << 31;
@@ -167,7 +167,7 @@ var isInteger = Number.isInteger || ((num) => typeof num === "number" && isFinit
167
167
  var isNaN2 = Number.isNaN;
168
168
  var parseInt = Number.parseInt;
169
169
 
170
- // ../../node_modules/lib0/string.js
170
+ // ../../../node_modules/lib0/string.js
171
171
  var fromCharCode = String.fromCharCode;
172
172
  var fromCodePoint = String.fromCodePoint;
173
173
  var MAX_UTF16_CHARACTER = fromCharCode(65535);
@@ -197,7 +197,7 @@ if (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {
197
197
  utf8TextDecoder = null;
198
198
  }
199
199
 
200
- // ../../node_modules/lib0/encoding.js
200
+ // ../../../node_modules/lib0/encoding.js
201
201
  var Encoder = class {
202
202
  constructor() {
203
203
  this.cpos = 0;
@@ -504,7 +504,7 @@ var StringEncoder = class {
504
504
  }
505
505
  };
506
506
 
507
- // ../../node_modules/lib0/error.js
507
+ // ../../../node_modules/lib0/error.js
508
508
  var create3 = (s) => new Error(s);
509
509
  var methodUnimplemented = () => {
510
510
  throw create3("Method unimplemented");
@@ -513,11 +513,11 @@ var unexpectedCase = () => {
513
513
  throw create3("Unexpected case");
514
514
  };
515
515
 
516
- // ../../node_modules/lib0/webcrypto.js
516
+ // ../../../node_modules/lib0/webcrypto.js
517
517
  var subtle = crypto.subtle;
518
518
  var getRandomValues = crypto.getRandomValues.bind(crypto);
519
519
 
520
- // ../../node_modules/lib0/random.js
520
+ // ../../../node_modules/lib0/random.js
521
521
  var uint32 = () => getRandomValues(new Uint32Array(1))[0];
522
522
  var uuidv4Template = "10000000-1000-4000-8000" + -1e11;
523
523
  var uuidv4 = () => uuidv4Template.replace(
@@ -526,20 +526,20 @@ var uuidv4 = () => uuidv4Template.replace(
526
526
  (c) => (c ^ uint32() & 15 >> c / 4).toString(16)
527
527
  );
528
528
 
529
- // ../../node_modules/lib0/time.js
529
+ // ../../../node_modules/lib0/time.js
530
530
  var getUnixTime = Date.now;
531
531
 
532
- // ../../node_modules/lib0/promise.js
532
+ // ../../../node_modules/lib0/promise.js
533
533
  var create4 = (f) => (
534
534
  /** @type {Promise<T>} */
535
535
  new Promise(f)
536
536
  );
537
537
  var all = Promise.all.bind(Promise);
538
538
 
539
- // ../../node_modules/lib0/conditions.js
539
+ // ../../../node_modules/lib0/conditions.js
540
540
  var undefinedToNull = (v) => v === void 0 ? null : v;
541
541
 
542
- // ../../node_modules/lib0/storage.js
542
+ // ../../../node_modules/lib0/storage.js
543
543
  var VarStoragePolyfill = class {
544
544
  constructor() {
545
545
  this.map = /* @__PURE__ */ new Map();
@@ -569,7 +569,7 @@ try {
569
569
  }
570
570
  var varStorage = _localStorage;
571
571
 
572
- // ../../node_modules/lib0/object.js
572
+ // ../../../node_modules/lib0/object.js
573
573
  var assign = Object.assign;
574
574
  var keys = Object.keys;
575
575
  var forEach = (obj, f) => {
@@ -605,7 +605,7 @@ var deepFreeze = (o) => {
605
605
  return freeze(o);
606
606
  };
607
607
 
608
- // ../../node_modules/lib0/function.js
608
+ // ../../../node_modules/lib0/function.js
609
609
  var callAll = (fs, args2, i = 0) => {
610
610
  try {
611
611
  for (; i < fs.length; i++) {
@@ -619,7 +619,7 @@ var callAll = (fs, args2, i = 0) => {
619
619
  };
620
620
  var isOneOf = (value, options) => options.includes(value);
621
621
 
622
- // ../../node_modules/lib0/environment.js
622
+ // ../../../node_modules/lib0/environment.js
623
623
  var isNode = typeof process !== "undefined" && process.release && /node|io\.js/.test(process.release.name) && Object.prototype.toString.call(typeof process !== "undefined" ? process : 0) === "[object process]";
624
624
  var isMac = typeof navigator !== "undefined" ? /Mac/.test(navigator.platform) : false;
625
625
  var params;
@@ -672,7 +672,7 @@ var forceColor = isNode && isOneOf(process.env.FORCE_COLOR, ["true", "1", "2"]);
672
672
  var supportsColor = forceColor || !hasParam("--no-colors") && // @todo deprecate --no-colors
673
673
  !hasConf("no-color") && (!isNode || process.stdout.isTTY) && (!isNode || hasParam("--color") || getVariable("COLORTERM") !== null || (getVariable("TERM") || "").includes("color"));
674
674
 
675
- // ../../node_modules/lib0/pair.js
675
+ // ../../../node_modules/lib0/pair.js
676
676
  var Pair = class {
677
677
  /**
678
678
  * @param {L} left
@@ -685,7 +685,7 @@ var Pair = class {
685
685
  };
686
686
  var create5 = (left, right) => new Pair(left, right);
687
687
 
688
- // ../../node_modules/lib0/dom.js
688
+ // ../../../node_modules/lib0/dom.js
689
689
  var doc = (
690
690
  /** @type {Document} */
691
691
  typeof document !== "undefined" ? document : {}
@@ -703,10 +703,10 @@ var DOCUMENT_NODE = doc.DOCUMENT_NODE;
703
703
  var DOCUMENT_TYPE_NODE = doc.DOCUMENT_TYPE_NODE;
704
704
  var DOCUMENT_FRAGMENT_NODE = doc.DOCUMENT_FRAGMENT_NODE;
705
705
 
706
- // ../../node_modules/lib0/symbol.js
706
+ // ../../../node_modules/lib0/symbol.js
707
707
  var create6 = Symbol;
708
708
 
709
- // ../../node_modules/lib0/logging.common.js
709
+ // ../../../node_modules/lib0/logging.common.js
710
710
  var BOLD = create6();
711
711
  var UNBOLD = create6();
712
712
  var BLUE = create6();
@@ -749,7 +749,7 @@ var computeNoColorLoggingArgs = (args2) => {
749
749
  };
750
750
  var lastLoggingTime = getUnixTime();
751
751
 
752
- // ../../node_modules/lib0/logging.js
752
+ // ../../../node_modules/lib0/logging.js
753
753
  var _browserStyleMap = {
754
754
  [BOLD]: create5("font-weight", "bold"),
755
755
  [UNBOLD]: create5("font-weight", "normal"),
@@ -820,7 +820,7 @@ var warn = (...args2) => {
820
820
  };
821
821
  var vconsoles = create2();
822
822
 
823
- // ../../node_modules/lib0/iterator.js
823
+ // ../../../node_modules/lib0/iterator.js
824
824
  var createIterator = (next) => ({
825
825
  /**
826
826
  * @return {IterableIterator<T>}
@@ -843,7 +843,7 @@ var iteratorMap = (iterator, fmap) => createIterator(() => {
843
843
  return { done, value: done ? void 0 : fmap(value) };
844
844
  });
845
845
 
846
- // ../../node_modules/yjs/dist/yjs.mjs
846
+ // ../../../node_modules/yjs/dist/yjs.mjs
847
847
  var DeleteItem = class {
848
848
  /**
849
849
  * @param {number} clock
@@ -21,6 +21,7 @@ var SERVICE_METHODS = {
21
21
  // Core service methods (new - replaces most based/auth functionality)
22
22
  // Auth methods
23
23
  getStoredAuthState: "auth",
24
+ getAuthToken: "auth",
24
25
  register: "auth",
25
26
  login: "auth",
26
27
  logout: "auth",
@@ -1,4 +1,4 @@
1
- // ../../node_modules/acorn/dist/acorn.mjs
1
+ // ../../../node_modules/acorn/dist/acorn.mjs
2
2
  var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 80, 3, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 343, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 726, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
3
3
  var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 2, 60, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 42, 9, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 496, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];
4
4
  var nonASCIIidentifierChars = "\u200C\u200D\xB7\u0300-\u036F\u0387\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u0669\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u06F0-\u06F9\u0711\u0730-\u074A\u07A6-\u07B0\u07C0-\u07C9\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0897-\u089F\u08CA-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0966-\u096F\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09E6-\u09EF\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A66-\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AE6-\u0AEF\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B66-\u0B6F\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE6-\u0BEF\u0C00-\u0C04\u0C3C\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0CE6-\u0CEF\u0CF3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D66-\u0D6F\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0E50-\u0E59\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECE\u0ED0-\u0ED9\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1040-\u1049\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109D\u135D-\u135F\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u17E0-\u17E9\u180B-\u180D\u180F-\u1819\u18A9\u1920-\u192B\u1930-\u193B\u1946-\u194F\u19D0-\u19DA\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AB0-\u1ABD\u1ABF-\u1ACE\u1B00-\u1B04\u1B34-\u1B44\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BF3\u1C24-\u1C37\u1C40-\u1C49\u1C50-\u1C59\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DFF\u200C\u200D\u203F\u2040\u2054\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\u30FB\uA620-\uA629\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F1\uA8FF-\uA909\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9D0-\uA9D9\uA9E5\uA9F0-\uA9F9\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA50-\uAA59\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uABF0-\uABF9\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFF10-\uFF19\uFF3F\uFF65";
@@ -5610,7 +5610,7 @@ function parse3(input, options) {
5610
5610
  return Parser.parse(input, options);
5611
5611
  }
5612
5612
 
5613
- // ../../node_modules/acorn-walk/dist/walk.mjs
5613
+ // ../../../node_modules/acorn-walk/dist/walk.mjs
5614
5614
  function full(node, callback, baseVisitor, state, override) {
5615
5615
  if (!baseVisitor) {
5616
5616
  baseVisitor = base;
@@ -319,6 +319,12 @@ class AuthService extends BaseService {
319
319
  throw new Error(`Failed to get user profile: ${error.message}`, { cause: error });
320
320
  }
321
321
  }
322
+ getAuthToken() {
323
+ if (!this._tokenManager) {
324
+ return null;
325
+ }
326
+ return this._tokenManager.getAccessToken();
327
+ }
322
328
  /**
323
329
  * Get stored authentication state (backward compatibility method)
324
330
  * Replaces AuthService.getStoredAuthState()
@@ -90,7 +90,7 @@ class BaseService {
90
90
  }
91
91
  }
92
92
  _requireAuth() {
93
- if (!this._context.authToken) {
93
+ if (!this.getAuthToken()) {
94
94
  throw new Error("Authentication required");
95
95
  }
96
96
  }
@@ -221,8 +221,19 @@ class CollabService extends BaseService {
221
221
  console.log(
222
222
  `[CollabService] Flushing ${this._pendingOps.length} offline operation batch(es)`
223
223
  );
224
- this._pendingOps.forEach(({ changes, granularChanges, orders }) => {
225
- this.socket.emit("ops", { changes, granularChanges, orders, ts: Date.now() });
224
+ this._pendingOps.forEach(({ changes, granularChanges, orders, options: opOptions }) => {
225
+ const { message } = opOptions || {};
226
+ const ts = Date.now();
227
+ const payload = {
228
+ changes,
229
+ granularChanges,
230
+ orders,
231
+ ts
232
+ };
233
+ if (message) {
234
+ payload.message = message;
235
+ }
236
+ this.socket.emit("ops", payload);
226
237
  });
227
238
  this._pendingOps.length = 0;
228
239
  }
@@ -333,6 +344,7 @@ class CollabService extends BaseService {
333
344
  tuples,
334
345
  Array.isArray(tuples) ? [] : {}
335
346
  ) : deepStringifyFunctions(tuples, Array.isArray(tuples) ? [] : {});
347
+ const { message } = options;
336
348
  if (!this.isConnected()) {
337
349
  console.warn("[CollabService] Not connected, queuing real-time update");
338
350
  this._pendingOps.push({
@@ -344,18 +356,24 @@ class CollabService extends BaseService {
344
356
  return;
345
357
  }
346
358
  if ((_c = this.socket) == null ? void 0 : _c.connected) {
359
+ const ts = Date.now();
347
360
  console.log("[CollabService] Sending operations to the backend", {
348
361
  changes: stringifiedTuples,
349
362
  granularChanges: stringifiedGranularTuples,
350
363
  orders,
351
- ts: Date.now()
364
+ ts,
365
+ message
352
366
  });
353
- this.socket.emit("ops", {
367
+ const payload = {
354
368
  changes: stringifiedTuples,
355
369
  granularChanges: stringifiedGranularTuples,
356
370
  orders,
357
- ts: Date.now()
358
- });
371
+ ts
372
+ };
373
+ if (message) {
374
+ payload.message = message;
375
+ }
376
+ this.socket.emit("ops", payload);
359
377
  }
360
378
  return { success: true };
361
379
  }
@@ -13,6 +13,48 @@ function getByPathSafe(root, path) {
13
13
  return null;
14
14
  }
15
15
  }
16
+ function resolveNextValueFromTuples(tuples, path) {
17
+ if (!Array.isArray(tuples) || !Array.isArray(path)) {
18
+ return null;
19
+ }
20
+ for (let i = tuples.length - 1; i >= 0; i--) {
21
+ const t = tuples[i];
22
+ if (!Array.isArray(t) || t.length < 3) {
23
+ continue;
24
+ }
25
+ const [action, tuplePath, tupleValue] = t;
26
+ if (action !== "update" && action !== "set" || !Array.isArray(tuplePath)) {
27
+ continue;
28
+ }
29
+ if (tuplePath.length > path.length) {
30
+ continue;
31
+ }
32
+ let isPrefix = true;
33
+ for (let j = 0; j < tuplePath.length; j++) {
34
+ if (tuplePath[j] !== path[j]) {
35
+ isPrefix = false;
36
+ break;
37
+ }
38
+ }
39
+ if (!isPrefix) {
40
+ continue;
41
+ }
42
+ if (tuplePath.length === path.length) {
43
+ return tupleValue;
44
+ }
45
+ let current = tupleValue;
46
+ for (let j = tuplePath.length; j < path.length; j++) {
47
+ if (current == null) {
48
+ return null;
49
+ }
50
+ current = current[path[j]];
51
+ }
52
+ if (current !== null) {
53
+ return current;
54
+ }
55
+ }
56
+ return null;
57
+ }
16
58
  function preprocessChanges(root, tuples = [], options = {}) {
17
59
  const expandTuple = (t) => {
18
60
  const [action, path, value] = t || [];
@@ -87,7 +129,21 @@ function preprocessChanges(root, tuples = [], options = {}) {
87
129
  return Array.isArray(tuples) ? tuples.slice() : [];
88
130
  }
89
131
  })();
90
- const baseOrders = computeOrdersForTuples(root, granularChanges);
132
+ const hydratedGranularChanges = granularChanges.map((t) => {
133
+ if (!Array.isArray(t) || t.length < 3) {
134
+ return t;
135
+ }
136
+ const [action, path] = t;
137
+ if (action !== "update" && action !== "set" || !Array.isArray(path)) {
138
+ return t;
139
+ }
140
+ const nextValue = resolveNextValueFromTuples(tuples, path);
141
+ if (nextValue === null) {
142
+ return t;
143
+ }
144
+ return [action, path, nextValue];
145
+ });
146
+ const baseOrders = computeOrdersForTuples(root, hydratedGranularChanges);
91
147
  const preferOrdersMap = /* @__PURE__ */ new Map();
92
148
  for (let i = 0; i < tuples.length; i++) {
93
149
  const t = tuples[i];
@@ -117,7 +173,7 @@ function preprocessChanges(root, tuples = [], options = {}) {
117
173
  mergedOrders.push(v);
118
174
  }
119
175
  }
120
- return { granularChanges, orders: mergedOrders };
176
+ return { granularChanges: hydratedGranularChanges, orders: mergedOrders };
121
177
  }
122
178
  export {
123
179
  preprocessChanges
@@ -20,6 +20,7 @@ const SERVICE_METHODS = {
20
20
  // Core service methods (new - replaces most based/auth functionality)
21
21
  // Auth methods
22
22
  getStoredAuthState: "auth",
23
+ getAuthToken: "auth",
23
24
  register: "auth",
24
25
  login: "auth",
25
26
  logout: "auth",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symbo.ls/sdk",
3
- "version": "2.32.19",
3
+ "version": "2.32.25",
4
4
  "type": "module",
5
5
  "main": "dist/esm/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -46,12 +46,12 @@
46
46
  "test:user": "cross-env NODE_ENV=$NODE_ENV npx tape integration-tests/index.js integration-tests/user/*.test.js | tap-spec"
47
47
  },
48
48
  "dependencies": {
49
- "@domql/element": "^2.32.19",
50
- "@domql/utils": "^2.32.19",
49
+ "@domql/element": "^2.32.25",
50
+ "@domql/utils": "^2.32.25",
51
51
  "@grafana/faro-web-sdk": "^1.19.0",
52
52
  "@grafana/faro-web-tracing": "^1.19.0",
53
- "@symbo.ls/router": "^2.32.19",
54
- "@symbo.ls/socket": "^2.32.19",
53
+ "@symbo.ls/router": "^2.32.25",
54
+ "@symbo.ls/socket": "^2.32.25",
55
55
  "acorn": "^8.14.0",
56
56
  "acorn-walk": "^8.3.4",
57
57
  "dexie": "^4.0.11",
@@ -73,5 +73,5 @@
73
73
  "tap-spec": "^5.0.0",
74
74
  "tape": "^5.9.0"
75
75
  },
76
- "gitHead": "ce092725c84d862876d7c96eeb42e0407c96fef3"
76
+ "gitHead": "325683c8553a64ee952c8a36f4e823257d1e81bb"
77
77
  }
@@ -370,6 +370,13 @@ export class AuthService extends BaseService {
370
370
  }
371
371
  }
372
372
 
373
+ getAuthToken() {
374
+ if (!this._tokenManager) {
375
+ return null
376
+ }
377
+ return this._tokenManager.getAccessToken()
378
+ }
379
+
373
380
  /**
374
381
  * Get stored authentication state (backward compatibility method)
375
382
  * Replaces AuthService.getStoredAuthState()
@@ -100,7 +100,7 @@ export class BaseService {
100
100
  }
101
101
 
102
102
  _requireAuth () {
103
- if (!this._context.authToken) {
103
+ if (!this.getAuthToken()) {
104
104
  throw new Error('Authentication required')
105
105
  }
106
106
  }
@@ -290,8 +290,19 @@ export class CollabService extends BaseService {
290
290
  console.log(
291
291
  `[CollabService] Flushing ${this._pendingOps.length} offline operation batch(es)`
292
292
  )
293
- this._pendingOps.forEach(({ changes, granularChanges, orders }) => {
294
- this.socket.emit('ops', { changes, granularChanges, orders, ts: Date.now() })
293
+ this._pendingOps.forEach(({ changes, granularChanges, orders, options: opOptions }) => {
294
+ const { message } = opOptions || {}
295
+ const ts = Date.now()
296
+ const payload = {
297
+ changes,
298
+ granularChanges,
299
+ orders,
300
+ ts
301
+ }
302
+ if (message) {
303
+ payload.message = message
304
+ }
305
+ this.socket.emit('ops', payload)
295
306
  })
296
307
  this._pendingOps.length = 0
297
308
  }
@@ -423,6 +434,8 @@ export class CollabService extends BaseService {
423
434
  )
424
435
  : deepStringifyFunctions(tuples, Array.isArray(tuples) ? [] : {})
425
436
 
437
+ const { message } = options
438
+
426
439
  // If not connected yet, queue the operations for later synchronisation.
427
440
  if (!this.isConnected()) {
428
441
  console.warn('[CollabService] Not connected, queuing real-time update')
@@ -437,18 +450,26 @@ export class CollabService extends BaseService {
437
450
 
438
451
  // When connected, send the operations to the backend.
439
452
  if (this.socket?.connected) {
453
+ const ts = Date.now()
440
454
  console.log('[CollabService] Sending operations to the backend', {
441
455
  changes: stringifiedTuples,
442
456
  granularChanges: stringifiedGranularTuples,
443
457
  orders,
444
- ts: Date.now()
458
+ ts,
459
+ message
445
460
  })
446
- this.socket.emit('ops', {
461
+ const payload = {
447
462
  changes: stringifiedTuples,
448
463
  granularChanges: stringifiedGranularTuples,
449
464
  orders,
450
- ts: Date.now()
451
- })
465
+ ts
466
+ }
467
+
468
+ if (message) {
469
+ payload.message = message
470
+ }
471
+
472
+ this.socket.emit('ops', payload)
452
473
  }
453
474
 
454
475
  return { success: true }