@claudexor/daemon 3.25.1 → 4.0.1

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 (453) hide show
  1. package/dist/account-resets.d.ts +2 -2
  2. package/dist/account-resets.d.ts.map +1 -1
  3. package/dist/account-resets.js +15 -0
  4. package/dist/account-resets.js.map +1 -1
  5. package/dist/client.d.ts +25 -6
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +55 -51
  8. package/dist/client.js.map +1 -1
  9. package/dist/command-authority.d.ts +11 -8
  10. package/dist/command-authority.d.ts.map +1 -1
  11. package/dist/command-authority.js +5 -6
  12. package/dist/command-authority.js.map +1 -1
  13. package/dist/command-list-projection.d.ts +0 -1
  14. package/dist/command-list-projection.d.ts.map +1 -1
  15. package/dist/command-list-projection.js +0 -6
  16. package/dist/command-list-projection.js.map +1 -1
  17. package/dist/command-list-select.d.ts +0 -4
  18. package/dist/command-list-select.d.ts.map +1 -1
  19. package/dist/command-list-select.js +1 -115
  20. package/dist/command-list-select.js.map +1 -1
  21. package/dist/command-retention.d.ts +7 -19
  22. package/dist/command-retention.d.ts.map +1 -1
  23. package/dist/command-retention.js +1 -120
  24. package/dist/command-retention.js.map +1 -1
  25. package/dist/command-rpc.d.ts +4 -1
  26. package/dist/command-rpc.d.ts.map +1 -1
  27. package/dist/command-rpc.js +12 -1
  28. package/dist/command-rpc.js.map +1 -1
  29. package/dist/command-store.d.ts +15 -52
  30. package/dist/command-store.d.ts.map +1 -1
  31. package/dist/command-store.js +5 -493
  32. package/dist/command-store.js.map +1 -1
  33. package/dist/daemon-health.d.ts +56 -8
  34. package/dist/daemon-health.d.ts.map +1 -1
  35. package/dist/daemon-health.js +44 -9
  36. package/dist/daemon-health.js.map +1 -1
  37. package/dist/daemon-local-client.d.ts +28 -0
  38. package/dist/daemon-local-client.d.ts.map +1 -0
  39. package/dist/daemon-local-client.js +55 -0
  40. package/dist/daemon-local-client.js.map +1 -0
  41. package/dist/delivery-command.d.ts +4 -4
  42. package/dist/delivery-command.d.ts.map +1 -1
  43. package/dist/delivery-command.js.map +1 -1
  44. package/dist/index.d.ts +23 -8
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +25 -8
  47. package/dist/index.js.map +1 -1
  48. package/dist/interactions.d.ts +12 -28
  49. package/dist/interactions.d.ts.map +1 -1
  50. package/dist/interactions.js +22 -123
  51. package/dist/interactions.js.map +1 -1
  52. package/dist/job-admission.d.ts +26 -0
  53. package/dist/job-admission.d.ts.map +1 -0
  54. package/dist/job-admission.js +67 -0
  55. package/dist/job-admission.js.map +1 -0
  56. package/dist/journal-fold-policy.d.ts +1 -1
  57. package/dist/journal-fold-policy.d.ts.map +1 -1
  58. package/dist/journal-recovery-files.d.ts +1 -41
  59. package/dist/journal-recovery-files.d.ts.map +1 -1
  60. package/dist/journal-recovery-files.js +2 -340
  61. package/dist/journal-recovery-files.js.map +1 -1
  62. package/dist/loop-facts.d.ts +28 -0
  63. package/dist/loop-facts.d.ts.map +1 -0
  64. package/dist/loop-facts.js +97 -0
  65. package/dist/loop-facts.js.map +1 -0
  66. package/dist/memory-facts.d.ts +2 -0
  67. package/dist/memory-facts.d.ts.map +1 -1
  68. package/dist/memory-facts.js +5 -0
  69. package/dist/memory-facts.js.map +1 -1
  70. package/dist/model-operations.d.ts +11 -4
  71. package/dist/model-operations.d.ts.map +1 -1
  72. package/dist/model-operations.js +68 -38
  73. package/dist/model-operations.js.map +1 -1
  74. package/dist/operator-decisions.d.ts +15 -25
  75. package/dist/operator-decisions.d.ts.map +1 -1
  76. package/dist/operator-decisions.js +5 -84
  77. package/dist/operator-decisions.js.map +1 -1
  78. package/dist/projects.d.ts +42 -41
  79. package/dist/projects.d.ts.map +1 -1
  80. package/dist/projects.js +46 -184
  81. package/dist/projects.js.map +1 -1
  82. package/dist/quota-registry-replay.d.ts +2 -2
  83. package/dist/quota-registry-replay.d.ts.map +1 -1
  84. package/dist/quota-registry-replay.js.map +1 -1
  85. package/dist/quota-registry-support.d.ts +4 -1
  86. package/dist/quota-registry-support.d.ts.map +1 -1
  87. package/dist/quota-registry-support.js +15 -2
  88. package/dist/quota-registry-support.js.map +1 -1
  89. package/dist/quota-registry.d.ts +64 -2
  90. package/dist/quota-registry.d.ts.map +1 -1
  91. package/dist/quota-registry.js +10 -3
  92. package/dist/quota-registry.js.map +1 -1
  93. package/dist/quota-resources.d.ts +6 -3
  94. package/dist/quota-resources.d.ts.map +1 -1
  95. package/dist/quota-resources.js +25 -8
  96. package/dist/quota-resources.js.map +1 -1
  97. package/dist/runless-turn-recovery.d.ts +2 -9
  98. package/dist/runless-turn-recovery.d.ts.map +1 -1
  99. package/dist/runless-turn-recovery.js +0 -14
  100. package/dist/runless-turn-recovery.js.map +1 -1
  101. package/dist/server.d.ts +23 -22
  102. package/dist/server.d.ts.map +1 -1
  103. package/dist/server.js +74 -84
  104. package/dist/server.js.map +1 -1
  105. package/dist/store/blob-files.d.ts +71 -0
  106. package/dist/store/blob-files.d.ts.map +1 -0
  107. package/dist/store/blob-files.js +160 -0
  108. package/dist/store/blob-files.js.map +1 -0
  109. package/dist/store/command-prune.d.ts +37 -0
  110. package/dist/store/command-prune.d.ts.map +1 -0
  111. package/dist/store/command-prune.js +123 -0
  112. package/dist/store/command-prune.js.map +1 -0
  113. package/dist/store/command-queries.d.ts +41 -0
  114. package/dist/store/command-queries.d.ts.map +1 -0
  115. package/dist/store/command-queries.js +186 -0
  116. package/dist/store/command-queries.js.map +1 -0
  117. package/dist/store/command-rows.d.ts +66 -0
  118. package/dist/store/command-rows.d.ts.map +1 -0
  119. package/dist/store/command-rows.js +141 -0
  120. package/dist/store/command-rows.js.map +1 -0
  121. package/dist/store/commands.d.ts +49 -0
  122. package/dist/store/commands.d.ts.map +1 -0
  123. package/dist/store/commands.js +247 -0
  124. package/dist/store/commands.js.map +1 -0
  125. package/dist/store/cursors.d.ts +33 -0
  126. package/dist/store/cursors.d.ts.map +1 -0
  127. package/dist/store/cursors.js +82 -0
  128. package/dist/store/cursors.js.map +1 -0
  129. package/dist/store/engine-recovery-files.d.ts +14 -0
  130. package/dist/store/engine-recovery-files.d.ts.map +1 -0
  131. package/dist/store/engine-recovery-files.js +53 -0
  132. package/dist/store/engine-recovery-files.js.map +1 -0
  133. package/dist/store/engine-state-recovery.d.ts +71 -0
  134. package/dist/store/engine-state-recovery.d.ts.map +1 -0
  135. package/dist/store/engine-state-recovery.js +318 -0
  136. package/dist/store/engine-state-recovery.js.map +1 -0
  137. package/dist/store/errors.d.ts +80 -0
  138. package/dist/store/errors.d.ts.map +1 -0
  139. package/dist/store/errors.js +130 -0
  140. package/dist/store/errors.js.map +1 -0
  141. package/dist/store/event-store.d.ts +52 -0
  142. package/dist/store/event-store.d.ts.map +1 -0
  143. package/dist/store/event-store.js +117 -0
  144. package/dist/store/event-store.js.map +1 -0
  145. package/dist/store/external-files.d.ts +40 -0
  146. package/dist/store/external-files.d.ts.map +1 -0
  147. package/dist/store/external-files.js +90 -0
  148. package/dist/store/external-files.js.map +1 -0
  149. package/dist/store/flusher-protocol.d.ts +82 -0
  150. package/dist/store/flusher-protocol.d.ts.map +1 -0
  151. package/dist/store/flusher-protocol.js +23 -0
  152. package/dist/store/flusher-protocol.js.map +1 -0
  153. package/dist/store/flusher-worker.d.ts +24 -0
  154. package/dist/store/flusher-worker.d.ts.map +1 -0
  155. package/dist/store/flusher-worker.js +185 -0
  156. package/dist/store/flusher-worker.js.map +1 -0
  157. package/dist/store/flusher.d.ts +87 -0
  158. package/dist/store/flusher.d.ts.map +1 -0
  159. package/dist/store/flusher.js +264 -0
  160. package/dist/store/flusher.js.map +1 -0
  161. package/dist/store/generations.d.ts +43 -0
  162. package/dist/store/generations.d.ts.map +1 -0
  163. package/dist/store/generations.js +143 -0
  164. package/dist/store/generations.js.map +1 -0
  165. package/dist/store/idempotency.d.ts +25 -0
  166. package/dist/store/idempotency.d.ts.map +1 -0
  167. package/dist/store/idempotency.js +53 -0
  168. package/dist/store/idempotency.js.map +1 -0
  169. package/dist/store/import-context.d.ts +22 -0
  170. package/dist/store/import-context.d.ts.map +1 -0
  171. package/dist/store/import-context.js +87 -0
  172. package/dist/store/import-context.js.map +1 -0
  173. package/dist/store/import-discovery.d.ts +6 -0
  174. package/dist/store/import-discovery.d.ts.map +1 -0
  175. package/dist/store/import-discovery.js +66 -0
  176. package/dist/store/import-discovery.js.map +1 -0
  177. package/dist/store/import-records.d.ts +6 -0
  178. package/dist/store/import-records.d.ts.map +1 -0
  179. package/dist/store/import-records.js +191 -0
  180. package/dist/store/import-records.js.map +1 -0
  181. package/dist/store/import-resources.d.ts +14 -0
  182. package/dist/store/import-resources.d.ts.map +1 -0
  183. package/dist/store/import-resources.js +197 -0
  184. package/dist/store/import-resources.js.map +1 -0
  185. package/dist/store/import-source.d.ts +24 -0
  186. package/dist/store/import-source.d.ts.map +1 -0
  187. package/dist/store/import-source.js +65 -0
  188. package/dist/store/import-source.js.map +1 -0
  189. package/dist/store/import-verify.d.ts +6 -0
  190. package/dist/store/import-verify.d.ts.map +1 -0
  191. package/dist/store/import-verify.js +97 -0
  192. package/dist/store/import-verify.js.map +1 -0
  193. package/dist/store/import-worker.d.ts +18 -0
  194. package/dist/store/import-worker.d.ts.map +1 -0
  195. package/dist/store/import-worker.js +69 -0
  196. package/dist/store/import-worker.js.map +1 -0
  197. package/dist/store/importer.d.ts +42 -0
  198. package/dist/store/importer.d.ts.map +1 -0
  199. package/dist/store/importer.js +239 -0
  200. package/dist/store/importer.js.map +1 -0
  201. package/dist/store/interactions.d.ts +22 -0
  202. package/dist/store/interactions.d.ts.map +1 -0
  203. package/dist/store/interactions.js +82 -0
  204. package/dist/store/interactions.js.map +1 -0
  205. package/dist/store/legacy-journal/frame-codec.d.ts +94 -0
  206. package/dist/store/legacy-journal/frame-codec.d.ts.map +1 -0
  207. package/dist/store/legacy-journal/frame-codec.js +352 -0
  208. package/dist/store/legacy-journal/frame-codec.js.map +1 -0
  209. package/dist/store/legacy-journal/frame-reader.d.ts +30 -0
  210. package/dist/store/legacy-journal/frame-reader.d.ts.map +1 -0
  211. package/dist/store/legacy-journal/frame-reader.js +97 -0
  212. package/dist/store/legacy-journal/frame-reader.js.map +1 -0
  213. package/dist/store/legacy-journal/journal-fold.d.ts +47 -0
  214. package/dist/store/legacy-journal/journal-fold.d.ts.map +1 -0
  215. package/dist/store/legacy-journal/journal-fold.js +81 -0
  216. package/dist/store/legacy-journal/journal-fold.js.map +1 -0
  217. package/dist/store/legacy-journal/journal-partition.d.ts +2 -0
  218. package/dist/store/legacy-journal/journal-partition.d.ts.map +1 -0
  219. package/dist/store/legacy-journal/journal-partition.js +10 -0
  220. package/dist/store/legacy-journal/journal-partition.js.map +1 -0
  221. package/dist/store/legacy-journal/read-only-preparation.d.ts +48 -0
  222. package/dist/store/legacy-journal/read-only-preparation.d.ts.map +1 -0
  223. package/dist/store/legacy-journal/read-only-preparation.js +430 -0
  224. package/dist/store/legacy-journal/read-only-preparation.js.map +1 -0
  225. package/dist/store/maintenance-worker.d.ts +5 -0
  226. package/dist/store/maintenance-worker.d.ts.map +1 -0
  227. package/dist/store/maintenance-worker.js +175 -0
  228. package/dist/store/maintenance-worker.js.map +1 -0
  229. package/dist/store/maintenance.d.ts +124 -0
  230. package/dist/store/maintenance.d.ts.map +1 -0
  231. package/dist/store/maintenance.js +197 -0
  232. package/dist/store/maintenance.js.map +1 -0
  233. package/dist/store/mutation.d.ts +34 -0
  234. package/dist/store/mutation.d.ts.map +1 -0
  235. package/dist/store/mutation.js +85 -0
  236. package/dist/store/mutation.js.map +1 -0
  237. package/dist/store/obligations.d.ts +101 -0
  238. package/dist/store/obligations.d.ts.map +1 -0
  239. package/dist/store/obligations.js +226 -0
  240. package/dist/store/obligations.js.map +1 -0
  241. package/dist/store/operator-decisions.d.ts +23 -0
  242. package/dist/store/operator-decisions.d.ts.map +1 -0
  243. package/dist/store/operator-decisions.js +68 -0
  244. package/dist/store/operator-decisions.js.map +1 -0
  245. package/dist/store/owner-generations.d.ts +33 -0
  246. package/dist/store/owner-generations.d.ts.map +1 -0
  247. package/dist/store/owner-generations.js +63 -0
  248. package/dist/store/owner-generations.js.map +1 -0
  249. package/dist/store/partitions.d.ts +37 -0
  250. package/dist/store/partitions.d.ts.map +1 -0
  251. package/dist/store/partitions.js +68 -0
  252. package/dist/store/partitions.js.map +1 -0
  253. package/dist/store/pragmas.d.ts +32 -0
  254. package/dist/store/pragmas.d.ts.map +1 -0
  255. package/dist/store/pragmas.js +65 -0
  256. package/dist/store/pragmas.js.map +1 -0
  257. package/dist/store/project-router.d.ts +325 -0
  258. package/dist/store/project-router.d.ts.map +1 -0
  259. package/dist/store/project-router.js +298 -0
  260. package/dist/store/project-router.js.map +1 -0
  261. package/dist/store/projects.d.ts +36 -0
  262. package/dist/store/projects.d.ts.map +1 -0
  263. package/dist/store/projects.js +238 -0
  264. package/dist/store/projects.js.map +1 -0
  265. package/dist/store/publish-blob.d.ts +20 -0
  266. package/dist/store/publish-blob.d.ts.map +1 -0
  267. package/dist/store/publish-blob.js +158 -0
  268. package/dist/store/publish-blob.js.map +1 -0
  269. package/dist/store/purge-files.d.ts +30 -0
  270. package/dist/store/purge-files.d.ts.map +1 -0
  271. package/dist/store/purge-files.js +79 -0
  272. package/dist/store/purge-files.js.map +1 -0
  273. package/dist/store/resource-rows.d.ts +40 -0
  274. package/dist/store/resource-rows.d.ts.map +1 -0
  275. package/dist/store/resource-rows.js +103 -0
  276. package/dist/store/resource-rows.js.map +1 -0
  277. package/dist/store/resources.d.ts +67 -0
  278. package/dist/store/resources.d.ts.map +1 -0
  279. package/dist/store/resources.js +147 -0
  280. package/dist/store/resources.js.map +1 -0
  281. package/dist/store/retention.d.ts +95 -0
  282. package/dist/store/retention.d.ts.map +1 -0
  283. package/dist/store/retention.js +173 -0
  284. package/dist/store/retention.js.map +1 -0
  285. package/dist/store/run-events.d.ts +14 -0
  286. package/dist/store/run-events.d.ts.map +1 -0
  287. package/dist/store/run-events.js +35 -0
  288. package/dist/store/run-events.js.map +1 -0
  289. package/dist/store/runtime.d.ts +24 -0
  290. package/dist/store/runtime.d.ts.map +1 -0
  291. package/dist/store/runtime.js +67 -0
  292. package/dist/store/runtime.js.map +1 -0
  293. package/dist/store/schema.d.ts +33 -0
  294. package/dist/store/schema.d.ts.map +1 -0
  295. package/dist/store/schema.js +187 -0
  296. package/dist/store/schema.js.map +1 -0
  297. package/dist/store/setup-bindings.d.ts +20 -0
  298. package/dist/store/setup-bindings.d.ts.map +1 -0
  299. package/dist/store/setup-bindings.js +52 -0
  300. package/dist/store/setup-bindings.js.map +1 -0
  301. package/dist/store/sql-command-router.d.ts +79 -0
  302. package/dist/store/sql-command-router.d.ts.map +1 -0
  303. package/dist/store/sql-command-router.js +92 -0
  304. package/dist/store/sql-command-router.js.map +1 -0
  305. package/dist/store/sql-daemon-services.d.ts +61 -0
  306. package/dist/store/sql-daemon-services.d.ts.map +1 -0
  307. package/dist/store/sql-daemon-services.js +124 -0
  308. package/dist/store/sql-daemon-services.js.map +1 -0
  309. package/dist/store/sql-recovery-export.d.ts +8 -0
  310. package/dist/store/sql-recovery-export.d.ts.map +1 -0
  311. package/dist/store/sql-recovery-export.js +110 -0
  312. package/dist/store/sql-recovery-export.js.map +1 -0
  313. package/dist/store/sql-recovery-inspection.d.ts +22 -0
  314. package/dist/store/sql-recovery-inspection.d.ts.map +1 -0
  315. package/dist/store/sql-recovery-inspection.js +88 -0
  316. package/dist/store/sql-recovery-inspection.js.map +1 -0
  317. package/dist/store/sql-recovery.d.ts +69 -0
  318. package/dist/store/sql-recovery.d.ts.map +1 -0
  319. package/dist/store/sql-recovery.js +169 -0
  320. package/dist/store/sql-recovery.js.map +1 -0
  321. package/dist/store/sql-validation.d.ts +9 -0
  322. package/dist/store/sql-validation.d.ts.map +1 -0
  323. package/dist/store/sql-validation.js +103 -0
  324. package/dist/store/sql-validation.js.map +1 -0
  325. package/dist/store/statement-observer.d.ts +7 -0
  326. package/dist/store/statement-observer.d.ts.map +1 -0
  327. package/dist/store/statement-observer.js +44 -0
  328. package/dist/store/statement-observer.js.map +1 -0
  329. package/dist/store/store.d.ts +110 -0
  330. package/dist/store/store.d.ts.map +1 -0
  331. package/dist/store/store.js +296 -0
  332. package/dist/store/store.js.map +1 -0
  333. package/dist/store/terminal-files.d.ts +21 -0
  334. package/dist/store/terminal-files.d.ts.map +1 -0
  335. package/dist/store/terminal-files.js +115 -0
  336. package/dist/store/terminal-files.js.map +1 -0
  337. package/dist/store/thread-replay.d.ts +12 -0
  338. package/dist/store/thread-replay.d.ts.map +1 -0
  339. package/dist/store/thread-replay.js +49 -0
  340. package/dist/store/thread-replay.js.map +1 -0
  341. package/dist/store/thread-rows.d.ts +25 -0
  342. package/dist/store/thread-rows.d.ts.map +1 -0
  343. package/dist/store/thread-rows.js +141 -0
  344. package/dist/store/thread-rows.js.map +1 -0
  345. package/dist/store/threads.d.ts +105 -0
  346. package/dist/store/threads.d.ts.map +1 -0
  347. package/dist/store/threads.js +423 -0
  348. package/dist/store/threads.js.map +1 -0
  349. package/dist/store/upload-binding-retention.d.ts +26 -0
  350. package/dist/store/upload-binding-retention.d.ts.map +1 -0
  351. package/dist/store/upload-binding-retention.js +142 -0
  352. package/dist/store/upload-binding-retention.js.map +1 -0
  353. package/dist/store/uploads.d.ts +30 -0
  354. package/dist/store/uploads.d.ts.map +1 -0
  355. package/dist/store/uploads.js +238 -0
  356. package/dist/store/uploads.js.map +1 -0
  357. package/dist/store-contracts.d.ts +181 -0
  358. package/dist/store-contracts.d.ts.map +1 -0
  359. package/dist/store-contracts.js +2 -0
  360. package/dist/store-contracts.js.map +1 -0
  361. package/dist/terminal-authority.d.ts +9 -0
  362. package/dist/terminal-authority.d.ts.map +1 -1
  363. package/dist/terminal-authority.js +103 -1
  364. package/dist/terminal-authority.js.map +1 -1
  365. package/dist/thread-lane-checkpoints.d.ts +0 -2
  366. package/dist/thread-lane-checkpoints.d.ts.map +1 -1
  367. package/dist/thread-lane-checkpoints.js +0 -4
  368. package/dist/thread-lane-checkpoints.js.map +1 -1
  369. package/dist/thread-store-support.d.ts +1 -27
  370. package/dist/thread-store-support.d.ts.map +1 -1
  371. package/dist/thread-store-support.js +0 -63
  372. package/dist/thread-store-support.js.map +1 -1
  373. package/dist/threads.d.ts +1 -113
  374. package/dist/threads.d.ts.map +1 -1
  375. package/dist/threads.js +1 -379
  376. package/dist/threads.js.map +1 -1
  377. package/package.json +9 -7
  378. package/dist/command-activity.d.ts +0 -14
  379. package/dist/command-activity.d.ts.map +0 -1
  380. package/dist/command-activity.js +0 -16
  381. package/dist/command-activity.js.map +0 -1
  382. package/dist/journal-events.d.ts +0 -4
  383. package/dist/journal-events.d.ts.map +0 -1
  384. package/dist/journal-events.js +0 -23
  385. package/dist/journal-events.js.map +0 -1
  386. package/dist/journal-maintenance.d.ts +0 -50
  387. package/dist/journal-maintenance.d.ts.map +0 -1
  388. package/dist/journal-maintenance.js +0 -162
  389. package/dist/journal-maintenance.js.map +0 -1
  390. package/dist/journal-manager-journal.d.ts +0 -18
  391. package/dist/journal-manager-journal.d.ts.map +0 -1
  392. package/dist/journal-manager-journal.js +0 -25
  393. package/dist/journal-manager-journal.js.map +0 -1
  394. package/dist/journal-manager-lifecycle.d.ts +0 -11
  395. package/dist/journal-manager-lifecycle.d.ts.map +0 -1
  396. package/dist/journal-manager-lifecycle.js +0 -2
  397. package/dist/journal-manager-lifecycle.js.map +0 -1
  398. package/dist/journal-manager.d.ts +0 -99
  399. package/dist/journal-manager.d.ts.map +0 -1
  400. package/dist/journal-manager.js +0 -559
  401. package/dist/journal-manager.js.map +0 -1
  402. package/dist/journal-prepared-operation.d.ts +0 -53
  403. package/dist/journal-prepared-operation.d.ts.map +0 -1
  404. package/dist/journal-prepared-operation.js +0 -158
  405. package/dist/journal-prepared-operation.js.map +0 -1
  406. package/dist/journal-projection-slot.d.ts +0 -28
  407. package/dist/journal-projection-slot.d.ts.map +0 -1
  408. package/dist/journal-projection-slot.js +0 -71
  409. package/dist/journal-projection-slot.js.map +0 -1
  410. package/dist/journal-projection.d.ts +0 -13
  411. package/dist/journal-projection.d.ts.map +0 -1
  412. package/dist/journal-projection.js +0 -2
  413. package/dist/journal-projection.js.map +0 -1
  414. package/dist/partition-accounts.d.ts +0 -27
  415. package/dist/partition-accounts.d.ts.map +0 -1
  416. package/dist/partition-accounts.js +0 -21
  417. package/dist/partition-accounts.js.map +0 -1
  418. package/dist/project-partition-preparation.d.ts +0 -87
  419. package/dist/project-partition-preparation.d.ts.map +0 -1
  420. package/dist/project-partition-preparation.js +0 -273
  421. package/dist/project-partition-preparation.js.map +0 -1
  422. package/dist/project-partitions.d.ts +0 -214
  423. package/dist/project-partitions.d.ts.map +0 -1
  424. package/dist/project-partitions.js +0 -486
  425. package/dist/project-partitions.js.map +0 -1
  426. package/dist/project-remove.d.ts +0 -11
  427. package/dist/project-remove.d.ts.map +0 -1
  428. package/dist/project-remove.js +0 -65
  429. package/dist/project-remove.js.map +0 -1
  430. package/dist/project-thread-listing.d.ts +0 -14
  431. package/dist/project-thread-listing.d.ts.map +0 -1
  432. package/dist/project-thread-listing.js +0 -37
  433. package/dist/project-thread-listing.js.map +0 -1
  434. package/dist/quota-projection.d.ts +0 -11
  435. package/dist/quota-projection.d.ts.map +0 -1
  436. package/dist/quota-projection.js +0 -10
  437. package/dist/quota-projection.js.map +0 -1
  438. package/dist/resource-store.d.ts +0 -39
  439. package/dist/resource-store.d.ts.map +0 -1
  440. package/dist/resource-store.js +0 -464
  441. package/dist/resource-store.js.map +0 -1
  442. package/dist/run-event-terminal-index.d.ts +0 -13
  443. package/dist/run-event-terminal-index.d.ts.map +0 -1
  444. package/dist/run-event-terminal-index.js +0 -38
  445. package/dist/run-event-terminal-index.js.map +0 -1
  446. package/dist/run-events.d.ts +0 -17
  447. package/dist/run-events.d.ts.map +0 -1
  448. package/dist/run-events.js +0 -31
  449. package/dist/run-events.js.map +0 -1
  450. package/dist/thread-head-ping.d.ts +0 -35
  451. package/dist/thread-head-ping.d.ts.map +0 -1
  452. package/dist/thread-head-ping.js +0 -67
  453. package/dist/thread-head-ping.js.map +0 -1
@@ -0,0 +1,94 @@
1
+ export declare const PREFIX_BYTES: number;
2
+ export declare const HASH_BYTES = 32;
3
+ export declare const MAX_PAYLOAD_BYTES: number;
4
+ export declare const MAX_COMPACTED_LOGICAL_BYTES: number;
5
+ export declare const ZERO_HASH: string;
6
+ export declare const COMPACTED_SNAPSHOT = "journal.compacted_snapshot";
7
+ export interface JournalRecord<T = unknown> {
8
+ partition: string;
9
+ epoch: string;
10
+ seq: number;
11
+ previousFrameHash: string;
12
+ frameHash: string;
13
+ time: string;
14
+ type: string;
15
+ payload: T;
16
+ byteOffset: number;
17
+ }
18
+ export interface FrameHeader {
19
+ partition: string;
20
+ epoch: string;
21
+ seq: number;
22
+ previousFrameHash: string;
23
+ time: string;
24
+ type: string;
25
+ logicalSpan?: number;
26
+ }
27
+ /** A logical record inside a compacted snapshot. `seq` is present in
28
+ * seq-preserving snapshots (a chunk may then cover more sequence numbers than
29
+ * it holds records); its absence means the legacy dense layout. */
30
+ export interface CompactedRecord {
31
+ seq?: number;
32
+ time: string;
33
+ type: string;
34
+ payload: unknown;
35
+ }
36
+ export interface ReplayResult {
37
+ records: JournalRecord[];
38
+ incompleteOffset: number | null;
39
+ error: {
40
+ offset: number;
41
+ reason: string;
42
+ } | null;
43
+ }
44
+ export type FramePrefix = {
45
+ status: "incomplete";
46
+ } | {
47
+ status: "corrupt";
48
+ reason: string;
49
+ } | {
50
+ status: "frame";
51
+ headerLength: number;
52
+ payloadLength: number;
53
+ frameLength: number;
54
+ };
55
+ export type FrameBody = {
56
+ status: "corrupt";
57
+ reason: string;
58
+ } | {
59
+ status: "frame";
60
+ header: FrameHeader;
61
+ payload: unknown;
62
+ frameHash: string;
63
+ };
64
+ /** Sequential validation state shared by every reader of one partition. */
65
+ export interface FrameChain {
66
+ partition: string;
67
+ epoch: string | null;
68
+ expectedSeq: number;
69
+ previous: string;
70
+ }
71
+ export type ChainedFrame = {
72
+ status: "corrupt";
73
+ reason: string;
74
+ } | {
75
+ status: "frame";
76
+ records: JournalRecord[];
77
+ byteLengths: number[];
78
+ };
79
+ /** Legacy whole-buffer replay; the positional reader runs the same three steps. */
80
+ export declare function replayFrames(bytes: Buffer, partition: string): ReplayResult;
81
+ export declare function newFrameChain(partition: string): FrameChain;
82
+ /** Step 1: the fixed prefix. `remaining` is the readable byte count from the
83
+ * frame start; `view` must expose at least `min(remaining, PREFIX_BYTES)`. */
84
+ export declare function readFramePrefix(view: Buffer, remaining: number): FramePrefix;
85
+ /** Step 2: hash and JSON of one complete frame (`frame` is exactly its bytes).
86
+ * The payload handed out is the parsed object covered by the verified hash. */
87
+ export declare function decodeFrameBody(frame: Buffer, headerLength: number, payloadLength: number): FrameBody;
88
+ /** Step 3: partition/epoch/seq/hash-chain semantics, then logical records.
89
+ * A compacted snapshot advances the expected sequence by its logical span. */
90
+ export declare function chainFrame(chain: FrameChain, body: Extract<FrameBody, {
91
+ status: "frame";
92
+ }>, byteOffset: number, payloadLength: number): ChainedFrame;
93
+ export declare function encodeFrame(header: FrameHeader, payload: Buffer): Buffer;
94
+ //# sourceMappingURL=frame-codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-codec.d.ts","sourceRoot":"","sources":["../../../src/store/legacy-journal/frame-codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,352 @@
1
+ import { createHash } from "node:crypto";
2
+ import { gunzipSync } from "node:zlib";
3
+ const MAGIC = Buffer.from([0x43, 0x4c, 0x58, 0x4a, 0x4e, 0x4c, 0x32, 0x00]);
4
+ const VERSION = 1;
5
+ const PREFIX_CORE_BYTES = MAGIC.length + 2 + 4 + 4;
6
+ const PREFIX_CHECKSUM_BYTES = 8;
7
+ export const PREFIX_BYTES = PREFIX_CORE_BYTES + PREFIX_CHECKSUM_BYTES;
8
+ export const HASH_BYTES = 32;
9
+ const MAX_HEADER_BYTES = 64 * 1024;
10
+ export const MAX_PAYLOAD_BYTES = 16 * 1024 * 1024;
11
+ // A compacted frame's physical payload is bounded, but gzip expansion is not.
12
+ // Keep replay fail-closed before an unbounded allocation while retaining
13
+ // headroom for the large single-frame snapshots earlier writers produced.
14
+ export const MAX_COMPACTED_LOGICAL_BYTES = 512 * 1024 * 1024;
15
+ export const ZERO_HASH = "0".repeat(64);
16
+ export const COMPACTED_SNAPSHOT = "journal.compacted_snapshot";
17
+ /** Legacy whole-buffer replay; the positional reader runs the same three steps. */
18
+ export function replayFrames(bytes, partition) {
19
+ const records = [];
20
+ const chain = newFrameChain(partition);
21
+ let offset = 0;
22
+ while (offset < bytes.length) {
23
+ const prefix = readFramePrefix(bytes.subarray(offset), bytes.length - offset);
24
+ if (prefix.status === "incomplete")
25
+ return { records, incompleteOffset: offset, error: null };
26
+ if (prefix.status === "corrupt")
27
+ return corrupt(records, offset, prefix.reason);
28
+ const body = decodeFrameBody(bytes.subarray(offset, offset + prefix.frameLength), prefix.headerLength, prefix.payloadLength);
29
+ if (body.status === "corrupt")
30
+ return corrupt(records, offset, body.reason);
31
+ const chained = chainFrame(chain, body, offset, prefix.payloadLength);
32
+ if (chained.status === "corrupt")
33
+ return corrupt(records, offset, chained.reason);
34
+ for (const record of chained.records)
35
+ records.push(record);
36
+ offset += prefix.frameLength;
37
+ }
38
+ return { records, incompleteOffset: null, error: null };
39
+ }
40
+ export function newFrameChain(partition) {
41
+ return { partition, epoch: null, expectedSeq: 1, previous: ZERO_HASH };
42
+ }
43
+ /** Step 1: the fixed prefix. `remaining` is the readable byte count from the
44
+ * frame start; `view` must expose at least `min(remaining, PREFIX_BYTES)`. */
45
+ export function readFramePrefix(view, remaining) {
46
+ if (remaining < PREFIX_BYTES)
47
+ return { status: "incomplete" };
48
+ if (!view.subarray(0, MAGIC.length).equals(MAGIC)) {
49
+ return { status: "corrupt", reason: "frame magic mismatch" };
50
+ }
51
+ const prefix = view.subarray(0, PREFIX_BYTES);
52
+ const expectedPrefix = createHash("sha256")
53
+ .update(prefix.subarray(0, PREFIX_CORE_BYTES))
54
+ .digest()
55
+ .subarray(0, PREFIX_CHECKSUM_BYTES);
56
+ if (!prefix.subarray(PREFIX_CORE_BYTES).equals(expectedPrefix)) {
57
+ return { status: "corrupt", reason: "frame prefix checksum mismatch" };
58
+ }
59
+ const version = view.readUInt16BE(MAGIC.length);
60
+ const headerLength = view.readUInt32BE(MAGIC.length + 2);
61
+ const payloadLength = view.readUInt32BE(MAGIC.length + 6);
62
+ if (version !== VERSION) {
63
+ return { status: "corrupt", reason: `unsupported frame version ${version}` };
64
+ }
65
+ if (headerLength === 0 || headerLength > MAX_HEADER_BYTES || payloadLength > MAX_PAYLOAD_BYTES) {
66
+ return { status: "corrupt", reason: "invalid frame lengths" };
67
+ }
68
+ const frameLength = PREFIX_BYTES + headerLength + payloadLength + HASH_BYTES;
69
+ if (frameLength > remaining)
70
+ return { status: "incomplete" };
71
+ return { status: "frame", headerLength, payloadLength, frameLength };
72
+ }
73
+ /** Step 2: hash and JSON of one complete frame (`frame` is exactly its bytes).
74
+ * The payload handed out is the parsed object covered by the verified hash. */
75
+ export function decodeFrameBody(frame, headerLength, payloadLength) {
76
+ const headerStart = PREFIX_BYTES;
77
+ const payloadStart = headerStart + headerLength;
78
+ const bodyEnd = payloadStart + payloadLength;
79
+ const frameHashBytes = createHash("sha256").update(frame.subarray(0, bodyEnd)).digest();
80
+ if (!frame.subarray(bodyEnd, bodyEnd + HASH_BYTES).equals(frameHashBytes)) {
81
+ return { status: "corrupt", reason: "frame checksum mismatch" };
82
+ }
83
+ let header;
84
+ let payload;
85
+ try {
86
+ header = JSON.parse(frame.subarray(headerStart, payloadStart).toString("utf8"));
87
+ payload = JSON.parse(frame.subarray(payloadStart, bodyEnd).toString("utf8"));
88
+ }
89
+ catch {
90
+ return { status: "corrupt", reason: "frame JSON is malformed" };
91
+ }
92
+ return { status: "frame", header, payload, frameHash: frameHashBytes.toString("hex") };
93
+ }
94
+ /** Step 3: partition/epoch/seq/hash-chain semantics, then logical records.
95
+ * A compacted snapshot advances the expected sequence by its logical span. */
96
+ export function chainFrame(chain, body, byteOffset, payloadLength) {
97
+ const { header, payload, frameHash } = body;
98
+ const semantic = validateHeader(header, chain.partition, chain.epoch, chain.expectedSeq, chain.previous);
99
+ if (semantic)
100
+ return { status: "corrupt", reason: semantic };
101
+ const records = [];
102
+ const byteLengths = [];
103
+ if (header.type === COMPACTED_SNAPSHOT) {
104
+ let compacted;
105
+ try {
106
+ compacted = decodeCompactedSnapshot(payload, header.logicalSpan, header.seq);
107
+ }
108
+ catch (error) {
109
+ return { status: "corrupt", reason: `compacted snapshot is invalid: ${String(error)}` };
110
+ }
111
+ compacted.forEach((record, index) => {
112
+ records.push({
113
+ partition: chain.partition,
114
+ epoch: header.epoch,
115
+ seq: record.seq,
116
+ previousFrameHash: index === 0 ? header.previousFrameHash : frameHash,
117
+ frameHash,
118
+ time: record.time,
119
+ type: record.type,
120
+ payload: record.payload,
121
+ byteOffset,
122
+ });
123
+ byteLengths.push(record.byteLength);
124
+ });
125
+ chain.expectedSeq += header.logicalSpan;
126
+ }
127
+ else {
128
+ records.push({
129
+ partition: chain.partition,
130
+ epoch: header.epoch,
131
+ seq: header.seq,
132
+ previousFrameHash: header.previousFrameHash,
133
+ frameHash,
134
+ time: header.time,
135
+ type: header.type,
136
+ payload,
137
+ byteOffset,
138
+ });
139
+ // The `{time,type,payload}` logical form this frame would take in a snapshot.
140
+ byteLengths.push(28 +
141
+ Buffer.byteLength(JSON.stringify(header.time)) +
142
+ Buffer.byteLength(JSON.stringify(header.type)) +
143
+ payloadLength);
144
+ chain.expectedSeq += 1;
145
+ }
146
+ chain.epoch ??= header.epoch;
147
+ chain.previous = frameHash;
148
+ return { status: "frame", records, byteLengths };
149
+ }
150
+ export function encodeFrame(header, payload) {
151
+ const headerBytes = encodeJson(header);
152
+ if (headerBytes.length > MAX_HEADER_BYTES)
153
+ throw new Error("journal header is too large");
154
+ const prefix = Buffer.alloc(PREFIX_BYTES);
155
+ MAGIC.copy(prefix);
156
+ prefix.writeUInt16BE(VERSION, MAGIC.length);
157
+ prefix.writeUInt32BE(headerBytes.length, MAGIC.length + 2);
158
+ prefix.writeUInt32BE(payload.length, MAGIC.length + 6);
159
+ createHash("sha256")
160
+ .update(prefix.subarray(0, PREFIX_CORE_BYTES))
161
+ .digest()
162
+ .subarray(0, PREFIX_CHECKSUM_BYTES)
163
+ .copy(prefix, PREFIX_CORE_BYTES);
164
+ const body = Buffer.concat([prefix, headerBytes, payload]);
165
+ return Buffer.concat([body, createHash("sha256").update(body).digest()]);
166
+ }
167
+ function corrupt(records, offset, reason) {
168
+ return { records, incompleteOffset: null, error: { offset, reason } };
169
+ }
170
+ function validateHeader(header, partition, epoch, seq, previous) {
171
+ if (!header || typeof header !== "object")
172
+ return "frame header is not an object";
173
+ if (header.partition !== partition)
174
+ return "frame partition mismatch";
175
+ if (typeof header.epoch !== "string" || !header.epoch)
176
+ return "frame epoch is invalid";
177
+ if (epoch !== null && header.epoch !== epoch)
178
+ return "frame epoch changed";
179
+ if (header.seq !== seq)
180
+ return "frame sequence mismatch";
181
+ if (header.previousFrameHash !== previous)
182
+ return "frame hash-chain mismatch";
183
+ if (typeof header.time !== "string" || !header.time)
184
+ return "frame timestamp is invalid";
185
+ if (typeof header.type !== "string" || !header.type)
186
+ return "frame type is invalid";
187
+ if (header.type === COMPACTED_SNAPSHOT) {
188
+ if (!Number.isSafeInteger(header.logicalSpan) || Number(header.logicalSpan) <= 0) {
189
+ return "compacted snapshot logical span is invalid";
190
+ }
191
+ }
192
+ else if (header.logicalSpan !== undefined)
193
+ return "ordinary frame declares a logical span";
194
+ return null;
195
+ }
196
+ /** Legacy snapshots carry no `seq`: exactly `logicalSpan` records numbered from
197
+ * the header. Seq-preserving snapshots carry one per record, strictly
198
+ * increasing inside the covered span, so `count <= logicalSpan`. Mixing the two
199
+ * inside one frame is corruption. */
200
+ function decodeCompactedSnapshot(payload, logicalSpan, firstSeq) {
201
+ if (!isRecord(payload) || payload.version !== 1 || payload.encoding !== "gzip-base64") {
202
+ throw new Error("unsupported payload");
203
+ }
204
+ const span = logicalSpan;
205
+ const count = payload.count;
206
+ if (!Number.isSafeInteger(count) || Number(count) < 0 || Number(count) > span) {
207
+ throw new Error("record count mismatch");
208
+ }
209
+ if (typeof payload.data !== "string")
210
+ throw new Error("encoded data is missing");
211
+ const decoded = gunzipSync(Buffer.from(payload.data, "base64"), {
212
+ maxOutputLength: MAX_COMPACTED_LOGICAL_BYTES,
213
+ });
214
+ const records = parseCompactedRecords(decoded, count);
215
+ // An empty covering chunk can only come from the seq-preserving writer.
216
+ const numbered = records.length === 0 || records[0].seq !== undefined;
217
+ let previous = firstSeq - 1;
218
+ for (const record of records) {
219
+ if ((record.seq !== undefined) !== numbered)
220
+ throw new Error("mixed record sequence");
221
+ if (!numbered) {
222
+ previous += 1;
223
+ record.seq = previous;
224
+ continue;
225
+ }
226
+ const seq = record.seq;
227
+ if (seq <= previous || seq > firstSeq + span - 1)
228
+ throw new Error("record sequence is invalid");
229
+ previous = seq;
230
+ }
231
+ if (!numbered && records.length !== span)
232
+ throw new Error("record count mismatch");
233
+ return records;
234
+ }
235
+ function parseCompactedRecords(bytes, count) {
236
+ let cursor = skipJsonWhitespace(bytes, 0);
237
+ if (bytes[cursor] !== 0x5b)
238
+ throw new Error("invalid records");
239
+ cursor += 1;
240
+ const records = [];
241
+ for (let index = 0; index < count; index += 1) {
242
+ cursor = skipJsonWhitespace(bytes, cursor);
243
+ const end = scanCompactedRecord(bytes, cursor);
244
+ let value;
245
+ try {
246
+ // Parse one logical record at a time. Converting the complete decompressed
247
+ // array to a JavaScript string is what overflows on large valid journals.
248
+ value = JSON.parse(bytes.subarray(cursor, end).toString("utf8"));
249
+ }
250
+ catch {
251
+ throw new Error("invalid records");
252
+ }
253
+ records.push({ ...validateCompactedRecord(value), byteLength: end - cursor });
254
+ cursor = skipJsonWhitespace(bytes, end);
255
+ const separator = bytes[cursor];
256
+ if (index + 1 < count) {
257
+ if (separator !== 0x2c)
258
+ throw new Error("invalid records");
259
+ cursor += 1;
260
+ }
261
+ else {
262
+ if (separator !== 0x5d)
263
+ throw new Error("invalid records");
264
+ cursor += 1;
265
+ }
266
+ }
267
+ if (count === 0) {
268
+ cursor = skipJsonWhitespace(bytes, cursor);
269
+ if (bytes[cursor] !== 0x5d)
270
+ throw new Error("invalid records");
271
+ cursor += 1;
272
+ }
273
+ cursor = skipJsonWhitespace(bytes, cursor);
274
+ if (cursor !== bytes.length)
275
+ throw new Error("invalid records");
276
+ return records;
277
+ }
278
+ function validateCompactedRecord(record) {
279
+ if (!isRecord(record) ||
280
+ typeof record.time !== "string" ||
281
+ typeof record.type !== "string" ||
282
+ !record.type ||
283
+ record.type === COMPACTED_SNAPSHOT ||
284
+ (record.seq !== undefined && (!Number.isSafeInteger(record.seq) || Number(record.seq) < 1))) {
285
+ throw new Error("invalid logical record");
286
+ }
287
+ const logical = {
288
+ time: record.time,
289
+ type: record.type,
290
+ payload: record.payload,
291
+ };
292
+ if (record.seq !== undefined)
293
+ logical.seq = record.seq;
294
+ return logical;
295
+ }
296
+ function scanCompactedRecord(bytes, start) {
297
+ if (bytes[start] !== 0x7b)
298
+ throw new Error("invalid records");
299
+ const stack = [];
300
+ let inString = false;
301
+ let escaped = false;
302
+ for (let cursor = start; cursor < bytes.length; cursor += 1) {
303
+ const value = bytes[cursor];
304
+ if (inString) {
305
+ if (escaped)
306
+ escaped = false;
307
+ else if (value === 0x5c)
308
+ escaped = true;
309
+ else if (value === 0x22)
310
+ inString = false;
311
+ continue;
312
+ }
313
+ if (value === 0x22) {
314
+ inString = true;
315
+ continue;
316
+ }
317
+ if (value === 0x7b || value === 0x5b) {
318
+ stack.push(value);
319
+ continue;
320
+ }
321
+ if (value !== 0x7d && value !== 0x5d)
322
+ continue;
323
+ const opening = stack.pop();
324
+ if ((value === 0x7d && opening !== 0x7b) || (value === 0x5d && opening !== 0x5b)) {
325
+ throw new Error("invalid records");
326
+ }
327
+ if (stack.length === 0)
328
+ return cursor + 1;
329
+ }
330
+ throw new Error("invalid records");
331
+ }
332
+ function skipJsonWhitespace(bytes, start) {
333
+ let cursor = start;
334
+ while (cursor < bytes.length &&
335
+ (bytes[cursor] === 0x20 ||
336
+ bytes[cursor] === 0x09 ||
337
+ bytes[cursor] === 0x0a ||
338
+ bytes[cursor] === 0x0d)) {
339
+ cursor += 1;
340
+ }
341
+ return cursor;
342
+ }
343
+ function encodeJson(value) {
344
+ const encoded = JSON.stringify(value);
345
+ if (encoded === undefined)
346
+ throw new Error("journal value is not JSON serializable");
347
+ return Buffer.from(encoded);
348
+ }
349
+ function isRecord(value) {
350
+ return typeof value === "object" && value !== null && !Array.isArray(value);
351
+ }
352
+ //# sourceMappingURL=frame-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-codec.js","sourceRoot":"","sources":["../../../src/store/legacy-journal/frame-codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type JournalRecord } from "./frame-codec.js";
2
+ import { type JournalFold } from "./journal-fold.js";
3
+ export interface FrameReadOptions {
4
+ /** Treat the file as ending at this byte (an append intent's prefix). */
5
+ limit?: number;
6
+ fold?: JournalFold;
7
+ }
8
+ /** Disk chain state comes from the LAST FRAME ON DISK, never from the last
9
+ * retained record: a fold may drop that frame, and the next append must still
10
+ * chain to it. */
11
+ export interface FrameReadResult {
12
+ retained: JournalRecord[];
13
+ epoch: string | null;
14
+ nextSeq: number;
15
+ previousFrameHash: string;
16
+ knownFileBytes: number;
17
+ incompleteOffset: number | null;
18
+ error: {
19
+ offset: number;
20
+ reason: string;
21
+ } | null;
22
+ retiredCount: number;
23
+ retiredBytes: number;
24
+ }
25
+ /** Positional frame-at-a-time reader over a descriptor: bounded buffers, the
26
+ * same prefix/hash/chain/epoch/seq validation as `replayFrames`, optional fold
27
+ * applied while streaming. Throws when the file shrinks underneath the read. */
28
+ export declare function readFrames(fd: number, partition: string, options?: FrameReadOptions): FrameReadResult;
29
+ export declare function descriptorSize(fd: number): number;
30
+ //# sourceMappingURL=frame-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-reader.d.ts","sourceRoot":"","sources":["../../../src/store/legacy-journal/frame-reader.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKjE,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;kBAEkB;AAClB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;gFAEgF;AAChF,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,gBAAqB,GAC7B,eAAe,CA4DjB;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAIjD"}
@@ -0,0 +1,97 @@
1
+ import { fstatSync, readSync } from "node:fs";
2
+ import { PREFIX_BYTES, chainFrame, decodeFrameBody, newFrameChain, readFramePrefix, } from "./frame-codec.js";
3
+ import { foldStream } from "./journal-fold.js";
4
+ // Read-ahead window; a frame larger than the window gets its own exact buffer.
5
+ const WINDOW_BYTES = 4 * 1024 * 1024;
6
+ /** Positional frame-at-a-time reader over a descriptor: bounded buffers, the
7
+ * same prefix/hash/chain/epoch/seq validation as `replayFrames`, optional fold
8
+ * applied while streaming. Throws when the file shrinks underneath the read. */
9
+ export function readFrames(fd, partition, options = {}) {
10
+ const size = descriptorSize(fd);
11
+ const end = options.limit === undefined ? size : Math.min(size, options.limit);
12
+ const window = new PositionalWindow(fd, end);
13
+ const chain = newFrameChain(partition);
14
+ const sink = foldStream(options.fold);
15
+ let offset = 0;
16
+ let incompleteOffset = null;
17
+ let error = null;
18
+ while (offset < end) {
19
+ const remaining = end - offset;
20
+ const prefix = readFramePrefix(window.view(offset, Math.min(PREFIX_BYTES, remaining)), remaining);
21
+ if (prefix.status === "incomplete") {
22
+ incompleteOffset = offset;
23
+ break;
24
+ }
25
+ if (prefix.status === "corrupt") {
26
+ error = { offset, reason: prefix.reason };
27
+ break;
28
+ }
29
+ const body = decodeFrameBody(window.view(offset, prefix.frameLength), prefix.headerLength, prefix.payloadLength);
30
+ if (body.status === "corrupt") {
31
+ error = { offset, reason: body.reason };
32
+ break;
33
+ }
34
+ const chained = chainFrame(chain, body, offset, prefix.payloadLength);
35
+ if (chained.status === "corrupt") {
36
+ error = { offset, reason: chained.reason };
37
+ break;
38
+ }
39
+ chained.records.forEach((record, index) => sink.push(record, {
40
+ seq: record.seq,
41
+ type: record.type,
42
+ time: record.time,
43
+ payload: record.payload,
44
+ byteLength: chained.byteLengths[index],
45
+ }));
46
+ offset += prefix.frameLength;
47
+ }
48
+ const folded = sink.finish();
49
+ return {
50
+ retained: folded.retained,
51
+ epoch: chain.epoch,
52
+ nextSeq: chain.expectedSeq,
53
+ previousFrameHash: chain.previous,
54
+ knownFileBytes: offset,
55
+ incompleteOffset,
56
+ error,
57
+ retiredCount: folded.retiredCount,
58
+ retiredBytes: folded.retiredBytes,
59
+ };
60
+ }
61
+ export function descriptorSize(fd) {
62
+ const size = Number(fstatSync(fd, { bigint: true }).size);
63
+ if (!Number.isSafeInteger(size) || size < 0)
64
+ throw new Error("journal file size is invalid");
65
+ return size;
66
+ }
67
+ class PositionalWindow {
68
+ fd;
69
+ end;
70
+ buffer = Buffer.alloc(0);
71
+ start = 0;
72
+ length = 0;
73
+ constructor(fd, end) {
74
+ this.fd = fd;
75
+ this.end = end;
76
+ }
77
+ /** A view of `[offset, offset + length)`; valid until the next call. */
78
+ view(offset, length) {
79
+ if (offset >= this.start && offset + length <= this.start + this.length) {
80
+ return this.buffer.subarray(offset - this.start, offset - this.start + length);
81
+ }
82
+ const wanted = Math.min(Math.max(WINDOW_BYTES, length), this.end - offset);
83
+ if (this.buffer.length < wanted)
84
+ this.buffer = Buffer.allocUnsafe(wanted);
85
+ let filled = 0;
86
+ while (filled < wanted) {
87
+ const read = readSync(this.fd, this.buffer, filled, wanted - filled, offset + filled);
88
+ if (read === 0)
89
+ throw new Error("journal changed while being read");
90
+ filled += read;
91
+ }
92
+ this.start = offset;
93
+ this.length = wanted;
94
+ return this.buffer.subarray(0, length);
95
+ }
96
+ }
97
+ //# sourceMappingURL=frame-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-reader.js","sourceRoot":"","sources":["../../../src/store/legacy-journal/frame-reader.ts"],"names":[],"mappings":"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"}