@powerhousedao/reactor 6.0.0-dev.4 → 6.0.0-dev.41

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 (227) hide show
  1. package/dist/src/cache/collection-membership-cache.d.ts +13 -0
  2. package/dist/src/cache/collection-membership-cache.d.ts.map +1 -0
  3. package/dist/src/cache/collection-membership-cache.js +33 -0
  4. package/dist/src/cache/collection-membership-cache.js.map +1 -0
  5. package/dist/src/cache/document-meta-cache.d.ts.map +1 -1
  6. package/dist/src/cache/document-meta-cache.js +4 -4
  7. package/dist/src/cache/document-meta-cache.js.map +1 -1
  8. package/dist/src/cache/kysely-operation-index.d.ts +5 -1
  9. package/dist/src/cache/kysely-operation-index.d.ts.map +1 -1
  10. package/dist/src/cache/kysely-operation-index.js +96 -6
  11. package/dist/src/cache/kysely-operation-index.js.map +1 -1
  12. package/dist/src/cache/kysely-write-cache.d.ts.map +1 -1
  13. package/dist/src/cache/kysely-write-cache.js +11 -11
  14. package/dist/src/cache/kysely-write-cache.js.map +1 -1
  15. package/dist/src/cache/operation-index-types.d.ts +13 -1
  16. package/dist/src/cache/operation-index-types.d.ts.map +1 -1
  17. package/dist/src/cache/operation-index-types.js.map +1 -1
  18. package/dist/src/client/reactor-client.d.ts +13 -10
  19. package/dist/src/client/reactor-client.d.ts.map +1 -1
  20. package/dist/src/client/reactor-client.js +134 -43
  21. package/dist/src/client/reactor-client.js.map +1 -1
  22. package/dist/src/client/types.d.ts +25 -6
  23. package/dist/src/client/types.d.ts.map +1 -1
  24. package/dist/src/client/types.js.map +1 -1
  25. package/dist/src/core/reactor-builder.d.ts +11 -7
  26. package/dist/src/core/reactor-builder.d.ts.map +1 -1
  27. package/dist/src/core/reactor-builder.js +61 -22
  28. package/dist/src/core/reactor-builder.js.map +1 -1
  29. package/dist/src/core/reactor-client-builder.d.ts +5 -4
  30. package/dist/src/core/reactor-client-builder.d.ts.map +1 -1
  31. package/dist/src/core/reactor-client-builder.js +14 -5
  32. package/dist/src/core/reactor-client-builder.js.map +1 -1
  33. package/dist/src/core/reactor.d.ts +20 -80
  34. package/dist/src/core/reactor.d.ts.map +1 -1
  35. package/dist/src/core/reactor.js +235 -576
  36. package/dist/src/core/reactor.js.map +1 -1
  37. package/dist/src/core/types.d.ts +63 -28
  38. package/dist/src/core/types.d.ts.map +1 -1
  39. package/dist/src/core/utils.d.ts +37 -2
  40. package/dist/src/core/utils.d.ts.map +1 -1
  41. package/dist/src/core/utils.js +57 -8
  42. package/dist/src/core/utils.js.map +1 -1
  43. package/dist/src/events/types.d.ts +35 -10
  44. package/dist/src/events/types.d.ts.map +1 -1
  45. package/dist/src/events/types.js +7 -5
  46. package/dist/src/events/types.js.map +1 -1
  47. package/dist/src/executor/document-action-handler.d.ts +37 -0
  48. package/dist/src/executor/document-action-handler.d.ts.map +1 -0
  49. package/dist/src/executor/document-action-handler.js +349 -0
  50. package/dist/src/executor/document-action-handler.js.map +1 -0
  51. package/dist/src/executor/signature-verifier.d.ts +9 -0
  52. package/dist/src/executor/signature-verifier.d.ts.map +1 -0
  53. package/dist/src/executor/signature-verifier.js +70 -0
  54. package/dist/src/executor/signature-verifier.js.map +1 -0
  55. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
  56. package/dist/src/executor/simple-job-executor-manager.js +20 -10
  57. package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
  58. package/dist/src/executor/simple-job-executor.d.ts +6 -46
  59. package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
  60. package/dist/src/executor/simple-job-executor.js +64 -565
  61. package/dist/src/executor/simple-job-executor.js.map +1 -1
  62. package/dist/src/executor/types.d.ts +0 -2
  63. package/dist/src/executor/types.d.ts.map +1 -1
  64. package/dist/src/executor/types.js.map +1 -1
  65. package/dist/src/executor/util.d.ts +11 -1
  66. package/dist/src/executor/util.d.ts.map +1 -1
  67. package/dist/src/executor/util.js +47 -1
  68. package/dist/src/executor/util.js.map +1 -1
  69. package/dist/src/index.d.ts +10 -7
  70. package/dist/src/index.d.ts.map +1 -1
  71. package/dist/src/index.js +6 -4
  72. package/dist/src/index.js.map +1 -1
  73. package/dist/src/job-tracker/in-memory-job-tracker.d.ts +4 -3
  74. package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -1
  75. package/dist/src/job-tracker/in-memory-job-tracker.js +20 -18
  76. package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -1
  77. package/dist/src/job-tracker/interfaces.d.ts +3 -1
  78. package/dist/src/job-tracker/interfaces.d.ts.map +1 -1
  79. package/dist/src/logging/console.d.ts +1 -22
  80. package/dist/src/logging/console.d.ts.map +1 -1
  81. package/dist/src/logging/console.js +1 -107
  82. package/dist/src/logging/console.js.map +1 -1
  83. package/dist/src/logging/types.d.ts +1 -11
  84. package/dist/src/logging/types.d.ts.map +1 -1
  85. package/dist/src/processors/index.d.ts.map +1 -1
  86. package/dist/src/processors/relational/relational-db-processor.d.ts +47 -0
  87. package/dist/src/processors/relational/relational-db-processor.d.ts.map +1 -0
  88. package/dist/src/processors/relational/relational-db-processor.js +45 -0
  89. package/dist/src/processors/relational/relational-db-processor.js.map +1 -0
  90. package/dist/src/processors/relational/types.d.ts +27 -0
  91. package/dist/src/processors/relational/types.d.ts.map +1 -0
  92. package/dist/src/processors/relational/types.js +2 -0
  93. package/dist/src/processors/relational/types.js.map +1 -0
  94. package/dist/src/processors/relational/utils.d.ts +29 -0
  95. package/dist/src/processors/relational/utils.d.ts.map +1 -0
  96. package/dist/src/processors/relational/utils.js +67 -0
  97. package/dist/src/processors/relational/utils.js.map +1 -0
  98. package/dist/src/processors/types.d.ts +10 -2
  99. package/dist/src/processors/types.d.ts.map +1 -1
  100. package/dist/src/processors/utils.d.ts.map +1 -1
  101. package/dist/src/processors/utils.js +2 -1
  102. package/dist/src/processors/utils.js.map +1 -1
  103. package/dist/src/queue/queue.d.ts +25 -0
  104. package/dist/src/queue/queue.d.ts.map +1 -1
  105. package/dist/src/queue/queue.js +56 -0
  106. package/dist/src/queue/queue.js.map +1 -1
  107. package/dist/src/queue/types.d.ts +3 -3
  108. package/dist/src/queue/types.d.ts.map +1 -1
  109. package/dist/src/read-models/base-read-model.js +4 -4
  110. package/dist/src/read-models/base-read-model.js.map +1 -1
  111. package/dist/src/read-models/coordinator.d.ts +2 -2
  112. package/dist/src/read-models/coordinator.d.ts.map +1 -1
  113. package/dist/src/read-models/coordinator.js +8 -8
  114. package/dist/src/read-models/coordinator.js.map +1 -1
  115. package/dist/src/read-models/document-view.d.ts +5 -2
  116. package/dist/src/read-models/document-view.d.ts.map +1 -1
  117. package/dist/src/read-models/document-view.js +130 -48
  118. package/dist/src/read-models/document-view.js.map +1 -1
  119. package/dist/src/shared/awaiter.d.ts +2 -2
  120. package/dist/src/shared/awaiter.d.ts.map +1 -1
  121. package/dist/src/shared/awaiter.js +11 -11
  122. package/dist/src/shared/awaiter.js.map +1 -1
  123. package/dist/src/shared/collect-all-pages.d.ts +7 -0
  124. package/dist/src/shared/collect-all-pages.d.ts.map +1 -0
  125. package/dist/src/shared/collect-all-pages.js +17 -0
  126. package/dist/src/shared/collect-all-pages.js.map +1 -0
  127. package/dist/src/shared/drive-url.d.ts +15 -0
  128. package/dist/src/shared/drive-url.d.ts.map +1 -0
  129. package/dist/src/shared/drive-url.js +17 -0
  130. package/dist/src/shared/drive-url.js.map +1 -0
  131. package/dist/src/shared/factories.d.ts +6 -2
  132. package/dist/src/shared/factories.d.ts.map +1 -1
  133. package/dist/src/shared/factories.js +10 -2
  134. package/dist/src/shared/factories.js.map +1 -1
  135. package/dist/src/shared/types.d.ts +32 -6
  136. package/dist/src/shared/types.d.ts.map +1 -1
  137. package/dist/src/shared/types.js +4 -4
  138. package/dist/src/shared/types.js.map +1 -1
  139. package/dist/src/signer/passthrough-signer.d.ts +1 -1
  140. package/dist/src/signer/passthrough-signer.d.ts.map +1 -1
  141. package/dist/src/signer/passthrough-signer.js +1 -3
  142. package/dist/src/signer/passthrough-signer.js.map +1 -1
  143. package/dist/src/storage/interfaces.d.ts +52 -94
  144. package/dist/src/storage/interfaces.d.ts.map +1 -1
  145. package/dist/src/storage/interfaces.js.map +1 -1
  146. package/dist/src/storage/kysely/document-indexer.d.ts +6 -6
  147. package/dist/src/storage/kysely/document-indexer.d.ts.map +1 -1
  148. package/dist/src/storage/kysely/document-indexer.js +123 -52
  149. package/dist/src/storage/kysely/document-indexer.js.map +1 -1
  150. package/dist/src/storage/kysely/store.d.ts +4 -3
  151. package/dist/src/storage/kysely/store.d.ts.map +1 -1
  152. package/dist/src/storage/kysely/store.js +52 -21
  153. package/dist/src/storage/kysely/store.js.map +1 -1
  154. package/dist/src/storage/kysely/sync-remote-storage.js +1 -1
  155. package/dist/src/storage/kysely/sync-remote-storage.js.map +1 -1
  156. package/dist/src/subs/subscription-notification-read-model.d.ts +1 -1
  157. package/dist/src/subs/subscription-notification-read-model.js +1 -1
  158. package/dist/src/sync/buffered-mailbox.d.ts +30 -0
  159. package/dist/src/sync/buffered-mailbox.d.ts.map +1 -0
  160. package/dist/src/sync/buffered-mailbox.js +136 -0
  161. package/dist/src/sync/buffered-mailbox.js.map +1 -0
  162. package/dist/src/sync/channels/composite-channel-factory.d.ts +9 -3
  163. package/dist/src/sync/channels/composite-channel-factory.d.ts.map +1 -1
  164. package/dist/src/sync/channels/composite-channel-factory.js +16 -12
  165. package/dist/src/sync/channels/composite-channel-factory.js.map +1 -1
  166. package/dist/src/sync/channels/gql-channel-factory.d.ts +9 -3
  167. package/dist/src/sync/channels/gql-channel-factory.d.ts.map +1 -1
  168. package/dist/src/sync/channels/gql-channel-factory.js +14 -10
  169. package/dist/src/sync/channels/gql-channel-factory.js.map +1 -1
  170. package/dist/src/sync/channels/gql-channel.d.ts +22 -18
  171. package/dist/src/sync/channels/gql-channel.d.ts.map +1 -1
  172. package/dist/src/sync/channels/gql-channel.js +128 -64
  173. package/dist/src/sync/channels/gql-channel.js.map +1 -1
  174. package/dist/src/sync/channels/index.d.ts +2 -0
  175. package/dist/src/sync/channels/index.d.ts.map +1 -1
  176. package/dist/src/sync/channels/index.js +2 -0
  177. package/dist/src/sync/channels/index.js.map +1 -1
  178. package/dist/src/sync/channels/interval-poll-timer.d.ts +24 -0
  179. package/dist/src/sync/channels/interval-poll-timer.d.ts.map +1 -0
  180. package/dist/src/sync/channels/interval-poll-timer.js +69 -0
  181. package/dist/src/sync/channels/interval-poll-timer.js.map +1 -0
  182. package/dist/src/sync/channels/poll-timer.d.ts +14 -0
  183. package/dist/src/sync/channels/poll-timer.d.ts.map +1 -0
  184. package/dist/src/sync/channels/poll-timer.js +2 -0
  185. package/dist/src/sync/channels/poll-timer.js.map +1 -0
  186. package/dist/src/sync/channels/utils.d.ts.map +1 -1
  187. package/dist/src/sync/channels/utils.js +2 -2
  188. package/dist/src/sync/channels/utils.js.map +1 -1
  189. package/dist/src/sync/index.d.ts +6 -4
  190. package/dist/src/sync/index.d.ts.map +1 -1
  191. package/dist/src/sync/index.js +4 -3
  192. package/dist/src/sync/index.js.map +1 -1
  193. package/dist/src/sync/interfaces.d.ts +18 -6
  194. package/dist/src/sync/interfaces.d.ts.map +1 -1
  195. package/dist/src/sync/mailbox.d.ts +21 -3
  196. package/dist/src/sync/mailbox.d.ts.map +1 -1
  197. package/dist/src/sync/mailbox.js +55 -2
  198. package/dist/src/sync/mailbox.js.map +1 -1
  199. package/dist/src/sync/sync-awaiter.d.ts +34 -0
  200. package/dist/src/sync/sync-awaiter.d.ts.map +1 -0
  201. package/dist/src/sync/sync-awaiter.js +124 -0
  202. package/dist/src/sync/sync-awaiter.js.map +1 -0
  203. package/dist/src/sync/sync-manager.d.ts +19 -5
  204. package/dist/src/sync/sync-manager.d.ts.map +1 -1
  205. package/dist/src/sync/sync-manager.js +318 -33
  206. package/dist/src/sync/sync-manager.js.map +1 -1
  207. package/dist/src/sync/sync-operation.d.ts +3 -1
  208. package/dist/src/sync/sync-operation.d.ts.map +1 -1
  209. package/dist/src/sync/sync-operation.js +5 -1
  210. package/dist/src/sync/sync-operation.js.map +1 -1
  211. package/dist/src/sync/types.d.ts +73 -1
  212. package/dist/src/sync/types.d.ts.map +1 -1
  213. package/dist/src/sync/types.js +10 -0
  214. package/dist/src/sync/types.js.map +1 -1
  215. package/dist/src/sync/utils.d.ts +11 -0
  216. package/dist/src/sync/utils.d.ts.map +1 -1
  217. package/dist/src/sync/utils.js +17 -0
  218. package/dist/src/sync/utils.js.map +1 -1
  219. package/dist/src/utils/reshuffle.d.ts +15 -5
  220. package/dist/src/utils/reshuffle.d.ts.map +1 -1
  221. package/dist/src/utils/reshuffle.js +29 -6
  222. package/dist/src/utils/reshuffle.js.map +1 -1
  223. package/package.json +11 -13
  224. package/dist/src/storage/consistency-aware-legacy-storage.d.ts +0 -33
  225. package/dist/src/storage/consistency-aware-legacy-storage.d.ts.map +0 -1
  226. package/dist/src/storage/consistency-aware-legacy-storage.js +0 -65
  227. package/dist/src/storage/consistency-aware-legacy-storage.js.map +0 -1
@@ -0,0 +1,30 @@
1
+ import { type MailboxItem, type MailboxCallback, type IMailbox } from "./mailbox.js";
2
+ export declare class BufferedMailbox<T extends MailboxItem> implements IMailbox<T> {
3
+ private itemsMap;
4
+ private addedCallbacks;
5
+ private removedCallbacks;
6
+ private addedBuffer;
7
+ private removedBuffer;
8
+ private addedTimer;
9
+ private removedTimer;
10
+ private readonly milliseconds;
11
+ private readonly maxQueued;
12
+ private paused;
13
+ constructor(milliseconds: number, maxQueued: number);
14
+ get items(): ReadonlyArray<T>;
15
+ get(id: string): T | undefined;
16
+ add(item: T): void;
17
+ remove(item: T): void;
18
+ onAdded(callback: MailboxCallback<T>): void;
19
+ onRemoved(callback: MailboxCallback<T>): void;
20
+ pause(): void;
21
+ resume(): void;
22
+ isPaused(): boolean;
23
+ flush(): void;
24
+ private scheduleAddedFlush;
25
+ private scheduleRemovedFlush;
26
+ private flushAdded;
27
+ private flushRemoved;
28
+ private invokeCallbacks;
29
+ }
30
+ //# sourceMappingURL=buffered-mailbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffered-mailbox.d.ts","sourceRoot":"","sources":["../../../src/sync/buffered-mailbox.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,QAAQ,EAEd,MAAM,cAAc,CAAC;AAEtB,qBAAa,eAAe,CAAC,CAAC,SAAS,WAAW,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAkB;gBAEpB,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKnD,IAAI,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,CAE5B;IAED,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI9B,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAelB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAerB,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IAI3C,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IAI7C,KAAK,IAAI,IAAI;IAYb,MAAM,IAAI,IAAI;IAUd,QAAQ,IAAI,OAAO;IAInB,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,eAAe;CAgBxB"}
@@ -0,0 +1,136 @@
1
+ import { MailboxAggregateError, } from "./mailbox.js";
2
+ export class BufferedMailbox {
3
+ itemsMap = new Map();
4
+ addedCallbacks = [];
5
+ removedCallbacks = [];
6
+ addedBuffer = [];
7
+ removedBuffer = [];
8
+ addedTimer = null;
9
+ removedTimer = null;
10
+ milliseconds;
11
+ maxQueued;
12
+ paused = false;
13
+ constructor(milliseconds, maxQueued) {
14
+ this.milliseconds = milliseconds;
15
+ this.maxQueued = maxQueued;
16
+ }
17
+ get items() {
18
+ return Array.from(this.itemsMap.values());
19
+ }
20
+ get(id) {
21
+ return this.itemsMap.get(id);
22
+ }
23
+ add(item) {
24
+ this.itemsMap.set(item.id, item);
25
+ this.addedBuffer.push(item);
26
+ if (this.paused) {
27
+ return;
28
+ }
29
+ if (this.addedBuffer.length >= this.maxQueued) {
30
+ this.flushAdded();
31
+ }
32
+ else {
33
+ this.scheduleAddedFlush();
34
+ }
35
+ }
36
+ remove(item) {
37
+ this.itemsMap.delete(item.id);
38
+ this.removedBuffer.push(item);
39
+ if (this.paused) {
40
+ return;
41
+ }
42
+ if (this.removedBuffer.length >= this.maxQueued) {
43
+ this.flushRemoved();
44
+ }
45
+ else {
46
+ this.scheduleRemovedFlush();
47
+ }
48
+ }
49
+ onAdded(callback) {
50
+ this.addedCallbacks.push(callback);
51
+ }
52
+ onRemoved(callback) {
53
+ this.removedCallbacks.push(callback);
54
+ }
55
+ pause() {
56
+ this.paused = true;
57
+ if (this.addedTimer !== null) {
58
+ clearTimeout(this.addedTimer);
59
+ this.addedTimer = null;
60
+ }
61
+ if (this.removedTimer !== null) {
62
+ clearTimeout(this.removedTimer);
63
+ this.removedTimer = null;
64
+ }
65
+ }
66
+ resume() {
67
+ this.paused = false;
68
+ if (this.addedBuffer.length > 0) {
69
+ this.scheduleAddedFlush();
70
+ }
71
+ if (this.removedBuffer.length > 0) {
72
+ this.scheduleRemovedFlush();
73
+ }
74
+ }
75
+ isPaused() {
76
+ return this.paused;
77
+ }
78
+ flush() {
79
+ this.flushAdded();
80
+ this.flushRemoved();
81
+ }
82
+ scheduleAddedFlush() {
83
+ if (this.addedTimer !== null) {
84
+ clearTimeout(this.addedTimer);
85
+ }
86
+ this.addedTimer = setTimeout(() => {
87
+ this.flushAdded();
88
+ }, this.milliseconds);
89
+ }
90
+ scheduleRemovedFlush() {
91
+ if (this.removedTimer !== null) {
92
+ clearTimeout(this.removedTimer);
93
+ }
94
+ this.removedTimer = setTimeout(() => {
95
+ this.flushRemoved();
96
+ }, this.milliseconds);
97
+ }
98
+ flushAdded() {
99
+ if (this.addedTimer !== null) {
100
+ clearTimeout(this.addedTimer);
101
+ this.addedTimer = null;
102
+ }
103
+ const items = this.addedBuffer;
104
+ this.addedBuffer = [];
105
+ if (items.length > 0) {
106
+ this.invokeCallbacks(this.addedCallbacks, items);
107
+ }
108
+ }
109
+ flushRemoved() {
110
+ if (this.removedTimer !== null) {
111
+ clearTimeout(this.removedTimer);
112
+ this.removedTimer = null;
113
+ }
114
+ const items = this.removedBuffer;
115
+ this.removedBuffer = [];
116
+ if (items.length > 0) {
117
+ this.invokeCallbacks(this.removedCallbacks, items);
118
+ }
119
+ }
120
+ invokeCallbacks(callbacks, items) {
121
+ const callbacksCopy = [...callbacks];
122
+ const errors = [];
123
+ for (const callback of callbacksCopy) {
124
+ try {
125
+ callback(items);
126
+ }
127
+ catch (error) {
128
+ errors.push(error instanceof Error ? error : new Error(String(error)));
129
+ }
130
+ }
131
+ if (errors.length > 0) {
132
+ throw new MailboxAggregateError(errors);
133
+ }
134
+ }
135
+ }
136
+ //# sourceMappingURL=buffered-mailbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffered-mailbox.js","sourceRoot":"","sources":["../../../src/sync/buffered-mailbox.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,21 @@
1
+ import type { IOperationIndex } from "../../cache/operation-index-types.js";
1
2
  import type { ILogger } from "../../logging/types.js";
2
3
  import type { ISyncCursorStorage } from "../../storage/interfaces.js";
3
4
  import type { IChannel, IChannelFactory } from "../interfaces.js";
4
- import type { ChannelConfig, RemoteFilter } from "../types.js";
5
+ import type { ChannelConfig, JwtHandler, RemoteFilter } from "../types.js";
5
6
  /**
6
7
  * Factory for creating channel instances of multiple types.
7
8
  *
8
9
  * Supports both "gql" channels for network-based synchronization and
9
10
  * "internal" channels for in-process communication.
11
+ *
12
+ * The optional jwtHandler enables dynamic JWT token generation per-request
13
+ * for GQL channels, useful for short-lived tokens with audience-specific claims.
10
14
  */
11
15
  export declare class CompositeChannelFactory implements IChannelFactory {
12
16
  private readonly logger;
13
- constructor(logger: ILogger);
17
+ private readonly jwtHandler?;
18
+ constructor(logger: ILogger, jwtHandler?: JwtHandler);
14
19
  /**
15
20
  * Creates a new channel instance based on the configuration type.
16
21
  *
@@ -20,10 +25,11 @@ export declare class CompositeChannelFactory implements IChannelFactory {
20
25
  * @param cursorStorage - Storage for persisting synchronization cursors
21
26
  * @param collectionId - Collection ID for filtering
22
27
  * @param filter - Remote filter configuration
28
+ * @param operationIndex - Operation index for querying timestamps
23
29
  * @returns A new channel instance
24
30
  * @throws Error if config.type is not supported or required parameters are missing
25
31
  */
26
- instance(remoteId: string, remoteName: string, config: ChannelConfig, cursorStorage: ISyncCursorStorage, collectionId: string, filter: RemoteFilter): IChannel;
32
+ instance(remoteId: string, remoteName: string, config: ChannelConfig, cursorStorage: ISyncCursorStorage, collectionId: string, filter: RemoteFilter, operationIndex: IOperationIndex): IChannel;
27
33
  private createGqlChannel;
28
34
  private createPollingChannel;
29
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"composite-channel-factory.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/composite-channel-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI/D;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAErB,MAAM,EAAE,OAAO;IAI3B;;;;;;;;;;;OAWG;IACH,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,kBAAkB,EACjC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,GACnB,QAAQ;IAqBX,OAAO,CAAC,gBAAgB;IAwExB,OAAO,CAAC,oBAAoB;CAO7B"}
1
+ {"version":3,"file":"composite-channel-factory.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/composite-channel-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3E;;;;;;;;GAQG;AACH,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAa;gBAE7B,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU;IAKpD;;;;;;;;;;;;OAYG;IACH,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,kBAAkB,EACjC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,eAAe,GAC9B,QAAQ;IAsBX,OAAO,CAAC,gBAAgB;IAwExB,OAAO,CAAC,oBAAoB;CAO7B"}
@@ -1,15 +1,21 @@
1
1
  import { GqlChannel } from "./gql-channel.js";
2
+ import { IntervalPollTimer } from "./interval-poll-timer.js";
2
3
  import { PollingChannel } from "./polling-channel.js";
3
4
  /**
4
5
  * Factory for creating channel instances of multiple types.
5
6
  *
6
7
  * Supports both "gql" channels for network-based synchronization and
7
8
  * "internal" channels for in-process communication.
9
+ *
10
+ * The optional jwtHandler enables dynamic JWT token generation per-request
11
+ * for GQL channels, useful for short-lived tokens with audience-specific claims.
8
12
  */
9
13
  export class CompositeChannelFactory {
10
14
  logger;
11
- constructor(logger) {
15
+ jwtHandler;
16
+ constructor(logger, jwtHandler) {
12
17
  this.logger = logger;
18
+ this.jwtHandler = jwtHandler;
13
19
  }
14
20
  /**
15
21
  * Creates a new channel instance based on the configuration type.
@@ -20,19 +26,20 @@ export class CompositeChannelFactory {
20
26
  * @param cursorStorage - Storage for persisting synchronization cursors
21
27
  * @param collectionId - Collection ID for filtering
22
28
  * @param filter - Remote filter configuration
29
+ * @param operationIndex - Operation index for querying timestamps
23
30
  * @returns A new channel instance
24
31
  * @throws Error if config.type is not supported or required parameters are missing
25
32
  */
26
- instance(remoteId, remoteName, config, cursorStorage, collectionId, filter) {
33
+ instance(remoteId, remoteName, config, cursorStorage, collectionId, filter, operationIndex) {
27
34
  if (config.type === "gql") {
28
- return this.createGqlChannel(remoteId, remoteName, config, cursorStorage, collectionId, filter);
35
+ return this.createGqlChannel(remoteId, remoteName, config, cursorStorage, collectionId, filter, operationIndex);
29
36
  }
30
37
  if (config.type === "polling") {
31
38
  return this.createPollingChannel(remoteId, remoteName, cursorStorage);
32
39
  }
33
40
  throw new Error(`CompositeChannelFactory does not support channel type "${config.type}"`);
34
41
  }
35
- createGqlChannel(remoteId, remoteName, config, cursorStorage, collectionId, filter) {
42
+ createGqlChannel(remoteId, remoteName, config, cursorStorage, collectionId, filter, operationIndex) {
36
43
  const url = config.parameters.url;
37
44
  if (typeof url !== "string" || !url) {
38
45
  throw new Error('CompositeChannelFactory requires "url" parameter for gql channels');
@@ -41,18 +48,14 @@ export class CompositeChannelFactory {
41
48
  url,
42
49
  collectionId,
43
50
  filter,
51
+ jwtHandler: this.jwtHandler,
44
52
  };
45
- if (config.parameters.authToken !== undefined) {
46
- if (typeof config.parameters.authToken !== "string") {
47
- throw new Error('"authToken" parameter must be a string');
48
- }
49
- gqlConfig.authToken = config.parameters.authToken;
50
- }
53
+ let pollIntervalMs = 2000;
51
54
  if (config.parameters.pollIntervalMs !== undefined) {
52
55
  if (typeof config.parameters.pollIntervalMs !== "number") {
53
56
  throw new Error('"pollIntervalMs" parameter must be a number');
54
57
  }
55
- gqlConfig.pollIntervalMs = config.parameters.pollIntervalMs;
58
+ pollIntervalMs = config.parameters.pollIntervalMs;
56
59
  }
57
60
  if (config.parameters.retryBaseDelayMs !== undefined) {
58
61
  if (typeof config.parameters.retryBaseDelayMs !== "number") {
@@ -78,7 +81,8 @@ export class CompositeChannelFactory {
78
81
  }
79
82
  gqlConfig.fetchFn = config.parameters.fetchFn;
80
83
  }
81
- return new GqlChannel(this.logger, remoteId, remoteName, cursorStorage, gqlConfig);
84
+ const pollTimer = new IntervalPollTimer(pollIntervalMs);
85
+ return new GqlChannel(this.logger, remoteId, remoteName, cursorStorage, gqlConfig, operationIndex, pollTimer);
82
86
  }
83
87
  createPollingChannel(remoteId, remoteName, cursorStorage) {
84
88
  return new PollingChannel(remoteId, remoteName, cursorStorage);
@@ -1 +1 @@
1
- {"version":3,"file":"composite-channel-factory.js","sourceRoot":"","sources":["../../../../src/sync/channels/composite-channel-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"composite-channel-factory.js","sourceRoot":"","sources":["../../../../src/sync/channels/composite-channel-factory.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,31 @@
1
+ import type { IOperationIndex } from "../../cache/operation-index-types.js";
1
2
  import type { ILogger } from "../../logging/types.js";
2
3
  import type { ISyncCursorStorage } from "../../storage/interfaces.js";
3
4
  import type { IChannel, IChannelFactory } from "../interfaces.js";
4
- import type { ChannelConfig, RemoteFilter } from "../types.js";
5
+ import type { ChannelConfig, JwtHandler, RemoteFilter } from "../types.js";
5
6
  /**
6
7
  * Factory for creating GqlChannel instances.
7
8
  *
8
9
  * Extracts GraphQL-specific configuration from ChannelConfig.parameters and
9
10
  * instantiates GqlChannel instances for network-based synchronization.
11
+ *
12
+ * The optional jwtHandler enables dynamic JWT token generation per-request,
13
+ * which is useful for short-lived tokens with audience-specific claims.
10
14
  */
11
15
  export declare class GqlChannelFactory implements IChannelFactory {
12
16
  private readonly logger;
13
- constructor(logger: ILogger);
17
+ private readonly jwtHandler?;
18
+ constructor(logger: ILogger, jwtHandler?: JwtHandler);
14
19
  /**
15
20
  * Creates a new GqlChannel instance with the given configuration.
16
21
  * See GqlChannelConfig for the expected parameters.
17
22
  *
18
23
  * @param config - Channel configuration including type and parameters
19
24
  * @param cursorStorage - Storage for persisting synchronization cursors
25
+ * @param operationIndex - Operation index for querying timestamps
20
26
  * @returns A new GqlChannel instance
21
27
  * @throws Error if config.type is not "gql" or required parameters are missing
22
28
  */
23
- instance(remoteId: string, remoteName: string, config: ChannelConfig, cursorStorage: ISyncCursorStorage, collectionId: string, filter: RemoteFilter): IChannel;
29
+ instance(remoteId: string, remoteName: string, config: ChannelConfig, cursorStorage: ISyncCursorStorage, collectionId: string, filter: RemoteFilter, operationIndex: IOperationIndex): IChannel;
24
30
  }
25
31
  //# sourceMappingURL=gql-channel-factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gql-channel-factory.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG/D;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAErB,MAAM,EAAE,OAAO;IAI3B;;;;;;;;OAQG;IACH,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,kBAAkB,EACjC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,GACnB,QAAQ;CAwEZ"}
1
+ {"version":3,"file":"gql-channel-factory.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3E;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAa;gBAE7B,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU;IAKpD;;;;;;;;;OASG;IACH,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,kBAAkB,EACjC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,eAAe,GAC9B,QAAQ;CAuEZ"}
@@ -1,14 +1,20 @@
1
1
  import { GqlChannel } from "./gql-channel.js";
2
+ import { IntervalPollTimer } from "./interval-poll-timer.js";
2
3
  /**
3
4
  * Factory for creating GqlChannel instances.
4
5
  *
5
6
  * Extracts GraphQL-specific configuration from ChannelConfig.parameters and
6
7
  * instantiates GqlChannel instances for network-based synchronization.
8
+ *
9
+ * The optional jwtHandler enables dynamic JWT token generation per-request,
10
+ * which is useful for short-lived tokens with audience-specific claims.
7
11
  */
8
12
  export class GqlChannelFactory {
9
13
  logger;
10
- constructor(logger) {
14
+ jwtHandler;
15
+ constructor(logger, jwtHandler) {
11
16
  this.logger = logger;
17
+ this.jwtHandler = jwtHandler;
12
18
  }
13
19
  /**
14
20
  * Creates a new GqlChannel instance with the given configuration.
@@ -16,10 +22,11 @@ export class GqlChannelFactory {
16
22
  *
17
23
  * @param config - Channel configuration including type and parameters
18
24
  * @param cursorStorage - Storage for persisting synchronization cursors
25
+ * @param operationIndex - Operation index for querying timestamps
19
26
  * @returns A new GqlChannel instance
20
27
  * @throws Error if config.type is not "gql" or required parameters are missing
21
28
  */
22
- instance(remoteId, remoteName, config, cursorStorage, collectionId, filter) {
29
+ instance(remoteId, remoteName, config, cursorStorage, collectionId, filter, operationIndex) {
23
30
  if (config.type !== "gql") {
24
31
  throw new Error(`GqlChannelFactory can only create channels of type "gql", got "${config.type}"`);
25
32
  }
@@ -33,18 +40,14 @@ export class GqlChannelFactory {
33
40
  url,
34
41
  collectionId,
35
42
  filter,
43
+ jwtHandler: this.jwtHandler,
36
44
  };
37
- if (config.parameters.authToken !== undefined) {
38
- if (typeof config.parameters.authToken !== "string") {
39
- throw new Error('"authToken" parameter must be a string');
40
- }
41
- gqlConfig.authToken = config.parameters.authToken;
42
- }
45
+ let pollIntervalMs = 2000;
43
46
  if (config.parameters.pollIntervalMs !== undefined) {
44
47
  if (typeof config.parameters.pollIntervalMs !== "number") {
45
48
  throw new Error('"pollIntervalMs" parameter must be a number');
46
49
  }
47
- gqlConfig.pollIntervalMs = config.parameters.pollIntervalMs;
50
+ pollIntervalMs = config.parameters.pollIntervalMs;
48
51
  }
49
52
  if (config.parameters.retryBaseDelayMs !== undefined) {
50
53
  if (typeof config.parameters.retryBaseDelayMs !== "number") {
@@ -70,7 +73,8 @@ export class GqlChannelFactory {
70
73
  }
71
74
  gqlConfig.fetchFn = config.parameters.fetchFn;
72
75
  }
73
- return new GqlChannel(this.logger, remoteId, remoteName, cursorStorage, gqlConfig);
76
+ const pollTimer = new IntervalPollTimer(pollIntervalMs);
77
+ return new GqlChannel(this.logger, remoteId, remoteName, cursorStorage, gqlConfig, operationIndex, pollTimer);
74
78
  }
75
79
  }
76
80
  //# sourceMappingURL=gql-channel-factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gql-channel-factory.js","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gql-channel-factory.js","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel-factory.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,19 @@
1
+ import type { IOperationIndex } from "../../cache/operation-index-types.js";
1
2
  import type { ILogger } from "../../logging/types.js";
2
3
  import type { ISyncCursorStorage } from "../../storage/interfaces.js";
3
4
  import type { IChannel } from "../interfaces.js";
4
- import { Mailbox } from "../mailbox.js";
5
+ import { type IMailbox } from "../mailbox.js";
5
6
  import type { SyncOperation } from "../sync-operation.js";
6
- import type { RemoteFilter } from "../types.js";
7
+ import type { JwtHandler, RemoteFilter } from "../types.js";
8
+ import type { IPollTimer } from "./poll-timer.js";
7
9
  /**
8
10
  * Configuration parameters for GqlChannel
9
11
  */
10
12
  export type GqlChannelConfig = {
11
13
  /** The GraphQL endpoint URL */
12
14
  url: string;
13
- /** Authentication token for the remote */
14
- authToken?: string;
15
- /** Polling interval in milliseconds (default: 5000) */
16
- pollIntervalMs?: number;
15
+ /** Dynamic JWT token handler for generating fresh tokens per-request */
16
+ jwtHandler?: JwtHandler;
17
17
  /** Base delay for exponential backoff retries in milliseconds (default: 1000) */
18
18
  retryBaseDelayMs?: number;
19
19
  /** Maximum delay for exponential backoff retries in milliseconds (default: 300000) */
@@ -32,19 +32,21 @@ export type GqlChannelConfig = {
32
32
  */
33
33
  export declare class GqlChannel implements IChannel {
34
34
  private readonly logger;
35
- readonly inbox: Mailbox<SyncOperation>;
36
- readonly outbox: Mailbox<SyncOperation>;
37
- readonly deadLetter: Mailbox<SyncOperation>;
35
+ readonly inbox: IMailbox<SyncOperation>;
36
+ readonly outbox: IMailbox<SyncOperation>;
37
+ readonly deadLetter: IMailbox<SyncOperation>;
38
+ readonly config: GqlChannelConfig;
39
+ private readonly bufferedOutbox;
38
40
  private readonly channelId;
39
41
  private readonly remoteName;
40
42
  private readonly cursorStorage;
41
- private readonly config;
43
+ private readonly operationIndex;
44
+ private readonly pollTimer;
42
45
  private isShutdown;
43
- private pollTimer?;
44
46
  private failureCount;
45
47
  private lastSuccessUtcMs?;
46
48
  private lastFailureUtcMs?;
47
- constructor(logger: ILogger, channelId: string, remoteName: string, cursorStorage: ISyncCursorStorage, config: GqlChannelConfig);
49
+ constructor(logger: ILogger, channelId: string, remoteName: string, cursorStorage: ISyncCursorStorage, config: GqlChannelConfig, operationIndex: IOperationIndex, pollTimer: IPollTimer);
48
50
  /**
49
51
  * Shuts down the channel and prevents further operations.
50
52
  */
@@ -53,10 +55,6 @@ export declare class GqlChannel implements IChannel {
53
55
  * Initializes the channel by registering it on the remote server and starting polling.
54
56
  */
55
57
  init(): Promise<void>;
56
- /**
57
- * Starts the polling loop to fetch operations from the remote.
58
- */
59
- private startPolling;
60
58
  /**
61
59
  * Polls the remote for new sync envelopes.
62
60
  */
@@ -82,9 +80,10 @@ export declare class GqlChannel implements IChannel {
82
80
  */
83
81
  private handleOutboxAdded;
84
82
  /**
85
- * Pushes a sync operation to the remote via GraphQL mutation.
83
+ * Pushes multiple sync operations to the remote via a single GraphQL mutation.
84
+ * Creates one SyncEnvelope per SyncOperation with key/dependsOn for batch ordering.
86
85
  */
87
- private pushSyncOperation;
86
+ private pushSyncOperations;
88
87
  /**
89
88
  * Serializes a SyncEnvelope for GraphQL transport.
90
89
  *
@@ -97,6 +96,10 @@ export declare class GqlChannel implements IChannel {
97
96
  * Serializes an action for GraphQL transport, converting signature tuples to strings.
98
97
  */
99
98
  private serializeAction;
99
+ /**
100
+ * Gets the authorization header value using jwtHandler.
101
+ */
102
+ private getAuthorizationHeader;
100
103
  /**
101
104
  * Executes a GraphQL query or mutation against the remote endpoint.
102
105
  */
@@ -114,5 +117,6 @@ export declare class GqlChannel implements IChannel {
114
117
  lastFailureUtcMs?: number;
115
118
  failureCount: number;
116
119
  };
120
+ get poller(): IPollTimer;
117
121
  }
118
122
  //# sourceMappingURL=gql-channel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gql-channel.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAgB,YAAY,EAAgB,MAAM,aAAa,CAAC;AAI5E;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,qBAAa,UAAW,YAAW,QAAQ;IAgBvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAfzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAGf,MAAM,EAAE,OAAO,EAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,kBAAkB,EACjC,MAAM,EAAE,gBAAgB;IA4B1B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAQhB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;YACW,IAAI;IAwDlB;;OAEG;IACH,OAAO,CAAC,eAAe;IA4BvB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAkClC;;OAEG;YACW,iBAAiB;IA2E/B;;OAEG;YACW,kBAAkB;IAuBhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;YACW,iBAAiB;IAqC/B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAyBzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;YACW,cAAc;IA4D5B;;OAEG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxD;;OAEG;IACH,SAAS,IAAI;QACX,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;QACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB;CAaF"}
1
+ {"version":3,"file":"gql-channel.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel.ts"],"names":[],"mappings":"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"}