cojson 0.20.18 → 0.20.19

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 (53) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +13 -0
  3. package/dist/exports.d.ts +2 -2
  4. package/dist/exports.d.ts.map +1 -1
  5. package/dist/exports.js.map +1 -1
  6. package/dist/localNode.d.ts +7 -3
  7. package/dist/localNode.d.ts.map +1 -1
  8. package/dist/localNode.js +11 -4
  9. package/dist/localNode.js.map +1 -1
  10. package/dist/queue/StoreQueue.d.ts +3 -2
  11. package/dist/queue/StoreQueue.d.ts.map +1 -1
  12. package/dist/queue/StoreQueue.js +4 -4
  13. package/dist/queue/StoreQueue.js.map +1 -1
  14. package/dist/storage/sqliteAsync/client.d.ts.map +1 -1
  15. package/dist/storage/sqliteAsync/client.js +17 -2
  16. package/dist/storage/sqliteAsync/client.js.map +1 -1
  17. package/dist/storage/storageAsync.d.ts +1 -1
  18. package/dist/storage/storageAsync.d.ts.map +1 -1
  19. package/dist/storage/storageAsync.js +8 -4
  20. package/dist/storage/storageAsync.js.map +1 -1
  21. package/dist/storage/storageSync.d.ts +1 -1
  22. package/dist/storage/storageSync.d.ts.map +1 -1
  23. package/dist/storage/storageSync.js +6 -2
  24. package/dist/storage/storageSync.js.map +1 -1
  25. package/dist/storage/types.d.ts +9 -1
  26. package/dist/storage/types.d.ts.map +1 -1
  27. package/dist/sync.d.ts +21 -0
  28. package/dist/sync.d.ts.map +1 -1
  29. package/dist/sync.js +41 -3
  30. package/dist/sync.js.map +1 -1
  31. package/dist/tests/SQLiteClientAsync.test.js +43 -8
  32. package/dist/tests/SQLiteClientAsync.test.js.map +1 -1
  33. package/dist/tests/StoreQueue.test.js +16 -3
  34. package/dist/tests/StoreQueue.test.js.map +1 -1
  35. package/dist/tests/sync.localStoreDurability.test.d.ts +2 -0
  36. package/dist/tests/sync.localStoreDurability.test.d.ts.map +1 -0
  37. package/dist/tests/sync.localStoreDurability.test.js +257 -0
  38. package/dist/tests/sync.localStoreDurability.test.js.map +1 -0
  39. package/dist/tests/testStorage.js +2 -2
  40. package/dist/tests/testStorage.js.map +1 -1
  41. package/package.json +4 -4
  42. package/src/exports.ts +7 -1
  43. package/src/localNode.ts +24 -3
  44. package/src/queue/StoreQueue.ts +12 -4
  45. package/src/storage/sqliteAsync/client.ts +17 -2
  46. package/src/storage/storageAsync.ts +14 -4
  47. package/src/storage/storageSync.ts +12 -2
  48. package/src/storage/types.ts +13 -1
  49. package/src/sync.ts +87 -17
  50. package/src/tests/SQLiteClientAsync.test.ts +55 -10
  51. package/src/tests/StoreQueue.test.ts +20 -0
  52. package/src/tests/sync.localStoreDurability.test.ts +357 -0
  53. package/src/tests/testStorage.ts +29 -24
@@ -1 +1 @@
1
- {"version":3,"file":"StoreQueue.test.js","sourceRoot":"","sources":["../../src/tests/StoreQueue.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StoreQueue.test.js","sourceRoot":"","sources":["../../src/tests/StoreQueue.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpD,SAAS,2BAA2B,CAAC,EAAU;IAC7C,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,EAAE,EAAE,EAAS;QACb,QAAQ,EAAE,CAAC;QACX,GAAG,EAAE,EAAE;KACR,CAAC;AACJ,CAAC;AAED,SAAS,KAAK;IACZ,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,MAAM,sBAAsB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAEvC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAC9D,CAAC;AAED,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACtD,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEjD,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,sBAAsB;YAExD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,KAAK;gBACX,kBAAkB,EAAE,sBAAsB;aAC3C,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,KAAK;gBACX,kBAAkB,EAAE,sBAAsB;aAC3C,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACrC,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACtC,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YAEhC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;gBACpB,IAAI;gBACJ,kBAAkB,EAAE,sBAAsB;aAC3C,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACrE,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEjD,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAE/C,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,YAAY,CAAC,CAAC,uBAAuB,CAC1C,CAAC,EACD,KAAK,EACL,sBAAsB,EACtB,SAAS,CACV,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,CAAC,uBAAuB,CAC1C,CAAC,EACD,KAAK,EACL,sBAAsB,EACtB,SAAS,CACV,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACrE,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,mBAAmB;YACnB,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE9D,gDAAgD;YAChD,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE9D,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;YAEtD,6BAA6B;YAC7B,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;YACtF,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACrE,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,CAAC;YAC7C,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC5C,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YAEzE,MAAM,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;YAC7C,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAChD,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEjD,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAE/C,UAAU,CAAC,KAAK,EAAE,CAAC;YAEnB,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACrC,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAC/C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,IAAI,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACrE,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEjD,eAAe;YACf,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAE/C,gBAAgB;YAChB,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,oCAAoC;YACpC,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;YAE1C,qCAAqC;YACrC,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACjD,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;YAE/C,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,YAAY,CAAC,CAAC,wBAAwB,CAC3C,KAAK,EACL,sBAAsB,EACtB,SAAS,CACV,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,uBAA8B,CAAC;YACjD,MAAM,UAAU,GAAsB;gBACpC,EAAE,EAAE,KAAY;gBAChB,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;aAC7B,CAAC;YAEF,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,MAAM,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE;gBAC/D,2BAA2B;gBAC3B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBACxD,+BAA+B;gBAC/B,kBAAkB,CAAC,UAAU,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACrE,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAE9C,kDAAkD;YAClD,MAAM,QAAQ,GAAG;gBACf,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC;gBACrC,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC;gBACrC,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC;aACtC,CAAC;YAEF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE5B,2BAA2B;YAC3B,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAClD,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAEhD,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;YACrC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAEpC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,YAAY,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACtD,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,KAAK,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,CAAC;YAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnD,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzB,KAAK,EAAE,CAAC;YACV,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC9E,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAEtB,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACzE,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAElE,MAAM,IAAI,GAAoC,EAAE,CAAC;YACjD,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sync.localStoreDurability.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.localStoreDurability.test.d.ts","sourceRoot":"","sources":["../../src/tests/sync.localStoreDurability.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,257 @@
1
+ import { beforeEach, describe, expect, test, vi } from "vitest";
2
+ import { WasmCrypto } from "../crypto/WasmCrypto.js";
3
+ import { LocalNode } from "../localNode";
4
+ import { SyncMessagesLog, getSyncServerConnectedPeer, loadCoValueOrFail, setupTestNode, waitFor, } from "./testUtils";
5
+ import { getDbPath, registerStorageCleanupRunner } from "./testStorage";
6
+ const Crypto = await WasmCrypto.create();
7
+ let jazzCloud;
8
+ beforeEach(async () => {
9
+ registerStorageCleanupRunner();
10
+ SyncMessagesLog.clear();
11
+ jazzCloud = setupTestNode({ isSyncServer: true });
12
+ });
13
+ describe("StorageAPI.store done callback", () => {
14
+ test("async storage invokes done after the write completes", async () => {
15
+ const client = setupTestNode();
16
+ const group = client.node.createGroup();
17
+ // Attach storage after creating the group so our manual store is the only write
18
+ const { storage } = await client.addAsyncStorage();
19
+ const content = group.core.newContentSince(undefined);
20
+ const done = vi.fn();
21
+ storage.store(content[0], () => undefined, done);
22
+ expect(done).not.toHaveBeenCalled();
23
+ await waitFor(() => expect(done).toHaveBeenCalledTimes(1));
24
+ });
25
+ test("sync storage invokes done synchronously", async () => {
26
+ const client = setupTestNode();
27
+ const group = client.node.createGroup();
28
+ const { storage } = client.addStorage();
29
+ const content = group.core.newContentSince(undefined);
30
+ const done = vi.fn();
31
+ storage.store(content[0], () => undefined, done);
32
+ expect(done).toHaveBeenCalledTimes(1);
33
+ });
34
+ test("async storage invokes done after a successful correction round-trip", async () => {
35
+ const client = setupTestNode();
36
+ const group = client.node.createGroup();
37
+ const map = group.createMap();
38
+ map.set("a", 1, "trusting");
39
+ const { storage } = await client.addAsyncStorage();
40
+ const fullContent = map.core.newContentSince(undefined);
41
+ // Content without the header, stored into empty storage → triggers a correction
42
+ const withoutHeader = map.core.newContentSince({
43
+ id: map.id,
44
+ header: true,
45
+ sessions: {},
46
+ });
47
+ const done = vi.fn();
48
+ storage.store(withoutHeader[0], () => fullContent, done);
49
+ await waitFor(() => expect(done).toHaveBeenCalledTimes(1));
50
+ });
51
+ });
52
+ describe("local store durability window", () => {
53
+ test("opens before the first peer send and closes when async storage drains", async () => {
54
+ const client = setupTestNode();
55
+ await client.addAsyncStorage();
56
+ const { peerState } = client.connectToSyncServer();
57
+ // Instrument the actual outgoing push: the window must open before any
58
+ // content message physically leaves the node
59
+ let contentSent = false;
60
+ const originalPush = peerState.pushOutgoingMessage.bind(peerState);
61
+ vi.spyOn(peerState, "pushOutgoingMessage").mockImplementation((msg) => {
62
+ if (msg.action === "content") {
63
+ contentSent = true;
64
+ }
65
+ return originalPush(msg);
66
+ });
67
+ const events = [];
68
+ client.node.syncManager.onLocalStoreDurabilityChange = (hasPending) => {
69
+ events.push({ hasPending, contentSentAlready: contentSent });
70
+ };
71
+ const group = client.node.createGroup();
72
+ const map = group.createMap();
73
+ map.set("hello", "world", "trusting");
74
+ await waitFor(() => expect(events.some((e) => !e.hasPending)).toBe(true));
75
+ // The window opened BEFORE any content was sent to a peer
76
+ expect(events[0]).toEqual({ hasPending: true, contentSentAlready: false });
77
+ // ...and eventually closed once storage drained
78
+ expect(events.at(-1).hasPending).toBe(false);
79
+ });
80
+ test("reopens for a new local edit after the previous window closed", async () => {
81
+ const client = setupTestNode();
82
+ await client.addAsyncStorage();
83
+ client.connectToSyncServer();
84
+ const events = [];
85
+ client.node.syncManager.onLocalStoreDurabilityChange = (hasPending) => {
86
+ events.push(hasPending);
87
+ };
88
+ const group = client.node.createGroup();
89
+ const map = group.createMap();
90
+ map.set("hello", "world", "trusting");
91
+ // First window: opened and closed once storage drained
92
+ await waitFor(() => expect(events).toEqual([true, false]));
93
+ // A second local edit reopens the window and it closes again on drain
94
+ map.set("second", "batch", "trusting");
95
+ await waitFor(() => expect(events).toEqual([true, false, true, false]));
96
+ });
97
+ test("reports the node's current session ID", async () => {
98
+ const client = setupTestNode();
99
+ await client.addAsyncStorage();
100
+ client.connectToSyncServer();
101
+ const sessions = [];
102
+ client.node.syncManager.onLocalStoreDurabilityChange = (_hasPending, sessionID) => {
103
+ sessions.push(sessionID);
104
+ };
105
+ const group = client.node.createGroup();
106
+ group.createMap().set("hello", "world", "trusting");
107
+ await waitFor(() => expect(sessions.length).toBeGreaterThan(0));
108
+ expect(sessions.every((s) => s === client.node.currentSessionID)).toBe(true);
109
+ });
110
+ test("does not fire with synchronous storage", async () => {
111
+ const client = setupTestNode();
112
+ client.addStorage();
113
+ client.connectToSyncServer();
114
+ const listener = vi.fn();
115
+ client.node.syncManager.onLocalStoreDurabilityChange = listener;
116
+ const group = client.node.createGroup();
117
+ const map = group.createMap();
118
+ map.set("hello", "world", "trusting");
119
+ await map.core.waitForSync();
120
+ expect(listener).not.toHaveBeenCalled();
121
+ });
122
+ test("does not fire when there are no peers to send to", async () => {
123
+ const client = setupTestNode(); // not connected
124
+ await client.addAsyncStorage();
125
+ const listener = vi.fn();
126
+ client.node.syncManager.onLocalStoreDurabilityChange = listener;
127
+ const group = client.node.createGroup();
128
+ const map = group.createMap();
129
+ map.set("hello", "world", "trusting");
130
+ await client.node.syncManager.waitForStorageSync(map.id);
131
+ expect(listener).not.toHaveBeenCalled();
132
+ });
133
+ test("remote content does not open the window on the receiving node", async () => {
134
+ const server = setupTestNode({ isSyncServer: true });
135
+ await server.addAsyncStorage({ ourName: "server" });
136
+ const listener = vi.fn();
137
+ server.node.syncManager.onLocalStoreDurabilityChange = listener;
138
+ const client = setupTestNode({ connected: true });
139
+ const group = client.node.createGroup();
140
+ const map = group.createMap();
141
+ map.set("hello", "world", "trusting");
142
+ await map.core.waitForSync();
143
+ expect(listener).not.toHaveBeenCalled();
144
+ });
145
+ test("window stays open when storage writes never complete (crash window)", async () => {
146
+ const client = setupTestNode();
147
+ const { storage } = await client.addAsyncStorage();
148
+ const { peerState } = client.connectToSyncServer();
149
+ // Simulate the crash window: storage accepts writes but never completes them
150
+ storage.store = async () => { };
151
+ const events = [];
152
+ client.node.syncManager.onLocalStoreDurabilityChange = (hasPending) => events.push(hasPending);
153
+ const group = client.node.createGroup();
154
+ const map = group.createMap();
155
+ map.set("hello", "world", "trusting");
156
+ // Wait for the content to reach the server (peer sync only) — storage sync
157
+ // never resolves in this scenario since store() is stubbed to a no-op, so
158
+ // we can't use map.core.waitForSync() here, which also waits on storage.
159
+ await client.node.syncManager.waitForSyncWithPeer(peerState.id, map.id, 5000);
160
+ expect(events).toEqual([true]); // opened, never closed
161
+ });
162
+ test("opens when pending content is sent through reconnection reconciliation", async () => {
163
+ const client = setupTestNode();
164
+ const { storage } = await client.addAsyncStorage();
165
+ // Writes never complete: the local edit below stays pending forever
166
+ storage.store = async () => { };
167
+ const events = [];
168
+ client.node.syncManager.onLocalStoreDurabilityChange = (hasPending) => events.push(hasPending);
169
+ const group = client.node.createGroup();
170
+ const map = group.createMap();
171
+ map.set("hello", "world", "trusting");
172
+ // Not connected yet: nothing was sent, so the window must not be open
173
+ await new Promise((resolve) => setTimeout(resolve, 0));
174
+ expect(events).toEqual([]);
175
+ // Connecting sends the pending content through reconciliation
176
+ // (sendNewContent), not through syncContent — the window must still open
177
+ const { peerState } = client.connectToSyncServer();
178
+ await client.node.syncManager.waitForSyncWithPeer(peerState.id, map.id, 5000);
179
+ expect(events).toEqual([true]);
180
+ });
181
+ });
182
+ describe("LocalNode creation options", () => {
183
+ test("withNewlyCreatedAccount wires onLocalStoreDurabilityChange into the node's syncManager", async () => {
184
+ const listener = vi.fn();
185
+ const { node } = await LocalNode.withNewlyCreatedAccount({
186
+ creationProps: { name: "test" },
187
+ crypto: Crypto,
188
+ peers: [],
189
+ onLocalStoreDurabilityChange: listener,
190
+ });
191
+ expect(node.syncManager.onLocalStoreDurabilityChange).toBe(listener);
192
+ await node.gracefulShutdown();
193
+ });
194
+ test("withLoadedAccount wires onLocalStoreDurabilityChange", async () => {
195
+ const listener = vi.fn();
196
+ const created = await LocalNode.withNewlyCreatedAccount({
197
+ creationProps: { name: "test" },
198
+ crypto: Crypto,
199
+ peers: [],
200
+ });
201
+ const { peer } = getSyncServerConnectedPeer({
202
+ peerId: created.accountID,
203
+ });
204
+ // Sync the account to the server so it can be loaded
205
+ created.node.syncManager.addPeer(peer);
206
+ await created.node.syncManager.waitForAllCoValuesSync();
207
+ const { peer: peer2 } = getSyncServerConnectedPeer({
208
+ peerId: "loadingNode",
209
+ });
210
+ const node = await LocalNode.withLoadedAccount({
211
+ accountID: created.accountID,
212
+ accountSecret: created.accountSecret,
213
+ sessionID: undefined,
214
+ peers: [peer2],
215
+ crypto: Crypto,
216
+ onLocalStoreDurabilityChange: listener,
217
+ });
218
+ expect(node.syncManager.onLocalStoreDurabilityChange).toBe(listener);
219
+ await node.gracefulShutdown();
220
+ await created.node.gracefulShutdown();
221
+ });
222
+ });
223
+ describe("crash recovery with a fresh session", () => {
224
+ test("restarting with a new session over the same storage recovers and syncs cleanly", async () => {
225
+ const client = setupTestNode();
226
+ const dbPath = getDbPath();
227
+ const { storage } = await client.addAsyncStorage({ filename: dbPath });
228
+ const { peerState } = client.connectToSyncServer();
229
+ const group = client.node.createGroup();
230
+ const map = group.createMap();
231
+ map.set("hello", "world", "trusting");
232
+ await map.core.waitForSync();
233
+ // Enter the crash window: further writes reach the server but not storage
234
+ storage.store = async () => { };
235
+ map.set("crashed", "yes", "trusting");
236
+ await client.node.syncManager.waitForSyncWithPeer(peerState.id, map.id, 5000);
237
+ // "Crash": abandon the node without flushing (no graceful shutdown), then
238
+ // restart with the SAME agent, SAME storage file, but a NEW session — which
239
+ // is exactly what the session providers do when the durability marker is set.
240
+ client.disconnect();
241
+ const restarted = setupTestNode({ secret: client.node.agentSecret });
242
+ await restarted.addAsyncStorage({ filename: dbPath });
243
+ restarted.connectToSyncServer();
244
+ // The fresh session is load-bearing: reusing the crashed session could fork its hash chain
245
+ expect(restarted.node.currentSessionID).not.toBe(client.node.currentSessionID);
246
+ // The crashed transaction comes back down from the server
247
+ const mapOnRestart = await loadCoValueOrFail(restarted.node, map.id);
248
+ await waitFor(() => expect(mapOnRestart.get("crashed")).toEqual("yes"));
249
+ // New writes from the fresh session sync cleanly — no signature rejection
250
+ mapOnRestart.set("recovered", "yes", "trusting");
251
+ await mapOnRestart.core.waitForSync();
252
+ const mapOnServer = await loadCoValueOrFail(jazzCloud.node, map.id);
253
+ expect(mapOnServer.get("recovered")).toEqual("yes");
254
+ expect(mapOnServer.get("crashed")).toEqual("yes");
255
+ });
256
+ });
257
+ //# sourceMappingURL=sync.localStoreDurability.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.localStoreDurability.test.js","sourceRoot":"","sources":["../../src/tests/sync.localStoreDurability.test.ts"],"names":[],"mappings":"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"}
@@ -175,7 +175,7 @@ function trackStorageMessages(storage, nodeName, storageName) {
175
175
  return callback(knownState);
176
176
  });
177
177
  };
178
- storage.store = function (data, correctionCallback) {
178
+ storage.store = function (data, correctionCallback, done) {
179
179
  SyncMessagesLog.add({
180
180
  from: nodeName,
181
181
  to: storageName,
@@ -202,7 +202,7 @@ function trackStorageMessages(storage, nodeName, storageName) {
202
202
  }
203
203
  }
204
204
  return correctionMessages;
205
- });
205
+ }, done);
206
206
  };
207
207
  storage.load = function (id, callback, done) {
208
208
  SyncMessagesLog.add({
@@ -1 +1 @@
1
- {"version":3,"file":"testStorage.js","sourceRoot":"","sources":["../../src/tests/testStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testStorage.js","sourceRoot":"","sources":["../../src/tests/testStorage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "type": "module",
31
31
  "license": "MIT",
32
- "version": "0.20.18",
32
+ "version": "0.20.19",
33
33
  "devDependencies": {
34
34
  "@opentelemetry/sdk-metrics": "^2.0.0",
35
35
  "libsql": "^0.5.13",
@@ -42,9 +42,9 @@
42
42
  "@opentelemetry/api": "^1.9.0",
43
43
  "@scure/base": "1.2.1",
44
44
  "unicode-segmenter": "^0.12.0",
45
- "cojson-core-wasm": "0.20.18",
46
- "cojson-core-napi": "0.20.18",
47
- "cojson-core-rn": "0.20.18"
45
+ "cojson-core-wasm": "0.20.19",
46
+ "cojson-core-napi": "0.20.19",
47
+ "cojson-core-rn": "0.20.19"
48
48
  },
49
49
  "gitHead": "33c27053293b4801b968c61d5c4c989f93a67d13",
50
50
  "scripts": {
package/src/exports.ts CHANGED
@@ -68,7 +68,12 @@ import type { AgentID, RawCoID, SessionID } from "./ids.js";
68
68
  import type { JsonObject, JsonValue } from "./jsonValue.js";
69
69
  import type * as Media from "./media.js";
70
70
  import { isAccountRole } from "./permissions.js";
71
- import type { Peer, SyncMessage, SyncWhen } from "./sync.js";
71
+ import type {
72
+ LocalStoreDurabilityListener,
73
+ Peer,
74
+ SyncMessage,
75
+ SyncWhen,
76
+ } from "./sync.js";
72
77
  import {
73
78
  DisconnectedError,
74
79
  SyncManager,
@@ -217,6 +222,7 @@ export type {
217
222
  AvailableCoValueCore,
218
223
  PeerState,
219
224
  SyncWhen,
225
+ LocalStoreDurabilityListener,
220
226
  CoValueHeader,
221
227
  CoValueFrontier,
222
228
  RawCoValueCursor,
package/src/localNode.ts CHANGED
@@ -36,7 +36,13 @@ import { AgentSecret, CryptoProvider } from "./crypto/crypto.js";
36
36
  import { AgentID, RawCoID, SessionID, isAgentID, isRawCoID } from "./ids.js";
37
37
  import { logger } from "./logger.js";
38
38
  import { StorageAPI } from "./storage/index.js";
39
- import { Peer, PeerID, SyncManager, type SyncWhen } from "./sync.js";
39
+ import {
40
+ Peer,
41
+ PeerID,
42
+ SyncManager,
43
+ type LocalStoreDurabilityListener,
44
+ type SyncWhen,
45
+ } from "./sync.js";
40
46
  import { accountOrAgentIDfromSessionID } from "./typeUtils/accountOrAgentIDfromSessionID.js";
41
47
  import { expectGroup } from "./typeUtils/expectGroup.js";
42
48
  import { canBeBranched } from "./coValueCore/branching.js";
@@ -82,7 +88,10 @@ export class LocalNode {
82
88
  crypto: CryptoProvider,
83
89
  public readonly syncWhen?: SyncWhen,
84
90
  enableFullStorageReconciliation?: boolean,
85
- options?: { experimental_clockSyncFromServerPings?: boolean },
91
+ options?: {
92
+ experimental_clockSyncFromServerPings?: boolean;
93
+ onLocalStoreDurabilityChange?: LocalStoreDurabilityListener;
94
+ },
86
95
  ) {
87
96
  this.agentSecret = agentSecret;
88
97
  this.currentSessionID = currentSessionID;
@@ -92,6 +101,8 @@ export class LocalNode {
92
101
  }
93
102
  this.#clockSyncEnabled =
94
103
  options?.experimental_clockSyncFromServerPings ?? false;
104
+ this.syncManager.onLocalStoreDurabilityChange =
105
+ options?.onLocalStoreDurabilityChange;
95
106
  }
96
107
 
97
108
  stampNow(): number {
@@ -288,6 +299,7 @@ export class LocalNode {
288
299
  storage?: StorageAPI;
289
300
  enableFullStorageReconciliation?: boolean;
290
301
  experimental_clockSyncFromServerPings?: boolean;
302
+ onLocalStoreDurabilityChange?: LocalStoreDurabilityListener;
291
303
  }): RawAccount {
292
304
  const {
293
305
  crypto,
@@ -310,6 +322,7 @@ export class LocalNode {
310
322
  {
311
323
  experimental_clockSyncFromServerPings:
312
324
  opts.experimental_clockSyncFromServerPings,
325
+ onLocalStoreDurabilityChange: opts.onLocalStoreDurabilityChange,
313
326
  },
314
327
  );
315
328
 
@@ -359,6 +372,7 @@ export class LocalNode {
359
372
  storage,
360
373
  enableFullStorageReconciliation,
361
374
  experimental_clockSyncFromServerPings,
375
+ onLocalStoreDurabilityChange,
362
376
  }: {
363
377
  creationProps: { name: string };
364
378
  peers?: Peer[];
@@ -369,6 +383,7 @@ export class LocalNode {
369
383
  storage?: StorageAPI;
370
384
  enableFullStorageReconciliation?: boolean;
371
385
  experimental_clockSyncFromServerPings?: boolean;
386
+ onLocalStoreDurabilityChange?: LocalStoreDurabilityListener;
372
387
  }): Promise<{
373
388
  node: LocalNode;
374
389
  accountID: RawAccountID;
@@ -383,6 +398,7 @@ export class LocalNode {
383
398
  storage,
384
399
  enableFullStorageReconciliation,
385
400
  experimental_clockSyncFromServerPings,
401
+ onLocalStoreDurabilityChange,
386
402
  });
387
403
  const node = account.core.node;
388
404
 
@@ -430,6 +446,7 @@ export class LocalNode {
430
446
  storage,
431
447
  enableFullStorageReconciliation,
432
448
  experimental_clockSyncFromServerPings,
449
+ onLocalStoreDurabilityChange,
433
450
  }: {
434
451
  accountID: RawAccountID;
435
452
  accountSecret: AgentSecret;
@@ -441,6 +458,7 @@ export class LocalNode {
441
458
  storage?: StorageAPI;
442
459
  enableFullStorageReconciliation?: boolean;
443
460
  experimental_clockSyncFromServerPings?: boolean;
461
+ onLocalStoreDurabilityChange?: LocalStoreDurabilityListener;
444
462
  }): Promise<LocalNode> {
445
463
  try {
446
464
  const expectedAgentID = crypto.getAgentID(accountSecret);
@@ -451,7 +469,10 @@ export class LocalNode {
451
469
  crypto,
452
470
  syncWhen,
453
471
  enableFullStorageReconciliation,
454
- { experimental_clockSyncFromServerPings },
472
+ {
473
+ experimental_clockSyncFromServerPings,
474
+ onLocalStoreDurabilityChange,
475
+ },
455
476
  );
456
477
 
457
478
  if (storage) {
@@ -6,6 +6,9 @@ import { LinkedList } from "./LinkedList.js";
6
6
  type StoreQueueEntry = {
7
7
  data: NewContentMessage;
8
8
  correctionCallback: CorrectionCallback;
9
+ // Pass-through only: the queue never invokes this itself, it's forwarded
10
+ // to the processing callback which decides when (and whether) to call it.
11
+ done?: () => void;
9
12
  };
10
13
 
11
14
  class StoreQueueManager {
@@ -43,12 +46,16 @@ export class StoreQueue {
43
46
  private queue = new LinkedList<StoreQueueEntry>();
44
47
  closed = false;
45
48
 
46
- public push(data: NewContentMessage, correctionCallback: CorrectionCallback) {
49
+ public push(
50
+ data: NewContentMessage,
51
+ correctionCallback: CorrectionCallback,
52
+ done?: () => void,
53
+ ) {
47
54
  if (this.closed) {
48
55
  return;
49
56
  }
50
57
 
51
- this.queue.push({ data, correctionCallback });
58
+ this.queue.push({ data, correctionCallback, done });
52
59
  }
53
60
 
54
61
  public pull() {
@@ -62,6 +69,7 @@ export class StoreQueue {
62
69
  callback: (
63
70
  data: NewContentMessage,
64
71
  correctionCallback: CorrectionCallback,
72
+ done?: () => void,
65
73
  ) => Promise<unknown>,
66
74
  ) {
67
75
  if (this.processing) {
@@ -74,10 +82,10 @@ export class StoreQueue {
74
82
  let entry: StoreQueueEntry | undefined;
75
83
 
76
84
  while ((entry = this.pull())) {
77
- const { data, correctionCallback } = entry;
85
+ const { data, correctionCallback, done } = entry;
78
86
 
79
87
  try {
80
- this.lastCallback = callback(data, correctionCallback);
88
+ this.lastCallback = callback(data, correctionCallback, done);
81
89
  await this.lastCallback;
82
90
  } catch (err) {
83
91
  logger.error("Error processing message in store queue", { err });
@@ -95,8 +95,16 @@ export class SQLiteTransactionAsync implements DBTransactionInterfaceAsync {
95
95
  nextIdx: number,
96
96
  newTransaction: Transaction,
97
97
  ): Promise<void> {
98
+ // An interrupted write transaction (e.g. a concurrent ROLLBACK on a shared
99
+ // connection) can leave orphan rows at idx >= the session's lastIdx, which
100
+ // would otherwise block the session on this primary key forever.
101
+ // Overwriting is safe: writes always start at the committed lastIdx (see
102
+ // putNewTxs), so a conflicting row is never covered by any stored
103
+ // signature, and the verified replacement commits atomically with the
104
+ // session row and signature that cover it.
98
105
  await this.tx.run(
99
- "INSERT INTO transactions (ses, idx, tx) VALUES (?, ?, ?)",
106
+ `INSERT INTO transactions (ses, idx, tx) VALUES (?, ?, ?)
107
+ ON CONFLICT(ses, idx) DO UPDATE SET tx=excluded.tx`,
100
108
  [sessionRowID, nextIdx, JSON.stringify(newTransaction)],
101
109
  );
102
110
  }
@@ -110,8 +118,15 @@ export class SQLiteTransactionAsync implements DBTransactionInterfaceAsync {
110
118
  idx: number;
111
119
  signature: Signature;
112
120
  }): Promise<void> {
121
+ // Same recovery rationale as addTransaction: a conflict can only be an
122
+ // orphan row left by an interrupted write transaction, and the verified
123
+ // replacement commits atomically with the matching session update.
124
+ // Orphan signature rows are worse than orphan transactions: loadCoValue
125
+ // reads all signatureAfter rows unbounded by lastIdx, so an orphan here
126
+ // is served to readers until it is overwritten.
113
127
  await this.tx.run(
114
- "INSERT INTO signatureAfter (ses, idx, signature) VALUES (?, ?, ?)",
128
+ `INSERT INTO signatureAfter (ses, idx, signature) VALUES (?, ?, ?)
129
+ ON CONFLICT(ses, idx) DO UPDATE SET signature=excluded.signature`,
115
130
  [sessionRowID, idx, signature],
116
131
  );
117
132
  }
@@ -267,16 +267,26 @@ export class StorageApiAsync implements StorageAPI {
267
267
 
268
268
  storeQueue = new StoreQueue();
269
269
 
270
- async store(msg: NewContentMessage, correctionCallback: CorrectionCallback) {
270
+ async store(
271
+ msg: NewContentMessage,
272
+ correctionCallback: CorrectionCallback,
273
+ done?: () => void,
274
+ ) {
271
275
  /**
272
276
  * The store operations must be done one by one, because we can't start a new transaction when there
273
277
  * is already a transaction open.
274
278
  */
275
- this.storeQueue.push(msg, correctionCallback);
279
+ this.storeQueue.push(msg, correctionCallback, done);
276
280
 
277
- this.storeQueue.processQueue(async (data, correctionCallback) => {
281
+ this.storeQueue.processQueue(async (data, correctionCallback, done) => {
278
282
  this.interruptEraser("store");
279
- return this.storeSingle(data, correctionCallback);
283
+ const success = await this.storeSingle(data, correctionCallback);
284
+
285
+ if (success) {
286
+ done?.();
287
+ }
288
+
289
+ return success;
280
290
  });
281
291
  }
282
292