cojson 0.15.8 → 0.15.10

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 (218) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +12 -0
  3. package/dist/IncomingMessagesQueue.d.ts +27 -0
  4. package/dist/IncomingMessagesQueue.d.ts.map +1 -0
  5. package/dist/IncomingMessagesQueue.js +114 -0
  6. package/dist/IncomingMessagesQueue.js.map +1 -0
  7. package/dist/PeerState.d.ts +2 -10
  8. package/dist/PeerState.d.ts.map +1 -1
  9. package/dist/PeerState.js +9 -90
  10. package/dist/PeerState.js.map +1 -1
  11. package/dist/PriorityBasedMessageQueue.d.ts +2 -1
  12. package/dist/PriorityBasedMessageQueue.d.ts.map +1 -1
  13. package/dist/PriorityBasedMessageQueue.js +9 -6
  14. package/dist/PriorityBasedMessageQueue.js.map +1 -1
  15. package/dist/SyncStateManager.d.ts +1 -0
  16. package/dist/SyncStateManager.d.ts.map +1 -1
  17. package/dist/SyncStateManager.js +1 -1
  18. package/dist/SyncStateManager.js.map +1 -1
  19. package/dist/coValue.d.ts +1 -1
  20. package/dist/coValueCore/coValueCore.d.ts +9 -17
  21. package/dist/coValueCore/coValueCore.d.ts.map +1 -1
  22. package/dist/coValueCore/coValueCore.js +75 -50
  23. package/dist/coValueCore/coValueCore.js.map +1 -1
  24. package/dist/coValueCore/verifiedState.d.ts +10 -3
  25. package/dist/coValueCore/verifiedState.d.ts.map +1 -1
  26. package/dist/coValueCore/verifiedState.js +73 -14
  27. package/dist/coValueCore/verifiedState.js.map +1 -1
  28. package/dist/coValues/coMap.d.ts +3 -3
  29. package/dist/coValues/coStream.d.ts +2 -2
  30. package/dist/coValues/group.d.ts +1 -1
  31. package/dist/coValues/group.d.ts.map +1 -1
  32. package/dist/coValues/group.js +2 -4
  33. package/dist/coValues/group.js.map +1 -1
  34. package/dist/config.d.ts +19 -0
  35. package/dist/config.d.ts.map +1 -0
  36. package/dist/config.js +23 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/crypto/WasmCrypto.d.ts.map +1 -1
  39. package/dist/crypto/WasmCrypto.js +2 -1
  40. package/dist/crypto/WasmCrypto.js.map +1 -1
  41. package/dist/exports.d.ts +18 -7
  42. package/dist/exports.d.ts.map +1 -1
  43. package/dist/exports.js +11 -8
  44. package/dist/exports.js.map +1 -1
  45. package/dist/localNode.d.ts +8 -2
  46. package/dist/localNode.d.ts.map +1 -1
  47. package/dist/localNode.js +19 -12
  48. package/dist/localNode.js.map +1 -1
  49. package/dist/storage/StoreQueue.d.ts +15 -0
  50. package/dist/storage/StoreQueue.d.ts.map +1 -0
  51. package/dist/storage/StoreQueue.js +35 -0
  52. package/dist/storage/StoreQueue.js.map +1 -0
  53. package/dist/storage/index.d.ts +6 -0
  54. package/dist/storage/index.d.ts.map +1 -0
  55. package/dist/storage/index.js +6 -0
  56. package/dist/storage/index.js.map +1 -0
  57. package/dist/storage/knownState.d.ts +18 -0
  58. package/dist/storage/knownState.d.ts.map +1 -0
  59. package/dist/storage/knownState.js +63 -0
  60. package/dist/storage/knownState.js.map +1 -0
  61. package/dist/storage/sqlite/client.d.ts +37 -0
  62. package/dist/storage/sqlite/client.d.ts.map +1 -0
  63. package/dist/storage/sqlite/client.js +89 -0
  64. package/dist/storage/sqlite/client.js.map +1 -0
  65. package/dist/storage/sqlite/index.d.ts +5 -0
  66. package/dist/storage/sqlite/index.d.ts.map +1 -0
  67. package/dist/storage/sqlite/index.js +13 -0
  68. package/dist/storage/sqlite/index.js.map +1 -0
  69. package/dist/storage/sqlite/sqliteMigrations.d.ts +3 -0
  70. package/dist/storage/sqlite/sqliteMigrations.d.ts.map +1 -0
  71. package/dist/storage/sqlite/sqliteMigrations.js +44 -0
  72. package/dist/storage/sqlite/sqliteMigrations.js.map +1 -0
  73. package/dist/storage/sqlite/types.d.ts +8 -0
  74. package/dist/storage/sqlite/types.d.ts.map +1 -0
  75. package/dist/storage/sqlite/types.js +2 -0
  76. package/dist/storage/sqlite/types.js.map +1 -0
  77. package/dist/storage/sqliteAsync/client.d.ts +37 -0
  78. package/dist/storage/sqliteAsync/client.d.ts.map +1 -0
  79. package/dist/storage/sqliteAsync/client.js +88 -0
  80. package/dist/storage/sqliteAsync/client.js.map +1 -0
  81. package/dist/storage/sqliteAsync/index.d.ts +6 -0
  82. package/dist/storage/sqliteAsync/index.d.ts.map +1 -0
  83. package/dist/storage/sqliteAsync/index.js +15 -0
  84. package/dist/storage/sqliteAsync/index.js.map +1 -0
  85. package/dist/storage/sqliteAsync/types.d.ts +9 -0
  86. package/dist/storage/sqliteAsync/types.d.ts.map +1 -0
  87. package/dist/storage/sqliteAsync/types.js +2 -0
  88. package/dist/storage/sqliteAsync/types.js.map +1 -0
  89. package/dist/storage/storageAsync.d.ts +22 -0
  90. package/dist/storage/storageAsync.d.ts.map +1 -0
  91. package/dist/storage/storageAsync.js +214 -0
  92. package/dist/storage/storageAsync.js.map +1 -0
  93. package/dist/storage/storageSync.d.ts +21 -0
  94. package/dist/storage/storageSync.d.ts.map +1 -0
  95. package/dist/storage/storageSync.js +206 -0
  96. package/dist/storage/storageSync.js.map +1 -0
  97. package/dist/storage/syncUtils.d.ts +13 -0
  98. package/dist/storage/syncUtils.d.ts.map +1 -0
  99. package/dist/storage/syncUtils.js +25 -0
  100. package/dist/storage/syncUtils.js.map +1 -0
  101. package/dist/storage/types.d.ts +82 -0
  102. package/dist/storage/types.d.ts.map +1 -0
  103. package/dist/storage/types.js +2 -0
  104. package/dist/storage/types.js.map +1 -0
  105. package/dist/streamUtils.d.ts +13 -9
  106. package/dist/streamUtils.d.ts.map +1 -1
  107. package/dist/streamUtils.js +46 -13
  108. package/dist/streamUtils.js.map +1 -1
  109. package/dist/sync.d.ts +22 -14
  110. package/dist/sync.d.ts.map +1 -1
  111. package/dist/sync.js +143 -125
  112. package/dist/sync.js.map +1 -1
  113. package/dist/tests/IncomingMessagesQueue.test.d.ts +2 -0
  114. package/dist/tests/IncomingMessagesQueue.test.d.ts.map +1 -0
  115. package/dist/tests/IncomingMessagesQueue.test.js +437 -0
  116. package/dist/tests/IncomingMessagesQueue.test.js.map +1 -0
  117. package/dist/tests/PeerState.test.js +6 -94
  118. package/dist/tests/PeerState.test.js.map +1 -1
  119. package/dist/tests/PriorityBasedMessageQueue.test.js +14 -14
  120. package/dist/tests/PriorityBasedMessageQueue.test.js.map +1 -1
  121. package/dist/tests/StoreQueue.test.d.ts +2 -0
  122. package/dist/tests/StoreQueue.test.d.ts.map +1 -0
  123. package/dist/tests/StoreQueue.test.js +208 -0
  124. package/dist/tests/StoreQueue.test.js.map +1 -0
  125. package/dist/tests/SyncStateManager.test.js +3 -1
  126. package/dist/tests/SyncStateManager.test.js.map +1 -1
  127. package/dist/tests/account.test.js +9 -9
  128. package/dist/tests/account.test.js.map +1 -1
  129. package/dist/tests/coStream.test.js +1 -1
  130. package/dist/tests/coStream.test.js.map +1 -1
  131. package/dist/tests/coValueCore.test.js +208 -1
  132. package/dist/tests/coValueCore.test.js.map +1 -1
  133. package/dist/tests/coValueCoreLoadingState.test.js +2 -2
  134. package/dist/tests/coValueCoreLoadingState.test.js.map +1 -1
  135. package/dist/tests/group.addMember.test.js.map +1 -1
  136. package/dist/tests/group.removeMember.test.js +1 -1
  137. package/dist/tests/group.removeMember.test.js.map +1 -1
  138. package/dist/tests/messagesTestUtils.js +1 -1
  139. package/dist/tests/messagesTestUtils.js.map +1 -1
  140. package/dist/tests/sync.auth.test.js +23 -15
  141. package/dist/tests/sync.auth.test.js.map +1 -1
  142. package/dist/tests/sync.invite.test.js +10 -16
  143. package/dist/tests/sync.invite.test.js.map +1 -1
  144. package/dist/tests/sync.load.test.js +52 -50
  145. package/dist/tests/sync.load.test.js.map +1 -1
  146. package/dist/tests/sync.mesh.test.js +173 -56
  147. package/dist/tests/sync.mesh.test.js.map +1 -1
  148. package/dist/tests/sync.peerReconciliation.test.js +42 -32
  149. package/dist/tests/sync.peerReconciliation.test.js.map +1 -1
  150. package/dist/tests/sync.storage.test.js +162 -62
  151. package/dist/tests/sync.storage.test.js.map +1 -1
  152. package/dist/tests/sync.storageAsync.test.d.ts +2 -0
  153. package/dist/tests/sync.storageAsync.test.d.ts.map +1 -0
  154. package/dist/tests/sync.storageAsync.test.js +361 -0
  155. package/dist/tests/sync.storageAsync.test.js.map +1 -0
  156. package/dist/tests/sync.test.js +16 -21
  157. package/dist/tests/sync.test.js.map +1 -1
  158. package/dist/tests/sync.upload.test.js +28 -25
  159. package/dist/tests/sync.upload.test.js.map +1 -1
  160. package/dist/tests/testStorage.d.ts +12 -0
  161. package/dist/tests/testStorage.d.ts.map +1 -0
  162. package/dist/tests/testStorage.js +151 -0
  163. package/dist/tests/testStorage.js.map +1 -0
  164. package/dist/tests/testUtils.d.ts +20 -15
  165. package/dist/tests/testUtils.d.ts.map +1 -1
  166. package/dist/tests/testUtils.js +79 -45
  167. package/dist/tests/testUtils.js.map +1 -1
  168. package/package.json +2 -2
  169. package/src/IncomingMessagesQueue.ts +142 -0
  170. package/src/PeerState.ts +11 -110
  171. package/src/PriorityBasedMessageQueue.ts +13 -5
  172. package/src/SyncStateManager.ts +1 -1
  173. package/src/coValueCore/coValueCore.ts +100 -66
  174. package/src/coValueCore/verifiedState.ts +91 -21
  175. package/src/coValues/group.ts +2 -4
  176. package/src/config.ts +26 -0
  177. package/src/crypto/WasmCrypto.ts +3 -1
  178. package/src/exports.ts +20 -27
  179. package/src/localNode.ts +27 -12
  180. package/src/storage/StoreQueue.ts +56 -0
  181. package/src/storage/index.ts +5 -0
  182. package/src/storage/knownState.ts +88 -0
  183. package/src/storage/sqlite/client.ts +180 -0
  184. package/src/storage/sqlite/index.ts +19 -0
  185. package/src/storage/sqlite/sqliteMigrations.ts +44 -0
  186. package/src/storage/sqlite/types.ts +7 -0
  187. package/src/storage/sqliteAsync/client.ts +179 -0
  188. package/src/storage/sqliteAsync/index.ts +25 -0
  189. package/src/storage/sqliteAsync/types.ts +8 -0
  190. package/src/storage/storageAsync.ts +367 -0
  191. package/src/storage/storageSync.ts +343 -0
  192. package/src/storage/syncUtils.ts +50 -0
  193. package/src/storage/types.ts +162 -0
  194. package/src/streamUtils.ts +61 -19
  195. package/src/sync.ts +191 -160
  196. package/src/tests/IncomingMessagesQueue.test.ts +626 -0
  197. package/src/tests/PeerState.test.ts +6 -118
  198. package/src/tests/PriorityBasedMessageQueue.test.ts +18 -14
  199. package/src/tests/StoreQueue.test.ts +283 -0
  200. package/src/tests/SyncStateManager.test.ts +4 -1
  201. package/src/tests/account.test.ts +11 -12
  202. package/src/tests/coStream.test.ts +1 -3
  203. package/src/tests/coValueCore.test.ts +270 -1
  204. package/src/tests/coValueCoreLoadingState.test.ts +2 -2
  205. package/src/tests/group.addMember.test.ts +1 -0
  206. package/src/tests/group.removeMember.test.ts +2 -8
  207. package/src/tests/messagesTestUtils.ts +2 -2
  208. package/src/tests/sync.auth.test.ts +24 -14
  209. package/src/tests/sync.invite.test.ts +11 -17
  210. package/src/tests/sync.load.test.ts +53 -49
  211. package/src/tests/sync.mesh.test.ts +198 -56
  212. package/src/tests/sync.peerReconciliation.test.ts +44 -34
  213. package/src/tests/sync.storage.test.ts +231 -64
  214. package/src/tests/sync.storageAsync.test.ts +486 -0
  215. package/src/tests/sync.test.ts +17 -23
  216. package/src/tests/sync.upload.test.ts +29 -24
  217. package/src/tests/testStorage.ts +216 -0
  218. package/src/tests/testUtils.ts +89 -54
@@ -0,0 +1,15 @@
1
+ import { CoValueKnownState, NewContentMessage } from "../sync.js";
2
+ type StoreQueueEntry = {
3
+ data: NewContentMessage[];
4
+ correctionCallback: (data: CoValueKnownState) => void;
5
+ };
6
+ export declare class StoreQueue {
7
+ private queue;
8
+ push(data: NewContentMessage[], correctionCallback: (data: CoValueKnownState) => void): void;
9
+ pull(): StoreQueueEntry | undefined;
10
+ processing: boolean;
11
+ processQueue(callback: (data: NewContentMessage[], correctionCallback: (data: CoValueKnownState) => void) => Promise<void>): Promise<void>;
12
+ drain(): void;
13
+ }
14
+ export {};
15
+ //# sourceMappingURL=StoreQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StoreQueue.d.ts","sourceRoot":"","sources":["../../src/storage/StoreQueue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElE,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,kBAAkB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACvD,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAqC;IAE3C,IAAI,CACT,IAAI,EAAE,iBAAiB,EAAE,EACzB,kBAAkB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI;IAKhD,IAAI;IAIX,UAAU,UAAS;IAEb,YAAY,CAChB,QAAQ,EAAE,CACR,IAAI,EAAE,iBAAiB,EAAE,EACzB,kBAAkB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,KAClD,OAAO,CAAC,IAAI,CAAC;IAuBpB,KAAK;CAGN"}
@@ -0,0 +1,35 @@
1
+ import { LinkedList } from "../PriorityBasedMessageQueue.js";
2
+ import { logger } from "../logger.js";
3
+ export class StoreQueue {
4
+ constructor() {
5
+ this.queue = new LinkedList();
6
+ this.processing = false;
7
+ }
8
+ push(data, correctionCallback) {
9
+ this.queue.push({ data, correctionCallback });
10
+ }
11
+ pull() {
12
+ return this.queue.shift();
13
+ }
14
+ async processQueue(callback) {
15
+ if (this.processing) {
16
+ return;
17
+ }
18
+ this.processing = true;
19
+ let entry;
20
+ while ((entry = this.pull())) {
21
+ const { data, correctionCallback } = entry;
22
+ try {
23
+ await callback(data, correctionCallback);
24
+ }
25
+ catch (err) {
26
+ logger.error("Error processing message in store queue", { err });
27
+ }
28
+ }
29
+ this.processing = false;
30
+ }
31
+ drain() {
32
+ while (this.pull()) { }
33
+ }
34
+ }
35
+ //# sourceMappingURL=StoreQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StoreQueue.js","sourceRoot":"","sources":["../../src/storage/StoreQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC,MAAM,OAAO,UAAU;IAAvB;QACU,UAAK,GAAG,IAAI,UAAU,EAAmB,CAAC;QAalD,eAAU,GAAG,KAAK,CAAC;IAgCrB,CAAC;IA3CQ,IAAI,CACT,IAAyB,EACzB,kBAAqD;QAErD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAChD,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAID,KAAK,CAAC,YAAY,CAChB,QAGkB;QAElB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAI,KAAkC,CAAC;QAEvC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC7B,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC;YAE3C,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ export * from "./types.js";
2
+ export * from "./sqlite/index.js";
3
+ export * from "./sqliteAsync/index.js";
4
+ export * from "./storageSync.js";
5
+ export * from "./storageAsync.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./types.js";
2
+ export * from "./sqlite/index.js";
3
+ export * from "./sqliteAsync/index.js";
4
+ export * from "./storageSync.js";
5
+ export * from "./storageAsync.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type CoValueCore } from "../exports.js";
2
+ import { CoValueKnownState } from "../sync.js";
3
+ /**
4
+ * Track how much data we have stored inside our storage
5
+ * and provides the API to wait for the data to be fully stored.
6
+ */
7
+ export declare class StorageKnownState {
8
+ knwonStates: Map<string, CoValueKnownState>;
9
+ getKnownState(id: string): CoValueKnownState;
10
+ setKnownState(id: string, knownState: CoValueKnownState): void;
11
+ handleUpdate(id: string, knownState: CoValueKnownState): void;
12
+ waitForSyncRequests: Map<string, Set<{
13
+ knownState: CoValueKnownState;
14
+ resolve: (value: void) => void;
15
+ }>>;
16
+ waitForSync(id: string, coValue: CoValueCore): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=knownState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knownState.d.ts","sourceRoot":"","sources":["../../src/storage/knownState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAmB,MAAM,YAAY,CAAC;AAEhE;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,WAAW,iCAAwC;IAEnD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB;IAY5C,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB;IAIvD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB;IAetD,mBAAmB;oBAGH,iBAAiB;iBACpB,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI;QAE9B;IAEJ,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW;CAyB7C"}
@@ -0,0 +1,63 @@
1
+ import { getIsUploaded } from "../SyncStateManager.js";
2
+ import { emptyKnownState } from "../sync.js";
3
+ /**
4
+ * Track how much data we have stored inside our storage
5
+ * and provides the API to wait for the data to be fully stored.
6
+ */
7
+ export class StorageKnownState {
8
+ constructor() {
9
+ this.knwonStates = new Map();
10
+ this.waitForSyncRequests = new Map();
11
+ }
12
+ getKnownState(id) {
13
+ const knownState = this.knwonStates.get(id);
14
+ if (!knownState) {
15
+ const empty = emptyKnownState(id);
16
+ this.knwonStates.set(id, empty);
17
+ return empty;
18
+ }
19
+ return knownState;
20
+ }
21
+ setKnownState(id, knownState) {
22
+ this.knwonStates.set(id, knownState);
23
+ }
24
+ handleUpdate(id, knownState) {
25
+ const requests = this.waitForSyncRequests.get(id);
26
+ if (!requests) {
27
+ return;
28
+ }
29
+ for (const request of requests) {
30
+ if (isInSync(request.knownState, knownState)) {
31
+ request.resolve();
32
+ requests.delete(request);
33
+ }
34
+ }
35
+ }
36
+ waitForSync(id, coValue) {
37
+ const initialKnownState = coValue.knownState();
38
+ if (isInSync(initialKnownState, this.getKnownState(id))) {
39
+ return Promise.resolve();
40
+ }
41
+ const requests = this.waitForSyncRequests.get(id) || new Set();
42
+ this.waitForSyncRequests.set(id, requests);
43
+ return new Promise((resolve) => {
44
+ const unsubscribe = coValue.subscribe((coValue) => {
45
+ req.knownState = coValue.knownState();
46
+ this.handleUpdate(id, this.getKnownState(id));
47
+ }, false);
48
+ const handleResolve = () => {
49
+ resolve();
50
+ unsubscribe();
51
+ };
52
+ const req = { knownState: initialKnownState, resolve: handleResolve };
53
+ requests.add(req);
54
+ });
55
+ }
56
+ }
57
+ function isInSync(knownState, knownStateFromStorage) {
58
+ if (!knownStateFromStorage.header && knownState.header) {
59
+ return false;
60
+ }
61
+ return getIsUploaded(knownState.sessions, knownStateFromStorage.sessions);
62
+ }
63
+ //# sourceMappingURL=knownState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knownState.js","sourceRoot":"","sources":["../../src/storage/knownState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { Transaction } from "../../coValueCore/verifiedState.js";
2
+ import type { Signature } from "../../crypto/crypto.js";
3
+ import type { RawCoID, SessionID } from "../../exports.js";
4
+ import type { NewContentMessage } from "../../sync.js";
5
+ import type { DBClientInterfaceSync, SessionRow, SignatureAfterRow, StoredCoValueRow, StoredSessionRow, TransactionRow } from "../types.js";
6
+ import type { SQLiteDatabaseDriver } from "./types.js";
7
+ export type RawCoValueRow = {
8
+ id: RawCoID;
9
+ header: string;
10
+ };
11
+ export type RawTransactionRow = {
12
+ ses: number;
13
+ idx: number;
14
+ tx: string;
15
+ };
16
+ export declare function getErrorMessage(error: unknown): string;
17
+ export declare class SQLiteClient implements DBClientInterfaceSync {
18
+ private readonly db;
19
+ constructor(db: SQLiteDatabaseDriver);
20
+ getCoValue(coValueId: RawCoID): StoredCoValueRow | undefined;
21
+ getCoValueSessions(coValueRowId: number): StoredSessionRow[];
22
+ getSingleCoValueSession(coValueRowId: number, sessionID: SessionID): StoredSessionRow | undefined;
23
+ getNewTransactionInSession(sessionRowId: number, fromIdx: number, toIdx: number): TransactionRow[];
24
+ getSignatures(sessionRowId: number, firstNewTxIdx: number): SignatureAfterRow[];
25
+ addCoValue(msg: NewContentMessage): number;
26
+ addSessionUpdate({ sessionUpdate, }: {
27
+ sessionUpdate: SessionRow;
28
+ }): number;
29
+ addTransaction(sessionRowID: number, nextIdx: number, newTransaction: Transaction): void;
30
+ addSignatureAfter({ sessionRowID, idx, signature, }: {
31
+ sessionRowID: number;
32
+ idx: number;
33
+ signature: Signature;
34
+ }): void;
35
+ transaction(operationsCallback: () => unknown): undefined;
36
+ }
37
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EACV,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,UAE7C;AAED,qBAAa,YAAa,YAAW,qBAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAuB;gBAE9B,EAAE,EAAE,oBAAoB;IAIpC,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS;IA0B5D,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAO5D,uBAAuB,CACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,SAAS,GACnB,gBAAgB,GAAG,SAAS;IAO/B,0BAA0B,CACxB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,cAAc,EAAE;IAiBnB,aAAa,CACX,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,iBAAiB,EAAE;IAOtB,UAAU,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM;IAa1C,gBAAgB,CAAC,EACf,aAAa,GACd,EAAE;QACD,aAAa,EAAE,UAAU,CAAC;KAC3B,GAAG,MAAM;IAqBV,cAAc,CACZ,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,WAAW;IAS7B,iBAAiB,CAAC,EAChB,YAAY,EACZ,GAAG,EACH,SAAS,GACV,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE;IAO9D,WAAW,CAAC,kBAAkB,EAAE,MAAM,OAAO;CAI9C"}
@@ -0,0 +1,89 @@
1
+ import { logger } from "../../logger.js";
2
+ export function getErrorMessage(error) {
3
+ return error instanceof Error ? error.message : "Unknown error";
4
+ }
5
+ export class SQLiteClient {
6
+ constructor(db) {
7
+ this.db = db;
8
+ }
9
+ getCoValue(coValueId) {
10
+ const coValueRow = this.db.get("SELECT * FROM coValues WHERE id = ?", [coValueId]);
11
+ if (!coValueRow)
12
+ return;
13
+ try {
14
+ const parsedHeader = (coValueRow?.header &&
15
+ JSON.parse(coValueRow.header));
16
+ return {
17
+ ...coValueRow,
18
+ header: parsedHeader,
19
+ };
20
+ }
21
+ catch (e) {
22
+ const headerValue = coValueRow?.header ?? "";
23
+ logger.warn(`Invalid JSON in header: ${headerValue}`, {
24
+ id: coValueId,
25
+ err: e,
26
+ });
27
+ return;
28
+ }
29
+ }
30
+ getCoValueSessions(coValueRowId) {
31
+ return this.db.query("SELECT * FROM sessions WHERE coValue = ?", [coValueRowId]);
32
+ }
33
+ getSingleCoValueSession(coValueRowId, sessionID) {
34
+ return this.db.get("SELECT * FROM sessions WHERE coValue = ? AND sessionID = ?", [coValueRowId, sessionID]);
35
+ }
36
+ getNewTransactionInSession(sessionRowId, fromIdx, toIdx) {
37
+ const txs = this.db.query("SELECT * FROM transactions WHERE ses = ? AND idx >= ? AND idx <= ?", [sessionRowId, fromIdx, toIdx]);
38
+ try {
39
+ return txs.map((transactionRow) => ({
40
+ ...transactionRow,
41
+ tx: JSON.parse(transactionRow.tx),
42
+ }));
43
+ }
44
+ catch (e) {
45
+ logger.warn("Invalid JSON in transaction", { err: e });
46
+ return [];
47
+ }
48
+ }
49
+ getSignatures(sessionRowId, firstNewTxIdx) {
50
+ return this.db.query("SELECT * FROM signatureAfter WHERE ses = ? AND idx >= ?", [sessionRowId, firstNewTxIdx]);
51
+ }
52
+ addCoValue(msg) {
53
+ const result = this.db.get("INSERT INTO coValues (id, header) VALUES (?, ?) RETURNING rowID", [msg.id, JSON.stringify(msg.header)]);
54
+ if (!result) {
55
+ throw new Error("Failed to add coValue");
56
+ }
57
+ return result.rowID;
58
+ }
59
+ addSessionUpdate({ sessionUpdate, }) {
60
+ const result = this.db.get(`INSERT INTO sessions (coValue, sessionID, lastIdx, lastSignature, bytesSinceLastSignature) VALUES (?, ?, ?, ?, ?)
61
+ ON CONFLICT(coValue, sessionID) DO UPDATE SET lastIdx=excluded.lastIdx, lastSignature=excluded.lastSignature, bytesSinceLastSignature=excluded.bytesSinceLastSignature
62
+ RETURNING rowID`, [
63
+ sessionUpdate.coValue,
64
+ sessionUpdate.sessionID,
65
+ sessionUpdate.lastIdx,
66
+ sessionUpdate.lastSignature,
67
+ sessionUpdate.bytesSinceLastSignature,
68
+ ]);
69
+ if (!result) {
70
+ throw new Error("Failed to add session update");
71
+ }
72
+ return result.rowID;
73
+ }
74
+ addTransaction(sessionRowID, nextIdx, newTransaction) {
75
+ this.db.run("INSERT INTO transactions (ses, idx, tx) VALUES (?, ?, ?)", [
76
+ sessionRowID,
77
+ nextIdx,
78
+ JSON.stringify(newTransaction),
79
+ ]);
80
+ }
81
+ addSignatureAfter({ sessionRowID, idx, signature, }) {
82
+ this.db.run("INSERT INTO signatureAfter (ses, idx, signature) VALUES (?, ?, ?)", [sessionRowID, idx, signature]);
83
+ }
84
+ transaction(operationsCallback) {
85
+ this.db.transaction(operationsCallback);
86
+ return undefined;
87
+ }
88
+ }
89
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/storage/sqlite/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { StorageApiSync } from "../storageSync.js";
2
+ import type { SQLiteDatabaseDriver } from "./types.js";
3
+ export type { SQLiteDatabaseDriver };
4
+ export declare function getSqliteStorage(db: SQLiteDatabaseDriver): StorageApiSync;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,oBAAoB,kBAWxD"}
@@ -0,0 +1,13 @@
1
+ import { StorageApiSync } from "../storageSync.js";
2
+ import { SQLiteClient } from "./client.js";
3
+ import { getSQLiteMigrationQueries } from "./sqliteMigrations.js";
4
+ export function getSqliteStorage(db) {
5
+ const rows = db.query("PRAGMA user_version", []);
6
+ const userVersion = Number(rows[0]?.user_version) ?? 0;
7
+ const migrations = getSQLiteMigrationQueries(userVersion);
8
+ for (const migration of migrations) {
9
+ db.run(migration, []);
10
+ }
11
+ return new StorageApiSync(new SQLiteClient(db));
12
+ }
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAKlE,MAAM,UAAU,gBAAgB,CAAC,EAAwB;IACvD,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAA2B,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAE1D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,IAAI,cAAc,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const migrations: Record<number, string[]>;
2
+ export declare function getSQLiteMigrationQueries(version: number): string[];
3
+ //# sourceMappingURL=sqliteMigrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqliteMigrations.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite/sqliteMigrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAmC/C,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAMnE"}
@@ -0,0 +1,44 @@
1
+ export const migrations = {
2
+ 1: [
3
+ `CREATE TABLE IF NOT EXISTS transactions (
4
+ ses INTEGER,
5
+ idx INTEGER,
6
+ tx TEXT NOT NULL,
7
+ PRIMARY KEY (ses, idx)
8
+ ) WITHOUT ROWID;`,
9
+ `CREATE TABLE IF NOT EXISTS sessions (
10
+ rowID INTEGER PRIMARY KEY,
11
+ coValue INTEGER NOT NULL,
12
+ sessionID TEXT NOT NULL,
13
+ lastIdx INTEGER,
14
+ lastSignature TEXT,
15
+ UNIQUE (sessionID, coValue)
16
+ );`,
17
+ "CREATE INDEX IF NOT EXISTS sessionsByCoValue ON sessions (coValue);",
18
+ `CREATE TABLE IF NOT EXISTS coValues (
19
+ rowID INTEGER PRIMARY KEY,
20
+ id TEXT NOT NULL UNIQUE,
21
+ header TEXT NOT NULL UNIQUE
22
+ );`,
23
+ "CREATE INDEX IF NOT EXISTS coValuesByID ON coValues (id);",
24
+ "PRAGMA user_version = 1;",
25
+ ],
26
+ 3: [
27
+ `CREATE TABLE IF NOT EXISTS signatureAfter (
28
+ ses INTEGER,
29
+ idx INTEGER,
30
+ signature TEXT NOT NULL,
31
+ PRIMARY KEY (ses, idx)
32
+ ) WITHOUT ROWID;`,
33
+ "ALTER TABLE sessions ADD COLUMN bytesSinceLastSignature INTEGER;",
34
+ "PRAGMA user_version = 3;",
35
+ ],
36
+ };
37
+ export function getSQLiteMigrationQueries(version) {
38
+ return Object.keys(migrations)
39
+ .map((k) => Number.parseInt(k, 10))
40
+ .filter((v) => v > version)
41
+ .sort((a, b) => a - b)
42
+ .flatMap((v) => migrations[v] ?? []);
43
+ }
44
+ //# sourceMappingURL=sqliteMigrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqliteMigrations.js","sourceRoot":"","sources":["../../../src/storage/sqlite/sqliteMigrations.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAA6B;IAClD,CAAC,EAAE;QACD;;;;;qBAKiB;QACjB;;;;;;;OAOG;QACH,qEAAqE;QACrE;;;;OAIG;QACH,2DAA2D;QAC3D,0BAA0B;KAC3B;IACD,CAAC,EAAE;QACD;;;;;qBAKiB;QACjB,kEAAkE;QAClE,0BAA0B;KAC3B;CACF,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,OAAe;IACvD,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;SAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SACrB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface SQLiteDatabaseDriver {
2
+ run(sql: string, params: unknown[]): void;
3
+ get<T>(sql: string, params: unknown[]): T | undefined;
4
+ query<T>(sql: string, params: unknown[]): T[];
5
+ transaction(callback: () => unknown): void;
6
+ closeDb(): void;
7
+ }
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC1C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;IACtD,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;IAC9C,WAAW,CAAC,QAAQ,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;IAC3C,OAAO,IAAI,IAAI,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/storage/sqlite/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import type { Transaction } from "../../coValueCore/verifiedState.js";
2
+ import type { Signature } from "../../crypto/crypto.js";
3
+ import type { RawCoID, SessionID } from "../../exports.js";
4
+ import type { NewContentMessage } from "../../sync.js";
5
+ import type { DBClientInterfaceAsync, SessionRow, SignatureAfterRow, StoredCoValueRow, StoredSessionRow, TransactionRow } from "../types.js";
6
+ import type { SQLiteDatabaseDriverAsync } from "./types.js";
7
+ export type RawCoValueRow = {
8
+ id: RawCoID;
9
+ header: string;
10
+ };
11
+ export type RawTransactionRow = {
12
+ ses: number;
13
+ idx: number;
14
+ tx: string;
15
+ };
16
+ export declare function getErrorMessage(error: unknown): string;
17
+ export declare class SQLiteClientAsync implements DBClientInterfaceAsync {
18
+ private readonly db;
19
+ constructor(db: SQLiteDatabaseDriverAsync);
20
+ getCoValue(coValueId: RawCoID): Promise<StoredCoValueRow | undefined>;
21
+ getCoValueSessions(coValueRowId: number): Promise<StoredSessionRow[]>;
22
+ getSingleCoValueSession(coValueRowId: number, sessionID: SessionID): Promise<StoredSessionRow | undefined>;
23
+ getNewTransactionInSession(sessionRowId: number, fromIdx: number, toIdx: number): Promise<TransactionRow[]>;
24
+ getSignatures(sessionRowId: number, firstNewTxIdx: number): Promise<SignatureAfterRow[]>;
25
+ addCoValue(msg: NewContentMessage): Promise<number>;
26
+ addSessionUpdate({ sessionUpdate, }: {
27
+ sessionUpdate: SessionRow;
28
+ }): Promise<number>;
29
+ addTransaction(sessionRowID: number, nextIdx: number, newTransaction: Transaction): void;
30
+ addSignatureAfter({ sessionRowID, idx, signature, }: {
31
+ sessionRowID: number;
32
+ idx: number;
33
+ signature: Signature;
34
+ }): Promise<void>;
35
+ transaction(operationsCallback: () => unknown): Promise<unknown>;
36
+ }
37
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EACV,sBAAsB,EACtB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,UAE7C;AAED,qBAAa,iBAAkB,YAAW,sBAAsB;IAC9D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA4B;gBAEnC,EAAE,EAAE,yBAAyB;IAInC,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IA0BrE,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAOrE,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAOlC,0BAA0B,CAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,EAAE,CAAC;IAiBtB,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAOzB,UAAU,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAanD,gBAAgB,CAAC,EACrB,aAAa,GACd,EAAE;QACD,aAAa,EAAE,UAAU,CAAC;KAC3B,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBnB,cAAc,CACZ,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,WAAW;IASvB,iBAAiB,CAAC,EACtB,YAAY,EACZ,GAAG,EACH,SAAS,GACV,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE;IAOxD,WAAW,CAAC,kBAAkB,EAAE,MAAM,OAAO;CAGpD"}
@@ -0,0 +1,88 @@
1
+ import { logger } from "../../logger.js";
2
+ export function getErrorMessage(error) {
3
+ return error instanceof Error ? error.message : "Unknown error";
4
+ }
5
+ export class SQLiteClientAsync {
6
+ constructor(db) {
7
+ this.db = db;
8
+ }
9
+ async getCoValue(coValueId) {
10
+ const coValueRow = await this.db.get("SELECT * FROM coValues WHERE id = ?", [coValueId]);
11
+ if (!coValueRow)
12
+ return;
13
+ try {
14
+ const parsedHeader = (coValueRow?.header &&
15
+ JSON.parse(coValueRow.header));
16
+ return {
17
+ ...coValueRow,
18
+ header: parsedHeader,
19
+ };
20
+ }
21
+ catch (e) {
22
+ const headerValue = coValueRow?.header ?? "";
23
+ logger.warn(`Invalid JSON in header: ${headerValue}`, {
24
+ id: coValueId,
25
+ err: e,
26
+ });
27
+ return;
28
+ }
29
+ }
30
+ async getCoValueSessions(coValueRowId) {
31
+ return this.db.query("SELECT * FROM sessions WHERE coValue = ?", [coValueRowId]);
32
+ }
33
+ async getSingleCoValueSession(coValueRowId, sessionID) {
34
+ return this.db.get("SELECT * FROM sessions WHERE coValue = ? AND sessionID = ?", [coValueRowId, sessionID]);
35
+ }
36
+ async getNewTransactionInSession(sessionRowId, fromIdx, toIdx) {
37
+ const txs = await this.db.query("SELECT * FROM transactions WHERE ses = ? AND idx >= ? AND idx <= ?", [sessionRowId, fromIdx, toIdx]);
38
+ try {
39
+ return txs.map((transactionRow) => ({
40
+ ...transactionRow,
41
+ tx: JSON.parse(transactionRow.tx),
42
+ }));
43
+ }
44
+ catch (e) {
45
+ logger.warn("Invalid JSON in transaction", { err: e });
46
+ return [];
47
+ }
48
+ }
49
+ async getSignatures(sessionRowId, firstNewTxIdx) {
50
+ return this.db.query("SELECT * FROM signatureAfter WHERE ses = ? AND idx >= ?", [sessionRowId, firstNewTxIdx]);
51
+ }
52
+ async addCoValue(msg) {
53
+ const result = await this.db.get("INSERT INTO coValues (id, header) VALUES (?, ?) RETURNING rowID", [msg.id, JSON.stringify(msg.header)]);
54
+ if (!result) {
55
+ throw new Error("Failed to add coValue");
56
+ }
57
+ return result.rowID;
58
+ }
59
+ async addSessionUpdate({ sessionUpdate, }) {
60
+ const result = await this.db.get(`INSERT INTO sessions (coValue, sessionID, lastIdx, lastSignature, bytesSinceLastSignature) VALUES (?, ?, ?, ?, ?)
61
+ ON CONFLICT(coValue, sessionID) DO UPDATE SET lastIdx=excluded.lastIdx, lastSignature=excluded.lastSignature, bytesSinceLastSignature=excluded.bytesSinceLastSignature
62
+ RETURNING rowID`, [
63
+ sessionUpdate.coValue,
64
+ sessionUpdate.sessionID,
65
+ sessionUpdate.lastIdx,
66
+ sessionUpdate.lastSignature,
67
+ sessionUpdate.bytesSinceLastSignature,
68
+ ]);
69
+ if (!result) {
70
+ throw new Error("Failed to add session update");
71
+ }
72
+ return result.rowID;
73
+ }
74
+ addTransaction(sessionRowID, nextIdx, newTransaction) {
75
+ this.db.run("INSERT INTO transactions (ses, idx, tx) VALUES (?, ?, ?)", [
76
+ sessionRowID,
77
+ nextIdx,
78
+ JSON.stringify(newTransaction),
79
+ ]);
80
+ }
81
+ async addSignatureAfter({ sessionRowID, idx, signature, }) {
82
+ this.db.run("INSERT INTO signatureAfter (ses, idx, signature) VALUES (?, ?, ?)", [sessionRowID, idx, signature]);
83
+ }
84
+ async transaction(operationsCallback) {
85
+ return this.db.transaction(operationsCallback);
86
+ }
87
+ }
88
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { SQLiteClientAsync } from "./client.js";
2
+ export type { SQLiteDatabaseDriverAsync } from "./types.js";
3
+ import { StorageApiAsync } from "../storageAsync.js";
4
+ import type { SQLiteDatabaseDriverAsync } from "./types.js";
5
+ export declare function getSqliteStorageAsync(db: SQLiteDatabaseDriverAsync): Promise<StorageApiAsync>;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,yBAAyB,4BAgBxE"}
@@ -0,0 +1,15 @@
1
+ export { SQLiteClientAsync } from "./client.js";
2
+ import { getSQLiteMigrationQueries } from "../sqlite/sqliteMigrations.js";
3
+ import { StorageApiAsync } from "../storageAsync.js";
4
+ import { SQLiteClientAsync } from "./client.js";
5
+ export async function getSqliteStorageAsync(db) {
6
+ await db.initialize();
7
+ const rows = await db.query("PRAGMA user_version", []);
8
+ const userVersion = Number(rows[0]?.user_version) ?? 0;
9
+ const migrations = getSQLiteMigrationQueries(userVersion);
10
+ for (const migration of migrations) {
11
+ await db.run(migration, []);
12
+ }
13
+ return new StorageApiAsync(new SQLiteClientAsync(db));
14
+ }
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAA6B;IACvE,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;IAEtB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CACzB,qBAAqB,EACrB,EAAE,CACH,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAE1D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,eAAe,CAAC,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface SQLiteDatabaseDriverAsync {
2
+ initialize(): Promise<void>;
3
+ run(sql: string, params: unknown[]): Promise<void>;
4
+ query<T>(sql: string, params: unknown[]): Promise<T[]>;
5
+ get<T>(sql: string, params: unknown[]): Promise<T | undefined>;
6
+ transaction(callback: () => unknown): Promise<unknown>;
7
+ closeDb(): Promise<unknown>;
8
+ }
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/D,WAAW,CAAC,QAAQ,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/types.ts"],"names":[],"mappings":""}