@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.
- package/dist/account-resets.d.ts +2 -2
- package/dist/account-resets.d.ts.map +1 -1
- package/dist/account-resets.js +15 -0
- package/dist/account-resets.js.map +1 -1
- package/dist/client.d.ts +25 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +55 -51
- package/dist/client.js.map +1 -1
- package/dist/command-authority.d.ts +11 -8
- package/dist/command-authority.d.ts.map +1 -1
- package/dist/command-authority.js +5 -6
- package/dist/command-authority.js.map +1 -1
- package/dist/command-list-projection.d.ts +0 -1
- package/dist/command-list-projection.d.ts.map +1 -1
- package/dist/command-list-projection.js +0 -6
- package/dist/command-list-projection.js.map +1 -1
- package/dist/command-list-select.d.ts +0 -4
- package/dist/command-list-select.d.ts.map +1 -1
- package/dist/command-list-select.js +1 -115
- package/dist/command-list-select.js.map +1 -1
- package/dist/command-retention.d.ts +7 -19
- package/dist/command-retention.d.ts.map +1 -1
- package/dist/command-retention.js +1 -120
- package/dist/command-retention.js.map +1 -1
- package/dist/command-rpc.d.ts +4 -1
- package/dist/command-rpc.d.ts.map +1 -1
- package/dist/command-rpc.js +12 -1
- package/dist/command-rpc.js.map +1 -1
- package/dist/command-store.d.ts +15 -52
- package/dist/command-store.d.ts.map +1 -1
- package/dist/command-store.js +5 -493
- package/dist/command-store.js.map +1 -1
- package/dist/daemon-health.d.ts +56 -8
- package/dist/daemon-health.d.ts.map +1 -1
- package/dist/daemon-health.js +44 -9
- package/dist/daemon-health.js.map +1 -1
- package/dist/daemon-local-client.d.ts +28 -0
- package/dist/daemon-local-client.d.ts.map +1 -0
- package/dist/daemon-local-client.js +55 -0
- package/dist/daemon-local-client.js.map +1 -0
- package/dist/delivery-command.d.ts +4 -4
- package/dist/delivery-command.d.ts.map +1 -1
- package/dist/delivery-command.js.map +1 -1
- package/dist/index.d.ts +23 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -8
- package/dist/index.js.map +1 -1
- package/dist/interactions.d.ts +12 -28
- package/dist/interactions.d.ts.map +1 -1
- package/dist/interactions.js +22 -123
- package/dist/interactions.js.map +1 -1
- package/dist/job-admission.d.ts +26 -0
- package/dist/job-admission.d.ts.map +1 -0
- package/dist/job-admission.js +67 -0
- package/dist/job-admission.js.map +1 -0
- package/dist/journal-fold-policy.d.ts +1 -1
- package/dist/journal-fold-policy.d.ts.map +1 -1
- package/dist/journal-recovery-files.d.ts +1 -41
- package/dist/journal-recovery-files.d.ts.map +1 -1
- package/dist/journal-recovery-files.js +2 -340
- package/dist/journal-recovery-files.js.map +1 -1
- package/dist/loop-facts.d.ts +28 -0
- package/dist/loop-facts.d.ts.map +1 -0
- package/dist/loop-facts.js +97 -0
- package/dist/loop-facts.js.map +1 -0
- package/dist/memory-facts.d.ts +2 -0
- package/dist/memory-facts.d.ts.map +1 -1
- package/dist/memory-facts.js +5 -0
- package/dist/memory-facts.js.map +1 -1
- package/dist/model-operations.d.ts +11 -4
- package/dist/model-operations.d.ts.map +1 -1
- package/dist/model-operations.js +68 -38
- package/dist/model-operations.js.map +1 -1
- package/dist/operator-decisions.d.ts +15 -25
- package/dist/operator-decisions.d.ts.map +1 -1
- package/dist/operator-decisions.js +5 -84
- package/dist/operator-decisions.js.map +1 -1
- package/dist/projects.d.ts +42 -41
- package/dist/projects.d.ts.map +1 -1
- package/dist/projects.js +46 -184
- package/dist/projects.js.map +1 -1
- package/dist/quota-registry-replay.d.ts +2 -2
- package/dist/quota-registry-replay.d.ts.map +1 -1
- package/dist/quota-registry-replay.js.map +1 -1
- package/dist/quota-registry-support.d.ts +4 -1
- package/dist/quota-registry-support.d.ts.map +1 -1
- package/dist/quota-registry-support.js +15 -2
- package/dist/quota-registry-support.js.map +1 -1
- package/dist/quota-registry.d.ts +64 -2
- package/dist/quota-registry.d.ts.map +1 -1
- package/dist/quota-registry.js +10 -3
- package/dist/quota-registry.js.map +1 -1
- package/dist/quota-resources.d.ts +6 -3
- package/dist/quota-resources.d.ts.map +1 -1
- package/dist/quota-resources.js +25 -8
- package/dist/quota-resources.js.map +1 -1
- package/dist/runless-turn-recovery.d.ts +2 -9
- package/dist/runless-turn-recovery.d.ts.map +1 -1
- package/dist/runless-turn-recovery.js +0 -14
- package/dist/runless-turn-recovery.js.map +1 -1
- package/dist/server.d.ts +23 -22
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +74 -84
- package/dist/server.js.map +1 -1
- package/dist/store/blob-files.d.ts +71 -0
- package/dist/store/blob-files.d.ts.map +1 -0
- package/dist/store/blob-files.js +160 -0
- package/dist/store/blob-files.js.map +1 -0
- package/dist/store/command-prune.d.ts +37 -0
- package/dist/store/command-prune.d.ts.map +1 -0
- package/dist/store/command-prune.js +123 -0
- package/dist/store/command-prune.js.map +1 -0
- package/dist/store/command-queries.d.ts +41 -0
- package/dist/store/command-queries.d.ts.map +1 -0
- package/dist/store/command-queries.js +186 -0
- package/dist/store/command-queries.js.map +1 -0
- package/dist/store/command-rows.d.ts +66 -0
- package/dist/store/command-rows.d.ts.map +1 -0
- package/dist/store/command-rows.js +141 -0
- package/dist/store/command-rows.js.map +1 -0
- package/dist/store/commands.d.ts +49 -0
- package/dist/store/commands.d.ts.map +1 -0
- package/dist/store/commands.js +247 -0
- package/dist/store/commands.js.map +1 -0
- package/dist/store/cursors.d.ts +33 -0
- package/dist/store/cursors.d.ts.map +1 -0
- package/dist/store/cursors.js +82 -0
- package/dist/store/cursors.js.map +1 -0
- package/dist/store/engine-recovery-files.d.ts +14 -0
- package/dist/store/engine-recovery-files.d.ts.map +1 -0
- package/dist/store/engine-recovery-files.js +53 -0
- package/dist/store/engine-recovery-files.js.map +1 -0
- package/dist/store/engine-state-recovery.d.ts +71 -0
- package/dist/store/engine-state-recovery.d.ts.map +1 -0
- package/dist/store/engine-state-recovery.js +318 -0
- package/dist/store/engine-state-recovery.js.map +1 -0
- package/dist/store/errors.d.ts +80 -0
- package/dist/store/errors.d.ts.map +1 -0
- package/dist/store/errors.js +130 -0
- package/dist/store/errors.js.map +1 -0
- package/dist/store/event-store.d.ts +52 -0
- package/dist/store/event-store.d.ts.map +1 -0
- package/dist/store/event-store.js +117 -0
- package/dist/store/event-store.js.map +1 -0
- package/dist/store/external-files.d.ts +40 -0
- package/dist/store/external-files.d.ts.map +1 -0
- package/dist/store/external-files.js +90 -0
- package/dist/store/external-files.js.map +1 -0
- package/dist/store/flusher-protocol.d.ts +82 -0
- package/dist/store/flusher-protocol.d.ts.map +1 -0
- package/dist/store/flusher-protocol.js +23 -0
- package/dist/store/flusher-protocol.js.map +1 -0
- package/dist/store/flusher-worker.d.ts +24 -0
- package/dist/store/flusher-worker.d.ts.map +1 -0
- package/dist/store/flusher-worker.js +185 -0
- package/dist/store/flusher-worker.js.map +1 -0
- package/dist/store/flusher.d.ts +87 -0
- package/dist/store/flusher.d.ts.map +1 -0
- package/dist/store/flusher.js +264 -0
- package/dist/store/flusher.js.map +1 -0
- package/dist/store/generations.d.ts +43 -0
- package/dist/store/generations.d.ts.map +1 -0
- package/dist/store/generations.js +143 -0
- package/dist/store/generations.js.map +1 -0
- package/dist/store/idempotency.d.ts +25 -0
- package/dist/store/idempotency.d.ts.map +1 -0
- package/dist/store/idempotency.js +53 -0
- package/dist/store/idempotency.js.map +1 -0
- package/dist/store/import-context.d.ts +22 -0
- package/dist/store/import-context.d.ts.map +1 -0
- package/dist/store/import-context.js +87 -0
- package/dist/store/import-context.js.map +1 -0
- package/dist/store/import-discovery.d.ts +6 -0
- package/dist/store/import-discovery.d.ts.map +1 -0
- package/dist/store/import-discovery.js +66 -0
- package/dist/store/import-discovery.js.map +1 -0
- package/dist/store/import-records.d.ts +6 -0
- package/dist/store/import-records.d.ts.map +1 -0
- package/dist/store/import-records.js +191 -0
- package/dist/store/import-records.js.map +1 -0
- package/dist/store/import-resources.d.ts +14 -0
- package/dist/store/import-resources.d.ts.map +1 -0
- package/dist/store/import-resources.js +197 -0
- package/dist/store/import-resources.js.map +1 -0
- package/dist/store/import-source.d.ts +24 -0
- package/dist/store/import-source.d.ts.map +1 -0
- package/dist/store/import-source.js +65 -0
- package/dist/store/import-source.js.map +1 -0
- package/dist/store/import-verify.d.ts +6 -0
- package/dist/store/import-verify.d.ts.map +1 -0
- package/dist/store/import-verify.js +97 -0
- package/dist/store/import-verify.js.map +1 -0
- package/dist/store/import-worker.d.ts +18 -0
- package/dist/store/import-worker.d.ts.map +1 -0
- package/dist/store/import-worker.js +69 -0
- package/dist/store/import-worker.js.map +1 -0
- package/dist/store/importer.d.ts +42 -0
- package/dist/store/importer.d.ts.map +1 -0
- package/dist/store/importer.js +239 -0
- package/dist/store/importer.js.map +1 -0
- package/dist/store/interactions.d.ts +22 -0
- package/dist/store/interactions.d.ts.map +1 -0
- package/dist/store/interactions.js +82 -0
- package/dist/store/interactions.js.map +1 -0
- package/dist/store/legacy-journal/frame-codec.d.ts +94 -0
- package/dist/store/legacy-journal/frame-codec.d.ts.map +1 -0
- package/dist/store/legacy-journal/frame-codec.js +352 -0
- package/dist/store/legacy-journal/frame-codec.js.map +1 -0
- package/dist/store/legacy-journal/frame-reader.d.ts +30 -0
- package/dist/store/legacy-journal/frame-reader.d.ts.map +1 -0
- package/dist/store/legacy-journal/frame-reader.js +97 -0
- package/dist/store/legacy-journal/frame-reader.js.map +1 -0
- package/dist/store/legacy-journal/journal-fold.d.ts +47 -0
- package/dist/store/legacy-journal/journal-fold.d.ts.map +1 -0
- package/dist/store/legacy-journal/journal-fold.js +81 -0
- package/dist/store/legacy-journal/journal-fold.js.map +1 -0
- package/dist/store/legacy-journal/journal-partition.d.ts +2 -0
- package/dist/store/legacy-journal/journal-partition.d.ts.map +1 -0
- package/dist/store/legacy-journal/journal-partition.js +10 -0
- package/dist/store/legacy-journal/journal-partition.js.map +1 -0
- package/dist/store/legacy-journal/read-only-preparation.d.ts +48 -0
- package/dist/store/legacy-journal/read-only-preparation.d.ts.map +1 -0
- package/dist/store/legacy-journal/read-only-preparation.js +430 -0
- package/dist/store/legacy-journal/read-only-preparation.js.map +1 -0
- package/dist/store/maintenance-worker.d.ts +5 -0
- package/dist/store/maintenance-worker.d.ts.map +1 -0
- package/dist/store/maintenance-worker.js +175 -0
- package/dist/store/maintenance-worker.js.map +1 -0
- package/dist/store/maintenance.d.ts +124 -0
- package/dist/store/maintenance.d.ts.map +1 -0
- package/dist/store/maintenance.js +197 -0
- package/dist/store/maintenance.js.map +1 -0
- package/dist/store/mutation.d.ts +34 -0
- package/dist/store/mutation.d.ts.map +1 -0
- package/dist/store/mutation.js +85 -0
- package/dist/store/mutation.js.map +1 -0
- package/dist/store/obligations.d.ts +101 -0
- package/dist/store/obligations.d.ts.map +1 -0
- package/dist/store/obligations.js +226 -0
- package/dist/store/obligations.js.map +1 -0
- package/dist/store/operator-decisions.d.ts +23 -0
- package/dist/store/operator-decisions.d.ts.map +1 -0
- package/dist/store/operator-decisions.js +68 -0
- package/dist/store/operator-decisions.js.map +1 -0
- package/dist/store/owner-generations.d.ts +33 -0
- package/dist/store/owner-generations.d.ts.map +1 -0
- package/dist/store/owner-generations.js +63 -0
- package/dist/store/owner-generations.js.map +1 -0
- package/dist/store/partitions.d.ts +37 -0
- package/dist/store/partitions.d.ts.map +1 -0
- package/dist/store/partitions.js +68 -0
- package/dist/store/partitions.js.map +1 -0
- package/dist/store/pragmas.d.ts +32 -0
- package/dist/store/pragmas.d.ts.map +1 -0
- package/dist/store/pragmas.js +65 -0
- package/dist/store/pragmas.js.map +1 -0
- package/dist/store/project-router.d.ts +325 -0
- package/dist/store/project-router.d.ts.map +1 -0
- package/dist/store/project-router.js +298 -0
- package/dist/store/project-router.js.map +1 -0
- package/dist/store/projects.d.ts +36 -0
- package/dist/store/projects.d.ts.map +1 -0
- package/dist/store/projects.js +238 -0
- package/dist/store/projects.js.map +1 -0
- package/dist/store/publish-blob.d.ts +20 -0
- package/dist/store/publish-blob.d.ts.map +1 -0
- package/dist/store/publish-blob.js +158 -0
- package/dist/store/publish-blob.js.map +1 -0
- package/dist/store/purge-files.d.ts +30 -0
- package/dist/store/purge-files.d.ts.map +1 -0
- package/dist/store/purge-files.js +79 -0
- package/dist/store/purge-files.js.map +1 -0
- package/dist/store/resource-rows.d.ts +40 -0
- package/dist/store/resource-rows.d.ts.map +1 -0
- package/dist/store/resource-rows.js +103 -0
- package/dist/store/resource-rows.js.map +1 -0
- package/dist/store/resources.d.ts +67 -0
- package/dist/store/resources.d.ts.map +1 -0
- package/dist/store/resources.js +147 -0
- package/dist/store/resources.js.map +1 -0
- package/dist/store/retention.d.ts +95 -0
- package/dist/store/retention.d.ts.map +1 -0
- package/dist/store/retention.js +173 -0
- package/dist/store/retention.js.map +1 -0
- package/dist/store/run-events.d.ts +14 -0
- package/dist/store/run-events.d.ts.map +1 -0
- package/dist/store/run-events.js +35 -0
- package/dist/store/run-events.js.map +1 -0
- package/dist/store/runtime.d.ts +24 -0
- package/dist/store/runtime.d.ts.map +1 -0
- package/dist/store/runtime.js +67 -0
- package/dist/store/runtime.js.map +1 -0
- package/dist/store/schema.d.ts +33 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +187 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/store/setup-bindings.d.ts +20 -0
- package/dist/store/setup-bindings.d.ts.map +1 -0
- package/dist/store/setup-bindings.js +52 -0
- package/dist/store/setup-bindings.js.map +1 -0
- package/dist/store/sql-command-router.d.ts +79 -0
- package/dist/store/sql-command-router.d.ts.map +1 -0
- package/dist/store/sql-command-router.js +92 -0
- package/dist/store/sql-command-router.js.map +1 -0
- package/dist/store/sql-daemon-services.d.ts +61 -0
- package/dist/store/sql-daemon-services.d.ts.map +1 -0
- package/dist/store/sql-daemon-services.js +124 -0
- package/dist/store/sql-daemon-services.js.map +1 -0
- package/dist/store/sql-recovery-export.d.ts +8 -0
- package/dist/store/sql-recovery-export.d.ts.map +1 -0
- package/dist/store/sql-recovery-export.js +110 -0
- package/dist/store/sql-recovery-export.js.map +1 -0
- package/dist/store/sql-recovery-inspection.d.ts +22 -0
- package/dist/store/sql-recovery-inspection.d.ts.map +1 -0
- package/dist/store/sql-recovery-inspection.js +88 -0
- package/dist/store/sql-recovery-inspection.js.map +1 -0
- package/dist/store/sql-recovery.d.ts +69 -0
- package/dist/store/sql-recovery.d.ts.map +1 -0
- package/dist/store/sql-recovery.js +169 -0
- package/dist/store/sql-recovery.js.map +1 -0
- package/dist/store/sql-validation.d.ts +9 -0
- package/dist/store/sql-validation.d.ts.map +1 -0
- package/dist/store/sql-validation.js +103 -0
- package/dist/store/sql-validation.js.map +1 -0
- package/dist/store/statement-observer.d.ts +7 -0
- package/dist/store/statement-observer.d.ts.map +1 -0
- package/dist/store/statement-observer.js +44 -0
- package/dist/store/statement-observer.js.map +1 -0
- package/dist/store/store.d.ts +110 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/store/store.js +296 -0
- package/dist/store/store.js.map +1 -0
- package/dist/store/terminal-files.d.ts +21 -0
- package/dist/store/terminal-files.d.ts.map +1 -0
- package/dist/store/terminal-files.js +115 -0
- package/dist/store/terminal-files.js.map +1 -0
- package/dist/store/thread-replay.d.ts +12 -0
- package/dist/store/thread-replay.d.ts.map +1 -0
- package/dist/store/thread-replay.js +49 -0
- package/dist/store/thread-replay.js.map +1 -0
- package/dist/store/thread-rows.d.ts +25 -0
- package/dist/store/thread-rows.d.ts.map +1 -0
- package/dist/store/thread-rows.js +141 -0
- package/dist/store/thread-rows.js.map +1 -0
- package/dist/store/threads.d.ts +105 -0
- package/dist/store/threads.d.ts.map +1 -0
- package/dist/store/threads.js +423 -0
- package/dist/store/threads.js.map +1 -0
- package/dist/store/upload-binding-retention.d.ts +26 -0
- package/dist/store/upload-binding-retention.d.ts.map +1 -0
- package/dist/store/upload-binding-retention.js +142 -0
- package/dist/store/upload-binding-retention.js.map +1 -0
- package/dist/store/uploads.d.ts +30 -0
- package/dist/store/uploads.d.ts.map +1 -0
- package/dist/store/uploads.js +238 -0
- package/dist/store/uploads.js.map +1 -0
- package/dist/store-contracts.d.ts +181 -0
- package/dist/store-contracts.d.ts.map +1 -0
- package/dist/store-contracts.js +2 -0
- package/dist/store-contracts.js.map +1 -0
- package/dist/terminal-authority.d.ts +9 -0
- package/dist/terminal-authority.d.ts.map +1 -1
- package/dist/terminal-authority.js +103 -1
- package/dist/terminal-authority.js.map +1 -1
- package/dist/thread-lane-checkpoints.d.ts +0 -2
- package/dist/thread-lane-checkpoints.d.ts.map +1 -1
- package/dist/thread-lane-checkpoints.js +0 -4
- package/dist/thread-lane-checkpoints.js.map +1 -1
- package/dist/thread-store-support.d.ts +1 -27
- package/dist/thread-store-support.d.ts.map +1 -1
- package/dist/thread-store-support.js +0 -63
- package/dist/thread-store-support.js.map +1 -1
- package/dist/threads.d.ts +1 -113
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +1 -379
- package/dist/threads.js.map +1 -1
- package/package.json +9 -7
- package/dist/command-activity.d.ts +0 -14
- package/dist/command-activity.d.ts.map +0 -1
- package/dist/command-activity.js +0 -16
- package/dist/command-activity.js.map +0 -1
- package/dist/journal-events.d.ts +0 -4
- package/dist/journal-events.d.ts.map +0 -1
- package/dist/journal-events.js +0 -23
- package/dist/journal-events.js.map +0 -1
- package/dist/journal-maintenance.d.ts +0 -50
- package/dist/journal-maintenance.d.ts.map +0 -1
- package/dist/journal-maintenance.js +0 -162
- package/dist/journal-maintenance.js.map +0 -1
- package/dist/journal-manager-journal.d.ts +0 -18
- package/dist/journal-manager-journal.d.ts.map +0 -1
- package/dist/journal-manager-journal.js +0 -25
- package/dist/journal-manager-journal.js.map +0 -1
- package/dist/journal-manager-lifecycle.d.ts +0 -11
- package/dist/journal-manager-lifecycle.d.ts.map +0 -1
- package/dist/journal-manager-lifecycle.js +0 -2
- package/dist/journal-manager-lifecycle.js.map +0 -1
- package/dist/journal-manager.d.ts +0 -99
- package/dist/journal-manager.d.ts.map +0 -1
- package/dist/journal-manager.js +0 -559
- package/dist/journal-manager.js.map +0 -1
- package/dist/journal-prepared-operation.d.ts +0 -53
- package/dist/journal-prepared-operation.d.ts.map +0 -1
- package/dist/journal-prepared-operation.js +0 -158
- package/dist/journal-prepared-operation.js.map +0 -1
- package/dist/journal-projection-slot.d.ts +0 -28
- package/dist/journal-projection-slot.d.ts.map +0 -1
- package/dist/journal-projection-slot.js +0 -71
- package/dist/journal-projection-slot.js.map +0 -1
- package/dist/journal-projection.d.ts +0 -13
- package/dist/journal-projection.d.ts.map +0 -1
- package/dist/journal-projection.js +0 -2
- package/dist/journal-projection.js.map +0 -1
- package/dist/partition-accounts.d.ts +0 -27
- package/dist/partition-accounts.d.ts.map +0 -1
- package/dist/partition-accounts.js +0 -21
- package/dist/partition-accounts.js.map +0 -1
- package/dist/project-partition-preparation.d.ts +0 -87
- package/dist/project-partition-preparation.d.ts.map +0 -1
- package/dist/project-partition-preparation.js +0 -273
- package/dist/project-partition-preparation.js.map +0 -1
- package/dist/project-partitions.d.ts +0 -214
- package/dist/project-partitions.d.ts.map +0 -1
- package/dist/project-partitions.js +0 -486
- package/dist/project-partitions.js.map +0 -1
- package/dist/project-remove.d.ts +0 -11
- package/dist/project-remove.d.ts.map +0 -1
- package/dist/project-remove.js +0 -65
- package/dist/project-remove.js.map +0 -1
- package/dist/project-thread-listing.d.ts +0 -14
- package/dist/project-thread-listing.d.ts.map +0 -1
- package/dist/project-thread-listing.js +0 -37
- package/dist/project-thread-listing.js.map +0 -1
- package/dist/quota-projection.d.ts +0 -11
- package/dist/quota-projection.d.ts.map +0 -1
- package/dist/quota-projection.js +0 -10
- package/dist/quota-projection.js.map +0 -1
- package/dist/resource-store.d.ts +0 -39
- package/dist/resource-store.d.ts.map +0 -1
- package/dist/resource-store.js +0 -464
- package/dist/resource-store.js.map +0 -1
- package/dist/run-event-terminal-index.d.ts +0 -13
- package/dist/run-event-terminal-index.d.ts.map +0 -1
- package/dist/run-event-terminal-index.js +0 -38
- package/dist/run-event-terminal-index.js.map +0 -1
- package/dist/run-events.d.ts +0 -17
- package/dist/run-events.d.ts.map +0 -1
- package/dist/run-events.js +0 -31
- package/dist/run-events.js.map +0 -1
- package/dist/thread-head-ping.d.ts +0 -35
- package/dist/thread-head-ping.d.ts.map +0 -1
- package/dist/thread-head-ping.js +0 -67
- 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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"}
|