@schema-weaver/pg-connector 0.0.0-stage → 2.0.0
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/CHANGELOG.md +21 -0
- package/LICENSE +21 -0
- package/README.md +457 -2
- package/dist/cjs/audit/chain.d.ts +365 -0
- package/dist/cjs/audit/chain.d.ts.map +1 -0
- package/dist/cjs/audit/chain.js +959 -0
- package/dist/cjs/audit/chain.js.map +1 -0
- package/dist/cjs/audit/cloud-client.d.ts +142 -0
- package/dist/cjs/audit/cloud-client.d.ts.map +1 -0
- package/dist/cjs/audit/cloud-client.js +364 -0
- package/dist/cjs/audit/cloud-client.js.map +1 -0
- package/dist/cjs/audit/cloud-writer.d.ts +57 -0
- package/dist/cjs/audit/cloud-writer.d.ts.map +1 -0
- package/dist/cjs/audit/cloud-writer.js +95 -0
- package/dist/cjs/audit/cloud-writer.js.map +1 -0
- package/dist/cjs/audit/context.d.ts +51 -0
- package/dist/cjs/audit/context.d.ts.map +1 -0
- package/dist/cjs/audit/context.js +75 -0
- package/dist/cjs/audit/context.js.map +1 -0
- package/dist/cjs/audit/files.d.ts +111 -0
- package/dist/cjs/audit/files.d.ts.map +1 -0
- package/dist/cjs/audit/files.js +406 -0
- package/dist/cjs/audit/files.js.map +1 -0
- package/dist/cjs/audit/index.d.ts +9 -0
- package/dist/cjs/audit/index.d.ts.map +1 -0
- package/dist/cjs/audit/index.js +68 -0
- package/dist/cjs/audit/index.js.map +1 -0
- package/dist/cjs/audit/local-writer.d.ts +255 -0
- package/dist/cjs/audit/local-writer.d.ts.map +1 -0
- package/dist/cjs/audit/local-writer.js +829 -0
- package/dist/cjs/audit/local-writer.js.map +1 -0
- package/dist/cjs/audit/redact.d.ts +151 -0
- package/dist/cjs/audit/redact.d.ts.map +1 -0
- package/dist/cjs/audit/redact.js +549 -0
- package/dist/cjs/audit/redact.js.map +1 -0
- package/dist/cjs/audit/sanitize.d.ts +78 -0
- package/dist/cjs/audit/sanitize.d.ts.map +1 -0
- package/dist/cjs/audit/sanitize.js +315 -0
- package/dist/cjs/audit/sanitize.js.map +1 -0
- package/dist/cjs/audit/sink.d.ts +278 -0
- package/dist/cjs/audit/sink.d.ts.map +1 -0
- package/dist/cjs/audit/sink.js +819 -0
- package/dist/cjs/audit/sink.js.map +1 -0
- package/dist/cjs/audit/types.d.ts +226 -0
- package/dist/cjs/audit/types.d.ts.map +1 -0
- package/dist/cjs/audit/types.js +3 -0
- package/dist/cjs/audit/types.js.map +1 -0
- package/dist/cjs/audit/verify-cache.d.ts +127 -0
- package/dist/cjs/audit/verify-cache.d.ts.map +1 -0
- package/dist/cjs/audit/verify-cache.js +668 -0
- package/dist/cjs/audit/verify-cache.js.map +1 -0
- package/dist/cjs/channels/agent-session.d.ts +228 -0
- package/dist/cjs/channels/agent-session.d.ts.map +1 -0
- package/dist/cjs/channels/agent-session.js +604 -0
- package/dist/cjs/channels/agent-session.js.map +1 -0
- package/dist/cjs/channels/data-channel.d.ts +181 -0
- package/dist/cjs/channels/data-channel.d.ts.map +1 -0
- package/dist/cjs/channels/data-channel.js +607 -0
- package/dist/cjs/channels/data-channel.js.map +1 -0
- package/dist/cjs/channels/reconnect.d.ts +142 -0
- package/dist/cjs/channels/reconnect.d.ts.map +1 -0
- package/dist/cjs/channels/reconnect.js +247 -0
- package/dist/cjs/channels/reconnect.js.map +1 -0
- package/dist/cjs/channels/types.d.ts +112 -0
- package/dist/cjs/channels/types.d.ts.map +1 -0
- package/dist/cjs/channels/types.js +3 -0
- package/dist/cjs/channels/types.js.map +1 -0
- package/dist/cjs/channels/wake-channel.d.ts +232 -0
- package/dist/cjs/channels/wake-channel.d.ts.map +1 -0
- package/dist/cjs/channels/wake-channel.js +752 -0
- package/dist/cjs/channels/wake-channel.js.map +1 -0
- package/dist/cjs/cli/banner.d.ts +2 -0
- package/dist/cjs/cli/banner.d.ts.map +1 -0
- package/dist/cjs/cli/banner.js +150 -0
- package/dist/cjs/cli/banner.js.map +1 -0
- package/dist/cjs/cli/commands/agent.d.ts +30 -0
- package/dist/cjs/cli/commands/agent.d.ts.map +1 -0
- package/dist/cjs/cli/commands/agent.js +214 -0
- package/dist/cjs/cli/commands/agent.js.map +1 -0
- package/dist/cjs/cli/commands/audit-verify.d.ts +19 -0
- package/dist/cjs/cli/commands/audit-verify.d.ts.map +1 -0
- package/dist/cjs/cli/commands/audit-verify.js +382 -0
- package/dist/cjs/cli/commands/audit-verify.js.map +1 -0
- package/dist/cjs/cli/commands/clean.d.ts +23 -0
- package/dist/cjs/cli/commands/clean.d.ts.map +1 -0
- package/dist/cjs/cli/commands/clean.js +272 -0
- package/dist/cjs/cli/commands/clean.js.map +1 -0
- package/dist/cjs/cli/commands/config-show.d.ts +2 -0
- package/dist/cjs/cli/commands/config-show.d.ts.map +1 -0
- package/dist/cjs/cli/commands/config-show.js +10 -0
- package/dist/cjs/cli/commands/config-show.js.map +1 -0
- package/dist/cjs/cli/commands/config.d.ts +6 -0
- package/dist/cjs/cli/commands/config.d.ts.map +1 -0
- package/dist/cjs/cli/commands/config.js +266 -0
- package/dist/cjs/cli/commands/config.js.map +1 -0
- package/dist/cjs/cli/commands/db-add.d.ts +16 -0
- package/dist/cjs/cli/commands/db-add.d.ts.map +1 -0
- package/dist/cjs/cli/commands/db-add.js +613 -0
- package/dist/cjs/cli/commands/db-add.js.map +1 -0
- package/dist/cjs/cli/commands/db-edit.d.ts +2 -0
- package/dist/cjs/cli/commands/db-edit.d.ts.map +1 -0
- package/dist/cjs/cli/commands/db-edit.js +388 -0
- package/dist/cjs/cli/commands/db-edit.js.map +1 -0
- package/dist/cjs/cli/commands/db-logs.d.ts +3 -0
- package/dist/cjs/cli/commands/db-logs.d.ts.map +1 -0
- package/dist/cjs/cli/commands/db-logs.js +67 -0
- package/dist/cjs/cli/commands/db-logs.js.map +1 -0
- package/dist/cjs/cli/commands/db-ls.d.ts +2 -0
- package/dist/cjs/cli/commands/db-ls.d.ts.map +1 -0
- package/dist/cjs/cli/commands/db-ls.js +118 -0
- package/dist/cjs/cli/commands/db-ls.js.map +1 -0
- package/dist/cjs/cli/commands/db-query.d.ts +121 -0
- package/dist/cjs/cli/commands/db-query.d.ts.map +1 -0
- package/dist/cjs/cli/commands/db-query.js +802 -0
- package/dist/cjs/cli/commands/db-query.js.map +1 -0
- package/dist/cjs/cli/commands/db-remove.d.ts +2 -0
- package/dist/cjs/cli/commands/db-remove.d.ts.map +1 -0
- package/dist/cjs/cli/commands/db-remove.js +51 -0
- package/dist/cjs/cli/commands/db-remove.js.map +1 -0
- package/dist/cjs/cli/commands/db-show.d.ts +2 -0
- package/dist/cjs/cli/commands/db-show.d.ts.map +1 -0
- package/dist/cjs/cli/commands/db-show.js +134 -0
- package/dist/cjs/cli/commands/db-show.js.map +1 -0
- package/dist/cjs/cli/commands/db-test.d.ts +3 -0
- package/dist/cjs/cli/commands/db-test.d.ts.map +1 -0
- package/dist/cjs/cli/commands/db-test.js +311 -0
- package/dist/cjs/cli/commands/db-test.js.map +1 -0
- package/dist/cjs/cli/commands/db.d.ts +11 -0
- package/dist/cjs/cli/commands/db.d.ts.map +1 -0
- package/dist/cjs/cli/commands/db.js +90 -0
- package/dist/cjs/cli/commands/db.js.map +1 -0
- package/dist/cjs/cli/commands/debug.d.ts +2 -0
- package/dist/cjs/cli/commands/debug.d.ts.map +1 -0
- package/dist/cjs/cli/commands/debug.js +241 -0
- package/dist/cjs/cli/commands/debug.js.map +1 -0
- package/dist/cjs/cli/commands/doctor.d.ts +5 -0
- package/dist/cjs/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cjs/cli/commands/doctor.js +117 -0
- package/dist/cjs/cli/commands/doctor.js.map +1 -0
- package/dist/cjs/cli/commands/index.d.ts +10 -0
- package/dist/cjs/cli/commands/index.d.ts.map +1 -0
- package/dist/cjs/cli/commands/index.js +30 -0
- package/dist/cjs/cli/commands/index.js.map +1 -0
- package/dist/cjs/cli/commands/init.d.ts +2 -0
- package/dist/cjs/cli/commands/init.d.ts.map +1 -0
- package/dist/cjs/cli/commands/init.js +199 -0
- package/dist/cjs/cli/commands/init.js.map +1 -0
- package/dist/cjs/cli/commands/link.d.ts +5 -0
- package/dist/cjs/cli/commands/link.d.ts.map +1 -0
- package/dist/cjs/cli/commands/link.js +44 -0
- package/dist/cjs/cli/commands/link.js.map +1 -0
- package/dist/cjs/cli/commands/logs.d.ts +17 -0
- package/dist/cjs/cli/commands/logs.d.ts.map +1 -0
- package/dist/cjs/cli/commands/logs.js +314 -0
- package/dist/cjs/cli/commands/logs.js.map +1 -0
- package/dist/cjs/cli/commands/project-show.d.ts +2 -0
- package/dist/cjs/cli/commands/project-show.d.ts.map +1 -0
- package/dist/cjs/cli/commands/project-show.js +105 -0
- package/dist/cjs/cli/commands/project-show.js.map +1 -0
- package/dist/cjs/cli/commands/project.d.ts +3 -0
- package/dist/cjs/cli/commands/project.d.ts.map +1 -0
- package/dist/cjs/cli/commands/project.js +64 -0
- package/dist/cjs/cli/commands/project.js.map +1 -0
- package/dist/cjs/cli/commands/service.d.ts +123 -0
- package/dist/cjs/cli/commands/service.d.ts.map +1 -0
- package/dist/cjs/cli/commands/service.js +554 -0
- package/dist/cjs/cli/commands/service.js.map +1 -0
- package/dist/cjs/cli/commands/start.d.ts +6 -0
- package/dist/cjs/cli/commands/start.d.ts.map +1 -0
- package/dist/cjs/cli/commands/start.js +308 -0
- package/dist/cjs/cli/commands/start.js.map +1 -0
- package/dist/cjs/cli/commands/status.d.ts +2 -0
- package/dist/cjs/cli/commands/status.d.ts.map +1 -0
- package/dist/cjs/cli/commands/status.js +225 -0
- package/dist/cjs/cli/commands/status.js.map +1 -0
- package/dist/cjs/cli/commands/stop.d.ts +6 -0
- package/dist/cjs/cli/commands/stop.d.ts.map +1 -0
- package/dist/cjs/cli/commands/stop.js +99 -0
- package/dist/cjs/cli/commands/stop.js.map +1 -0
- package/dist/cjs/cli/daemon/error-tracker.d.ts +119 -0
- package/dist/cjs/cli/daemon/error-tracker.d.ts.map +1 -0
- package/dist/cjs/cli/daemon/error-tracker.js +500 -0
- package/dist/cjs/cli/daemon/error-tracker.js.map +1 -0
- package/dist/cjs/cli/daemon/fault-shutdown.d.ts +144 -0
- package/dist/cjs/cli/daemon/fault-shutdown.d.ts.map +1 -0
- package/dist/cjs/cli/daemon/fault-shutdown.js +312 -0
- package/dist/cjs/cli/daemon/fault-shutdown.js.map +1 -0
- package/dist/cjs/cli/daemon/index.d.ts +12 -0
- package/dist/cjs/cli/daemon/index.d.ts.map +1 -0
- package/dist/cjs/cli/daemon/index.js +23 -0
- package/dist/cjs/cli/daemon/index.js.map +1 -0
- package/dist/cjs/cli/daemon/pid-file.d.ts +13 -0
- package/dist/cjs/cli/daemon/pid-file.d.ts.map +1 -0
- package/dist/cjs/cli/daemon/pid-file.js +90 -0
- package/dist/cjs/cli/daemon/pid-file.js.map +1 -0
- package/dist/cjs/cli/daemon/readiness.d.ts +30 -0
- package/dist/cjs/cli/daemon/readiness.d.ts.map +1 -0
- package/dist/cjs/cli/daemon/readiness.js +74 -0
- package/dist/cjs/cli/daemon/readiness.js.map +1 -0
- package/dist/cjs/cli/daemon/runtime.d.ts +366 -0
- package/dist/cjs/cli/daemon/runtime.d.ts.map +1 -0
- package/dist/cjs/cli/daemon/runtime.js +1343 -0
- package/dist/cjs/cli/daemon/runtime.js.map +1 -0
- package/dist/cjs/cli/daemon/shutdown.d.ts +7 -0
- package/dist/cjs/cli/daemon/shutdown.d.ts.map +1 -0
- package/dist/cjs/cli/daemon/shutdown.js +66 -0
- package/dist/cjs/cli/daemon/shutdown.js.map +1 -0
- package/dist/cjs/cli/daemon/signal-handlers.d.ts +3 -0
- package/dist/cjs/cli/daemon/signal-handlers.d.ts.map +1 -0
- package/dist/cjs/cli/daemon/signal-handlers.js +27 -0
- package/dist/cjs/cli/daemon/signal-handlers.js.map +1 -0
- package/dist/cjs/cli/daemon/state.d.ts +157 -0
- package/dist/cjs/cli/daemon/state.d.ts.map +1 -0
- package/dist/cjs/cli/daemon/state.js +397 -0
- package/dist/cjs/cli/daemon/state.js.map +1 -0
- package/dist/cjs/cli/daemon/status-file.d.ts +139 -0
- package/dist/cjs/cli/daemon/status-file.d.ts.map +1 -0
- package/dist/cjs/cli/daemon/status-file.js +88 -0
- package/dist/cjs/cli/daemon/status-file.js.map +1 -0
- package/dist/cjs/cli/doctor/checks.d.ts +133 -0
- package/dist/cjs/cli/doctor/checks.d.ts.map +1 -0
- package/dist/cjs/cli/doctor/checks.js +677 -0
- package/dist/cjs/cli/doctor/checks.js.map +1 -0
- package/dist/cjs/cli/doctor/fixes.d.ts +9 -0
- package/dist/cjs/cli/doctor/fixes.d.ts.map +1 -0
- package/dist/cjs/cli/doctor/fixes.js +199 -0
- package/dist/cjs/cli/doctor/fixes.js.map +1 -0
- package/dist/cjs/cli/doctor/index.d.ts +7 -0
- package/dist/cjs/cli/doctor/index.d.ts.map +1 -0
- package/dist/cjs/cli/doctor/index.js +27 -0
- package/dist/cjs/cli/doctor/index.js.map +1 -0
- package/dist/cjs/cli/index.d.ts +3 -0
- package/dist/cjs/cli/index.d.ts.map +1 -0
- package/dist/cjs/cli/index.js +336 -0
- package/dist/cjs/cli/index.js.map +1 -0
- package/dist/cjs/cli/interactive.d.ts +8 -0
- package/dist/cjs/cli/interactive.d.ts.map +1 -0
- package/dist/cjs/cli/interactive.js +670 -0
- package/dist/cjs/cli/interactive.js.map +1 -0
- package/dist/cjs/cli/logs/format.d.ts +13 -0
- package/dist/cjs/cli/logs/format.d.ts.map +1 -0
- package/dist/cjs/cli/logs/format.js +178 -0
- package/dist/cjs/cli/logs/format.js.map +1 -0
- package/dist/cjs/cli/logs/index.d.ts +3 -0
- package/dist/cjs/cli/logs/index.d.ts.map +1 -0
- package/dist/cjs/cli/logs/index.js +13 -0
- package/dist/cjs/cli/logs/index.js.map +1 -0
- package/dist/cjs/cli/logs/viewer.d.ts +41 -0
- package/dist/cjs/cli/logs/viewer.d.ts.map +1 -0
- package/dist/cjs/cli/logs/viewer.js +417 -0
- package/dist/cjs/cli/logs/viewer.js.map +1 -0
- package/dist/cjs/cli/ops/operation-logger.d.ts +63 -0
- package/dist/cjs/cli/ops/operation-logger.d.ts.map +1 -0
- package/dist/cjs/cli/ops/operation-logger.js +183 -0
- package/dist/cjs/cli/ops/operation-logger.js.map +1 -0
- package/dist/cjs/cli/palette.d.ts +11 -0
- package/dist/cjs/cli/palette.d.ts.map +1 -0
- package/dist/cjs/cli/palette.js +243 -0
- package/dist/cjs/cli/palette.js.map +1 -0
- package/dist/cjs/cli/prompt.d.ts +186 -0
- package/dist/cjs/cli/prompt.d.ts.map +1 -0
- package/dist/cjs/cli/prompt.js +541 -0
- package/dist/cjs/cli/prompt.js.map +1 -0
- package/dist/cjs/cli/ui/box.d.ts +21 -0
- package/dist/cjs/cli/ui/box.d.ts.map +1 -0
- package/dist/cjs/cli/ui/box.js +72 -0
- package/dist/cjs/cli/ui/box.js.map +1 -0
- package/dist/cjs/cli/ui/clipboard.d.ts +6 -0
- package/dist/cjs/cli/ui/clipboard.d.ts.map +1 -0
- package/dist/cjs/cli/ui/clipboard.js +78 -0
- package/dist/cjs/cli/ui/clipboard.js.map +1 -0
- package/dist/cjs/cli/ui/colors.d.ts +57 -0
- package/dist/cjs/cli/ui/colors.d.ts.map +1 -0
- package/dist/cjs/cli/ui/colors.js +151 -0
- package/dist/cjs/cli/ui/colors.js.map +1 -0
- package/dist/cjs/cli/ui/index.d.ts +9 -0
- package/dist/cjs/cli/ui/index.d.ts.map +1 -0
- package/dist/cjs/cli/ui/index.js +55 -0
- package/dist/cjs/cli/ui/index.js.map +1 -0
- package/dist/cjs/cli/ui/spinner.d.ts +12 -0
- package/dist/cjs/cli/ui/spinner.d.ts.map +1 -0
- package/dist/cjs/cli/ui/spinner.js +82 -0
- package/dist/cjs/cli/ui/spinner.js.map +1 -0
- package/dist/cjs/cli/ui/symbols.d.ts +47 -0
- package/dist/cjs/cli/ui/symbols.d.ts.map +1 -0
- package/dist/cjs/cli/ui/symbols.js +112 -0
- package/dist/cjs/cli/ui/symbols.js.map +1 -0
- package/dist/cjs/cli/ui/table.d.ts +23 -0
- package/dist/cjs/cli/ui/table.d.ts.map +1 -0
- package/dist/cjs/cli/ui/table.js +160 -0
- package/dist/cjs/cli/ui/table.js.map +1 -0
- package/dist/cjs/cli/ui/terminal.d.ts +7 -0
- package/dist/cjs/cli/ui/terminal.d.ts.map +1 -0
- package/dist/cjs/cli/ui/terminal.js +40 -0
- package/dist/cjs/cli/ui/terminal.js.map +1 -0
- package/dist/cjs/config/atomic-write.d.ts +69 -0
- package/dist/cjs/config/atomic-write.d.ts.map +1 -0
- package/dist/cjs/config/atomic-write.js +289 -0
- package/dist/cjs/config/atomic-write.js.map +1 -0
- package/dist/cjs/config/db-config.d.ts +134 -0
- package/dist/cjs/config/db-config.d.ts.map +1 -0
- package/dist/cjs/config/db-config.js +594 -0
- package/dist/cjs/config/db-config.js.map +1 -0
- package/dist/cjs/config/machine-config.d.ts +85 -0
- package/dist/cjs/config/machine-config.d.ts.map +1 -0
- package/dist/cjs/config/machine-config.js +232 -0
- package/dist/cjs/config/machine-config.js.map +1 -0
- package/dist/cjs/config/paths.d.ts +64 -0
- package/dist/cjs/config/paths.d.ts.map +1 -0
- package/dist/cjs/config/paths.js +155 -0
- package/dist/cjs/config/paths.js.map +1 -0
- package/dist/cjs/config/schema.d.ts +72 -0
- package/dist/cjs/config/schema.d.ts.map +1 -0
- package/dist/cjs/config/schema.js +197 -0
- package/dist/cjs/config/schema.js.map +1 -0
- package/dist/cjs/config/token.d.ts +63 -0
- package/dist/cjs/config/token.d.ts.map +1 -0
- package/dist/cjs/config/token.js +146 -0
- package/dist/cjs/config/token.js.map +1 -0
- package/dist/cjs/execution/canceller.d.ts +41 -0
- package/dist/cjs/execution/canceller.d.ts.map +1 -0
- package/dist/cjs/execution/canceller.js +209 -0
- package/dist/cjs/execution/canceller.js.map +1 -0
- package/dist/cjs/execution/database-lookup.d.ts +56 -0
- package/dist/cjs/execution/database-lookup.d.ts.map +1 -0
- package/dist/cjs/execution/database-lookup.js +43 -0
- package/dist/cjs/execution/database-lookup.js.map +1 -0
- package/dist/cjs/execution/dispatcher.d.ts +181 -0
- package/dist/cjs/execution/dispatcher.d.ts.map +1 -0
- package/dist/cjs/execution/dispatcher.js +1296 -0
- package/dist/cjs/execution/dispatcher.js.map +1 -0
- package/dist/cjs/execution/function-effects.d.ts +209 -0
- package/dist/cjs/execution/function-effects.d.ts.map +1 -0
- package/dist/cjs/execution/function-effects.js +596 -0
- package/dist/cjs/execution/function-effects.js.map +1 -0
- package/dist/cjs/execution/introspection.d.ts +76 -0
- package/dist/cjs/execution/introspection.d.ts.map +1 -0
- package/dist/cjs/execution/introspection.js +448 -0
- package/dist/cjs/execution/introspection.js.map +1 -0
- package/dist/cjs/execution/migration-runner.d.ts +128 -0
- package/dist/cjs/execution/migration-runner.d.ts.map +1 -0
- package/dist/cjs/execution/migration-runner.js +798 -0
- package/dist/cjs/execution/migration-runner.js.map +1 -0
- package/dist/cjs/execution/non-tx-detector.d.ts +23 -0
- package/dist/cjs/execution/non-tx-detector.d.ts.map +1 -0
- package/dist/cjs/execution/non-tx-detector.js +218 -0
- package/dist/cjs/execution/non-tx-detector.js.map +1 -0
- package/dist/cjs/execution/pool.d.ts +229 -0
- package/dist/cjs/execution/pool.d.ts.map +1 -0
- package/dist/cjs/execution/pool.js +738 -0
- package/dist/cjs/execution/pool.js.map +1 -0
- package/dist/cjs/execution/query-runner.d.ts +88 -0
- package/dist/cjs/execution/query-runner.d.ts.map +1 -0
- package/dist/cjs/execution/query-runner.js +751 -0
- package/dist/cjs/execution/query-runner.js.map +1 -0
- package/dist/cjs/execution/rate-limiter.d.ts +120 -0
- package/dist/cjs/execution/rate-limiter.d.ts.map +1 -0
- package/dist/cjs/execution/rate-limiter.js +273 -0
- package/dist/cjs/execution/rate-limiter.js.map +1 -0
- package/dist/cjs/execution/search-path.d.ts +161 -0
- package/dist/cjs/execution/search-path.d.ts.map +1 -0
- package/dist/cjs/execution/search-path.js +279 -0
- package/dist/cjs/execution/search-path.js.map +1 -0
- package/dist/cjs/execution/sql-parser.d.ts +195 -0
- package/dist/cjs/execution/sql-parser.d.ts.map +1 -0
- package/dist/cjs/execution/sql-parser.js +704 -0
- package/dist/cjs/execution/sql-parser.js.map +1 -0
- package/dist/cjs/execution/statement-classifier.d.ts +103 -0
- package/dist/cjs/execution/statement-classifier.d.ts.map +1 -0
- package/dist/cjs/execution/statement-classifier.js +535 -0
- package/dist/cjs/execution/statement-classifier.js.map +1 -0
- package/dist/cjs/execution/types.d.ts +189 -0
- package/dist/cjs/execution/types.d.ts.map +1 -0
- package/dist/cjs/execution/types.js +28 -0
- package/dist/cjs/execution/types.js.map +1 -0
- package/dist/cjs/index.d.ts +34 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +98 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/permissions/auto-upgrade.d.ts +40 -0
- package/dist/cjs/permissions/auto-upgrade.d.ts.map +1 -0
- package/dist/cjs/permissions/auto-upgrade.js +168 -0
- package/dist/cjs/permissions/auto-upgrade.js.map +1 -0
- package/dist/cjs/permissions/checker.d.ts +53 -0
- package/dist/cjs/permissions/checker.d.ts.map +1 -0
- package/dist/cjs/permissions/checker.js +326 -0
- package/dist/cjs/permissions/checker.js.map +1 -0
- package/dist/cjs/permissions/manual-approval.d.ts +213 -0
- package/dist/cjs/permissions/manual-approval.d.ts.map +1 -0
- package/dist/cjs/permissions/manual-approval.js +541 -0
- package/dist/cjs/permissions/manual-approval.js.map +1 -0
- package/dist/cjs/permissions/plan-registry.d.ts +274 -0
- package/dist/cjs/permissions/plan-registry.d.ts.map +1 -0
- package/dist/cjs/permissions/plan-registry.js +454 -0
- package/dist/cjs/permissions/plan-registry.js.map +1 -0
- package/dist/cjs/permissions/role-policy.d.ts +217 -0
- package/dist/cjs/permissions/role-policy.d.ts.map +1 -0
- package/dist/cjs/permissions/role-policy.js +584 -0
- package/dist/cjs/permissions/role-policy.js.map +1 -0
- package/dist/cjs/permissions/types.d.ts +126 -0
- package/dist/cjs/permissions/types.d.ts.map +1 -0
- package/dist/cjs/permissions/types.js +3 -0
- package/dist/cjs/permissions/types.js.map +1 -0
- package/dist/cjs/protocol/constants.d.ts +72 -0
- package/dist/cjs/protocol/constants.d.ts.map +1 -0
- package/dist/cjs/protocol/constants.js +107 -0
- package/dist/cjs/protocol/constants.js.map +1 -0
- package/dist/cjs/protocol/envelope.d.ts +165 -0
- package/dist/cjs/protocol/envelope.d.ts.map +1 -0
- package/dist/cjs/protocol/envelope.js +309 -0
- package/dist/cjs/protocol/envelope.js.map +1 -0
- package/dist/cjs/protocol/errors.d.ts +33 -0
- package/dist/cjs/protocol/errors.d.ts.map +1 -0
- package/dist/cjs/protocol/errors.js +391 -0
- package/dist/cjs/protocol/errors.js.map +1 -0
- package/dist/cjs/protocol/messages.d.ts +327 -0
- package/dist/cjs/protocol/messages.d.ts.map +1 -0
- package/dist/cjs/protocol/messages.js +3 -0
- package/dist/cjs/protocol/messages.js.map +1 -0
- package/dist/cjs/protocol/serialize.d.ts +26 -0
- package/dist/cjs/protocol/serialize.d.ts.map +1 -0
- package/dist/cjs/protocol/serialize.js +71 -0
- package/dist/cjs/protocol/serialize.js.map +1 -0
- package/dist/cjs/protocol/validate.d.ts +135 -0
- package/dist/cjs/protocol/validate.d.ts.map +1 -0
- package/dist/cjs/protocol/validate.js +852 -0
- package/dist/cjs/protocol/validate.js.map +1 -0
- package/dist/esm/audit/chain.d.ts +365 -0
- package/dist/esm/audit/chain.d.ts.map +1 -0
- package/dist/esm/audit/chain.js +895 -0
- package/dist/esm/audit/chain.js.map +1 -0
- package/dist/esm/audit/cloud-client.d.ts +142 -0
- package/dist/esm/audit/cloud-client.d.ts.map +1 -0
- package/dist/esm/audit/cloud-client.js +326 -0
- package/dist/esm/audit/cloud-client.js.map +1 -0
- package/dist/esm/audit/cloud-writer.d.ts +57 -0
- package/dist/esm/audit/cloud-writer.d.ts.map +1 -0
- package/dist/esm/audit/cloud-writer.js +91 -0
- package/dist/esm/audit/cloud-writer.js.map +1 -0
- package/dist/esm/audit/context.d.ts +51 -0
- package/dist/esm/audit/context.d.ts.map +1 -0
- package/dist/esm/audit/context.js +69 -0
- package/dist/esm/audit/context.js.map +1 -0
- package/dist/esm/audit/files.d.ts +111 -0
- package/dist/esm/audit/files.d.ts.map +1 -0
- package/dist/esm/audit/files.js +361 -0
- package/dist/esm/audit/files.js.map +1 -0
- package/dist/esm/audit/index.d.ts +9 -0
- package/dist/esm/audit/index.d.ts.map +1 -0
- package/dist/esm/audit/index.js +8 -0
- package/dist/esm/audit/index.js.map +1 -0
- package/dist/esm/audit/local-writer.d.ts +255 -0
- package/dist/esm/audit/local-writer.d.ts.map +1 -0
- package/dist/esm/audit/local-writer.js +785 -0
- package/dist/esm/audit/local-writer.js.map +1 -0
- package/dist/esm/audit/redact.d.ts +151 -0
- package/dist/esm/audit/redact.d.ts.map +1 -0
- package/dist/esm/audit/redact.js +506 -0
- package/dist/esm/audit/redact.js.map +1 -0
- package/dist/esm/audit/sanitize.d.ts +78 -0
- package/dist/esm/audit/sanitize.d.ts.map +1 -0
- package/dist/esm/audit/sanitize.js +307 -0
- package/dist/esm/audit/sanitize.js.map +1 -0
- package/dist/esm/audit/sink.d.ts +278 -0
- package/dist/esm/audit/sink.d.ts.map +1 -0
- package/dist/esm/audit/sink.js +782 -0
- package/dist/esm/audit/sink.js.map +1 -0
- package/dist/esm/audit/types.d.ts +226 -0
- package/dist/esm/audit/types.d.ts.map +1 -0
- package/dist/esm/audit/types.js +2 -0
- package/dist/esm/audit/types.js.map +1 -0
- package/dist/esm/audit/verify-cache.d.ts +127 -0
- package/dist/esm/audit/verify-cache.d.ts.map +1 -0
- package/dist/esm/audit/verify-cache.js +628 -0
- package/dist/esm/audit/verify-cache.js.map +1 -0
- package/dist/esm/channels/agent-session.d.ts +228 -0
- package/dist/esm/channels/agent-session.d.ts.map +1 -0
- package/dist/esm/channels/agent-session.js +566 -0
- package/dist/esm/channels/agent-session.js.map +1 -0
- package/dist/esm/channels/data-channel.d.ts +181 -0
- package/dist/esm/channels/data-channel.d.ts.map +1 -0
- package/dist/esm/channels/data-channel.js +567 -0
- package/dist/esm/channels/data-channel.js.map +1 -0
- package/dist/esm/channels/reconnect.d.ts +142 -0
- package/dist/esm/channels/reconnect.d.ts.map +1 -0
- package/dist/esm/channels/reconnect.js +234 -0
- package/dist/esm/channels/reconnect.js.map +1 -0
- package/dist/esm/channels/types.d.ts +112 -0
- package/dist/esm/channels/types.d.ts.map +1 -0
- package/dist/esm/channels/types.js +2 -0
- package/dist/esm/channels/types.js.map +1 -0
- package/dist/esm/channels/wake-channel.d.ts +232 -0
- package/dist/esm/channels/wake-channel.d.ts.map +1 -0
- package/dist/esm/channels/wake-channel.js +715 -0
- package/dist/esm/channels/wake-channel.js.map +1 -0
- package/dist/esm/cli/banner.d.ts +2 -0
- package/dist/esm/cli/banner.d.ts.map +1 -0
- package/dist/esm/cli/banner.js +114 -0
- package/dist/esm/cli/banner.js.map +1 -0
- package/dist/esm/cli/commands/agent.d.ts +30 -0
- package/dist/esm/cli/commands/agent.d.ts.map +1 -0
- package/dist/esm/cli/commands/agent.js +204 -0
- package/dist/esm/cli/commands/agent.js.map +1 -0
- package/dist/esm/cli/commands/audit-verify.d.ts +19 -0
- package/dist/esm/cli/commands/audit-verify.d.ts.map +1 -0
- package/dist/esm/cli/commands/audit-verify.js +345 -0
- package/dist/esm/cli/commands/audit-verify.js.map +1 -0
- package/dist/esm/cli/commands/clean.d.ts +23 -0
- package/dist/esm/cli/commands/clean.d.ts.map +1 -0
- package/dist/esm/cli/commands/clean.js +235 -0
- package/dist/esm/cli/commands/clean.js.map +1 -0
- package/dist/esm/cli/commands/config-show.d.ts +2 -0
- package/dist/esm/cli/commands/config-show.d.ts.map +1 -0
- package/dist/esm/cli/commands/config-show.js +2 -0
- package/dist/esm/cli/commands/config-show.js.map +1 -0
- package/dist/esm/cli/commands/config.d.ts +6 -0
- package/dist/esm/cli/commands/config.d.ts.map +1 -0
- package/dist/esm/cli/commands/config.js +259 -0
- package/dist/esm/cli/commands/config.js.map +1 -0
- package/dist/esm/cli/commands/db-add.d.ts +16 -0
- package/dist/esm/cli/commands/db-add.d.ts.map +1 -0
- package/dist/esm/cli/commands/db-add.js +576 -0
- package/dist/esm/cli/commands/db-add.js.map +1 -0
- package/dist/esm/cli/commands/db-edit.d.ts +2 -0
- package/dist/esm/cli/commands/db-edit.d.ts.map +1 -0
- package/dist/esm/cli/commands/db-edit.js +352 -0
- package/dist/esm/cli/commands/db-edit.js.map +1 -0
- package/dist/esm/cli/commands/db-logs.d.ts +3 -0
- package/dist/esm/cli/commands/db-logs.d.ts.map +1 -0
- package/dist/esm/cli/commands/db-logs.js +64 -0
- package/dist/esm/cli/commands/db-logs.js.map +1 -0
- package/dist/esm/cli/commands/db-ls.d.ts +2 -0
- package/dist/esm/cli/commands/db-ls.d.ts.map +1 -0
- package/dist/esm/cli/commands/db-ls.js +115 -0
- package/dist/esm/cli/commands/db-ls.js.map +1 -0
- package/dist/esm/cli/commands/db-query.d.ts +121 -0
- package/dist/esm/cli/commands/db-query.d.ts.map +1 -0
- package/dist/esm/cli/commands/db-query.js +754 -0
- package/dist/esm/cli/commands/db-query.js.map +1 -0
- package/dist/esm/cli/commands/db-remove.d.ts +2 -0
- package/dist/esm/cli/commands/db-remove.d.ts.map +1 -0
- package/dist/esm/cli/commands/db-remove.js +48 -0
- package/dist/esm/cli/commands/db-remove.js.map +1 -0
- package/dist/esm/cli/commands/db-show.d.ts +2 -0
- package/dist/esm/cli/commands/db-show.d.ts.map +1 -0
- package/dist/esm/cli/commands/db-show.js +131 -0
- package/dist/esm/cli/commands/db-show.js.map +1 -0
- package/dist/esm/cli/commands/db-test.d.ts +3 -0
- package/dist/esm/cli/commands/db-test.d.ts.map +1 -0
- package/dist/esm/cli/commands/db-test.js +307 -0
- package/dist/esm/cli/commands/db-test.js.map +1 -0
- package/dist/esm/cli/commands/db.d.ts +11 -0
- package/dist/esm/cli/commands/db.d.ts.map +1 -0
- package/dist/esm/cli/commands/db.js +76 -0
- package/dist/esm/cli/commands/db.js.map +1 -0
- package/dist/esm/cli/commands/debug.d.ts +2 -0
- package/dist/esm/cli/commands/debug.d.ts.map +1 -0
- package/dist/esm/cli/commands/debug.js +205 -0
- package/dist/esm/cli/commands/debug.js.map +1 -0
- package/dist/esm/cli/commands/doctor.d.ts +5 -0
- package/dist/esm/cli/commands/doctor.d.ts.map +1 -0
- package/dist/esm/cli/commands/doctor.js +114 -0
- package/dist/esm/cli/commands/doctor.js.map +1 -0
- package/dist/esm/cli/commands/index.d.ts +10 -0
- package/dist/esm/cli/commands/index.d.ts.map +1 -0
- package/dist/esm/cli/commands/index.js +10 -0
- package/dist/esm/cli/commands/index.js.map +1 -0
- package/dist/esm/cli/commands/init.d.ts +2 -0
- package/dist/esm/cli/commands/init.d.ts.map +1 -0
- package/dist/esm/cli/commands/init.js +163 -0
- package/dist/esm/cli/commands/init.js.map +1 -0
- package/dist/esm/cli/commands/link.d.ts +5 -0
- package/dist/esm/cli/commands/link.d.ts.map +1 -0
- package/dist/esm/cli/commands/link.js +41 -0
- package/dist/esm/cli/commands/link.js.map +1 -0
- package/dist/esm/cli/commands/logs.d.ts +17 -0
- package/dist/esm/cli/commands/logs.d.ts.map +1 -0
- package/dist/esm/cli/commands/logs.js +278 -0
- package/dist/esm/cli/commands/logs.js.map +1 -0
- package/dist/esm/cli/commands/project-show.d.ts +2 -0
- package/dist/esm/cli/commands/project-show.d.ts.map +1 -0
- package/dist/esm/cli/commands/project-show.js +69 -0
- package/dist/esm/cli/commands/project-show.js.map +1 -0
- package/dist/esm/cli/commands/project.d.ts +3 -0
- package/dist/esm/cli/commands/project.d.ts.map +1 -0
- package/dist/esm/cli/commands/project.js +60 -0
- package/dist/esm/cli/commands/project.js.map +1 -0
- package/dist/esm/cli/commands/service.d.ts +123 -0
- package/dist/esm/cli/commands/service.d.ts.map +1 -0
- package/dist/esm/cli/commands/service.js +505 -0
- package/dist/esm/cli/commands/service.js.map +1 -0
- package/dist/esm/cli/commands/start.d.ts +6 -0
- package/dist/esm/cli/commands/start.d.ts.map +1 -0
- package/dist/esm/cli/commands/start.js +272 -0
- package/dist/esm/cli/commands/start.js.map +1 -0
- package/dist/esm/cli/commands/status.d.ts +2 -0
- package/dist/esm/cli/commands/status.d.ts.map +1 -0
- package/dist/esm/cli/commands/status.js +222 -0
- package/dist/esm/cli/commands/status.js.map +1 -0
- package/dist/esm/cli/commands/stop.d.ts +6 -0
- package/dist/esm/cli/commands/stop.d.ts.map +1 -0
- package/dist/esm/cli/commands/stop.js +96 -0
- package/dist/esm/cli/commands/stop.js.map +1 -0
- package/dist/esm/cli/daemon/error-tracker.d.ts +119 -0
- package/dist/esm/cli/daemon/error-tracker.d.ts.map +1 -0
- package/dist/esm/cli/daemon/error-tracker.js +451 -0
- package/dist/esm/cli/daemon/error-tracker.js.map +1 -0
- package/dist/esm/cli/daemon/fault-shutdown.d.ts +144 -0
- package/dist/esm/cli/daemon/fault-shutdown.d.ts.map +1 -0
- package/dist/esm/cli/daemon/fault-shutdown.js +273 -0
- package/dist/esm/cli/daemon/fault-shutdown.js.map +1 -0
- package/dist/esm/cli/daemon/index.d.ts +12 -0
- package/dist/esm/cli/daemon/index.d.ts.map +1 -0
- package/dist/esm/cli/daemon/index.js +7 -0
- package/dist/esm/cli/daemon/index.js.map +1 -0
- package/dist/esm/cli/daemon/pid-file.d.ts +13 -0
- package/dist/esm/cli/daemon/pid-file.d.ts.map +1 -0
- package/dist/esm/cli/daemon/pid-file.js +51 -0
- package/dist/esm/cli/daemon/pid-file.js.map +1 -0
- package/dist/esm/cli/daemon/readiness.d.ts +30 -0
- package/dist/esm/cli/daemon/readiness.d.ts.map +1 -0
- package/dist/esm/cli/daemon/readiness.js +70 -0
- package/dist/esm/cli/daemon/readiness.js.map +1 -0
- package/dist/esm/cli/daemon/runtime.d.ts +366 -0
- package/dist/esm/cli/daemon/runtime.d.ts.map +1 -0
- package/dist/esm/cli/daemon/runtime.js +1284 -0
- package/dist/esm/cli/daemon/runtime.js.map +1 -0
- package/dist/esm/cli/daemon/shutdown.d.ts +7 -0
- package/dist/esm/cli/daemon/shutdown.d.ts.map +1 -0
- package/dist/esm/cli/daemon/shutdown.js +63 -0
- package/dist/esm/cli/daemon/shutdown.js.map +1 -0
- package/dist/esm/cli/daemon/signal-handlers.d.ts +3 -0
- package/dist/esm/cli/daemon/signal-handlers.d.ts.map +1 -0
- package/dist/esm/cli/daemon/signal-handlers.js +24 -0
- package/dist/esm/cli/daemon/signal-handlers.js.map +1 -0
- package/dist/esm/cli/daemon/state.d.ts +157 -0
- package/dist/esm/cli/daemon/state.d.ts.map +1 -0
- package/dist/esm/cli/daemon/state.js +352 -0
- package/dist/esm/cli/daemon/state.js.map +1 -0
- package/dist/esm/cli/daemon/status-file.d.ts +139 -0
- package/dist/esm/cli/daemon/status-file.d.ts.map +1 -0
- package/dist/esm/cli/daemon/status-file.js +50 -0
- package/dist/esm/cli/daemon/status-file.js.map +1 -0
- package/dist/esm/cli/doctor/checks.d.ts +133 -0
- package/dist/esm/cli/doctor/checks.d.ts.map +1 -0
- package/dist/esm/cli/doctor/checks.js +624 -0
- package/dist/esm/cli/doctor/checks.js.map +1 -0
- package/dist/esm/cli/doctor/fixes.d.ts +9 -0
- package/dist/esm/cli/doctor/fixes.d.ts.map +1 -0
- package/dist/esm/cli/doctor/fixes.js +163 -0
- package/dist/esm/cli/doctor/fixes.js.map +1 -0
- package/dist/esm/cli/doctor/index.d.ts +7 -0
- package/dist/esm/cli/doctor/index.d.ts.map +1 -0
- package/dist/esm/cli/doctor/index.js +5 -0
- package/dist/esm/cli/doctor/index.js.map +1 -0
- package/dist/esm/cli/index.d.ts +3 -0
- package/dist/esm/cli/index.d.ts.map +1 -0
- package/dist/esm/cli/index.js +333 -0
- package/dist/esm/cli/index.js.map +1 -0
- package/dist/esm/cli/interactive.d.ts +8 -0
- package/dist/esm/cli/interactive.d.ts.map +1 -0
- package/dist/esm/cli/interactive.js +665 -0
- package/dist/esm/cli/interactive.js.map +1 -0
- package/dist/esm/cli/logs/format.d.ts +13 -0
- package/dist/esm/cli/logs/format.d.ts.map +1 -0
- package/dist/esm/cli/logs/format.js +169 -0
- package/dist/esm/cli/logs/format.js.map +1 -0
- package/dist/esm/cli/logs/index.d.ts +3 -0
- package/dist/esm/cli/logs/index.d.ts.map +1 -0
- package/dist/esm/cli/logs/index.js +3 -0
- package/dist/esm/cli/logs/index.js.map +1 -0
- package/dist/esm/cli/logs/viewer.d.ts +41 -0
- package/dist/esm/cli/logs/viewer.d.ts.map +1 -0
- package/dist/esm/cli/logs/viewer.js +412 -0
- package/dist/esm/cli/logs/viewer.js.map +1 -0
- package/dist/esm/cli/ops/operation-logger.d.ts +63 -0
- package/dist/esm/cli/ops/operation-logger.d.ts.map +1 -0
- package/dist/esm/cli/ops/operation-logger.js +142 -0
- package/dist/esm/cli/ops/operation-logger.js.map +1 -0
- package/dist/esm/cli/palette.d.ts +11 -0
- package/dist/esm/cli/palette.d.ts.map +1 -0
- package/dist/esm/cli/palette.js +240 -0
- package/dist/esm/cli/palette.js.map +1 -0
- package/dist/esm/cli/prompt.d.ts +186 -0
- package/dist/esm/cli/prompt.d.ts.map +1 -0
- package/dist/esm/cli/prompt.js +483 -0
- package/dist/esm/cli/prompt.js.map +1 -0
- package/dist/esm/cli/ui/box.d.ts +21 -0
- package/dist/esm/cli/ui/box.d.ts.map +1 -0
- package/dist/esm/cli/ui/box.js +60 -0
- package/dist/esm/cli/ui/box.js.map +1 -0
- package/dist/esm/cli/ui/clipboard.d.ts +6 -0
- package/dist/esm/cli/ui/clipboard.d.ts.map +1 -0
- package/dist/esm/cli/ui/clipboard.js +42 -0
- package/dist/esm/cli/ui/clipboard.js.map +1 -0
- package/dist/esm/cli/ui/colors.d.ts +57 -0
- package/dist/esm/cli/ui/colors.d.ts.map +1 -0
- package/dist/esm/cli/ui/colors.js +126 -0
- package/dist/esm/cli/ui/colors.js.map +1 -0
- package/dist/esm/cli/ui/index.d.ts +9 -0
- package/dist/esm/cli/ui/index.d.ts.map +1 -0
- package/dist/esm/cli/ui/index.js +7 -0
- package/dist/esm/cli/ui/index.js.map +1 -0
- package/dist/esm/cli/ui/spinner.d.ts +12 -0
- package/dist/esm/cli/ui/spinner.d.ts.map +1 -0
- package/dist/esm/cli/ui/spinner.js +78 -0
- package/dist/esm/cli/ui/spinner.js.map +1 -0
- package/dist/esm/cli/ui/symbols.d.ts +47 -0
- package/dist/esm/cli/ui/symbols.d.ts.map +1 -0
- package/dist/esm/cli/ui/symbols.js +109 -0
- package/dist/esm/cli/ui/symbols.js.map +1 -0
- package/dist/esm/cli/ui/table.d.ts +23 -0
- package/dist/esm/cli/ui/table.d.ts.map +1 -0
- package/dist/esm/cli/ui/table.js +156 -0
- package/dist/esm/cli/ui/table.js.map +1 -0
- package/dist/esm/cli/ui/terminal.d.ts +7 -0
- package/dist/esm/cli/ui/terminal.d.ts.map +1 -0
- package/dist/esm/cli/ui/terminal.js +32 -0
- package/dist/esm/cli/ui/terminal.js.map +1 -0
- package/dist/esm/config/atomic-write.d.ts +69 -0
- package/dist/esm/config/atomic-write.d.ts.map +1 -0
- package/dist/esm/config/atomic-write.js +246 -0
- package/dist/esm/config/atomic-write.js.map +1 -0
- package/dist/esm/config/db-config.d.ts +134 -0
- package/dist/esm/config/db-config.d.ts.map +1 -0
- package/dist/esm/config/db-config.js +542 -0
- package/dist/esm/config/db-config.js.map +1 -0
- package/dist/esm/config/machine-config.d.ts +85 -0
- package/dist/esm/config/machine-config.d.ts.map +1 -0
- package/dist/esm/config/machine-config.js +190 -0
- package/dist/esm/config/machine-config.js.map +1 -0
- package/dist/esm/config/paths.d.ts +64 -0
- package/dist/esm/config/paths.d.ts.map +1 -0
- package/dist/esm/config/paths.js +108 -0
- package/dist/esm/config/paths.js.map +1 -0
- package/dist/esm/config/schema.d.ts +72 -0
- package/dist/esm/config/schema.d.ts.map +1 -0
- package/dist/esm/config/schema.js +180 -0
- package/dist/esm/config/schema.js.map +1 -0
- package/dist/esm/config/token.d.ts +63 -0
- package/dist/esm/config/token.d.ts.map +1 -0
- package/dist/esm/config/token.js +104 -0
- package/dist/esm/config/token.js.map +1 -0
- package/dist/esm/execution/canceller.d.ts +41 -0
- package/dist/esm/execution/canceller.d.ts.map +1 -0
- package/dist/esm/execution/canceller.js +205 -0
- package/dist/esm/execution/canceller.js.map +1 -0
- package/dist/esm/execution/database-lookup.d.ts +56 -0
- package/dist/esm/execution/database-lookup.d.ts.map +1 -0
- package/dist/esm/execution/database-lookup.js +38 -0
- package/dist/esm/execution/database-lookup.js.map +1 -0
- package/dist/esm/execution/dispatcher.d.ts +181 -0
- package/dist/esm/execution/dispatcher.d.ts.map +1 -0
- package/dist/esm/execution/dispatcher.js +1258 -0
- package/dist/esm/execution/dispatcher.js.map +1 -0
- package/dist/esm/execution/function-effects.d.ts +209 -0
- package/dist/esm/execution/function-effects.d.ts.map +1 -0
- package/dist/esm/execution/function-effects.js +586 -0
- package/dist/esm/execution/function-effects.js.map +1 -0
- package/dist/esm/execution/introspection.d.ts +76 -0
- package/dist/esm/execution/introspection.d.ts.map +1 -0
- package/dist/esm/execution/introspection.js +442 -0
- package/dist/esm/execution/introspection.js.map +1 -0
- package/dist/esm/execution/migration-runner.d.ts +128 -0
- package/dist/esm/execution/migration-runner.d.ts.map +1 -0
- package/dist/esm/execution/migration-runner.js +754 -0
- package/dist/esm/execution/migration-runner.js.map +1 -0
- package/dist/esm/execution/non-tx-detector.d.ts +23 -0
- package/dist/esm/execution/non-tx-detector.d.ts.map +1 -0
- package/dist/esm/execution/non-tx-detector.js +215 -0
- package/dist/esm/execution/non-tx-detector.js.map +1 -0
- package/dist/esm/execution/pool.d.ts +229 -0
- package/dist/esm/execution/pool.d.ts.map +1 -0
- package/dist/esm/execution/pool.js +685 -0
- package/dist/esm/execution/pool.js.map +1 -0
- package/dist/esm/execution/query-runner.d.ts +88 -0
- package/dist/esm/execution/query-runner.d.ts.map +1 -0
- package/dist/esm/execution/query-runner.js +743 -0
- package/dist/esm/execution/query-runner.js.map +1 -0
- package/dist/esm/execution/rate-limiter.d.ts +120 -0
- package/dist/esm/execution/rate-limiter.d.ts.map +1 -0
- package/dist/esm/execution/rate-limiter.js +269 -0
- package/dist/esm/execution/rate-limiter.js.map +1 -0
- package/dist/esm/execution/search-path.d.ts +161 -0
- package/dist/esm/execution/search-path.d.ts.map +1 -0
- package/dist/esm/execution/search-path.js +270 -0
- package/dist/esm/execution/search-path.js.map +1 -0
- package/dist/esm/execution/sql-parser.d.ts +195 -0
- package/dist/esm/execution/sql-parser.d.ts.map +1 -0
- package/dist/esm/execution/sql-parser.js +683 -0
- package/dist/esm/execution/sql-parser.js.map +1 -0
- package/dist/esm/execution/statement-classifier.d.ts +103 -0
- package/dist/esm/execution/statement-classifier.d.ts.map +1 -0
- package/dist/esm/execution/statement-classifier.js +526 -0
- package/dist/esm/execution/statement-classifier.js.map +1 -0
- package/dist/esm/execution/types.d.ts +189 -0
- package/dist/esm/execution/types.d.ts.map +1 -0
- package/dist/esm/execution/types.js +22 -0
- package/dist/esm/execution/types.js.map +1 -0
- package/dist/esm/index.d.ts +34 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +38 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/permissions/auto-upgrade.d.ts +40 -0
- package/dist/esm/permissions/auto-upgrade.d.ts.map +1 -0
- package/dist/esm/permissions/auto-upgrade.js +164 -0
- package/dist/esm/permissions/auto-upgrade.js.map +1 -0
- package/dist/esm/permissions/checker.d.ts +53 -0
- package/dist/esm/permissions/checker.d.ts.map +1 -0
- package/dist/esm/permissions/checker.js +322 -0
- package/dist/esm/permissions/checker.js.map +1 -0
- package/dist/esm/permissions/manual-approval.d.ts +213 -0
- package/dist/esm/permissions/manual-approval.d.ts.map +1 -0
- package/dist/esm/permissions/manual-approval.js +503 -0
- package/dist/esm/permissions/manual-approval.js.map +1 -0
- package/dist/esm/permissions/plan-registry.d.ts +274 -0
- package/dist/esm/permissions/plan-registry.d.ts.map +1 -0
- package/dist/esm/permissions/plan-registry.js +450 -0
- package/dist/esm/permissions/plan-registry.js.map +1 -0
- package/dist/esm/permissions/role-policy.d.ts +217 -0
- package/dist/esm/permissions/role-policy.d.ts.map +1 -0
- package/dist/esm/permissions/role-policy.js +570 -0
- package/dist/esm/permissions/role-policy.js.map +1 -0
- package/dist/esm/permissions/types.d.ts +126 -0
- package/dist/esm/permissions/types.d.ts.map +1 -0
- package/dist/esm/permissions/types.js +2 -0
- package/dist/esm/permissions/types.js.map +1 -0
- package/dist/esm/protocol/constants.d.ts +72 -0
- package/dist/esm/protocol/constants.d.ts.map +1 -0
- package/dist/esm/protocol/constants.js +104 -0
- package/dist/esm/protocol/constants.js.map +1 -0
- package/dist/esm/protocol/envelope.d.ts +165 -0
- package/dist/esm/protocol/envelope.d.ts.map +1 -0
- package/dist/esm/protocol/envelope.js +263 -0
- package/dist/esm/protocol/envelope.js.map +1 -0
- package/dist/esm/protocol/errors.d.ts +33 -0
- package/dist/esm/protocol/errors.d.ts.map +1 -0
- package/dist/esm/protocol/errors.js +384 -0
- package/dist/esm/protocol/errors.js.map +1 -0
- package/dist/esm/protocol/messages.d.ts +327 -0
- package/dist/esm/protocol/messages.d.ts.map +1 -0
- package/dist/esm/protocol/messages.js +2 -0
- package/dist/esm/protocol/messages.js.map +1 -0
- package/dist/esm/protocol/serialize.d.ts +26 -0
- package/dist/esm/protocol/serialize.d.ts.map +1 -0
- package/dist/esm/protocol/serialize.js +63 -0
- package/dist/esm/protocol/serialize.js.map +1 -0
- package/dist/esm/protocol/validate.d.ts +135 -0
- package/dist/esm/protocol/validate.d.ts.map +1 -0
- package/dist/esm/protocol/validate.js +830 -0
- package/dist/esm/protocol/validate.js.map +1 -0
- package/dist/types/audit/chain.d.ts +365 -0
- package/dist/types/audit/chain.d.ts.map +1 -0
- package/dist/types/audit/cloud-client.d.ts +142 -0
- package/dist/types/audit/cloud-client.d.ts.map +1 -0
- package/dist/types/audit/cloud-writer.d.ts +57 -0
- package/dist/types/audit/cloud-writer.d.ts.map +1 -0
- package/dist/types/audit/context.d.ts +51 -0
- package/dist/types/audit/context.d.ts.map +1 -0
- package/dist/types/audit/files.d.ts +111 -0
- package/dist/types/audit/files.d.ts.map +1 -0
- package/dist/types/audit/index.d.ts +9 -0
- package/dist/types/audit/index.d.ts.map +1 -0
- package/dist/types/audit/local-writer.d.ts +255 -0
- package/dist/types/audit/local-writer.d.ts.map +1 -0
- package/dist/types/audit/redact.d.ts +151 -0
- package/dist/types/audit/redact.d.ts.map +1 -0
- package/dist/types/audit/sanitize.d.ts +78 -0
- package/dist/types/audit/sanitize.d.ts.map +1 -0
- package/dist/types/audit/sink.d.ts +278 -0
- package/dist/types/audit/sink.d.ts.map +1 -0
- package/dist/types/audit/types.d.ts +226 -0
- package/dist/types/audit/types.d.ts.map +1 -0
- package/dist/types/audit/verify-cache.d.ts +127 -0
- package/dist/types/audit/verify-cache.d.ts.map +1 -0
- package/dist/types/channels/agent-session.d.ts +228 -0
- package/dist/types/channels/agent-session.d.ts.map +1 -0
- package/dist/types/channels/data-channel.d.ts +181 -0
- package/dist/types/channels/data-channel.d.ts.map +1 -0
- package/dist/types/channels/reconnect.d.ts +142 -0
- package/dist/types/channels/reconnect.d.ts.map +1 -0
- package/dist/types/channels/types.d.ts +112 -0
- package/dist/types/channels/types.d.ts.map +1 -0
- package/dist/types/channels/wake-channel.d.ts +232 -0
- package/dist/types/channels/wake-channel.d.ts.map +1 -0
- package/dist/types/cli/banner.d.ts +2 -0
- package/dist/types/cli/banner.d.ts.map +1 -0
- package/dist/types/cli/commands/agent.d.ts +30 -0
- package/dist/types/cli/commands/agent.d.ts.map +1 -0
- package/dist/types/cli/commands/audit-verify.d.ts +19 -0
- package/dist/types/cli/commands/audit-verify.d.ts.map +1 -0
- package/dist/types/cli/commands/clean.d.ts +23 -0
- package/dist/types/cli/commands/clean.d.ts.map +1 -0
- package/dist/types/cli/commands/config-show.d.ts +2 -0
- package/dist/types/cli/commands/config-show.d.ts.map +1 -0
- package/dist/types/cli/commands/config.d.ts +6 -0
- package/dist/types/cli/commands/config.d.ts.map +1 -0
- package/dist/types/cli/commands/db-add.d.ts +16 -0
- package/dist/types/cli/commands/db-add.d.ts.map +1 -0
- package/dist/types/cli/commands/db-edit.d.ts +2 -0
- package/dist/types/cli/commands/db-edit.d.ts.map +1 -0
- package/dist/types/cli/commands/db-logs.d.ts +3 -0
- package/dist/types/cli/commands/db-logs.d.ts.map +1 -0
- package/dist/types/cli/commands/db-ls.d.ts +2 -0
- package/dist/types/cli/commands/db-ls.d.ts.map +1 -0
- package/dist/types/cli/commands/db-query.d.ts +121 -0
- package/dist/types/cli/commands/db-query.d.ts.map +1 -0
- package/dist/types/cli/commands/db-remove.d.ts +2 -0
- package/dist/types/cli/commands/db-remove.d.ts.map +1 -0
- package/dist/types/cli/commands/db-show.d.ts +2 -0
- package/dist/types/cli/commands/db-show.d.ts.map +1 -0
- package/dist/types/cli/commands/db-test.d.ts +3 -0
- package/dist/types/cli/commands/db-test.d.ts.map +1 -0
- package/dist/types/cli/commands/db.d.ts +11 -0
- package/dist/types/cli/commands/db.d.ts.map +1 -0
- package/dist/types/cli/commands/debug.d.ts +2 -0
- package/dist/types/cli/commands/debug.d.ts.map +1 -0
- package/dist/types/cli/commands/doctor.d.ts +5 -0
- package/dist/types/cli/commands/doctor.d.ts.map +1 -0
- package/dist/types/cli/commands/index.d.ts +10 -0
- package/dist/types/cli/commands/index.d.ts.map +1 -0
- package/dist/types/cli/commands/init.d.ts +2 -0
- package/dist/types/cli/commands/init.d.ts.map +1 -0
- package/dist/types/cli/commands/link.d.ts +5 -0
- package/dist/types/cli/commands/link.d.ts.map +1 -0
- package/dist/types/cli/commands/logs.d.ts +17 -0
- package/dist/types/cli/commands/logs.d.ts.map +1 -0
- package/dist/types/cli/commands/project-show.d.ts +2 -0
- package/dist/types/cli/commands/project-show.d.ts.map +1 -0
- package/dist/types/cli/commands/project.d.ts +3 -0
- package/dist/types/cli/commands/project.d.ts.map +1 -0
- package/dist/types/cli/commands/service.d.ts +123 -0
- package/dist/types/cli/commands/service.d.ts.map +1 -0
- package/dist/types/cli/commands/start.d.ts +6 -0
- package/dist/types/cli/commands/start.d.ts.map +1 -0
- package/dist/types/cli/commands/status.d.ts +2 -0
- package/dist/types/cli/commands/status.d.ts.map +1 -0
- package/dist/types/cli/commands/stop.d.ts +6 -0
- package/dist/types/cli/commands/stop.d.ts.map +1 -0
- package/dist/types/cli/daemon/error-tracker.d.ts +119 -0
- package/dist/types/cli/daemon/error-tracker.d.ts.map +1 -0
- package/dist/types/cli/daemon/fault-shutdown.d.ts +144 -0
- package/dist/types/cli/daemon/fault-shutdown.d.ts.map +1 -0
- package/dist/types/cli/daemon/index.d.ts +12 -0
- package/dist/types/cli/daemon/index.d.ts.map +1 -0
- package/dist/types/cli/daemon/pid-file.d.ts +13 -0
- package/dist/types/cli/daemon/pid-file.d.ts.map +1 -0
- package/dist/types/cli/daemon/readiness.d.ts +30 -0
- package/dist/types/cli/daemon/readiness.d.ts.map +1 -0
- package/dist/types/cli/daemon/runtime.d.ts +366 -0
- package/dist/types/cli/daemon/runtime.d.ts.map +1 -0
- package/dist/types/cli/daemon/shutdown.d.ts +7 -0
- package/dist/types/cli/daemon/shutdown.d.ts.map +1 -0
- package/dist/types/cli/daemon/signal-handlers.d.ts +3 -0
- package/dist/types/cli/daemon/signal-handlers.d.ts.map +1 -0
- package/dist/types/cli/daemon/state.d.ts +157 -0
- package/dist/types/cli/daemon/state.d.ts.map +1 -0
- package/dist/types/cli/daemon/status-file.d.ts +139 -0
- package/dist/types/cli/daemon/status-file.d.ts.map +1 -0
- package/dist/types/cli/doctor/checks.d.ts +133 -0
- package/dist/types/cli/doctor/checks.d.ts.map +1 -0
- package/dist/types/cli/doctor/fixes.d.ts +9 -0
- package/dist/types/cli/doctor/fixes.d.ts.map +1 -0
- package/dist/types/cli/doctor/index.d.ts +7 -0
- package/dist/types/cli/doctor/index.d.ts.map +1 -0
- package/dist/types/cli/index.d.ts +3 -0
- package/dist/types/cli/index.d.ts.map +1 -0
- package/dist/types/cli/interactive.d.ts +8 -0
- package/dist/types/cli/interactive.d.ts.map +1 -0
- package/dist/types/cli/logs/format.d.ts +13 -0
- package/dist/types/cli/logs/format.d.ts.map +1 -0
- package/dist/types/cli/logs/index.d.ts +3 -0
- package/dist/types/cli/logs/index.d.ts.map +1 -0
- package/dist/types/cli/logs/viewer.d.ts +41 -0
- package/dist/types/cli/logs/viewer.d.ts.map +1 -0
- package/dist/types/cli/ops/operation-logger.d.ts +63 -0
- package/dist/types/cli/ops/operation-logger.d.ts.map +1 -0
- package/dist/types/cli/palette.d.ts +11 -0
- package/dist/types/cli/palette.d.ts.map +1 -0
- package/dist/types/cli/prompt.d.ts +186 -0
- package/dist/types/cli/prompt.d.ts.map +1 -0
- package/dist/types/cli/ui/box.d.ts +21 -0
- package/dist/types/cli/ui/box.d.ts.map +1 -0
- package/dist/types/cli/ui/clipboard.d.ts +6 -0
- package/dist/types/cli/ui/clipboard.d.ts.map +1 -0
- package/dist/types/cli/ui/colors.d.ts +57 -0
- package/dist/types/cli/ui/colors.d.ts.map +1 -0
- package/dist/types/cli/ui/index.d.ts +9 -0
- package/dist/types/cli/ui/index.d.ts.map +1 -0
- package/dist/types/cli/ui/spinner.d.ts +12 -0
- package/dist/types/cli/ui/spinner.d.ts.map +1 -0
- package/dist/types/cli/ui/symbols.d.ts +47 -0
- package/dist/types/cli/ui/symbols.d.ts.map +1 -0
- package/dist/types/cli/ui/table.d.ts +23 -0
- package/dist/types/cli/ui/table.d.ts.map +1 -0
- package/dist/types/cli/ui/terminal.d.ts +7 -0
- package/dist/types/cli/ui/terminal.d.ts.map +1 -0
- package/dist/types/config/atomic-write.d.ts +69 -0
- package/dist/types/config/atomic-write.d.ts.map +1 -0
- package/dist/types/config/db-config.d.ts +134 -0
- package/dist/types/config/db-config.d.ts.map +1 -0
- package/dist/types/config/machine-config.d.ts +85 -0
- package/dist/types/config/machine-config.d.ts.map +1 -0
- package/dist/types/config/paths.d.ts +64 -0
- package/dist/types/config/paths.d.ts.map +1 -0
- package/dist/types/config/schema.d.ts +72 -0
- package/dist/types/config/schema.d.ts.map +1 -0
- package/dist/types/config/token.d.ts +63 -0
- package/dist/types/config/token.d.ts.map +1 -0
- package/dist/types/execution/canceller.d.ts +41 -0
- package/dist/types/execution/canceller.d.ts.map +1 -0
- package/dist/types/execution/database-lookup.d.ts +56 -0
- package/dist/types/execution/database-lookup.d.ts.map +1 -0
- package/dist/types/execution/dispatcher.d.ts +181 -0
- package/dist/types/execution/dispatcher.d.ts.map +1 -0
- package/dist/types/execution/function-effects.d.ts +209 -0
- package/dist/types/execution/function-effects.d.ts.map +1 -0
- package/dist/types/execution/introspection.d.ts +76 -0
- package/dist/types/execution/introspection.d.ts.map +1 -0
- package/dist/types/execution/migration-runner.d.ts +128 -0
- package/dist/types/execution/migration-runner.d.ts.map +1 -0
- package/dist/types/execution/non-tx-detector.d.ts +23 -0
- package/dist/types/execution/non-tx-detector.d.ts.map +1 -0
- package/dist/types/execution/pool.d.ts +229 -0
- package/dist/types/execution/pool.d.ts.map +1 -0
- package/dist/types/execution/query-runner.d.ts +88 -0
- package/dist/types/execution/query-runner.d.ts.map +1 -0
- package/dist/types/execution/rate-limiter.d.ts +120 -0
- package/dist/types/execution/rate-limiter.d.ts.map +1 -0
- package/dist/types/execution/search-path.d.ts +161 -0
- package/dist/types/execution/search-path.d.ts.map +1 -0
- package/dist/types/execution/sql-parser.d.ts +195 -0
- package/dist/types/execution/sql-parser.d.ts.map +1 -0
- package/dist/types/execution/statement-classifier.d.ts +103 -0
- package/dist/types/execution/statement-classifier.d.ts.map +1 -0
- package/dist/types/execution/types.d.ts +189 -0
- package/dist/types/execution/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +34 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/permissions/auto-upgrade.d.ts +40 -0
- package/dist/types/permissions/auto-upgrade.d.ts.map +1 -0
- package/dist/types/permissions/checker.d.ts +53 -0
- package/dist/types/permissions/checker.d.ts.map +1 -0
- package/dist/types/permissions/manual-approval.d.ts +213 -0
- package/dist/types/permissions/manual-approval.d.ts.map +1 -0
- package/dist/types/permissions/plan-registry.d.ts +274 -0
- package/dist/types/permissions/plan-registry.d.ts.map +1 -0
- package/dist/types/permissions/role-policy.d.ts +217 -0
- package/dist/types/permissions/role-policy.d.ts.map +1 -0
- package/dist/types/permissions/types.d.ts +126 -0
- package/dist/types/permissions/types.d.ts.map +1 -0
- package/dist/types/protocol/constants.d.ts +72 -0
- package/dist/types/protocol/constants.d.ts.map +1 -0
- package/dist/types/protocol/envelope.d.ts +165 -0
- package/dist/types/protocol/envelope.d.ts.map +1 -0
- package/dist/types/protocol/errors.d.ts +33 -0
- package/dist/types/protocol/errors.d.ts.map +1 -0
- package/dist/types/protocol/messages.d.ts +327 -0
- package/dist/types/protocol/messages.d.ts.map +1 -0
- package/dist/types/protocol/serialize.d.ts +26 -0
- package/dist/types/protocol/serialize.d.ts.map +1 -0
- package/dist/types/protocol/validate.d.ts +135 -0
- package/dist/types/protocol/validate.d.ts.map +1 -0
- package/package.json +116 -4
- package/scripts/generate-systemd-service.mjs +117 -0
|
@@ -0,0 +1,668 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.AuditVerifyCache = void 0;
|
|
37
|
+
exports.statAuditFileIdentity = statAuditFileIdentity;
|
|
38
|
+
exports.getSharedAuditVerifyCache = getSharedAuditVerifyCache;
|
|
39
|
+
exports.verifyAuditDirCached = verifyAuditDirCached;
|
|
40
|
+
const crypto = __importStar(require("crypto"));
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const readline = __importStar(require("readline"));
|
|
43
|
+
const chain_1 = require("./chain");
|
|
44
|
+
const files_1 = require("./files");
|
|
45
|
+
/**
|
|
46
|
+
* Incremental whole-log verification (audit finding M-06).
|
|
47
|
+
*
|
|
48
|
+
* `verifyAuditLog` already streams the log in O(1) memory and early-exits on the
|
|
49
|
+
* first bad record, but it re-reads and re-verifies every rotated archive on
|
|
50
|
+
* every call. This module adds the missing half: a per-file cache of the chain
|
|
51
|
+
* head each file left behind, so a file that has not changed since a previous
|
|
52
|
+
* successful verification is not read again, and the chain resumes from the
|
|
53
|
+
* cached head of the last unchanged file.
|
|
54
|
+
*
|
|
55
|
+
* The record-level rules live in `chain.ts` (`ChainVerifier`) and are not
|
|
56
|
+
* reimplemented here: this is a file-walk policy around the single
|
|
57
|
+
* implementation, which is exactly the split that keeps the two from drifting.
|
|
58
|
+
*
|
|
59
|
+
* The cache is per process, in memory, and is never written next to the log. A
|
|
60
|
+
* cache file in the audit directory would live wherever the log-writer can
|
|
61
|
+
* reach, so a poisoned entry would turn "not re-verified" into "verified"; a
|
|
62
|
+
* skip is therefore only ever a skip, and the result always says which files
|
|
63
|
+
* were read and which were not.
|
|
64
|
+
*
|
|
65
|
+
* ## When a skipped file's verdict may be reused
|
|
66
|
+
*
|
|
67
|
+
* A cache hit is only allowed to stand in for a re-read when *all* of these
|
|
68
|
+
* hold, and every one of them is checked on the path that uses the entry:
|
|
69
|
+
*
|
|
70
|
+
* 1. **The file is the same file.** `dev`/`ino`/`size` plus `mtime_ns` *and*
|
|
71
|
+
* `ctime_ns`. `size`+`mtime` alone was the original key and it is not
|
|
72
|
+
* enough: `utimensat` can put `mtime` back after a rewrite, so a same-size
|
|
73
|
+
* edit with a restored `mtime` reused a stale "intact" verdict and masked
|
|
74
|
+
* the tamper. `ctime` cannot be set from userspace, and the nanosecond
|
|
75
|
+
* fields come from a `bigint` stat, so a write that keeps the file's
|
|
76
|
+
* identity has to preserve all five values. A file whose timestamps the
|
|
77
|
+
* filesystem only records to the second is never cached at all: two writes
|
|
78
|
+
* inside one second cannot be told apart there, which is precisely the
|
|
79
|
+
* window such a tamper would aim for.
|
|
80
|
+
* 2. **The chain state the file was verified from is the chain state we are
|
|
81
|
+
* resuming into.** The entry records the `seq` and `prev_hash` its *first*
|
|
82
|
+
* record had to chain from; a hit is refused unless those equal the
|
|
83
|
+
* verifier's current `expectedSeq`/`prev`. Without this, a modified earlier
|
|
84
|
+
* file followed by a cached later file would "verify": the cached head would
|
|
85
|
+
* paper over the gap instead of exposing it.
|
|
86
|
+
* 3. **The signing key is the key the entry was verified with.** A fingerprint
|
|
87
|
+
* of the key bytes is part of every entry, so a rotated/replaced key file
|
|
88
|
+
* invalidates the whole cache even when no anchor names the chain.
|
|
89
|
+
* 4. **The entry belongs to the chain the caller is verifying.** A constrained
|
|
90
|
+
* lookup never reuses an entry from another `chain_id`.
|
|
91
|
+
* 5. **A reused tail is re-anchored to the bytes on disk.** When the last file
|
|
92
|
+
* walked came from the cache, the final record of the log is re-read (a
|
|
93
|
+
* bounded tail peek, never a whole file) and must still be the record the
|
|
94
|
+
* cache says was verified. Truncating the log and rewriting both anchors to
|
|
95
|
+
* match is otherwise invisible to a remembered verdict.
|
|
96
|
+
* 6. **The anchors are read fresh on every call** and the cached end head is
|
|
97
|
+
* compared against them (`compareWithAnchor`), exactly as
|
|
98
|
+
* `ChainVerifier.result` compares the freshly observed head.
|
|
99
|
+
*
|
|
100
|
+
* Anything else fails closed: a file that cannot be stat'ed is reported as
|
|
101
|
+
* unreadable *and* disables every later skip in the same run, a file that could
|
|
102
|
+
* not be read to its end is never cached, and a run that skipped nothing still
|
|
103
|
+
* has to produce a real verdict from the verifier.
|
|
104
|
+
*
|
|
105
|
+
* What this cannot do: it does not protect against an attacker who can write the
|
|
106
|
+
* audit files *and* forge inode metadata (root/`CAP_FOWNER`) or land on a
|
|
107
|
+
* filesystem with coarse timestamps. Such an attacker can also rewrite both
|
|
108
|
+
* anchors, which the uncached verifier already cannot defend against. The
|
|
109
|
+
* interactive `sw-agent audit verify` therefore never consults this cache at
|
|
110
|
+
* all — see `src/cli/commands/audit-verify.ts`.
|
|
111
|
+
*/
|
|
112
|
+
/** Bytes read from the end of the newest non-empty file to re-anchor a skip. */
|
|
113
|
+
const TAIL_PEEK_BYTES = 64 * 1024;
|
|
114
|
+
/** Reads a file's identity, or null when it cannot be stat'ed. */
|
|
115
|
+
async function statAuditFileIdentity(file) {
|
|
116
|
+
try {
|
|
117
|
+
const st = await fs.promises.stat(file, { bigint: true });
|
|
118
|
+
return {
|
|
119
|
+
size: Number(st.size),
|
|
120
|
+
mtime_ns: st.mtimeNs.toString(),
|
|
121
|
+
ctime_ns: st.ctimeNs.toString(),
|
|
122
|
+
ino: st.ino.toString(),
|
|
123
|
+
dev: st.dev.toString(),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function sameIdentity(a, b) {
|
|
131
|
+
return (a.size === b.size &&
|
|
132
|
+
a.mtime_ns === b.mtime_ns &&
|
|
133
|
+
a.ctime_ns === b.ctime_ns &&
|
|
134
|
+
a.ino === b.ino &&
|
|
135
|
+
a.dev === b.dev);
|
|
136
|
+
}
|
|
137
|
+
const NS_PER_SECOND = 1000000000n;
|
|
138
|
+
/**
|
|
139
|
+
* True when both timestamps carry a sub-second component, i.e. the filesystem
|
|
140
|
+
* that produced them records times finer than a second.
|
|
141
|
+
*/
|
|
142
|
+
function hasSubSecondResolution(identity) {
|
|
143
|
+
try {
|
|
144
|
+
return (BigInt(identity.mtime_ns) % NS_PER_SECOND !== 0n &&
|
|
145
|
+
BigInt(identity.ctime_ns) % NS_PER_SECOND !== 0n);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
class AuditVerifyCache {
|
|
152
|
+
entries = new Map();
|
|
153
|
+
/**
|
|
154
|
+
* A usable entry for this exact file revision and this exact resumption point,
|
|
155
|
+
* or null. Every field is load-bearing: see the trust model at the top of this
|
|
156
|
+
* module.
|
|
157
|
+
*/
|
|
158
|
+
get(file, identity, expect) {
|
|
159
|
+
const hit = this.entries.get(file);
|
|
160
|
+
if (!hit)
|
|
161
|
+
return null;
|
|
162
|
+
if (hit.records <= 0)
|
|
163
|
+
return null;
|
|
164
|
+
if (!sameIdentity(hit.identity, identity))
|
|
165
|
+
return null;
|
|
166
|
+
if (hit.key_fingerprint !== expect.keyFingerprint)
|
|
167
|
+
return null;
|
|
168
|
+
if (expect.chainId !== null && hit.chain_id !== expect.chainId)
|
|
169
|
+
return null;
|
|
170
|
+
if (hit.first_seq !== expect.seq)
|
|
171
|
+
return null;
|
|
172
|
+
if (hit.first_prev_hash !== expect.prevHash)
|
|
173
|
+
return null;
|
|
174
|
+
return hit;
|
|
175
|
+
}
|
|
176
|
+
set(file, entry) {
|
|
177
|
+
// A file whose timestamps are stored at whole-second resolution cannot be
|
|
178
|
+
// reused: two writes inside one second are indistinguishable there, which is
|
|
179
|
+
// exactly the window a tamper aims for (same size, mtime put back). Losing
|
|
180
|
+
// the skip is the cheap outcome; trusting it would not be.
|
|
181
|
+
if (entry.records <= 0)
|
|
182
|
+
return;
|
|
183
|
+
if (!hasSubSecondResolution(entry.identity))
|
|
184
|
+
return;
|
|
185
|
+
this.entries.set(file, entry);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Copy of the stored entries. Read-only: nothing can be invalidated through
|
|
189
|
+
* it, so a caller reporting on the cache cannot weaken it by accident.
|
|
190
|
+
*/
|
|
191
|
+
snapshot() {
|
|
192
|
+
return new Map(this.entries);
|
|
193
|
+
}
|
|
194
|
+
/** Drops entries for files that no longer exist (rotated out of retention). */
|
|
195
|
+
prune(liveFiles) {
|
|
196
|
+
const live = new Set(liveFiles);
|
|
197
|
+
for (const file of [...this.entries.keys()]) {
|
|
198
|
+
if (!live.has(file))
|
|
199
|
+
this.entries.delete(file);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
clear() {
|
|
203
|
+
this.entries.clear();
|
|
204
|
+
}
|
|
205
|
+
get size() {
|
|
206
|
+
return this.entries.size;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.AuditVerifyCache = AuditVerifyCache;
|
|
210
|
+
const sharedCache = new AuditVerifyCache();
|
|
211
|
+
/**
|
|
212
|
+
* The process-wide cache. Exposed so a caller that verifies the same directory
|
|
213
|
+
* repeatedly (an interactive shell running `doctor` over and over) shares one
|
|
214
|
+
* set of entries, and so a test can observe that production code used it.
|
|
215
|
+
*/
|
|
216
|
+
function getSharedAuditVerifyCache() {
|
|
217
|
+
return sharedCache;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Verifies the log chronologically across rotated files, reusing verified files
|
|
221
|
+
* that have not changed. Fails closed: no key, no verdict.
|
|
222
|
+
*
|
|
223
|
+
* The verdict is identical to {@link verifyAuditLog}'s for any input the cache
|
|
224
|
+
* did not serve; `verify-streaming.test.ts` pins both against the same logs.
|
|
225
|
+
*/
|
|
226
|
+
async function verifyAuditDirCached(dir, opts = {}) {
|
|
227
|
+
const files = await (0, files_1.getAuditFilesChronological)(dir);
|
|
228
|
+
const head = opts.head === undefined ? (0, chain_1.readHead)(dir) : opts.head;
|
|
229
|
+
const { anchor, anchorSource, conflict, sources } = (0, chain_1.resolveAnchor)([
|
|
230
|
+
{ head, source: opts.head === undefined ? chain_1.AUDIT_HEAD_FILENAME : 'supplied head anchor' },
|
|
231
|
+
{ head: (0, chain_1.readHeadFloor)(dir), source: `head${chain_1.AUDIT_FLOOR_SUFFIX}` },
|
|
232
|
+
]);
|
|
233
|
+
const cache = opts.useCache === false ? null : (opts.cache ?? sharedCache);
|
|
234
|
+
cache?.prune(files);
|
|
235
|
+
const base = {
|
|
236
|
+
files,
|
|
237
|
+
malformed_lines: 0,
|
|
238
|
+
unreadable_files: [],
|
|
239
|
+
head_present: head !== null,
|
|
240
|
+
anchor_sources: sources,
|
|
241
|
+
anchor_source: anchorSource,
|
|
242
|
+
cached_files: [],
|
|
243
|
+
verified_files: [],
|
|
244
|
+
skipped_bytes: 0,
|
|
245
|
+
verified_bytes: 0,
|
|
246
|
+
cache_hit: false,
|
|
247
|
+
};
|
|
248
|
+
if (files.length === 0) {
|
|
249
|
+
// Same shape as `verifyAuditLog`: a directory that used to hold an anchored
|
|
250
|
+
// chain and no longer holds a log file has had the log *deleted*, which is a
|
|
251
|
+
// different failure from "no records have ever been written".
|
|
252
|
+
const state = await auditDirState(dir);
|
|
253
|
+
const deleted = state === 'missing' || (anchor !== null && anchor.seq > 0);
|
|
254
|
+
return {
|
|
255
|
+
...base,
|
|
256
|
+
intact: false,
|
|
257
|
+
events: 0,
|
|
258
|
+
reason: deleted ? 'log_missing' : 'empty',
|
|
259
|
+
detail: deleted
|
|
260
|
+
? `no audit log files in ${dir}` +
|
|
261
|
+
(anchor && anchor.seq > 0
|
|
262
|
+
? `, but an anchor claims seq ${anchor.seq} — the log was deleted`
|
|
263
|
+
: '')
|
|
264
|
+
: `no audit records in ${dir} — an empty log is never verified`,
|
|
265
|
+
chain_id: anchor?.chain_id ?? head?.chain_id ?? null,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
let key;
|
|
269
|
+
try {
|
|
270
|
+
key =
|
|
271
|
+
opts.key !== undefined
|
|
272
|
+
? (0, chain_1.requireKeyBytes)(opts.key)
|
|
273
|
+
: (0, chain_1.loadAuditKey)({ dir: opts.keyDir ?? dir, create: false }).key;
|
|
274
|
+
}
|
|
275
|
+
catch (err) {
|
|
276
|
+
return {
|
|
277
|
+
...base,
|
|
278
|
+
intact: false,
|
|
279
|
+
events: 0,
|
|
280
|
+
reason: 'key_unavailable',
|
|
281
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
282
|
+
chain_id: anchor?.chain_id ?? head?.chain_id ?? null,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
if (conflict) {
|
|
286
|
+
return {
|
|
287
|
+
...base,
|
|
288
|
+
intact: false,
|
|
289
|
+
events: 0,
|
|
290
|
+
reason: 'head_mismatch',
|
|
291
|
+
detail: conflict,
|
|
292
|
+
chain_id: anchor?.chain_id ?? head?.chain_id ?? null,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
const keyFingerprint = crypto.createHash('sha256').update(key).digest('hex').slice(0, 32);
|
|
296
|
+
// The chain state the next file must resume from. Tracked here rather than
|
|
297
|
+
// read back off the verifier, because a cache hit replaces the verifier and
|
|
298
|
+
// the state has to survive that.
|
|
299
|
+
let resumeChainId = anchor?.chain_id ?? head?.chain_id ?? null;
|
|
300
|
+
let resumeSeq = opts.expectedSeq ?? anchor?.retained_from_seq ?? 1;
|
|
301
|
+
/** null means "adopt the first record's prev_hash" (a retention window). */
|
|
302
|
+
let resumePrev = resumeSeq > 1 ? null : chain_1.GENESIS_HASH;
|
|
303
|
+
let verifier = new chain_1.ChainVerifier(key, {
|
|
304
|
+
chainId: resumeChainId ?? undefined,
|
|
305
|
+
expectedSeq: resumeSeq,
|
|
306
|
+
expectedPrevHash: resumePrev ?? undefined,
|
|
307
|
+
});
|
|
308
|
+
/** Records already examined when the current verifier was built. */
|
|
309
|
+
let verifierBase = 0;
|
|
310
|
+
let chainId = resumeChainId;
|
|
311
|
+
let records = 0;
|
|
312
|
+
let malformed = 0;
|
|
313
|
+
let fromSeq = null;
|
|
314
|
+
let toSeq = null;
|
|
315
|
+
let lastCachedHead = null;
|
|
316
|
+
/** Newest verified-at among reused entries. */
|
|
317
|
+
let cachedSince;
|
|
318
|
+
/** Head of the log's last file, when that file came from the cache. */
|
|
319
|
+
let reusedTail = null;
|
|
320
|
+
/** Set once a file is skipped over rather than read; blocks every later skip. */
|
|
321
|
+
let cacheBlocked = false;
|
|
322
|
+
for (const file of files) {
|
|
323
|
+
if (verifier.failed)
|
|
324
|
+
break;
|
|
325
|
+
const identity = await statAuditFileIdentity(file);
|
|
326
|
+
if (!identity) {
|
|
327
|
+
base.unreadable_files.push(file);
|
|
328
|
+
// A file the walk could not even stat is a hole in the sequence. Letting a
|
|
329
|
+
// later cache hit bridge it would report "intact" for a chain with a
|
|
330
|
+
// missing link, so no further skip is allowed in this run.
|
|
331
|
+
cacheBlocked = true;
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
const hit = cacheBlocked
|
|
335
|
+
? null
|
|
336
|
+
: (cache?.get(file, identity, {
|
|
337
|
+
chainId: resumeChainId,
|
|
338
|
+
seq: resumeSeq,
|
|
339
|
+
prevHash: resumePrev ?? chain_1.GENESIS_HASH,
|
|
340
|
+
keyFingerprint,
|
|
341
|
+
}) ?? null);
|
|
342
|
+
if (hit) {
|
|
343
|
+
// Resuming is exact: the cached head *is* the state the verifier would be
|
|
344
|
+
// in after reading this file, and the entry's `first_seq`/`first_prev_hash`
|
|
345
|
+
// proved it was reached from the state we are in now.
|
|
346
|
+
resumeChainId = hit.chain_id;
|
|
347
|
+
resumeSeq = hit.seq + 1;
|
|
348
|
+
resumePrev = hit.last_hash;
|
|
349
|
+
verifier = new chain_1.ChainVerifier(key, {
|
|
350
|
+
chainId: hit.chain_id,
|
|
351
|
+
expectedSeq: resumeSeq,
|
|
352
|
+
expectedPrevHash: hit.last_hash,
|
|
353
|
+
});
|
|
354
|
+
verifierBase = records;
|
|
355
|
+
chainId = hit.chain_id;
|
|
356
|
+
records += hit.records;
|
|
357
|
+
malformed += hit.malformed_lines;
|
|
358
|
+
if (fromSeq === null)
|
|
359
|
+
fromSeq = hit.first_seq;
|
|
360
|
+
toSeq = hit.seq;
|
|
361
|
+
base.cached_files.push(file);
|
|
362
|
+
base.skipped_bytes += identity.size;
|
|
363
|
+
lastCachedHead = (0, chain_1.makeHead)(hit.seq, hit.last_hash, hit.chain_id);
|
|
364
|
+
reusedTail = { seq: hit.seq, last_hash: hit.last_hash, chain_id: hit.chain_id };
|
|
365
|
+
if (cachedSince === undefined || hit.verified_at > cachedSince) {
|
|
366
|
+
cachedSince = hit.verified_at;
|
|
367
|
+
}
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
base.verified_files.push(file);
|
|
371
|
+
base.verified_bytes += identity.size;
|
|
372
|
+
const startSeq = resumeSeq;
|
|
373
|
+
const startPrev = resumePrev ?? chain_1.GENESIS_HASH;
|
|
374
|
+
verifierBase = records;
|
|
375
|
+
verifier = new chain_1.ChainVerifier(key, {
|
|
376
|
+
chainId: resumeChainId ?? undefined,
|
|
377
|
+
expectedSeq: startSeq,
|
|
378
|
+
expectedPrevHash: resumePrev ?? undefined,
|
|
379
|
+
});
|
|
380
|
+
let fileRecords = 0;
|
|
381
|
+
let fileMalformed = 0;
|
|
382
|
+
let fileFailed = false;
|
|
383
|
+
/** False when the file was not read to its end (a `maxRecords` cut-off). */
|
|
384
|
+
let readToEnd = true;
|
|
385
|
+
try {
|
|
386
|
+
for await (const line of readLines(file)) {
|
|
387
|
+
const event = parseLine(line);
|
|
388
|
+
if (!event) {
|
|
389
|
+
// A line that is not a record is corruption, not a gap to skip past.
|
|
390
|
+
fileMalformed++;
|
|
391
|
+
verifier.push(null);
|
|
392
|
+
fileFailed = true;
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
verifier.push(event);
|
|
396
|
+
fileRecords++;
|
|
397
|
+
if (verifier.failed) {
|
|
398
|
+
fileFailed = true;
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
if (opts.maxRecords !== undefined && records + fileRecords >= opts.maxRecords) {
|
|
402
|
+
readToEnd = false;
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
catch {
|
|
408
|
+
base.unreadable_files.push(file);
|
|
409
|
+
cacheBlocked = true;
|
|
410
|
+
readToEnd = false;
|
|
411
|
+
}
|
|
412
|
+
records += fileRecords;
|
|
413
|
+
malformed += fileMalformed;
|
|
414
|
+
const observed = fileRecords > 0 ? verifier.observedHead() : null;
|
|
415
|
+
if (fileRecords > 0) {
|
|
416
|
+
// This file, not an earlier reused one, now holds the end of the log. An
|
|
417
|
+
// empty file (a fresh active file right after a rotation) does not, so a
|
|
418
|
+
// reused tail behind it still needs re-anchoring.
|
|
419
|
+
reusedTail = null;
|
|
420
|
+
if (fromSeq === null)
|
|
421
|
+
fromSeq = startSeq;
|
|
422
|
+
if (observed) {
|
|
423
|
+
toSeq = observed.seq;
|
|
424
|
+
chainId = chainId ?? observed.chain_id;
|
|
425
|
+
resumeChainId = observed.chain_id;
|
|
426
|
+
resumeSeq = observed.seq + 1;
|
|
427
|
+
resumePrev = observed.last_hash;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
// Only a file that was read to its end and verified end to end may be
|
|
431
|
+
// remembered: a partial read (maxRecords) or a mid-file failure would cache
|
|
432
|
+
// a truncated head and the next run would resume from the wrong place.
|
|
433
|
+
if (!fileFailed && readToEnd && observed) {
|
|
434
|
+
cache?.set(file, {
|
|
435
|
+
identity,
|
|
436
|
+
records: fileRecords,
|
|
437
|
+
malformed_lines: fileMalformed,
|
|
438
|
+
first_seq: startSeq,
|
|
439
|
+
first_prev_hash: startPrev,
|
|
440
|
+
seq: observed.seq,
|
|
441
|
+
last_hash: observed.last_hash,
|
|
442
|
+
chain_id: observed.chain_id,
|
|
443
|
+
key_fingerprint: keyFingerprint,
|
|
444
|
+
verified_at: new Date().toISOString(),
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
const coverage = fromSeq !== null && toSeq !== null ? { from_seq: fromSeq, to_seq: toSeq, records } : undefined;
|
|
449
|
+
const tail = reusedTail === null ? null : await reanchorTail(files, reusedTail);
|
|
450
|
+
const tailMismatch = tail === null ? null : tail.error;
|
|
451
|
+
if (tailMismatch !== null || cacheBlocked) {
|
|
452
|
+
const detail = tailMismatch ??
|
|
453
|
+
`a log file could not be read, so the chain has an unverified gap; ${base.cached_files.length} file(s) were skipped and the result is not a verdict`;
|
|
454
|
+
return {
|
|
455
|
+
...base,
|
|
456
|
+
intact: false,
|
|
457
|
+
events: records,
|
|
458
|
+
reason: tailMismatch === null ? 'unreadable' : 'head_mismatch',
|
|
459
|
+
detail,
|
|
460
|
+
chain_id: chainId ?? anchor?.chain_id ?? head?.chain_id ?? null,
|
|
461
|
+
observed: lastCachedHead ?? undefined,
|
|
462
|
+
verified_from_seq: coverage && coverage.from_seq > 1 ? coverage.from_seq : undefined,
|
|
463
|
+
coverage,
|
|
464
|
+
cached_since: cachedSince,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
if (base.verified_files.length === 0 && base.cached_files.length > 0) {
|
|
468
|
+
// Every file was skipped, so the verifier has read nothing and cannot
|
|
469
|
+
// produce a verdict (an empty window is never "verified"). The cached heads
|
|
470
|
+
// are the log's own verified heads, so the verdict is: unchanged since the
|
|
471
|
+
// verification that produced them, still consistent with the tail record
|
|
472
|
+
// just re-read, and still consistent with the anchor that was just read from
|
|
473
|
+
// disk.
|
|
474
|
+
const observed = lastCachedHead;
|
|
475
|
+
const mismatch = observed
|
|
476
|
+
? (compareWithAnchor(observed, anchor) ?? undefined)
|
|
477
|
+
: 'no cached head to compare';
|
|
478
|
+
if (observed && !mismatch) {
|
|
479
|
+
return {
|
|
480
|
+
intact: true,
|
|
481
|
+
events: records,
|
|
482
|
+
observed,
|
|
483
|
+
files: base.files,
|
|
484
|
+
malformed_lines: malformed,
|
|
485
|
+
unreadable_files: base.unreadable_files,
|
|
486
|
+
head_present: head !== null,
|
|
487
|
+
chain_id: observed.chain_id,
|
|
488
|
+
verified_from_seq: coverage && coverage.from_seq > 1 ? coverage.from_seq : undefined,
|
|
489
|
+
coverage,
|
|
490
|
+
cached_files: base.cached_files,
|
|
491
|
+
verified_files: base.verified_files,
|
|
492
|
+
skipped_bytes: base.skipped_bytes,
|
|
493
|
+
verified_bytes: base.verified_bytes,
|
|
494
|
+
cache_hit: true,
|
|
495
|
+
cached_since: cachedSince,
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
return {
|
|
499
|
+
intact: false,
|
|
500
|
+
events: records,
|
|
501
|
+
reason: 'head_mismatch',
|
|
502
|
+
detail: mismatch,
|
|
503
|
+
files: base.files,
|
|
504
|
+
malformed_lines: malformed,
|
|
505
|
+
unreadable_files: base.unreadable_files,
|
|
506
|
+
head_present: head !== null,
|
|
507
|
+
chain_id: observed?.chain_id ?? anchor?.chain_id ?? head?.chain_id ?? null,
|
|
508
|
+
coverage,
|
|
509
|
+
cached_files: base.cached_files,
|
|
510
|
+
verified_files: base.verified_files,
|
|
511
|
+
skipped_bytes: base.skipped_bytes,
|
|
512
|
+
verified_bytes: base.verified_bytes,
|
|
513
|
+
cache_hit: true,
|
|
514
|
+
cached_since: cachedSince,
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
const result = verifier.result(anchor);
|
|
518
|
+
const brokenAt = result.brokenAt === undefined ? undefined : result.brokenAt + verifierBase;
|
|
519
|
+
return {
|
|
520
|
+
...result,
|
|
521
|
+
...base,
|
|
522
|
+
brokenAt,
|
|
523
|
+
malformed_lines: malformed,
|
|
524
|
+
events: records,
|
|
525
|
+
chain_id: result.observed?.chain_id ?? chainId ?? anchor?.chain_id ?? head?.chain_id ?? null,
|
|
526
|
+
coverage,
|
|
527
|
+
cached_since: cachedSince,
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Anchor comparison for the fully-cached path. Mirrors the anchor rules in
|
|
532
|
+
* `ChainVerifier.result`, which cannot be reused here because it only knows the
|
|
533
|
+
* records it was actually handed. `head` is re-read from disk on every call, so
|
|
534
|
+
* it is never stale.
|
|
535
|
+
*/
|
|
536
|
+
function compareWithAnchor(observed, head) {
|
|
537
|
+
if (!head)
|
|
538
|
+
return null;
|
|
539
|
+
if (head.chain_id !== observed.chain_id) {
|
|
540
|
+
return `head belongs to chain ${head.chain_id}, the verified log is chain ${observed.chain_id}`;
|
|
541
|
+
}
|
|
542
|
+
if (head.seq > observed.seq) {
|
|
543
|
+
return `head expects at least seq ${head.seq} but the verified log ends at seq ${observed.seq}`;
|
|
544
|
+
}
|
|
545
|
+
if (head.seq < observed.seq) {
|
|
546
|
+
return `log ends at seq ${observed.seq}, ahead of the anchored head at ${head.seq}`;
|
|
547
|
+
}
|
|
548
|
+
if (head.last_hash !== observed.last_hash) {
|
|
549
|
+
return `record at seq ${observed.seq} does not match the anchored head`;
|
|
550
|
+
}
|
|
551
|
+
return null;
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Re-anchors a remembered tail head to the bytes that are on disk right now.
|
|
555
|
+
*
|
|
556
|
+
* Bounded by construction: only the last {@link TAIL_PEEK_BYTES} of the newest
|
|
557
|
+
* non-empty file are read, whatever the size of the log. `null` means the tail
|
|
558
|
+
* still is the record that was verified.
|
|
559
|
+
*/
|
|
560
|
+
async function reanchorTail(files, expected) {
|
|
561
|
+
for (let i = files.length - 1; i >= 0; i--) {
|
|
562
|
+
const file = files[i];
|
|
563
|
+
const event = await readTailRecord(file);
|
|
564
|
+
if (event === 'empty')
|
|
565
|
+
continue;
|
|
566
|
+
if (event === 'unreadable') {
|
|
567
|
+
return {
|
|
568
|
+
error: `the tail of ${file} is not a readable record, so its cached verdict cannot be trusted`,
|
|
569
|
+
};
|
|
570
|
+
}
|
|
571
|
+
if (event.seq !== expected.seq ||
|
|
572
|
+
event.mac !== expected.last_hash ||
|
|
573
|
+
event.chain_id !== expected.chain_id) {
|
|
574
|
+
return {
|
|
575
|
+
error: `the last record on disk is ${describeEvent(event)}, not the ${describeEvent(expected)} ` +
|
|
576
|
+
'that was verified earlier; the log changed while the cached head still claimed otherwise',
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
return null;
|
|
580
|
+
}
|
|
581
|
+
return {
|
|
582
|
+
error: 'no log file holds a readable record, so the cached tail head cannot be trusted',
|
|
583
|
+
};
|
|
584
|
+
}
|
|
585
|
+
function describeEvent(event) {
|
|
586
|
+
return `seq ${event.seq} of chain ${event.chain_id}`;
|
|
587
|
+
}
|
|
588
|
+
/** Last complete non-empty line of a file, read from its tail. */
|
|
589
|
+
async function readTailRecord(file) {
|
|
590
|
+
let handle = null;
|
|
591
|
+
try {
|
|
592
|
+
handle = await fs.promises.open(file, 'r');
|
|
593
|
+
const st = await handle.stat();
|
|
594
|
+
if (st.size === 0)
|
|
595
|
+
return 'empty';
|
|
596
|
+
const length = Math.min(TAIL_PEEK_BYTES, st.size);
|
|
597
|
+
const buffer = Buffer.alloc(length);
|
|
598
|
+
const { bytesRead } = await handle.read(buffer, 0, length, st.size - length);
|
|
599
|
+
let text = buffer.subarray(0, bytesRead).toString('utf8');
|
|
600
|
+
// The first fragment may be a partial record; the last line is never one.
|
|
601
|
+
if (st.size > length) {
|
|
602
|
+
const newlineAt = text.indexOf('\n');
|
|
603
|
+
if (newlineAt < 0)
|
|
604
|
+
return 'empty';
|
|
605
|
+
text = text.slice(newlineAt + 1);
|
|
606
|
+
}
|
|
607
|
+
const lines = text.split('\n');
|
|
608
|
+
while (lines.length > 0 && lines[lines.length - 1].trim().length === 0)
|
|
609
|
+
lines.pop();
|
|
610
|
+
const last = lines[lines.length - 1];
|
|
611
|
+
if (last === undefined)
|
|
612
|
+
return 'empty';
|
|
613
|
+
return parseLine(last) ?? 'unreadable';
|
|
614
|
+
}
|
|
615
|
+
catch {
|
|
616
|
+
return 'unreadable';
|
|
617
|
+
}
|
|
618
|
+
finally {
|
|
619
|
+
if (handle)
|
|
620
|
+
await handle.close().catch(() => undefined);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
function parseLine(line) {
|
|
624
|
+
const trimmed = line.trim();
|
|
625
|
+
if (trimmed.length === 0)
|
|
626
|
+
return null;
|
|
627
|
+
const raw = trimmed.charCodeAt(0) === 0xfeff ? trimmed.slice(1) : trimmed;
|
|
628
|
+
try {
|
|
629
|
+
const parsed = JSON.parse(raw);
|
|
630
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
|
|
631
|
+
return null;
|
|
632
|
+
return parsed;
|
|
633
|
+
}
|
|
634
|
+
catch {
|
|
635
|
+
return null;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
/**
|
|
639
|
+
* Yields non-empty lines with bounded memory. Mirrors the reader in
|
|
640
|
+
* `local-writer.ts`; kept local so this module does not widen that file's API.
|
|
641
|
+
*/
|
|
642
|
+
async function* readLines(file) {
|
|
643
|
+
const stream = fs.createReadStream(file, { encoding: 'utf8' });
|
|
644
|
+
const rl = readline.createInterface({ input: stream, crlfDelay: Infinity });
|
|
645
|
+
try {
|
|
646
|
+
for await (const line of rl) {
|
|
647
|
+
if (line.trim().length > 0)
|
|
648
|
+
yield line;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
finally {
|
|
652
|
+
rl.close();
|
|
653
|
+
stream.destroy();
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
async function auditDirState(dir) {
|
|
657
|
+
let entries;
|
|
658
|
+
try {
|
|
659
|
+
entries = await fs.promises.readdir(dir);
|
|
660
|
+
}
|
|
661
|
+
catch {
|
|
662
|
+
return 'missing';
|
|
663
|
+
}
|
|
664
|
+
return entries.some((e) => e === 'audit.jsonl' || /^audit-\d+\.jsonl$/.test(e))
|
|
665
|
+
? 'present'
|
|
666
|
+
: 'empty';
|
|
667
|
+
}
|
|
668
|
+
//# sourceMappingURL=verify-cache.js.map
|