signalk-questdb 2.1.0 → 2.1.2

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 (67) hide show
  1. package/dist/ilp-writer.d.ts +1 -0
  2. package/dist/ilp-writer.js +17 -1
  3. package/dist/ilp-writer.js.map +1 -1
  4. package/dist/index.js +2 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/migration.js +40 -45
  7. package/dist/migration.js.map +1 -1
  8. package/dist/wal-monitor.js +1 -1
  9. package/dist/wal-monitor.js.map +1 -1
  10. package/package.json +2 -2
  11. package/dist/test/config.test.d.ts +0 -1
  12. package/dist/test/config.test.js +0 -161
  13. package/dist/test/config.test.js.map +0 -1
  14. package/dist/test/configpanel-responses.test.d.ts +0 -1
  15. package/dist/test/configpanel-responses.test.js +0 -197
  16. package/dist/test/configpanel-responses.test.js.map +0 -1
  17. package/dist/test/console-proxy.test.d.ts +0 -1
  18. package/dist/test/console-proxy.test.js +0 -664
  19. package/dist/test/console-proxy.test.js.map +0 -1
  20. package/dist/test/container-env.test.d.ts +0 -1
  21. package/dist/test/container-env.test.js +0 -70
  22. package/dist/test/container-env.test.js.map +0 -1
  23. package/dist/test/delta-routing.test.d.ts +0 -1
  24. package/dist/test/delta-routing.test.js +0 -258
  25. package/dist/test/delta-routing.test.js.map +0 -1
  26. package/dist/test/full-export-range.test.d.ts +0 -1
  27. package/dist/test/full-export-range.test.js +0 -78
  28. package/dist/test/full-export-range.test.js.map +0 -1
  29. package/dist/test/history-v1.test.d.ts +0 -1
  30. package/dist/test/history-v1.test.js +0 -676
  31. package/dist/test/history-v1.test.js.map +0 -1
  32. package/dist/test/history-v2.test.d.ts +0 -1
  33. package/dist/test/history-v2.test.js +0 -1001
  34. package/dist/test/history-v2.test.js.map +0 -1
  35. package/dist/test/host-limits.test.d.ts +0 -1
  36. package/dist/test/host-limits.test.js +0 -81
  37. package/dist/test/host-limits.test.js.map +0 -1
  38. package/dist/test/ilp-writer.test.d.ts +0 -1
  39. package/dist/test/ilp-writer.test.js +0 -419
  40. package/dist/test/ilp-writer.test.js.map +0 -1
  41. package/dist/test/influx-detect.test.d.ts +0 -1
  42. package/dist/test/influx-detect.test.js +0 -287
  43. package/dist/test/influx-detect.test.js.map +0 -1
  44. package/dist/test/migration.test.d.ts +0 -1
  45. package/dist/test/migration.test.js +0 -851
  46. package/dist/test/migration.test.js.map +0 -1
  47. package/dist/test/package-e2e.test.d.ts +0 -1
  48. package/dist/test/package-e2e.test.js +0 -306
  49. package/dist/test/package-e2e.test.js.map +0 -1
  50. package/dist/test/path-matcher.test.d.ts +0 -1
  51. package/dist/test/path-matcher.test.js +0 -224
  52. package/dist/test/path-matcher.test.js.map +0 -1
  53. package/dist/test/query-client.test.d.ts +0 -1
  54. package/dist/test/query-client.test.js +0 -299
  55. package/dist/test/query-client.test.js.map +0 -1
  56. package/dist/test/questdb-endpoint.test.d.ts +0 -1
  57. package/dist/test/questdb-endpoint.test.js +0 -297
  58. package/dist/test/questdb-endpoint.test.js.map +0 -1
  59. package/dist/test/restore.test.d.ts +0 -1
  60. package/dist/test/restore.test.js +0 -543
  61. package/dist/test/restore.test.js.map +0 -1
  62. package/dist/test/time-range.test.d.ts +0 -1
  63. package/dist/test/time-range.test.js +0 -53
  64. package/dist/test/time-range.test.js.map +0 -1
  65. package/dist/test/wal-monitor.test.d.ts +0 -1
  66. package/dist/test/wal-monitor.test.js +0 -405
  67. package/dist/test/wal-monitor.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"questdb-endpoint.test.js","sourceRoot":"","sources":["../../src/test/questdb-endpoint.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAEhC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE;YACnD,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,yBAAyB,EAAE,CAAC,CAAC,EAAE;YAC5D,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE;YACrD,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE;YAC/C,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;YACjD,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,uEAAuE;QACvE,sCAAsC;QACtC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;YAC/C,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG;YACjB,uBAAuB,EAAE,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,EAAE;gBAC5D,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;gBACzB,OAAO,IAAI,KAAK,0BAA0B;oBACxC,CAAC,CAAC,yBAAyB;oBAC3B,CAAC,CAAC,yBAAyB,CAAC;YAChC,CAAC;SACF,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,uBAAuB,CACtC,UAAU,EACV,iBAAiB,EACjB,WAAW,CACZ,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;YACtB,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;YAC/C,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,UAAU,GAAG;YACjB,uBAAuB,EAAE,KAAK,EAAE,KAAa,EAAE,IAAY,EAAE,EAAE,CAC7D,IAAI,KAAK,0BAA0B;gBACjC,CAAC,CAAC,gBAAgB,CAAC,0CAA0C;gBAC7D,CAAC,CAAC,gBAAgB;SACvB,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,uBAAuB,CACtC,UAAU,EACV,iBAAiB,EACjB,WAAW,CACZ,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,EAAE,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;QAC5E,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,UAAU,GAAG;YACjB,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;SAC1C,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,uBAAuB,CACtC,UAAU,EACV,iBAAiB,EACjB,WAAW,CACZ,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,UAAU,GAAG;YACjB,uBAAuB,EAAE,KAAK,IAAI,EAAE;gBAClC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;SACF,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,uBAAuB,CACtC,UAAU,EACV,iBAAiB,EACjB,WAAW,CACZ,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,yEAAyE;IACzE,0CAA0C;IAC1C,SAAS,KAAK,CACZ,OAAsE;QAEtE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CACjC,OAAO,CAAC;YACN,IAAI,EAAG,MAAM,CAAC,OAAO,EAAkB,CAAC,IAAI;YAC5C,KAAK,EAAE,GAAG,EAAE,CACV,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChB,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACnC,CAAC,CAAC;SACL,CAAC,CACH,CACF,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC/B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,MAAM,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAChD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,MAAM,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,MAAM,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACvC,2BAA2B;QAC7B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,MAAM,gBAAgB,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,sEAAsE;IACtE,6CAA6C;IAC7C,SAAS,cAAc,CAAC,OAAiB;QACvC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,OAAO;YACL,KAAK;YACL,KAAK,EAAE,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,EAAE;gBAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC9B,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;SACF,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG;QACpB,MAAM,EAAE,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,EAAE;KACpE,CAAC;IACF,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAEjD,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,sBAAsB,CACvC;YACE,MAAM,EAAE,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE;SACrE,EACD,IAAI,EACJ,SAAS,EACT,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CACtB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAChC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;YACxE,KAAK;YACL,GAAG,OAAO;SACX,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAChC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;YACxE,KAAK;YACL,GAAG,OAAO;SACX,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACjC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,GAAG,YAAY,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,qEAAqE;IACrE,kCAAkC;IAClC,SAAS,SAAS;QAChB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO;YACL,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACZ,KAAK,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;gBAC1B,CAAC,IAAI,EAAE,CAAC;YACV,CAAC;SACF,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;YACxE,KAAK;YACL,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,GAAG,SAAS,EAAE;SACf,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACjC,oEAAoE;QACpE,uCAAuC;QACvC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;YACxE,KAAK,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;gBACjC,IAAI,SAAS,KAAK,WAAW;oBAAE,KAAK,EAAE,CAAC;gBACvC,OAAO,SAAS,KAAK,WAAW,IAAI,KAAK,IAAI,CAAC,CAAC;YACjD,CAAC;YACD,UAAU,EAAE,MAAM;YAClB,UAAU,EAAE,IAAI;YAChB,GAAG,SAAS,EAAE;SACf,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,sBAAsB,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;YAC3D,KAAK,EAAE,KAAK,EAAE,KAAa,EAAE,KAAa,EAAE,SAAkB,EAAE,EAAE;gBAChE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,GAAG,KAAK;SACT,CAAC,CAAC;QACH,0EAA0E;QAC1E,oDAAoD;QACpD,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,CAAC,KAAK,CAAC,MAAM,sBAAsB,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,CAAC,KAAK,CACV,MAAM,sBAAsB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAClD,WAAW,CACZ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,sBAAsB,CACvC;YACE,MAAM,EAAE;gBACN,cAAc,EAAE,KAAK,IAAI,EAAE;oBACzB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;gBAClC,CAAC;aACF;SACF,EACD,IAAI,EACJ,SAAS,EACT,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CACtB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAChC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,sBAAsB,CACvC;YACE,oDAAoD;YACpD,cAAc,EAAE,KAAK,IAAI,EAAE;gBACzB,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;YACnC,CAAC;SACO,EACV,IAAI,CACL,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;YAC9D,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;YACvC,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;SACvC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;YAC/D,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE;YACxC,GAAG,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE;SACxC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,543 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { restoreFromHistory } from "../restore.js";
4
- const SELF = "vessels.urn:mrn:imo:mmsi:123456789";
5
- const AIS = "vessels.urn:mrn:imo:mmsi:987654321";
6
- // Fixed clock so the staleness window is deterministic.
7
- const NOW = Date.parse("2024-06-01T12:00:00.000Z");
8
- const ago = (ms) => new Date(NOW - ms).toISOString();
9
- function mockClient(captured, dataset) {
10
- return {
11
- exec: async (sql) => {
12
- captured.push({ sql });
13
- return { columns: [], dataset, count: dataset.length, timestamp: 0 };
14
- },
15
- toObjects: (result) => result.dataset.map((row) => ({
16
- ts: row[0],
17
- path: row[1],
18
- context: row[2],
19
- valuetext: row[3],
20
- kind: row[4],
21
- })),
22
- };
23
- }
24
- function run(dataset, overrides = {}, captured = [], hasLiveData) {
25
- const deltas = [];
26
- const promise = restoreFromHistory({
27
- queryClient: mockClient(captured, dataset),
28
- handleMessage: (d) => deltas.push(d),
29
- selfContext: SELF,
30
- debug: () => { },
31
- hasLiveData,
32
- }, {
33
- maxAgeMs: 9 * 60_000,
34
- restoreSelf: true,
35
- restoreOthers: true,
36
- now: () => NOW,
37
- ...overrides,
38
- });
39
- return { promise, deltas };
40
- }
41
- const position = (ctx, ageMs, lat = "-36.8", lon = "174.7") => [ago(ageMs), "navigation.position", ctx, `${lat},${lon}`, "position"];
42
- // Values are split across one update per distinct recorded timestamp, so
43
- // assertions about "what was restored for this vessel" span all of them.
44
- const allValues = (delta) => delta.updates.flatMap((u) => u.values);
45
- const valueAt = (delta, path) => allValues(delta).find((v) => v.path === path);
46
- describe("restore: what reaches the data model", () => {
47
- it("replays an AIS target under its own context, not self", async () => {
48
- const { promise, deltas } = run([position(AIS, 60_000)]);
49
- const result = await promise;
50
- assert.equal(result.contexts, 1);
51
- assert.equal(deltas.length, 1);
52
- assert.equal(deltas[0].context, AIS);
53
- assert.deepEqual(deltas[0].updates[0].values[0], {
54
- path: "navigation.position",
55
- value: { latitude: -36.8, longitude: 174.7 },
56
- });
57
- });
58
- it("maps the stored 'self' placeholder onto this server's self context", async () => {
59
- // Contexts are stored with self normalized to the literal "self"; a
60
- // replay that leaked that string would create a bogus vessel named
61
- // "self" instead of updating the server's own vessel.
62
- const { promise, deltas } = run([position("self", 60_000)]);
63
- await promise;
64
- assert.equal(deltas[0].context, SELF);
65
- });
66
- it("carries the original recorded timestamp, never now", async () => {
67
- // This is what lets a consumer age a restored target out normally.
68
- // Stamping `now` would present a 8-minute-old fix as a fresh contact.
69
- const recorded = ago(8 * 60_000);
70
- const { promise, deltas } = run([position(AIS, 8 * 60_000)]);
71
- await promise;
72
- assert.equal(deltas[0].updates[0].timestamp, recorded);
73
- assert.notEqual(deltas[0].updates[0].timestamp, new Date(NOW).toISOString());
74
- });
75
- it("tags the source so replayed values are distinguishable from live ones", async () => {
76
- const { promise, deltas } = run([position(AIS, 60_000)]);
77
- await promise;
78
- assert.equal(deltas[0].updates[0].$source, "signalk-questdb.restore");
79
- });
80
- });
81
- describe("restore: per-timestamp grouping", () => {
82
- it("keeps each path under its own recorded time", async () => {
83
- // An AIS name repeats every ~6 minutes while position arrives every few
84
- // seconds. Putting both under the newest timestamp would present the
85
- // stale name as being as fresh as the fix.
86
- const rows = [
87
- position(AIS, 30_000),
88
- [ago(6 * 60_000), "name", AIS, "Black Pearl", "identity"],
89
- ];
90
- const { promise, deltas } = run(rows);
91
- await promise;
92
- assert.equal(deltas[0].updates.length, 2);
93
- const posUpdate = deltas[0].updates.find((u) => u.values.some((v) => v.path === "navigation.position"));
94
- const nameUpdate = deltas[0].updates.find((u) => u.values.some((v) => v.path === ""));
95
- assert.ok(posUpdate && nameUpdate);
96
- assert.equal(posUpdate.timestamp, ago(30_000));
97
- assert.equal(nameUpdate.timestamp, ago(6 * 60_000));
98
- });
99
- it("emits a single update when everything shares a timestamp", async () => {
100
- const ts = ago(60_000);
101
- const rows = [
102
- position(AIS, 60_000),
103
- [ts, "navigation.speedOverGround", AIS, "5.4", "number"],
104
- ];
105
- const { promise, deltas } = run(rows);
106
- await promise;
107
- assert.equal(deltas[0].updates.length, 1);
108
- assert.equal(deltas[0].updates[0].timestamp, ts);
109
- });
110
- it("counts every restored value across updates", async () => {
111
- const rows = [
112
- position(AIS, 30_000),
113
- [ago(6 * 60_000), "name", AIS, "Black Pearl", "identity"],
114
- ];
115
- const { promise } = run(rows);
116
- const result = await promise;
117
- assert.equal(result.values, 2);
118
- });
119
- });
120
- describe("restore: staleness boundary", () => {
121
- it("drops a row older than the window even if SQL returned it", async () => {
122
- // The window is applied in SQL, but the client re-checks: a clock skew
123
- // or a wider query must not put an expired ghost on the chart.
124
- const { promise, deltas } = run([position(AIS, 20 * 60_000)]);
125
- const result = await promise;
126
- assert.equal(deltas.length, 0);
127
- assert.equal(result.contexts, 0);
128
- assert.equal(result.skippedStale, 1);
129
- });
130
- it("keeps a row just inside the window", async () => {
131
- const { promise, deltas } = run([position(AIS, 9 * 60_000 - 1000)]);
132
- await promise;
133
- assert.equal(deltas.length, 1);
134
- });
135
- it("skips a row whose timestamp cannot be parsed", async () => {
136
- // An unparseable timestamp cannot be aged out by any consumer, so it
137
- // would linger on the chart forever.
138
- const bad = [
139
- "not-a-timestamp",
140
- "navigation.position",
141
- AIS,
142
- "-36.8,174.7",
143
- "position",
144
- ];
145
- const { promise, deltas } = run([bad]);
146
- const result = await promise;
147
- assert.equal(deltas.length, 0);
148
- assert.equal(result.skippedStale, 1);
149
- });
150
- it("honours a custom window", async () => {
151
- const rows = [position(AIS, 20 * 60_000)];
152
- const { promise, deltas } = run(rows, { maxAgeMs: 30 * 60_000 });
153
- await promise;
154
- assert.equal(deltas.length, 1);
155
- });
156
- });
157
- describe("restore: positionless contexts", () => {
158
- it("does not replay a context that has no position", async () => {
159
- // A name with no fix would create an undrawable target that never ages
160
- // out, because nothing about it is renderable or expirable.
161
- const nameOnly = [ago(60_000), "name", AIS, "Black Pearl", "identity"];
162
- const { promise, deltas } = run([nameOnly]);
163
- const result = await promise;
164
- assert.equal(deltas.length, 0);
165
- assert.equal(result.contexts, 0);
166
- });
167
- it("replays identity alongside a position when both are present", async () => {
168
- const rows = [
169
- position(AIS, 60_000),
170
- [ago(120_000), "name", AIS, "Black Pearl", "identity"],
171
- ];
172
- const { promise, deltas } = run(rows);
173
- await promise;
174
- assert.equal(deltas.length, 1);
175
- // Names were received as empty-path object deltas and must replay in
176
- // that shape — the only one Freeboard reads names from.
177
- const nameValue = valueAt(deltas[0], "");
178
- assert.deepEqual(nameValue, { path: "", value: { name: "Black Pearl" } });
179
- });
180
- it("leaves a genuine string path named 'name' as a plain string", async () => {
181
- // Only rows tagged 'identity' are vessel names; an untagged one is data.
182
- const rows = [
183
- position(AIS, 60_000),
184
- [ago(120_000), "name", AIS, "not-identity", null],
185
- ];
186
- const { promise, deltas } = run(rows);
187
- await promise;
188
- const entry = valueAt(deltas[0], "name");
189
- assert.deepEqual(entry, { path: "name", value: "not-identity" });
190
- });
191
- });
192
- describe("restore: recording toggles", () => {
193
- it("skips other vessels when restoreOthers is off", async () => {
194
- const rows = [position("self", 60_000), position(AIS, 60_000)];
195
- const { promise, deltas } = run(rows, { restoreOthers: false });
196
- await promise;
197
- assert.equal(deltas.length, 1);
198
- assert.equal(deltas[0].context, SELF);
199
- });
200
- it("skips self when restoreSelf is off", async () => {
201
- const rows = [position("self", 60_000), position(AIS, 60_000)];
202
- const { promise, deltas } = run(rows, { restoreSelf: false });
203
- await promise;
204
- assert.equal(deltas.length, 1);
205
- assert.equal(deltas[0].context, AIS);
206
- });
207
- });
208
- describe("restore: vessels already live", () => {
209
- it("does not replay a context that transmitted during startup", async () => {
210
- // The query is slow enough that vessels report while it runs. Replaying
211
- // a stored fix over a live one would move the target BACKWARDS.
212
- const rows = [position(AIS, 60_000)];
213
- const { promise, deltas } = run(rows, {}, [], (ctx) => ctx === AIS);
214
- const result = await promise;
215
- assert.equal(deltas.length, 0);
216
- assert.equal(result.skippedLive, 1);
217
- });
218
- it("still replays contexts that have not been seen live", async () => {
219
- const other = "vessels.urn:mrn:imo:mmsi:111111111";
220
- const rows = [position(AIS, 60_000), position(other, 60_000)];
221
- const { promise, deltas } = run(rows, {}, [], (ctx) => ctx === AIS);
222
- const result = await promise;
223
- assert.equal(deltas.length, 1);
224
- assert.equal(deltas[0].context, other);
225
- assert.equal(result.skippedLive, 1);
226
- });
227
- it("keys the live check on the stored context, not the resolved one", async () => {
228
- // Own vessel is stored as the literal "self"; checking the resolved
229
- // self context would never match what the recorder recorded.
230
- const seen = [];
231
- const { promise } = run([position("self", 60_000)], {}, [], (ctx) => {
232
- seen.push(ctx);
233
- return false;
234
- });
235
- await promise;
236
- assert.deepEqual(seen, ["self"]);
237
- });
238
- });
239
- describe("restore: duplicate rows across tables", () => {
240
- it("keeps the newer row when a path appears in two tables", async () => {
241
- // LATEST ON runs PER TABLE, so a path whose type changed over time
242
- // returns one row from each. Union order is not timestamp order.
243
- const rows = [
244
- position(AIS, 60_000),
245
- [ago(30_000), "navigation.state", AIS, "sailing", null],
246
- [ago(300_000), "navigation.state", AIS, "42", "number"],
247
- ];
248
- const { promise, deltas } = run(rows);
249
- await promise;
250
- const state = valueAt(deltas[0], "navigation.state");
251
- assert.deepEqual(state, { path: "navigation.state", value: "sailing" });
252
- });
253
- it("compares timestamps by instant, not by string shape", async () => {
254
- // The three subqueries render ts independently. If a rendering ever differs
255
- // in fractional precision, a lexicographic compare inverts newer/older —
256
- // "...:30Z" sorts above "...:30.500000Z" despite being earlier.
257
- const rows = [
258
- position(AIS, 60_000),
259
- ["2024-06-01T11:55:30.500000Z", "navigation.state", AIS, "newer", null],
260
- ["2024-06-01T11:55:30Z", "navigation.state", AIS, "older", "number"],
261
- ];
262
- const { promise, deltas } = run(rows);
263
- await promise;
264
- const state = valueAt(deltas[0], "navigation.state");
265
- assert.equal(state?.value, "newer");
266
- });
267
- it("emits a path only once even when duplicated", async () => {
268
- const rows = [
269
- position(AIS, 60_000),
270
- [ago(30_000), "navigation.state", AIS, "sailing", null],
271
- [ago(300_000), "navigation.state", AIS, "42", "number"],
272
- ];
273
- const { promise, deltas } = run(rows);
274
- await promise;
275
- const states = allValues(deltas[0]).filter((v) => v.path === "navigation.state");
276
- assert.equal(states.length, 1);
277
- });
278
- });
279
- describe("restore: value decoding", () => {
280
- it("decodes numbers as numbers, not strings", async () => {
281
- // Consumers do arithmetic on these; a string COG breaks course maths.
282
- const rows = [
283
- position(AIS, 60_000),
284
- [ago(60_000), "navigation.speedOverGround", AIS, "5.4", "number"],
285
- ];
286
- const { promise, deltas } = run(rows);
287
- await promise;
288
- const sog = valueAt(deltas[0], "navigation.speedOverGround");
289
- assert.ok(sog, "expected speedOverGround to be restored");
290
- assert.equal(sog.value, 5.4);
291
- assert.equal(typeof sog.value, "number");
292
- });
293
- it("decodes a tagged boolean as a boolean, not the string 'true'", async () => {
294
- // The recorder tags booleans on write (src/index.ts), so this branch is
295
- // reachable. Returning the text would make a consumer's truthiness check
296
- // pass for "false" too.
297
- const rows = [
298
- position(AIS, 60_000),
299
- [ago(60_000), "navigation.state", AIS, "true", "boolean"],
300
- ];
301
- const { promise, deltas } = run(rows);
302
- await promise;
303
- const state = valueAt(deltas[0], "navigation.state");
304
- assert.equal(state?.value, true);
305
- assert.equal(typeof state?.value, "boolean");
306
- });
307
- it("decodes a tagged false as false, not a truthy string", async () => {
308
- const rows = [
309
- position(AIS, 60_000),
310
- [ago(60_000), "navigation.state", AIS, "false", "boolean"],
311
- ];
312
- const { promise, deltas } = run(rows);
313
- await promise;
314
- const state = valueAt(deltas[0], "navigation.state");
315
- assert.equal(state?.value, false);
316
- assert.equal(typeof state?.value, "boolean");
317
- });
318
- it("drops a position whose coordinates are not finite", async () => {
319
- const rows = [
320
- [ago(60_000), "navigation.position", AIS, "not,coords", "position"],
321
- ];
322
- const { promise, deltas } = run(rows);
323
- await promise;
324
- assert.equal(deltas.length, 0);
325
- });
326
- });
327
- describe("restore: query shape", () => {
328
- it("applies LATEST ON per table rather than over a union", async () => {
329
- // Running LATEST ON over a materialized union makes QuestDB scan instead
330
- // of using each table's index — it timed out on large installs.
331
- const captured = [];
332
- const { promise } = run([], {}, captured);
333
- await promise;
334
- const sql = captured[0].sql;
335
- const latestCount = (sql.match(/LATEST ON/g) ?? []).length;
336
- assert.equal(latestCount, 3);
337
- for (const table of ["signalk", "signalk_str", "signalk_position"]) {
338
- assert.ok(sql.includes(table), `expected ${table} in query`);
339
- }
340
- });
341
- it("retries without value_kind when the column is missing", async () => {
342
- // A read racing an unmigrated table must not fail the whole restore.
343
- const captured = [];
344
- let calls = 0;
345
- const deltas = [];
346
- await restoreFromHistory({
347
- queryClient: {
348
- exec: async (sql) => {
349
- captured.push({ sql });
350
- if (++calls === 1) {
351
- throw new Error("Invalid column: value_kind");
352
- }
353
- return { columns: [], dataset: [], count: 0, timestamp: 0 };
354
- },
355
- toObjects: () => [],
356
- },
357
- handleMessage: (d) => deltas.push(d),
358
- selfContext: SELF,
359
- debug: () => { },
360
- }, {
361
- maxAgeMs: 9 * 60_000,
362
- restoreSelf: true,
363
- restoreOthers: true,
364
- now: () => NOW,
365
- });
366
- assert.equal(calls, 2);
367
- assert.ok(captured[0].sql.includes("value_kind"));
368
- assert.ok(!captured[1].sql.includes("CAST(value_kind AS STRING)"));
369
- });
370
- it("still restores a NAME through the value_kind fallback", async () => {
371
- // The fallback query cannot read value_kind, so it used to report NULL —
372
- // which failed the `kind === "identity"` gate and replayed every vessel
373
- // name as a literal `name` path instead of the empty-path object
374
- // Freeboard reads. On an unmigrated table that left targets unnamed for
375
- // the same visible reason as #127.
376
- let calls = 0;
377
- const deltas = [];
378
- const dataset = [
379
- position(AIS, 60_000),
380
- [ago(6 * 3_600_000), "name", AIS, "SEA BREEZE", null],
381
- ];
382
- await restoreFromHistory({
383
- queryClient: {
384
- exec: async (sql) => {
385
- if (++calls === 1)
386
- throw new Error("Invalid column: value_kind");
387
- assert.ok(sql.includes("THEN 'identity'"), "fallback must synthesize the identity kind for the name path");
388
- return {
389
- columns: [],
390
- dataset,
391
- count: dataset.length,
392
- timestamp: 0,
393
- };
394
- },
395
- toObjects: (r) => r.dataset.map((row) => ({
396
- ts: row[0],
397
- path: row[1],
398
- context: row[2],
399
- valuetext: row[3],
400
- // What the CASE expression yields for a `name` row.
401
- kind: row[1] === "name" ? "identity" : row[4],
402
- })),
403
- },
404
- handleMessage: (d) => deltas.push(d),
405
- selfContext: SELF,
406
- debug: () => { },
407
- }, {
408
- maxAgeMs: 9 * 60_000,
409
- restoreSelf: true,
410
- restoreOthers: true,
411
- now: () => NOW,
412
- });
413
- assert.equal(calls, 2, "the fallback query must have run");
414
- assert.equal(deltas.length, 1);
415
- const named = allValues(deltas[0]).find((v) => v.path === "");
416
- assert.deepEqual(named?.value, { name: "SEA BREEZE" }, "the name must replay as an empty-path object, not a `name` path");
417
- });
418
- it("propagates a non-schema query error instead of masking it", async () => {
419
- await assert.rejects(restoreFromHistory({
420
- queryClient: {
421
- exec: async () => {
422
- throw new Error("connection refused");
423
- },
424
- toObjects: () => [],
425
- },
426
- handleMessage: () => { },
427
- selfContext: SELF,
428
- debug: () => { },
429
- }, {
430
- maxAgeMs: 9 * 60_000,
431
- restoreSelf: true,
432
- restoreOthers: true,
433
- now: () => NOW,
434
- }), /connection refused/);
435
- });
436
- });
437
- describe("identity is restored over a longer window than motion (issue #127)", () => {
438
- // A vessel's AIS static report — the one carrying its name — repeats only
439
- // every ~6 minutes, while position arrives every few seconds. Sharing one
440
- // window meant a target whose name landed just outside it came back
441
- // UNNAMED: measured on a live install as 75 vessels restored and 0 named.
442
- it("names a vessel whose identity is older than the motion window", () => {
443
- const captured = [];
444
- const { promise, deltas } = run([
445
- position(AIS, 60_000),
446
- // 40 minutes old: far outside the 9-minute motion window, and the
447
- // whole point — this is a perfectly good name.
448
- [ago(40 * 60_000), "name", AIS, "SEA BREEZE", "identity"],
449
- ], {}, captured);
450
- return promise.then((result) => {
451
- assert.equal(result.contexts, 1);
452
- assert.equal(result.skippedStale, 0, "the row-level age check must use the identity window too, or it " +
453
- "silently discards what the SQL reached back for");
454
- const named = allValues(deltas[0]).find((v) => v.path === "");
455
- assert.deepEqual(named?.value, { name: "SEA BREEZE" });
456
- });
457
- });
458
- it("restores AIS ship type from its flattened leaves (issue #148)", () => {
459
- // design.aisShipType is an object {id, name} recorded as leaves. Freeboard
460
- // colours a target by .id; before #148 the bare path was the only one in
461
- // the identity set, so nothing came back and every target kept the default
462
- // colour. Both leaves are static identity, so they restore over the long
463
- // window even when older than the motion window.
464
- const { promise, deltas } = run([
465
- position(AIS, 60_000),
466
- [ago(40 * 60_000), "design.aisShipType.id", AIS, "36", "number"],
467
- // Real data tags aisShipType.name with a null value_kind (it predates or
468
- // sits outside the identity writer); the decoder's default case restores
469
- // it as the plain string, and it is NOT the synthetic empty-path name.
470
- [
471
- ago(40 * 60_000),
472
- "design.aisShipType.name",
473
- AIS,
474
- "Sailing",
475
- null,
476
- ],
477
- ]);
478
- return promise.then((result) => {
479
- assert.equal(result.contexts, 1);
480
- assert.equal(result.skippedStale, 0, "the ship-type leaves must use the identity window, not the motion one");
481
- const idVal = valueAt(deltas[0], "design.aisShipType.id");
482
- const nameVal = valueAt(deltas[0], "design.aisShipType.name");
483
- assert.equal(idVal?.value, 36, "the .id leaf drives Freeboard's colour");
484
- assert.equal(nameVal?.value, "Sailing");
485
- });
486
- });
487
- it("restores the ship-type id even when only the .id leaf is present", () => {
488
- // The id is what colours a target; the .name leaf is cosmetic. A vessel
489
- // whose static report gave an id but no readable name must still come back
490
- // coloured, so the id-alone path — the actual payload of #148 — is covered
491
- // on its own, not only alongside .name.
492
- const { promise, deltas } = run([
493
- position(AIS, 60_000),
494
- [ago(40 * 60_000), "design.aisShipType.id", AIS, "70", "number"],
495
- ]);
496
- return promise.then((result) => {
497
- assert.equal(result.contexts, 1);
498
- assert.equal(result.skippedStale, 0);
499
- const idVal = valueAt(deltas[0], "design.aisShipType.id");
500
- assert.equal(idVal?.value, 70, "a cargo ship must colour from .id alone");
501
- // No name leaf → no name value; the target still draws in its colour.
502
- assert.equal(valueAt(deltas[0], "design.aisShipType.name"), undefined);
503
- });
504
- });
505
- it("still refuses motion older than the short window", () => {
506
- // The widened identity window must not leak into position: a stale fix
507
- // draws a target somewhere it demonstrably is not.
508
- const { promise, deltas } = run([
509
- position(AIS, 40 * 60_000),
510
- [ago(40 * 60_000), "name", AIS, "SEA BREEZE", "identity"],
511
- ]);
512
- return promise.then((result) => {
513
- assert.equal(result.contexts, 0, "no usable fix, so nothing to draw");
514
- assert.equal(deltas.length, 0);
515
- });
516
- });
517
- it("does not restore an identity-only vessel as a ghost target", () => {
518
- // Reaching further back for names must not resurrect vessels that have
519
- // no current position — they would be undrawable and never age out.
520
- const { promise, deltas } = run([
521
- [ago(40 * 60_000), "name", AIS, "SEA BREEZE", "identity"],
522
- ]);
523
- return promise.then((result) => {
524
- assert.equal(result.contexts, 0);
525
- assert.equal(deltas.length, 0);
526
- });
527
- });
528
- it("queries each path set with its own window", () => {
529
- const captured = [];
530
- const { promise } = run([position(AIS, 60_000)], {}, captured);
531
- return promise.then(() => {
532
- const sql = captured[0].sql;
533
- // Motion is bounded at 9 minutes, identity at a flat 24 hours.
534
- // Asserting the literal timestamps keeps the two windows from silently
535
- // collapsing back into one.
536
- assert.ok(sql.includes(ago(9 * 60_000)), "motion window missing from SQL");
537
- assert.ok(sql.includes(ago(24 * 60 * 60_000)), "identity window missing from SQL");
538
- // Position has no path column and is motion by definition.
539
- assert.ok(sql.includes(`signalk_position WHERE ts >= '${ago(9 * 60_000)}'`), "position must keep the short window unconditionally");
540
- });
541
- });
542
- });
543
- //# sourceMappingURL=restore.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"restore.test.js","sourceRoot":"","sources":["../../src/test/restore.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};