@dotdo/postgres 0.1.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/README.md +868 -0
- package/dist/cdc/change-stream.d.ts +44 -0
- package/dist/cdc/change-stream.d.ts.map +1 -0
- package/dist/cdc/change-stream.js +95 -0
- package/dist/cdc/change-stream.js.map +1 -0
- package/dist/cdc/filter.d.ts +58 -0
- package/dist/cdc/filter.d.ts.map +1 -0
- package/dist/cdc/filter.js +520 -0
- package/dist/cdc/filter.js.map +1 -0
- package/dist/cdc/index.d.ts +47 -0
- package/dist/cdc/index.d.ts.map +1 -0
- package/dist/cdc/index.js +50 -0
- package/dist/cdc/index.js.map +1 -0
- package/dist/cdc/resume-token.d.ts +60 -0
- package/dist/cdc/resume-token.d.ts.map +1 -0
- package/dist/cdc/resume-token.js +228 -0
- package/dist/cdc/resume-token.js.map +1 -0
- package/dist/cdc/transport/index.d.ts +7 -0
- package/dist/cdc/transport/index.d.ts.map +1 -0
- package/dist/cdc/transport/index.js +7 -0
- package/dist/cdc/transport/index.js.map +1 -0
- package/dist/cdc/transport/sse.d.ts +120 -0
- package/dist/cdc/transport/sse.d.ts.map +1 -0
- package/dist/cdc/transport/sse.js +590 -0
- package/dist/cdc/transport/sse.js.map +1 -0
- package/dist/cdc/transport/websocket.d.ts +130 -0
- package/dist/cdc/transport/websocket.d.ts.map +1 -0
- package/dist/cdc/transport/websocket.js +688 -0
- package/dist/cdc/transport/websocket.js.map +1 -0
- package/dist/cdc/types.d.ts +306 -0
- package/dist/cdc/types.d.ts.map +1 -0
- package/dist/cdc/types.js +8 -0
- package/dist/cdc/types.js.map +1 -0
- package/dist/config/index.d.ts +25 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +25 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/memory.d.ts +139 -0
- package/dist/config/memory.d.ts.map +1 -0
- package/dist/config/memory.js +157 -0
- package/dist/config/memory.js.map +1 -0
- package/dist/config/storage.d.ts +157 -0
- package/dist/config/storage.d.ts.map +1 -0
- package/dist/config/storage.js +178 -0
- package/dist/config/storage.js.map +1 -0
- package/dist/config/streaming.d.ts +117 -0
- package/dist/config/streaming.d.ts.map +1 -0
- package/dist/config/streaming.js +132 -0
- package/dist/config/streaming.js.map +1 -0
- package/dist/config/timeouts.d.ts +168 -0
- package/dist/config/timeouts.d.ts.map +1 -0
- package/dist/config/timeouts.js +192 -0
- package/dist/config/timeouts.js.map +1 -0
- package/dist/extensions/config.d.ts +89 -0
- package/dist/extensions/config.d.ts.map +1 -0
- package/dist/extensions/config.js +216 -0
- package/dist/extensions/config.js.map +1 -0
- package/dist/extensions/geo.d.ts +452 -0
- package/dist/extensions/geo.d.ts.map +1 -0
- package/dist/extensions/geo.js +583 -0
- package/dist/extensions/geo.js.map +1 -0
- package/dist/extensions/index.d.ts +167 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +99 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/loader.d.ts +226 -0
- package/dist/extensions/loader.d.ts.map +1 -0
- package/dist/extensions/loader.js +456 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/pgmq-lite.d.ts +330 -0
- package/dist/extensions/pgmq-lite.d.ts.map +1 -0
- package/dist/extensions/pgmq-lite.js +648 -0
- package/dist/extensions/pgmq-lite.js.map +1 -0
- package/dist/extensions/plugins.d.ts +260 -0
- package/dist/extensions/plugins.d.ts.map +1 -0
- package/dist/extensions/plugins.js +535 -0
- package/dist/extensions/plugins.js.map +1 -0
- package/dist/extensions/registry.d.ts +93 -0
- package/dist/extensions/registry.d.ts.map +1 -0
- package/dist/extensions/registry.js +182 -0
- package/dist/extensions/registry.js.map +1 -0
- package/dist/extensions/vector.d.ts +106 -0
- package/dist/extensions/vector.d.ts.map +1 -0
- package/dist/extensions/vector.js +129 -0
- package/dist/extensions/vector.js.map +1 -0
- package/dist/iceberg/analytics.d.ts +279 -0
- package/dist/iceberg/analytics.d.ts.map +1 -0
- package/dist/iceberg/analytics.js +448 -0
- package/dist/iceberg/analytics.js.map +1 -0
- package/dist/iceberg/catalog-api.d.ts +39 -0
- package/dist/iceberg/catalog-api.d.ts.map +1 -0
- package/dist/iceberg/catalog-api.js +388 -0
- package/dist/iceberg/catalog-api.js.map +1 -0
- package/dist/iceberg/catalog.d.ts +401 -0
- package/dist/iceberg/catalog.d.ts.map +1 -0
- package/dist/iceberg/catalog.js +677 -0
- package/dist/iceberg/catalog.js.map +1 -0
- package/dist/iceberg/duckdb-wasm.d.ts +447 -0
- package/dist/iceberg/duckdb-wasm.d.ts.map +1 -0
- package/dist/iceberg/duckdb-wasm.js +600 -0
- package/dist/iceberg/duckdb-wasm.js.map +1 -0
- package/dist/iceberg/index.d.ts +92 -0
- package/dist/iceberg/index.d.ts.map +1 -0
- package/dist/iceberg/index.js +119 -0
- package/dist/iceberg/index.js.map +1 -0
- package/dist/iceberg/metadata.d.ts +214 -0
- package/dist/iceberg/metadata.d.ts.map +1 -0
- package/dist/iceberg/metadata.js +535 -0
- package/dist/iceberg/metadata.js.map +1 -0
- package/dist/iceberg/optimizer.d.ts +296 -0
- package/dist/iceberg/optimizer.d.ts.map +1 -0
- package/dist/iceberg/optimizer.js +889 -0
- package/dist/iceberg/optimizer.js.map +1 -0
- package/dist/iceberg/parquet.d.ts +447 -0
- package/dist/iceberg/parquet.d.ts.map +1 -0
- package/dist/iceberg/parquet.js +1225 -0
- package/dist/iceberg/parquet.js.map +1 -0
- package/dist/iceberg/r2-organization.d.ts +422 -0
- package/dist/iceberg/r2-organization.d.ts.map +1 -0
- package/dist/iceberg/r2-organization.js +672 -0
- package/dist/iceberg/r2-organization.js.map +1 -0
- package/dist/iceberg/scheduler-do-example.d.ts +158 -0
- package/dist/iceberg/scheduler-do-example.d.ts.map +1 -0
- package/dist/iceberg/scheduler-do-example.js +261 -0
- package/dist/iceberg/scheduler-do-example.js.map +1 -0
- package/dist/iceberg/scheduler.d.ts +434 -0
- package/dist/iceberg/scheduler.d.ts.map +1 -0
- package/dist/iceberg/scheduler.js +818 -0
- package/dist/iceberg/scheduler.js.map +1 -0
- package/dist/iceberg/schema.d.ts +149 -0
- package/dist/iceberg/schema.d.ts.map +1 -0
- package/dist/iceberg/schema.js +525 -0
- package/dist/iceberg/schema.js.map +1 -0
- package/dist/iceberg/snapshot-manager.d.ts +406 -0
- package/dist/iceberg/snapshot-manager.d.ts.map +1 -0
- package/dist/iceberg/snapshot-manager.js +934 -0
- package/dist/iceberg/snapshot-manager.js.map +1 -0
- package/dist/iceberg/sql-router.d.ts +194 -0
- package/dist/iceberg/sql-router.d.ts.map +1 -0
- package/dist/iceberg/sql-router.js +180 -0
- package/dist/iceberg/sql-router.js.map +1 -0
- package/dist/iceberg/test-fixtures.d.ts +151 -0
- package/dist/iceberg/test-fixtures.d.ts.map +1 -0
- package/dist/iceberg/test-fixtures.js +446 -0
- package/dist/iceberg/test-fixtures.js.map +1 -0
- package/dist/iceberg/time-travel-api.d.ts +102 -0
- package/dist/iceberg/time-travel-api.d.ts.map +1 -0
- package/dist/iceberg/time-travel-api.js +437 -0
- package/dist/iceberg/time-travel-api.js.map +1 -0
- package/dist/iceberg/time-travel.d.ts +293 -0
- package/dist/iceberg/time-travel.d.ts.map +1 -0
- package/dist/iceberg/time-travel.js +689 -0
- package/dist/iceberg/time-travel.js.map +1 -0
- package/dist/iceberg/transformer.d.ts +356 -0
- package/dist/iceberg/transformer.d.ts.map +1 -0
- package/dist/iceberg/transformer.js +770 -0
- package/dist/iceberg/transformer.js.map +1 -0
- package/dist/iceberg/types.d.ts +318 -0
- package/dist/iceberg/types.d.ts.map +1 -0
- package/dist/iceberg/types.js +9 -0
- package/dist/iceberg/types.js.map +1 -0
- package/dist/iceberg/writer.d.ts +144 -0
- package/dist/iceberg/writer.d.ts.map +1 -0
- package/dist/iceberg/writer.js +452 -0
- package/dist/iceberg/writer.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/lineage/index.d.ts +11 -0
- package/dist/lineage/index.d.ts.map +1 -0
- package/dist/lineage/index.js +11 -0
- package/dist/lineage/index.js.map +1 -0
- package/dist/lineage/integration.d.ts +134 -0
- package/dist/lineage/integration.d.ts.map +1 -0
- package/dist/lineage/integration.js +258 -0
- package/dist/lineage/integration.js.map +1 -0
- package/dist/lineage/tracker.d.ts +189 -0
- package/dist/lineage/tracker.d.ts.map +1 -0
- package/dist/lineage/tracker.js +1352 -0
- package/dist/lineage/tracker.js.map +1 -0
- package/dist/lineage/types.d.ts +318 -0
- package/dist/lineage/types.d.ts.map +1 -0
- package/dist/lineage/types.js +9 -0
- package/dist/lineage/types.js.map +1 -0
- package/dist/middleware/index.d.ts +11 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +16 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/rate-limit.d.ts +397 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -0
- package/dist/middleware/rate-limit.js +507 -0
- package/dist/middleware/rate-limit.js.map +1 -0
- package/dist/migration-tooling/external-migration.d.ts +601 -0
- package/dist/migration-tooling/external-migration.d.ts.map +1 -0
- package/dist/migration-tooling/external-migration.js +1612 -0
- package/dist/migration-tooling/external-migration.js.map +1 -0
- package/dist/migration-tooling/index.d.ts +19 -0
- package/dist/migration-tooling/index.d.ts.map +1 -0
- package/dist/migration-tooling/index.js +19 -0
- package/dist/migration-tooling/index.js.map +1 -0
- package/dist/migrations/auto-migrator.d.ts +289 -0
- package/dist/migrations/auto-migrator.d.ts.map +1 -0
- package/dist/migrations/auto-migrator.js +396 -0
- package/dist/migrations/auto-migrator.js.map +1 -0
- package/dist/migrations/bulk-orchestrator.d.ts +403 -0
- package/dist/migrations/bulk-orchestrator.d.ts.map +1 -0
- package/dist/migrations/bulk-orchestrator.js +646 -0
- package/dist/migrations/bulk-orchestrator.js.map +1 -0
- package/dist/migrations/compatibility.d.ts +216 -0
- package/dist/migrations/compatibility.d.ts.map +1 -0
- package/dist/migrations/compatibility.js +651 -0
- package/dist/migrations/compatibility.js.map +1 -0
- package/dist/migrations/do-migrations.d.ts +101 -0
- package/dist/migrations/do-migrations.d.ts.map +1 -0
- package/dist/migrations/do-migrations.js +1060 -0
- package/dist/migrations/do-migrations.js.map +1 -0
- package/dist/migrations/do-migrations.types.d.ts +550 -0
- package/dist/migrations/do-migrations.types.d.ts.map +1 -0
- package/dist/migrations/do-migrations.types.js +15 -0
- package/dist/migrations/do-migrations.types.js.map +1 -0
- package/dist/migrations/drizzle-compat.d.ts +163 -0
- package/dist/migrations/drizzle-compat.d.ts.map +1 -0
- package/dist/migrations/drizzle-compat.js +273 -0
- package/dist/migrations/drizzle-compat.js.map +1 -0
- package/dist/migrations/index.d.ts +109 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +127 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/migration-api.d.ts +161 -0
- package/dist/migrations/migration-api.d.ts.map +1 -0
- package/dist/migrations/migration-api.js +499 -0
- package/dist/migrations/migration-api.js.map +1 -0
- package/dist/migrations/progress-tracker-do.d.ts +195 -0
- package/dist/migrations/progress-tracker-do.d.ts.map +1 -0
- package/dist/migrations/progress-tracker-do.js +339 -0
- package/dist/migrations/progress-tracker-do.js.map +1 -0
- package/dist/migrations/progress-tracker-kv.d.ts +103 -0
- package/dist/migrations/progress-tracker-kv.d.ts.map +1 -0
- package/dist/migrations/progress-tracker-kv.js +231 -0
- package/dist/migrations/progress-tracker-kv.js.map +1 -0
- package/dist/migrations/progress-tracker.d.ts +320 -0
- package/dist/migrations/progress-tracker.d.ts.map +1 -0
- package/dist/migrations/progress-tracker.js +443 -0
- package/dist/migrations/progress-tracker.js.map +1 -0
- package/dist/migrations/registry.d.ts +231 -0
- package/dist/migrations/registry.d.ts.map +1 -0
- package/dist/migrations/registry.js +376 -0
- package/dist/migrations/registry.js.map +1 -0
- package/dist/migrations/runner.d.ts +197 -0
- package/dist/migrations/runner.d.ts.map +1 -0
- package/dist/migrations/runner.js +1167 -0
- package/dist/migrations/runner.js.map +1 -0
- package/dist/migrations/schema-generator.d.ts +111 -0
- package/dist/migrations/schema-generator.d.ts.map +1 -0
- package/dist/migrations/schema-generator.js +335 -0
- package/dist/migrations/schema-generator.js.map +1 -0
- package/dist/migrations/testing.d.ts +321 -0
- package/dist/migrations/testing.d.ts.map +1 -0
- package/dist/migrations/testing.js +645 -0
- package/dist/migrations/testing.js.map +1 -0
- package/dist/migrations/types.d.ts +503 -0
- package/dist/migrations/types.d.ts.map +1 -0
- package/dist/migrations/types.js +11 -0
- package/dist/migrations/types.js.map +1 -0
- package/dist/migrations/validator.d.ts +215 -0
- package/dist/migrations/validator.d.ts.map +1 -0
- package/dist/migrations/validator.js +494 -0
- package/dist/migrations/validator.js.map +1 -0
- package/dist/observability/alerting.d.ts +116 -0
- package/dist/observability/alerting.d.ts.map +1 -0
- package/dist/observability/alerting.js +353 -0
- package/dist/observability/alerting.js.map +1 -0
- package/dist/observability/analytics-engine.d.ts +357 -0
- package/dist/observability/analytics-engine.d.ts.map +1 -0
- package/dist/observability/analytics-engine.js +430 -0
- package/dist/observability/analytics-engine.js.map +1 -0
- package/dist/observability/cost-metrics.d.ts +269 -0
- package/dist/observability/cost-metrics.d.ts.map +1 -0
- package/dist/observability/cost-metrics.js +560 -0
- package/dist/observability/cost-metrics.js.map +1 -0
- package/dist/observability/cross-do-tracing.d.ts +305 -0
- package/dist/observability/cross-do-tracing.d.ts.map +1 -0
- package/dist/observability/cross-do-tracing.js +431 -0
- package/dist/observability/cross-do-tracing.js.map +1 -0
- package/dist/observability/error-rate-collector.d.ts +163 -0
- package/dist/observability/error-rate-collector.d.ts.map +1 -0
- package/dist/observability/error-rate-collector.js +306 -0
- package/dist/observability/error-rate-collector.js.map +1 -0
- package/dist/observability/exporters.d.ts +231 -0
- package/dist/observability/exporters.d.ts.map +1 -0
- package/dist/observability/exporters.js +479 -0
- package/dist/observability/exporters.js.map +1 -0
- package/dist/observability/health-check.d.ts +106 -0
- package/dist/observability/health-check.d.ts.map +1 -0
- package/dist/observability/health-check.js +243 -0
- package/dist/observability/health-check.js.map +1 -0
- package/dist/observability/index.d.ts +297 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +455 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/instrumentation.d.ts +222 -0
- package/dist/observability/instrumentation.d.ts.map +1 -0
- package/dist/observability/instrumentation.js +532 -0
- package/dist/observability/instrumentation.js.map +1 -0
- package/dist/observability/memory-metrics.d.ts +227 -0
- package/dist/observability/memory-metrics.d.ts.map +1 -0
- package/dist/observability/memory-metrics.js +688 -0
- package/dist/observability/memory-metrics.js.map +1 -0
- package/dist/observability/metrics-endpoint.d.ts +91 -0
- package/dist/observability/metrics-endpoint.d.ts.map +1 -0
- package/dist/observability/metrics-endpoint.js +246 -0
- package/dist/observability/metrics-endpoint.js.map +1 -0
- package/dist/observability/metrics.d.ts +88 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +253 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/observability-features.d.ts +488 -0
- package/dist/observability/observability-features.d.ts.map +1 -0
- package/dist/observability/observability-features.js +773 -0
- package/dist/observability/observability-features.js.map +1 -0
- package/dist/observability/prometheus.d.ts +39 -0
- package/dist/observability/prometheus.d.ts.map +1 -0
- package/dist/observability/prometheus.js +120 -0
- package/dist/observability/prometheus.js.map +1 -0
- package/dist/observability/propagation.d.ts +126 -0
- package/dist/observability/propagation.d.ts.map +1 -0
- package/dist/observability/propagation.js +234 -0
- package/dist/observability/propagation.js.map +1 -0
- package/dist/observability/query-latency.d.ts +243 -0
- package/dist/observability/query-latency.d.ts.map +1 -0
- package/dist/observability/query-latency.js +292 -0
- package/dist/observability/query-latency.js.map +1 -0
- package/dist/observability/query-performance.d.ts +169 -0
- package/dist/observability/query-performance.d.ts.map +1 -0
- package/dist/observability/query-performance.js +290 -0
- package/dist/observability/query-performance.js.map +1 -0
- package/dist/observability/storage-tier-metrics.d.ts +174 -0
- package/dist/observability/storage-tier-metrics.d.ts.map +1 -0
- package/dist/observability/storage-tier-metrics.js +306 -0
- package/dist/observability/storage-tier-metrics.js.map +1 -0
- package/dist/observability/tier-cost-optimizer.d.ts +155 -0
- package/dist/observability/tier-cost-optimizer.d.ts.map +1 -0
- package/dist/observability/tier-cost-optimizer.js +536 -0
- package/dist/observability/tier-cost-optimizer.js.map +1 -0
- package/dist/observability/tracer.d.ts +149 -0
- package/dist/observability/tracer.d.ts.map +1 -0
- package/dist/observability/tracer.js +435 -0
- package/dist/observability/tracer.js.map +1 -0
- package/dist/observability/types.d.ts +402 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +103 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/pglite/workers-pglite.d.ts +138 -0
- package/dist/pglite/workers-pglite.d.ts.map +1 -0
- package/dist/pglite/workers-pglite.js +143 -0
- package/dist/pglite/workers-pglite.js.map +1 -0
- package/dist/pglite-assets/pglite.data +0 -0
- package/dist/pglite-assets/pglite.wasm +0 -0
- package/dist/playground/index.d.ts +52 -0
- package/dist/playground/index.d.ts.map +1 -0
- package/dist/playground/index.js +55 -0
- package/dist/playground/index.js.map +1 -0
- package/dist/playground/keyboard-shortcuts.d.ts +116 -0
- package/dist/playground/keyboard-shortcuts.d.ts.map +1 -0
- package/dist/playground/keyboard-shortcuts.js +588 -0
- package/dist/playground/keyboard-shortcuts.js.map +1 -0
- package/dist/playground/playground.d.ts +82 -0
- package/dist/playground/playground.d.ts.map +1 -0
- package/dist/playground/playground.js +271 -0
- package/dist/playground/playground.js.map +1 -0
- package/dist/playground/query-executor.d.ts +115 -0
- package/dist/playground/query-executor.d.ts.map +1 -0
- package/dist/playground/query-executor.js +558 -0
- package/dist/playground/query-executor.js.map +1 -0
- package/dist/playground/query-history.d.ts +92 -0
- package/dist/playground/query-history.d.ts.map +1 -0
- package/dist/playground/query-history.js +259 -0
- package/dist/playground/query-history.js.map +1 -0
- package/dist/playground/result-formatter.d.ts +59 -0
- package/dist/playground/result-formatter.d.ts.map +1 -0
- package/dist/playground/result-formatter.js +341 -0
- package/dist/playground/result-formatter.js.map +1 -0
- package/dist/playground/sample-datasets.d.ts +77 -0
- package/dist/playground/sample-datasets.d.ts.map +1 -0
- package/dist/playground/sample-datasets.js +641 -0
- package/dist/playground/sample-datasets.js.map +1 -0
- package/dist/playground/sample-queries.d.ts +73 -0
- package/dist/playground/sample-queries.d.ts.map +1 -0
- package/dist/playground/sample-queries.js +1095 -0
- package/dist/playground/sample-queries.js.map +1 -0
- package/dist/playground/schema-explorer.d.ts +55 -0
- package/dist/playground/schema-explorer.d.ts.map +1 -0
- package/dist/playground/schema-explorer.js +473 -0
- package/dist/playground/schema-explorer.js.map +1 -0
- package/dist/playground/types.d.ts +430 -0
- package/dist/playground/types.d.ts.map +1 -0
- package/dist/playground/types.js +10 -0
- package/dist/playground/types.js.map +1 -0
- package/dist/readonly/cache-reader.d.ts +145 -0
- package/dist/readonly/cache-reader.d.ts.map +1 -0
- package/dist/readonly/cache-reader.js +198 -0
- package/dist/readonly/cache-reader.js.map +1 -0
- package/dist/readonly/config.d.ts +74 -0
- package/dist/readonly/config.d.ts.map +1 -0
- package/dist/readonly/config.js +67 -0
- package/dist/readonly/config.js.map +1 -0
- package/dist/readonly/index.d.ts +22 -0
- package/dist/readonly/index.d.ts.map +1 -0
- package/dist/readonly/index.js +17 -0
- package/dist/readonly/index.js.map +1 -0
- package/dist/readonly/pglite-wrapper.d.ts +82 -0
- package/dist/readonly/pglite-wrapper.d.ts.map +1 -0
- package/dist/readonly/pglite-wrapper.js +123 -0
- package/dist/readonly/pglite-wrapper.js.map +1 -0
- package/dist/readonly/worker.d.ts +142 -0
- package/dist/readonly/worker.d.ts.map +1 -0
- package/dist/readonly/worker.js +187 -0
- package/dist/readonly/worker.js.map +1 -0
- package/dist/readonly/write-blocker.d.ts +47 -0
- package/dist/readonly/write-blocker.d.ts.map +1 -0
- package/dist/readonly/write-blocker.js +136 -0
- package/dist/readonly/write-blocker.js.map +1 -0
- package/dist/recovery/disaster-recovery.d.ts +326 -0
- package/dist/recovery/disaster-recovery.d.ts.map +1 -0
- package/dist/recovery/disaster-recovery.js +799 -0
- package/dist/recovery/disaster-recovery.js.map +1 -0
- package/dist/recovery/index.d.ts +12 -0
- package/dist/recovery/index.d.ts.map +1 -0
- package/dist/recovery/index.js +12 -0
- package/dist/recovery/index.js.map +1 -0
- package/dist/recovery/parquet-parser.d.ts +321 -0
- package/dist/recovery/parquet-parser.d.ts.map +1 -0
- package/dist/recovery/parquet-parser.js +797 -0
- package/dist/recovery/parquet-parser.js.map +1 -0
- package/dist/retention/index.d.ts +50 -0
- package/dist/retention/index.d.ts.map +1 -0
- package/dist/retention/index.js +50 -0
- package/dist/retention/index.js.map +1 -0
- package/dist/retention/policy.d.ts +344 -0
- package/dist/retention/policy.d.ts.map +1 -0
- package/dist/retention/policy.js +472 -0
- package/dist/retention/policy.js.map +1 -0
- package/dist/retention/purger.d.ts +187 -0
- package/dist/retention/purger.d.ts.map +1 -0
- package/dist/retention/purger.js +411 -0
- package/dist/retention/purger.js.map +1 -0
- package/dist/rls/auth-integration.d.ts +280 -0
- package/dist/rls/auth-integration.d.ts.map +1 -0
- package/dist/rls/auth-integration.js +399 -0
- package/dist/rls/auth-integration.js.map +1 -0
- package/dist/rls/generator.d.ts +249 -0
- package/dist/rls/generator.d.ts.map +1 -0
- package/dist/rls/generator.js +495 -0
- package/dist/rls/generator.js.map +1 -0
- package/dist/rls/index.d.ts +26 -0
- package/dist/rls/index.d.ts.map +1 -0
- package/dist/rls/index.js +58 -0
- package/dist/rls/index.js.map +1 -0
- package/dist/rls/policy.d.ts +116 -0
- package/dist/rls/policy.d.ts.map +1 -0
- package/dist/rls/policy.js +77 -0
- package/dist/rls/policy.js.map +1 -0
- package/dist/rls/validator.d.ts +155 -0
- package/dist/rls/validator.d.ts.map +1 -0
- package/dist/rls/validator.js +792 -0
- package/dist/rls/validator.js.map +1 -0
- package/dist/routing/adaptive-router.d.ts +317 -0
- package/dist/routing/adaptive-router.d.ts.map +1 -0
- package/dist/routing/adaptive-router.js +554 -0
- package/dist/routing/adaptive-router.js.map +1 -0
- package/dist/routing/circuit-breaker.d.ts +339 -0
- package/dist/routing/circuit-breaker.d.ts.map +1 -0
- package/dist/routing/circuit-breaker.js +620 -0
- package/dist/routing/circuit-breaker.js.map +1 -0
- package/dist/routing/cost-metrics.d.ts +133 -0
- package/dist/routing/cost-metrics.d.ts.map +1 -0
- package/dist/routing/cost-metrics.js +259 -0
- package/dist/routing/cost-metrics.js.map +1 -0
- package/dist/routing/do-connection-pool.d.ts +243 -0
- package/dist/routing/do-connection-pool.d.ts.map +1 -0
- package/dist/routing/do-connection-pool.js +572 -0
- package/dist/routing/do-connection-pool.js.map +1 -0
- package/dist/routing/index.d.ts +59 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +59 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/query-complexity-estimator.d.ts +73 -0
- package/dist/routing/query-complexity-estimator.d.ts.map +1 -0
- package/dist/routing/query-complexity-estimator.js +327 -0
- package/dist/routing/query-complexity-estimator.js.map +1 -0
- package/dist/routing/request-coalescing.d.ts +178 -0
- package/dist/routing/request-coalescing.d.ts.map +1 -0
- package/dist/routing/request-coalescing.js +325 -0
- package/dist/routing/request-coalescing.js.map +1 -0
- package/dist/routing/runtime-router.d.ts +107 -0
- package/dist/routing/runtime-router.d.ts.map +1 -0
- package/dist/routing/runtime-router.js +246 -0
- package/dist/routing/runtime-router.js.map +1 -0
- package/dist/routing/tenant-router.d.ts +848 -0
- package/dist/routing/tenant-router.d.ts.map +1 -0
- package/dist/routing/tenant-router.js +1056 -0
- package/dist/routing/tenant-router.js.map +1 -0
- package/dist/routing/websocket-pool.d.ts +119 -0
- package/dist/routing/websocket-pool.d.ts.map +1 -0
- package/dist/routing/websocket-pool.js +436 -0
- package/dist/routing/websocket-pool.js.map +1 -0
- package/dist/storage/cache-layer.d.ts +159 -0
- package/dist/storage/cache-layer.d.ts.map +1 -0
- package/dist/storage/cache-layer.js +245 -0
- package/dist/storage/cache-layer.js.map +1 -0
- package/dist/storage/cost-aware-tiering.d.ts +258 -0
- package/dist/storage/cost-aware-tiering.d.ts.map +1 -0
- package/dist/storage/cost-aware-tiering.js +526 -0
- package/dist/storage/cost-aware-tiering.js.map +1 -0
- package/dist/storage/index.d.ts +87 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +78 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/interfaces.d.ts +856 -0
- package/dist/storage/interfaces.d.ts.map +1 -0
- package/dist/storage/interfaces.js +69 -0
- package/dist/storage/interfaces.js.map +1 -0
- package/dist/storage/r2-layer.d.ts +226 -0
- package/dist/storage/r2-layer.d.ts.map +1 -0
- package/dist/storage/r2-layer.js +307 -0
- package/dist/storage/r2-layer.js.map +1 -0
- package/dist/storage/r2-overflow.d.ts +344 -0
- package/dist/storage/r2-overflow.d.ts.map +1 -0
- package/dist/storage/r2-overflow.js +730 -0
- package/dist/storage/r2-overflow.js.map +1 -0
- package/dist/storage/r2-page-vfs.d.ts +374 -0
- package/dist/storage/r2-page-vfs.d.ts.map +1 -0
- package/dist/storage/r2-page-vfs.js +754 -0
- package/dist/storage/r2-page-vfs.js.map +1 -0
- package/dist/storage/swr-cache.d.ts +181 -0
- package/dist/storage/swr-cache.d.ts.map +1 -0
- package/dist/storage/swr-cache.js +295 -0
- package/dist/storage/swr-cache.js.map +1 -0
- package/dist/storage/tiered-orchestrator.d.ts +951 -0
- package/dist/storage/tiered-orchestrator.d.ts.map +1 -0
- package/dist/storage/tiered-orchestrator.js +1731 -0
- package/dist/storage/tiered-orchestrator.js.map +1 -0
- package/dist/storage/tiered-vfs-swr.d.ts +279 -0
- package/dist/storage/tiered-vfs-swr.d.ts.map +1 -0
- package/dist/storage/tiered-vfs-swr.js +584 -0
- package/dist/storage/tiered-vfs-swr.js.map +1 -0
- package/dist/storage/tiered-vfs.d.ts +405 -0
- package/dist/storage/tiered-vfs.d.ts.map +1 -0
- package/dist/storage/tiered-vfs.js +833 -0
- package/dist/storage/tiered-vfs.js.map +1 -0
- package/dist/streaming/backpressure-controller.d.ts +173 -0
- package/dist/streaming/backpressure-controller.d.ts.map +1 -0
- package/dist/streaming/backpressure-controller.js +344 -0
- package/dist/streaming/backpressure-controller.js.map +1 -0
- package/dist/streaming/buffer-pool.d.ts +241 -0
- package/dist/streaming/buffer-pool.d.ts.map +1 -0
- package/dist/streaming/buffer-pool.js +381 -0
- package/dist/streaming/buffer-pool.js.map +1 -0
- package/dist/streaming/cdc-iceberg-connector.d.ts +272 -0
- package/dist/streaming/cdc-iceberg-connector.d.ts.map +1 -0
- package/dist/streaming/cdc-iceberg-connector.js +408 -0
- package/dist/streaming/cdc-iceberg-connector.js.map +1 -0
- package/dist/streaming/index.d.ts +111 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +128 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/live-cdc-stream.d.ts +400 -0
- package/dist/streaming/live-cdc-stream.d.ts.map +1 -0
- package/dist/streaming/live-cdc-stream.js +703 -0
- package/dist/streaming/live-cdc-stream.js.map +1 -0
- package/dist/streaming/memory-bounded-stream.d.ts +207 -0
- package/dist/streaming/memory-bounded-stream.d.ts.map +1 -0
- package/dist/streaming/memory-bounded-stream.js +340 -0
- package/dist/streaming/memory-bounded-stream.js.map +1 -0
- package/dist/streaming/query-streamer.d.ts +379 -0
- package/dist/streaming/query-streamer.d.ts.map +1 -0
- package/dist/streaming/query-streamer.js +495 -0
- package/dist/streaming/query-streamer.js.map +1 -0
- package/dist/streaming/response-streaming.d.ts +203 -0
- package/dist/streaming/response-streaming.d.ts.map +1 -0
- package/dist/streaming/response-streaming.js +449 -0
- package/dist/streaming/response-streaming.js.map +1 -0
- package/dist/types/branded.d.ts +859 -0
- package/dist/types/branded.d.ts.map +1 -0
- package/dist/types/branded.js +891 -0
- package/dist/types/branded.js.map +1 -0
- package/dist/types/utilities.d.ts +757 -0
- package/dist/types/utilities.d.ts.map +1 -0
- package/dist/types/utilities.js +447 -0
- package/dist/types/utilities.js.map +1 -0
- package/dist/wal/replay-engine.d.ts +344 -0
- package/dist/wal/replay-engine.d.ts.map +1 -0
- package/dist/wal/replay-engine.js +975 -0
- package/dist/wal/replay-engine.js.map +1 -0
- package/dist/worker/__mocks__/capnweb.d.ts +13 -0
- package/dist/worker/__mocks__/capnweb.d.ts.map +1 -0
- package/dist/worker/__mocks__/capnweb.js +15 -0
- package/dist/worker/__mocks__/capnweb.js.map +1 -0
- package/dist/worker/__mocks__/cloudflare-workers.d.ts +31 -0
- package/dist/worker/__mocks__/cloudflare-workers.d.ts.map +1 -0
- package/dist/worker/__mocks__/cloudflare-workers.js +33 -0
- package/dist/worker/__mocks__/cloudflare-workers.js.map +1 -0
- package/dist/worker/__mocks__/pglite.data.d.ts +3 -0
- package/dist/worker/__mocks__/pglite.data.d.ts.map +1 -0
- package/dist/worker/__mocks__/pglite.data.js +20 -0
- package/dist/worker/__mocks__/pglite.data.js.map +1 -0
- package/dist/worker/__mocks__/pglite.wasm.d.ts +3 -0
- package/dist/worker/__mocks__/pglite.wasm.d.ts.map +1 -0
- package/dist/worker/__mocks__/pglite.wasm.js +30 -0
- package/dist/worker/__mocks__/pglite.wasm.js.map +1 -0
- package/dist/worker/auth-rate-limiter.d.ts +270 -0
- package/dist/worker/auth-rate-limiter.d.ts.map +1 -0
- package/dist/worker/auth-rate-limiter.js +332 -0
- package/dist/worker/auth-rate-limiter.js.map +1 -0
- package/dist/worker/auth.d.ts +345 -0
- package/dist/worker/auth.d.ts.map +1 -0
- package/dist/worker/auth.js +837 -0
- package/dist/worker/auth.js.map +1 -0
- package/dist/worker/cdc-backpressure.d.ts +338 -0
- package/dist/worker/cdc-backpressure.d.ts.map +1 -0
- package/dist/worker/cdc-backpressure.js +619 -0
- package/dist/worker/cdc-backpressure.js.map +1 -0
- package/dist/worker/cdc-sse.d.ts +277 -0
- package/dist/worker/cdc-sse.d.ts.map +1 -0
- package/dist/worker/cdc-sse.js +528 -0
- package/dist/worker/cdc-sse.js.map +1 -0
- package/dist/worker/cdc-websocket.d.ts +252 -0
- package/dist/worker/cdc-websocket.d.ts.map +1 -0
- package/dist/worker/cdc-websocket.js +940 -0
- package/dist/worker/cdc-websocket.js.map +1 -0
- package/dist/worker/cdc.d.ts +95 -0
- package/dist/worker/cdc.d.ts.map +1 -0
- package/dist/worker/cdc.js +211 -0
- package/dist/worker/cdc.js.map +1 -0
- package/dist/worker/concerns/auth-concern.d.ts +50 -0
- package/dist/worker/concerns/auth-concern.d.ts.map +1 -0
- package/dist/worker/concerns/auth-concern.js +131 -0
- package/dist/worker/concerns/auth-concern.js.map +1 -0
- package/dist/worker/concerns/cdc-concern.d.ts +99 -0
- package/dist/worker/concerns/cdc-concern.d.ts.map +1 -0
- package/dist/worker/concerns/cdc-concern.js +137 -0
- package/dist/worker/concerns/cdc-concern.js.map +1 -0
- package/dist/worker/concerns/index.d.ts +22 -0
- package/dist/worker/concerns/index.d.ts.map +1 -0
- package/dist/worker/concerns/index.js +13 -0
- package/dist/worker/concerns/index.js.map +1 -0
- package/dist/worker/concerns/query-execution-concern.d.ts +104 -0
- package/dist/worker/concerns/query-execution-concern.d.ts.map +1 -0
- package/dist/worker/concerns/query-execution-concern.js +95 -0
- package/dist/worker/concerns/query-execution-concern.js.map +1 -0
- package/dist/worker/concerns/storage-orchestration-concern.d.ts +78 -0
- package/dist/worker/concerns/storage-orchestration-concern.d.ts.map +1 -0
- package/dist/worker/concerns/storage-orchestration-concern.js +240 -0
- package/dist/worker/concerns/storage-orchestration-concern.js.map +1 -0
- package/dist/worker/do-auth-manager.d.ts +108 -0
- package/dist/worker/do-auth-manager.d.ts.map +1 -0
- package/dist/worker/do-auth-manager.js +212 -0
- package/dist/worker/do-auth-manager.js.map +1 -0
- package/dist/worker/do-pglite-manager.d.ts +137 -0
- package/dist/worker/do-pglite-manager.d.ts.map +1 -0
- package/dist/worker/do-pglite-manager.js +228 -0
- package/dist/worker/do-pglite-manager.js.map +1 -0
- package/dist/worker/do.d.ts +556 -0
- package/dist/worker/do.d.ts.map +1 -0
- package/dist/worker/do.js +1441 -0
- package/dist/worker/do.js.map +1 -0
- package/dist/worker/entry.d.ts +23 -0
- package/dist/worker/entry.d.ts.map +1 -0
- package/dist/worker/entry.js +362 -0
- package/dist/worker/entry.js.map +1 -0
- package/dist/worker/errors.d.ts +106 -0
- package/dist/worker/errors.d.ts.map +1 -0
- package/dist/worker/errors.js +178 -0
- package/dist/worker/errors.js.map +1 -0
- package/dist/worker/health-check-manager.d.ts +141 -0
- package/dist/worker/health-check-manager.d.ts.map +1 -0
- package/dist/worker/health-check-manager.js +145 -0
- package/dist/worker/health-check-manager.js.map +1 -0
- package/dist/worker/index.d.ts +60 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +67 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/memory-pressure.d.ts +892 -0
- package/dist/worker/memory-pressure.d.ts.map +1 -0
- package/dist/worker/memory-pressure.js +1990 -0
- package/dist/worker/memory-pressure.js.map +1 -0
- package/dist/worker/migration-manager.d.ts +153 -0
- package/dist/worker/migration-manager.d.ts.map +1 -0
- package/dist/worker/migration-manager.js +461 -0
- package/dist/worker/migration-manager.js.map +1 -0
- package/dist/worker/plugin-manager.d.ts +147 -0
- package/dist/worker/plugin-manager.d.ts.map +1 -0
- package/dist/worker/plugin-manager.js +408 -0
- package/dist/worker/plugin-manager.js.map +1 -0
- package/dist/worker/proxy.d.ts +330 -0
- package/dist/worker/proxy.d.ts.map +1 -0
- package/dist/worker/proxy.js +504 -0
- package/dist/worker/proxy.js.map +1 -0
- package/dist/worker/query-execution-manager.d.ts +107 -0
- package/dist/worker/query-execution-manager.d.ts.map +1 -0
- package/dist/worker/query-execution-manager.js +155 -0
- package/dist/worker/query-execution-manager.js.map +1 -0
- package/dist/worker/query-executor.d.ts +163 -0
- package/dist/worker/query-executor.d.ts.map +1 -0
- package/dist/worker/query-executor.js +413 -0
- package/dist/worker/query-executor.js.map +1 -0
- package/dist/worker/query-stats-manager.d.ts +117 -0
- package/dist/worker/query-stats-manager.d.ts.map +1 -0
- package/dist/worker/query-stats-manager.js +162 -0
- package/dist/worker/query-stats-manager.js.map +1 -0
- package/dist/worker/result-handler.d.ts +192 -0
- package/dist/worker/result-handler.d.ts.map +1 -0
- package/dist/worker/result-handler.js +346 -0
- package/dist/worker/result-handler.js.map +1 -0
- package/dist/worker/routes.d.ts +135 -0
- package/dist/worker/routes.d.ts.map +1 -0
- package/dist/worker/routes.js +460 -0
- package/dist/worker/routes.js.map +1 -0
- package/dist/worker/rpc-methods-manager.d.ts +142 -0
- package/dist/worker/rpc-methods-manager.d.ts.map +1 -0
- package/dist/worker/rpc-methods-manager.js +195 -0
- package/dist/worker/rpc-methods-manager.js.map +1 -0
- package/dist/worker/rpc.d.ts +259 -0
- package/dist/worker/rpc.d.ts.map +1 -0
- package/dist/worker/rpc.js +398 -0
- package/dist/worker/rpc.js.map +1 -0
- package/dist/worker/schema-version.d.ts +209 -0
- package/dist/worker/schema-version.d.ts.map +1 -0
- package/dist/worker/schema-version.js +450 -0
- package/dist/worker/schema-version.js.map +1 -0
- package/dist/worker/session-manager.d.ts +282 -0
- package/dist/worker/session-manager.d.ts.map +1 -0
- package/dist/worker/session-manager.js +523 -0
- package/dist/worker/session-manager.js.map +1 -0
- package/dist/worker/shutdown-manager.d.ts +188 -0
- package/dist/worker/shutdown-manager.d.ts.map +1 -0
- package/dist/worker/shutdown-manager.js +347 -0
- package/dist/worker/shutdown-manager.js.map +1 -0
- package/dist/worker/sql-transform.d.ts +61 -0
- package/dist/worker/sql-transform.d.ts.map +1 -0
- package/dist/worker/sql-transform.js +312 -0
- package/dist/worker/sql-transform.js.map +1 -0
- package/dist/worker/types.d.ts +738 -0
- package/dist/worker/types.d.ts.map +1 -0
- package/dist/worker/types.js +6 -0
- package/dist/worker/types.js.map +1 -0
- package/dist/worker/user-routes.d.ts +76 -0
- package/dist/worker/user-routes.d.ts.map +1 -0
- package/dist/worker/user-routes.js +188 -0
- package/dist/worker/user-routes.js.map +1 -0
- package/dist/worker/wal-facade.d.ts +138 -0
- package/dist/worker/wal-facade.d.ts.map +1 -0
- package/dist/worker/wal-facade.js +184 -0
- package/dist/worker/wal-facade.js.map +1 -0
- package/dist/worker/wal-r2.d.ts +271 -0
- package/dist/worker/wal-r2.d.ts.map +1 -0
- package/dist/worker/wal-r2.js +689 -0
- package/dist/worker/wal-r2.js.map +1 -0
- package/dist/worker/wal-replay.d.ts +361 -0
- package/dist/worker/wal-replay.d.ts.map +1 -0
- package/dist/worker/wal-replay.js +628 -0
- package/dist/worker/wal-replay.js.map +1 -0
- package/dist/worker/wal-retention.d.ts +389 -0
- package/dist/worker/wal-retention.d.ts.map +1 -0
- package/dist/worker/wal-retention.js +763 -0
- package/dist/worker/wal-retention.js.map +1 -0
- package/dist/worker/wal.d.ts +278 -0
- package/dist/worker/wal.d.ts.map +1 -0
- package/dist/worker/wal.js +467 -0
- package/dist/worker/wal.js.map +1 -0
- package/dist/worker/websocket.d.ts +85 -0
- package/dist/worker/websocket.d.ts.map +1 -0
- package/dist/worker/websocket.js +227 -0
- package/dist/worker/websocket.js.map +1 -0
- package/package.json +108 -0
- package/src/cdc/change-stream.ts +137 -0
- package/src/cdc/filter.ts +646 -0
- package/src/cdc/index.ts +112 -0
- package/src/cdc/resume-token.ts +280 -0
- package/src/cdc/transport/index.ts +7 -0
- package/src/cdc/transport/sse.ts +723 -0
- package/src/cdc/transport/websocket.ts +873 -0
- package/src/cdc/types.ts +346 -0
- package/src/config/index.ts +25 -0
- package/src/config/memory.ts +177 -0
- package/src/config/storage.ts +204 -0
- package/src/config/streaming.ts +147 -0
- package/src/config/timeouts.ts +221 -0
- package/src/extensions/config.test.ts +187 -0
- package/src/extensions/config.ts +278 -0
- package/src/extensions/geo.test.ts +455 -0
- package/src/extensions/geo.ts +858 -0
- package/src/extensions/index.test.ts +259 -0
- package/src/extensions/index.ts +227 -0
- package/src/extensions/loader.test.ts +555 -0
- package/src/extensions/loader.ts +588 -0
- package/src/extensions/pgmq-lite.test.ts +727 -0
- package/src/extensions/pgmq-lite.ts +770 -0
- package/src/extensions/plugins.test.ts +528 -0
- package/src/extensions/plugins.ts +718 -0
- package/src/extensions/registry.test.ts +202 -0
- package/src/extensions/registry.ts +267 -0
- package/src/extensions/vector.test.ts +195 -0
- package/src/extensions/vector.ts +217 -0
- package/src/iceberg/SCHEDULER.md +580 -0
- package/src/iceberg/analytics.test.ts +703 -0
- package/src/iceberg/analytics.ts +727 -0
- package/src/iceberg/catalog-api.test.ts +838 -0
- package/src/iceberg/catalog-api.ts +520 -0
- package/src/iceberg/catalog.test.ts +680 -0
- package/src/iceberg/catalog.ts +1007 -0
- package/src/iceberg/iceberg.test.ts +705 -0
- package/src/iceberg/index.ts +406 -0
- package/src/iceberg/metadata.test.ts +632 -0
- package/src/iceberg/metadata.ts +649 -0
- package/src/iceberg/optimizer.test.ts +868 -0
- package/src/iceberg/optimizer.ts +1287 -0
- package/src/iceberg/parquet.test.ts +899 -0
- package/src/iceberg/parquet.ts +1640 -0
- package/src/iceberg/r2-organization.test.ts +615 -0
- package/src/iceberg/r2-organization.ts +951 -0
- package/src/iceberg/scheduler-do-example.ts +364 -0
- package/src/iceberg/scheduler.test.ts +861 -0
- package/src/iceberg/scheduler.ts +1201 -0
- package/src/iceberg/schema.test.ts +547 -0
- package/src/iceberg/schema.ts +616 -0
- package/src/iceberg/snapshot-manager.test.ts +919 -0
- package/src/iceberg/snapshot-manager.ts +1369 -0
- package/src/iceberg/sql-router.test.ts +334 -0
- package/src/iceberg/sql-router.ts +337 -0
- package/src/iceberg/test-fixtures.ts +605 -0
- package/src/iceberg/time-travel-api.test.ts +1029 -0
- package/src/iceberg/time-travel-api.ts +731 -0
- package/src/iceberg/time-travel.test.ts +1218 -0
- package/src/iceberg/time-travel.ts +1052 -0
- package/src/iceberg/transformer.test.ts +689 -0
- package/src/iceberg/transformer.ts +1029 -0
- package/src/iceberg/types.ts +373 -0
- package/src/iceberg/writer.test.ts +716 -0
- package/src/iceberg/writer.ts +590 -0
- package/src/index.ts +212 -0
- package/src/lineage/index.ts +42 -0
- package/src/lineage/integration.ts +334 -0
- package/src/lineage/tracker.ts +1618 -0
- package/src/lineage/types.ts +354 -0
- package/src/middleware/index.ts +36 -0
- package/src/middleware/rate-limit-concurrent.test.ts +794 -0
- package/src/middleware/rate-limit.test.ts +1568 -0
- package/src/middleware/rate-limit.ts +840 -0
- package/src/migration-tooling/external-migration.test.ts +1864 -0
- package/src/migration-tooling/external-migration.ts +2355 -0
- package/src/migration-tooling/index.ts +19 -0
- package/src/migrations/ARCHITECTURE.md +474 -0
- package/src/migrations/PROGRESS_TRACKING.md +485 -0
- package/src/migrations/auto-migrator.test.ts +732 -0
- package/src/migrations/auto-migrator.ts +531 -0
- package/src/migrations/bulk-orchestrator.test.ts +801 -0
- package/src/migrations/bulk-orchestrator.ts +1039 -0
- package/src/migrations/compatibility.test.ts +958 -0
- package/src/migrations/compatibility.ts +902 -0
- package/src/migrations/do-migrations.test.ts +2620 -0
- package/src/migrations/do-migrations.ts +1289 -0
- package/src/migrations/do-migrations.types.ts +715 -0
- package/src/migrations/drizzle-compat.test.ts +210 -0
- package/src/migrations/drizzle-compat.ts +337 -0
- package/src/migrations/index.ts +334 -0
- package/src/migrations/migration-api.test.ts +438 -0
- package/src/migrations/migration-api.ts +704 -0
- package/src/migrations/progress-tracker-do.ts +518 -0
- package/src/migrations/progress-tracker-kv.ts +305 -0
- package/src/migrations/progress-tracker.test.ts +937 -0
- package/src/migrations/progress-tracker.ts +665 -0
- package/src/migrations/registry.test.ts +331 -0
- package/src/migrations/registry.ts +468 -0
- package/src/migrations/rollback.test.ts +644 -0
- package/src/migrations/runner.test.ts +807 -0
- package/src/migrations/runner.test.ts.backup +759 -0
- package/src/migrations/runner.ts +1459 -0
- package/src/migrations/schema-generator.test.ts +649 -0
- package/src/migrations/schema-generator.ts +513 -0
- package/src/migrations/testing.ts +1037 -0
- package/src/migrations/types.ts +573 -0
- package/src/migrations/validator.test.ts +660 -0
- package/src/migrations/validator.ts +741 -0
- package/src/observability/alerting.test.ts +1133 -0
- package/src/observability/alerting.ts +455 -0
- package/src/observability/analytics-engine.ts +733 -0
- package/src/observability/cost-metrics.ts +804 -0
- package/src/observability/cross-do-tracing.test.ts +516 -0
- package/src/observability/cross-do-tracing.ts +588 -0
- package/src/observability/dashboards/postgres-do-overview.json +1656 -0
- package/src/observability/error-rate-collector.test.ts +977 -0
- package/src/observability/error-rate-collector.ts +518 -0
- package/src/observability/exporters.test.ts +365 -0
- package/src/observability/exporters.ts +650 -0
- package/src/observability/health-check.test.ts +353 -0
- package/src/observability/health-check.ts +341 -0
- package/src/observability/index.test.ts +298 -0
- package/src/observability/index.ts +885 -0
- package/src/observability/instrumentation.test.ts +428 -0
- package/src/observability/instrumentation.ts +788 -0
- package/src/observability/memory-metrics.test.ts +355 -0
- package/src/observability/memory-metrics.ts +990 -0
- package/src/observability/metrics-endpoint.test.ts +402 -0
- package/src/observability/metrics-endpoint.ts +374 -0
- package/src/observability/metrics.test.ts +291 -0
- package/src/observability/metrics.ts +315 -0
- package/src/observability/observability-features.ts +1296 -0
- package/src/observability/prometheus.test.ts +292 -0
- package/src/observability/prometheus.ts +170 -0
- package/src/observability/propagation.test.ts +417 -0
- package/src/observability/propagation.ts +294 -0
- package/src/observability/query-latency.ts +586 -0
- package/src/observability/query-performance.test.ts +406 -0
- package/src/observability/query-performance.ts +491 -0
- package/src/observability/storage-tier-metrics.test.ts +633 -0
- package/src/observability/storage-tier-metrics.ts +570 -0
- package/src/observability/tier-cost-optimizer.ts +740 -0
- package/src/observability/tracer.test.ts +346 -0
- package/src/observability/tracer.ts +585 -0
- package/src/observability/types.test.ts +726 -0
- package/src/observability/types.ts +434 -0
- package/src/pglite/auto-demotion.test.ts +477 -0
- package/src/pglite/auto-demotion.ts +385 -0
- package/src/pglite/auto-promotion.test.ts +824 -0
- package/src/pglite/auto-promotion.ts +547 -0
- package/src/pglite/cache-layer.test.ts +469 -0
- package/src/pglite/cache-layer.ts +271 -0
- package/src/pglite/cold-start-manager.ts +1260 -0
- package/src/pglite/cold-start-optimizer.test.ts +937 -0
- package/src/pglite/cold-start-optimizer.ts +1895 -0
- package/src/pglite/dovfs-adapter.ts +1122 -0
- package/src/pglite/dovfs.ts +1258 -0
- package/src/pglite/etag-cache.test.ts +844 -0
- package/src/pglite/etag-cache.ts +526 -0
- package/src/pglite/index.ts +442 -0
- package/src/pglite/init.test.ts +455 -0
- package/src/pglite/init.ts +574 -0
- package/src/pglite/lifecycle.test.ts +599 -0
- package/src/pglite/lifecycle.ts +704 -0
- package/src/pglite/parallel-loader.test.ts +586 -0
- package/src/pglite/parallel-loader.ts +481 -0
- package/src/pglite/production-pglite.test.ts +666 -0
- package/src/pglite/production-pglite.ts +537 -0
- package/src/pglite/query-executor.ts +614 -0
- package/src/pglite/r2-layer.test.ts +501 -0
- package/src/pglite/r2-layer.ts +322 -0
- package/src/pglite/tiered-init.test.ts +725 -0
- package/src/pglite/tiered-init.ts +556 -0
- package/src/pglite/tiered-vfs.test.ts +726 -0
- package/src/pglite/tiered-vfs.ts +33 -0
- package/src/pglite/tiering-stats.test.ts +531 -0
- package/src/pglite/tiering-stats.ts +407 -0
- package/src/pglite/transaction-hooks.ts +343 -0
- package/src/pglite/warm-loader.test.ts +1701 -0
- package/src/pglite/warm-loader.ts +528 -0
- package/src/pglite/workers-pglite.ts +224 -0
- package/src/pglite-assets/pglite.data +0 -0
- package/src/pglite-assets/pglite.wasm +0 -0
- package/src/pglite.d.ts +47 -0
- package/src/playground/index.ts +137 -0
- package/src/playground/keyboard-shortcuts.ts +677 -0
- package/src/playground/playground.ts +323 -0
- package/src/playground/query-executor.ts +669 -0
- package/src/playground/query-history.ts +328 -0
- package/src/playground/result-formatter.ts +420 -0
- package/src/playground/sample-datasets.ts +674 -0
- package/src/playground/sample-queries.ts +1168 -0
- package/src/playground/schema-explorer.ts +558 -0
- package/src/playground/types.ts +518 -0
- package/src/readonly/cache-reader.test.ts +460 -0
- package/src/readonly/cache-reader.ts +313 -0
- package/src/readonly/config.test.ts +187 -0
- package/src/readonly/config.ts +128 -0
- package/src/readonly/index.ts +50 -0
- package/src/readonly/pglite-wrapper.test.ts +278 -0
- package/src/readonly/pglite-wrapper.ts +184 -0
- package/src/readonly/worker.test.ts +533 -0
- package/src/readonly/worker.ts +341 -0
- package/src/readonly/write-blocker.test.ts +459 -0
- package/src/readonly/write-blocker.ts +175 -0
- package/src/recovery/disaster-recovery.test.ts +618 -0
- package/src/recovery/disaster-recovery.ts +1181 -0
- package/src/recovery/index.ts +43 -0
- package/src/recovery/parquet-parser.ts +974 -0
- package/src/retention/index.ts +74 -0
- package/src/retention/policy.test.ts +571 -0
- package/src/retention/policy.ts +774 -0
- package/src/retention/purger.test.ts +465 -0
- package/src/retention/purger.ts +558 -0
- package/src/rls/auth-integration.test.ts +752 -0
- package/src/rls/auth-integration.ts +533 -0
- package/src/rls/generator.test.ts +829 -0
- package/src/rls/generator.ts +573 -0
- package/src/rls/index.ts +128 -0
- package/src/rls/policy.ts +208 -0
- package/src/rls/rls.test.ts +1071 -0
- package/src/rls/validator.test.ts +930 -0
- package/src/rls/validator.ts +895 -0
- package/src/routing/adaptive-router.test.ts +884 -0
- package/src/routing/adaptive-router.ts +845 -0
- package/src/routing/circuit-breaker.test.ts +1505 -0
- package/src/routing/circuit-breaker.ts +852 -0
- package/src/routing/cost-metrics.test.ts +565 -0
- package/src/routing/cost-metrics.ts +408 -0
- package/src/routing/do-connection-pool.test.ts +1109 -0
- package/src/routing/do-connection-pool.ts +828 -0
- package/src/routing/index.ts +158 -0
- package/src/routing/query-complexity-estimator.test.ts +356 -0
- package/src/routing/query-complexity-estimator.ts +444 -0
- package/src/routing/request-coalescing.test.ts +738 -0
- package/src/routing/request-coalescing.ts +475 -0
- package/src/routing/runtime-router.test.ts +436 -0
- package/src/routing/runtime-router.ts +357 -0
- package/src/routing/tenant-router.test.ts +2493 -0
- package/src/routing/tenant-router.ts +1908 -0
- package/src/routing/websocket-pool.test.ts +551 -0
- package/src/routing/websocket-pool.ts +577 -0
- package/src/storage/access-pattern-tracker.test.ts +874 -0
- package/src/storage/cache-layer.test.ts +560 -0
- package/src/storage/cache-layer.ts +328 -0
- package/src/storage/cost-aware-tiering.test.ts +652 -0
- package/src/storage/cost-aware-tiering.ts +794 -0
- package/src/storage/do-sqlite-blobs.test.ts +937 -0
- package/src/storage/index.ts +272 -0
- package/src/storage/interfaces.ts +974 -0
- package/src/storage/r2-layer.test.ts +653 -0
- package/src/storage/r2-layer.ts +434 -0
- package/src/storage/r2-overflow.ts +920 -0
- package/src/storage/r2-page-vfs.test.ts +2348 -0
- package/src/storage/r2-page-vfs.ts +1054 -0
- package/src/storage/swr-cache.test.ts +832 -0
- package/src/storage/swr-cache.ts +398 -0
- package/src/storage/swr-tiered-integration.test.ts +617 -0
- package/src/storage/tiered-orchestrator.test.ts +2441 -0
- package/src/storage/tiered-orchestrator.ts +2081 -0
- package/src/storage/tiered-vfs-swr.test.ts +736 -0
- package/src/storage/tiered-vfs-swr.ts +735 -0
- package/src/storage/tiered-vfs.test.ts +793 -0
- package/src/storage/tiered-vfs.ts +1082 -0
- package/src/streaming/backpressure-controller.ts +452 -0
- package/src/streaming/buffer-pool.ts +484 -0
- package/src/streaming/cdc-iceberg-connector.ts +605 -0
- package/src/streaming/index.ts +225 -0
- package/src/streaming/live-cdc-stream.ts +985 -0
- package/src/streaming/memory-bounded-stream.ts +443 -0
- package/src/streaming/query-streamer.ts +662 -0
- package/src/streaming/response-streaming.ts +557 -0
- package/src/types/branded.ts +1075 -0
- package/src/types/branded.ts.backup +273 -0
- package/src/types/utilities.ts +1023 -0
- package/src/types/wasm.d.ts +30 -0
- package/src/validation/typed-errors.test.ts +420 -0
- package/src/wal/replay-engine.ts +1264 -0
- package/src/worker/__mocks__/capnweb.ts +15 -0
- package/src/worker/__mocks__/pglite.data.ts +22 -0
- package/src/worker/__mocks__/pglite.wasm.ts +33 -0
- package/src/worker/auth-rate-limiter.test.ts +272 -0
- package/src/worker/auth-rate-limiter.ts +448 -0
- package/src/worker/auth.security-red.test.ts +1236 -0
- package/src/worker/auth.security.test.ts +822 -0
- package/src/worker/auth.test.ts +469 -0
- package/src/worker/auth.ts +1104 -0
- package/src/worker/cdc-backpressure.test.ts +726 -0
- package/src/worker/cdc-backpressure.ts +866 -0
- package/src/worker/cdc-sse.test.ts +780 -0
- package/src/worker/cdc-sse.ts +728 -0
- package/src/worker/cdc-websocket.ts +1229 -0
- package/src/worker/cdc-ws.test.ts +1009 -0
- package/src/worker/cdc.test.ts +327 -0
- package/src/worker/cdc.ts +289 -0
- package/src/worker/concerns/auth-concern.ts +179 -0
- package/src/worker/concerns/cdc-concern.ts +247 -0
- package/src/worker/concerns/index.ts +58 -0
- package/src/worker/concerns/query-execution-concern.ts +194 -0
- package/src/worker/concerns/storage-orchestration-concern.ts +373 -0
- package/src/worker/discriminated-types.test.ts +280 -0
- package/src/worker/do-auth-manager.ts +257 -0
- package/src/worker/do-decomposition.test.ts +1236 -0
- package/src/worker/do-pglite-manager.ts +302 -0
- package/src/worker/do.test.ts +2254 -0
- package/src/worker/do.ts +1878 -0
- package/src/worker/entry.ts +417 -0
- package/src/worker/errors.ts +285 -0
- package/src/worker/health-check-manager.test.ts +261 -0
- package/src/worker/health-check-manager.ts +231 -0
- package/src/worker/index.ts +389 -0
- package/src/worker/memory-pressure.test.ts +1460 -0
- package/src/worker/memory-pressure.ts +2650 -0
- package/src/worker/migration-manager.ts +582 -0
- package/src/worker/neon-compat.test.ts +332 -0
- package/src/worker/plugin-manager.ts +485 -0
- package/src/worker/postgres.do-rpc.d.ts +76 -0
- package/src/worker/proxy.ts +694 -0
- package/src/worker/query-execution-manager.test.ts +303 -0
- package/src/worker/query-execution-manager.ts +219 -0
- package/src/worker/query-executor.test.ts +282 -0
- package/src/worker/query-executor.ts +560 -0
- package/src/worker/query-stats-manager.ts +229 -0
- package/src/worker/result-handler.test.ts +364 -0
- package/src/worker/result-handler.ts +510 -0
- package/src/worker/routes.test.ts +795 -0
- package/src/worker/routes.ts +650 -0
- package/src/worker/rpc-methods-manager.test.ts +326 -0
- package/src/worker/rpc-methods-manager.ts +276 -0
- package/src/worker/rpc.ts +524 -0
- package/src/worker/schema-version.ts +605 -0
- package/src/worker/session-manager.test.ts +506 -0
- package/src/worker/session-manager.ts +732 -0
- package/src/worker/shutdown-manager.ts +469 -0
- package/src/worker/sql-transform.test.ts +286 -0
- package/src/worker/sql-transform.ts +368 -0
- package/src/worker/supabase-compat.test.ts +621 -0
- package/src/worker/types.test.ts +292 -0
- package/src/worker/types.ts +873 -0
- package/src/worker/user-routes.test.ts +703 -0
- package/src/worker/user-routes.ts +303 -0
- package/src/worker/wal-facade.ts +235 -0
- package/src/worker/wal-r2.test.ts +570 -0
- package/src/worker/wal-r2.ts +930 -0
- package/src/worker/wal-replay.test.ts +845 -0
- package/src/worker/wal-replay.ts +897 -0
- package/src/worker/wal-retention.test.ts +758 -0
- package/src/worker/wal-retention.ts +1075 -0
- package/src/worker/wal.test.ts +618 -0
- package/src/worker/wal.ts +697 -0
- package/src/worker/websocket.test.ts +296 -0
- package/src/worker/websocket.ts +284 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication Rate Limiter Module
|
|
3
|
+
*
|
|
4
|
+
* Provides rate limiting specifically for authentication failures to prevent
|
|
5
|
+
* brute force and credential stuffing attacks.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Sliding window rate limiting per token prefix
|
|
9
|
+
* - Exponential backoff for repeated failures
|
|
10
|
+
* - Memory-bounded storage with LRU-style eviction
|
|
11
|
+
* - Lazy cleanup to work well with Cloudflare Workers
|
|
12
|
+
*
|
|
13
|
+
* @module @dotdo/postgres/worker/auth-rate-limiter
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { AuthRateLimiter } from './auth-rate-limiter'
|
|
18
|
+
*
|
|
19
|
+
* const rateLimiter = new AuthRateLimiter()
|
|
20
|
+
*
|
|
21
|
+
* // Check if request should be rate limited
|
|
22
|
+
* if (rateLimiter.isRateLimited(tokenPrefix)) {
|
|
23
|
+
* return new Response('Too many attempts', { status: 429 })
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* // Record a failure after failed authentication
|
|
27
|
+
* rateLimiter.recordFailure(tokenPrefix)
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Default rate limiter configuration.
|
|
32
|
+
*/
|
|
33
|
+
export const DEFAULT_AUTH_RATE_LIMITER_CONFIG = {
|
|
34
|
+
windowMs: 60000,
|
|
35
|
+
maxFailures: 10,
|
|
36
|
+
maxEntries: 10000,
|
|
37
|
+
cleanupIntervalMs: 300000,
|
|
38
|
+
keyLength: 20,
|
|
39
|
+
keyPrefix: 'token:',
|
|
40
|
+
maxBackoffPower: 10,
|
|
41
|
+
};
|
|
42
|
+
// ============================================================================
|
|
43
|
+
// AuthRateLimiter Class
|
|
44
|
+
// ============================================================================
|
|
45
|
+
/**
|
|
46
|
+
* Rate limiter for authentication failures.
|
|
47
|
+
*
|
|
48
|
+
* Implements a sliding window algorithm with exponential backoff to prevent
|
|
49
|
+
* brute force and credential stuffing attacks.
|
|
50
|
+
*
|
|
51
|
+
* @security This is a simple in-memory rate limiter. In production with
|
|
52
|
+
* multiple Workers, consider using Durable Objects or external
|
|
53
|
+
* storage for distributed rate limiting.
|
|
54
|
+
*
|
|
55
|
+
* Memory bounds:
|
|
56
|
+
* - Max entries: configurable (default 10,000)
|
|
57
|
+
* - Periodic cleanup: configurable (default every 5 minutes)
|
|
58
|
+
* - LRU-style eviction when at capacity
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const rateLimiter = new AuthRateLimiter({
|
|
63
|
+
* windowMs: 60000, // 1 minute window
|
|
64
|
+
* maxFailures: 5, // 5 failures per window
|
|
65
|
+
* maxEntries: 5000, // Max 5000 tracked keys
|
|
66
|
+
* })
|
|
67
|
+
*
|
|
68
|
+
* // Generate key from token
|
|
69
|
+
* const key = rateLimiter.generateKey(token)
|
|
70
|
+
*
|
|
71
|
+
* // Check before processing authentication
|
|
72
|
+
* if (rateLimiter.isRateLimited(key)) {
|
|
73
|
+
* return { error: 'RATE_LIMITED' }
|
|
74
|
+
* }
|
|
75
|
+
*
|
|
76
|
+
* // After failed authentication
|
|
77
|
+
* const isValid = await validateCredentials(...)
|
|
78
|
+
* if (!isValid) {
|
|
79
|
+
* rateLimiter.recordFailure(key)
|
|
80
|
+
* }
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export class AuthRateLimiter {
|
|
84
|
+
config;
|
|
85
|
+
entries;
|
|
86
|
+
lastCleanupTime;
|
|
87
|
+
lastCleanupCount;
|
|
88
|
+
/**
|
|
89
|
+
* Creates a new AuthRateLimiter instance.
|
|
90
|
+
*
|
|
91
|
+
* @param config - Optional configuration overrides
|
|
92
|
+
*/
|
|
93
|
+
constructor(config = {}) {
|
|
94
|
+
this.config = { ...DEFAULT_AUTH_RATE_LIMITER_CONFIG, ...config };
|
|
95
|
+
this.entries = new Map();
|
|
96
|
+
this.lastCleanupTime = Date.now();
|
|
97
|
+
this.lastCleanupCount = 0;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Generates a rate limit key from a token.
|
|
101
|
+
*
|
|
102
|
+
* Uses the token prefix to identify unique tokens without storing
|
|
103
|
+
* full tokens in memory for rate limiting.
|
|
104
|
+
*
|
|
105
|
+
* @param token - The full authentication token
|
|
106
|
+
* @returns The rate limit key
|
|
107
|
+
*/
|
|
108
|
+
generateKey(token) {
|
|
109
|
+
return this.config.keyPrefix + token.slice(0, this.config.keyLength);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Checks if a request should be rate limited based on prior failures.
|
|
113
|
+
*
|
|
114
|
+
* Uses a sliding window algorithm with exponential backoff:
|
|
115
|
+
* 1. If no entry exists or window expired, allow the request
|
|
116
|
+
* 2. Check if enough time has passed since the last failure (exponential backoff)
|
|
117
|
+
* 3. If not enough time has passed, rate limit
|
|
118
|
+
* 4. Check if failure count exceeds threshold
|
|
119
|
+
*
|
|
120
|
+
* NOTE: This method only CHECKS the rate limit state, it does NOT increment
|
|
121
|
+
* the failure count. Call recordFailure() to record a failure.
|
|
122
|
+
*
|
|
123
|
+
* @param key - Rate limit key (from generateKey)
|
|
124
|
+
* @returns true if the request should be rate limited, false otherwise
|
|
125
|
+
*
|
|
126
|
+
* @security Prevents brute force attacks by limiting authentication attempts.
|
|
127
|
+
* Attack vector: Attacker tries many passwords/tokens in rapid succession.
|
|
128
|
+
* Mitigation: After failures, exponential backoff is applied (2^N seconds).
|
|
129
|
+
*/
|
|
130
|
+
isRateLimited(key) {
|
|
131
|
+
const now = Date.now();
|
|
132
|
+
// Lazy cleanup: run periodically during normal operations
|
|
133
|
+
// This avoids needing a timer which doesn't work well in Workers
|
|
134
|
+
if (now - this.lastCleanupTime > this.config.cleanupIntervalMs) {
|
|
135
|
+
this.cleanup();
|
|
136
|
+
}
|
|
137
|
+
const entry = this.entries.get(key);
|
|
138
|
+
// No prior failures for this key
|
|
139
|
+
if (!entry) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
// Window expired - reset and allow
|
|
143
|
+
if (now - entry.windowStart > this.config.windowMs) {
|
|
144
|
+
this.entries.delete(key);
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
// SECURITY: Exponential backoff - require increasing delays between attempts
|
|
148
|
+
const requiredDelay = this.calculateExponentialBackoff(entry.count);
|
|
149
|
+
if (now - entry.lastAttempt < requiredDelay) {
|
|
150
|
+
// Not enough time has passed since last attempt - rate limited
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
// Check if failure count exceeds threshold
|
|
154
|
+
return entry.count >= this.config.maxFailures;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Records an authentication failure for rate limiting purposes.
|
|
158
|
+
*
|
|
159
|
+
* @param key - Rate limit key (from generateKey)
|
|
160
|
+
*
|
|
161
|
+
* @security Only call this when authentication actually fails. Do not call
|
|
162
|
+
* on successful authentications or when rate limiting has already
|
|
163
|
+
* blocked the request.
|
|
164
|
+
*/
|
|
165
|
+
recordFailure(key) {
|
|
166
|
+
const now = Date.now();
|
|
167
|
+
// Check if we need to evict before adding a new entry
|
|
168
|
+
if (!this.entries.has(key) && this.entries.size >= this.config.maxEntries) {
|
|
169
|
+
this.evictOldestEntries();
|
|
170
|
+
}
|
|
171
|
+
const entry = this.entries.get(key);
|
|
172
|
+
if (!entry || now - entry.windowStart > this.config.windowMs) {
|
|
173
|
+
// Start a new window
|
|
174
|
+
this.entries.set(key, { count: 1, windowStart: now, lastAttempt: now });
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// Increment failure count in existing window
|
|
178
|
+
entry.count++;
|
|
179
|
+
entry.lastAttempt = now;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Returns current rate limiter statistics for monitoring.
|
|
183
|
+
*
|
|
184
|
+
* @returns Statistics about the current rate limiter state
|
|
185
|
+
*/
|
|
186
|
+
getStats() {
|
|
187
|
+
return {
|
|
188
|
+
size: this.entries.size,
|
|
189
|
+
maxSize: this.config.maxEntries,
|
|
190
|
+
lastCleanupTime: this.lastCleanupTime,
|
|
191
|
+
lastCleanupCount: this.lastCleanupCount,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Clears all rate limit state.
|
|
196
|
+
*
|
|
197
|
+
* @security In production, this should never be exposed to external callers.
|
|
198
|
+
* Only intended for testing or administrative use.
|
|
199
|
+
*/
|
|
200
|
+
clear() {
|
|
201
|
+
this.entries.clear();
|
|
202
|
+
this.lastCleanupTime = Date.now();
|
|
203
|
+
this.lastCleanupCount = 0;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Gets the entry for a specific key (for testing/debugging).
|
|
207
|
+
*
|
|
208
|
+
* @param key - Rate limit key
|
|
209
|
+
* @returns The entry if it exists, undefined otherwise
|
|
210
|
+
*/
|
|
211
|
+
getEntry(key) {
|
|
212
|
+
return this.entries.get(key);
|
|
213
|
+
}
|
|
214
|
+
// ============================================================================
|
|
215
|
+
// Private Methods
|
|
216
|
+
// ============================================================================
|
|
217
|
+
/**
|
|
218
|
+
* Calculates exponential backoff delay based on failure count.
|
|
219
|
+
*
|
|
220
|
+
* @security Exponential backoff makes brute force attacks increasingly expensive.
|
|
221
|
+
* After N failures, attacker must wait 2^N seconds before the next attempt.
|
|
222
|
+
*
|
|
223
|
+
* @param failureCount - Number of consecutive failures
|
|
224
|
+
* @returns Required delay in milliseconds before next attempt is allowed
|
|
225
|
+
*/
|
|
226
|
+
calculateExponentialBackoff(failureCount) {
|
|
227
|
+
// Cap at configured power to prevent integer overflow
|
|
228
|
+
const cappedCount = Math.min(failureCount, this.config.maxBackoffPower);
|
|
229
|
+
return Math.pow(2, cappedCount) * 1000;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Performs cleanup of expired rate limit entries.
|
|
233
|
+
*
|
|
234
|
+
* @security This prevents memory leaks from accumulated expired entries.
|
|
235
|
+
* Uses lazy cleanup during normal operations instead of a timer
|
|
236
|
+
* to work better with Cloudflare Workers' event-driven model.
|
|
237
|
+
*
|
|
238
|
+
* @returns Number of entries removed
|
|
239
|
+
*/
|
|
240
|
+
cleanup() {
|
|
241
|
+
const now = Date.now();
|
|
242
|
+
let removed = 0;
|
|
243
|
+
// Remove entries older than the rate limit window
|
|
244
|
+
for (const [key, entry] of this.entries) {
|
|
245
|
+
if (now - entry.windowStart > this.config.windowMs) {
|
|
246
|
+
this.entries.delete(key);
|
|
247
|
+
removed++;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
this.lastCleanupTime = now;
|
|
251
|
+
this.lastCleanupCount = removed;
|
|
252
|
+
return removed;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Evicts oldest entries when rate limiter is at capacity.
|
|
256
|
+
* Uses Map iteration order (insertion order) for LRU-like eviction.
|
|
257
|
+
*
|
|
258
|
+
* @security Prevents memory exhaustion from attackers creating many unique
|
|
259
|
+
* rate limit keys. Evicts 10% of entries to amortize eviction cost.
|
|
260
|
+
*/
|
|
261
|
+
evictOldestEntries() {
|
|
262
|
+
// Evict 10% of max entries to amortize eviction overhead
|
|
263
|
+
const evictCount = Math.ceil(this.config.maxEntries / 10);
|
|
264
|
+
let evicted = 0;
|
|
265
|
+
for (const key of this.entries.keys()) {
|
|
266
|
+
if (evicted >= evictCount)
|
|
267
|
+
break;
|
|
268
|
+
this.entries.delete(key);
|
|
269
|
+
evicted++;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// ============================================================================
|
|
274
|
+
// Factory Functions
|
|
275
|
+
// ============================================================================
|
|
276
|
+
/**
|
|
277
|
+
* Creates a new AuthRateLimiter instance with the given configuration.
|
|
278
|
+
*
|
|
279
|
+
* @param config - Optional configuration overrides
|
|
280
|
+
* @returns A new AuthRateLimiter instance
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* ```typescript
|
|
284
|
+
* import { createAuthRateLimiter } from './auth-rate-limiter'
|
|
285
|
+
*
|
|
286
|
+
* const rateLimiter = createAuthRateLimiter({
|
|
287
|
+
* windowMs: 30000, // 30 second window
|
|
288
|
+
* maxFailures: 5, // 5 failures per window
|
|
289
|
+
* })
|
|
290
|
+
* ```
|
|
291
|
+
*/
|
|
292
|
+
export function createAuthRateLimiter(config = {}) {
|
|
293
|
+
return new AuthRateLimiter(config);
|
|
294
|
+
}
|
|
295
|
+
// ============================================================================
|
|
296
|
+
// Default Instance (for backwards compatibility)
|
|
297
|
+
// ============================================================================
|
|
298
|
+
/**
|
|
299
|
+
* Default rate limiter instance for module-level use.
|
|
300
|
+
*
|
|
301
|
+
* @deprecated Prefer creating instances with createAuthRateLimiter() for better
|
|
302
|
+
* testability and isolation. This is provided for backwards compatibility.
|
|
303
|
+
*
|
|
304
|
+
* @internal
|
|
305
|
+
*/
|
|
306
|
+
let defaultRateLimiter = null;
|
|
307
|
+
/**
|
|
308
|
+
* Gets or creates the default rate limiter instance.
|
|
309
|
+
*
|
|
310
|
+
* @returns The default AuthRateLimiter instance
|
|
311
|
+
*
|
|
312
|
+
* @internal
|
|
313
|
+
*/
|
|
314
|
+
export function getDefaultRateLimiter() {
|
|
315
|
+
if (!defaultRateLimiter) {
|
|
316
|
+
defaultRateLimiter = new AuthRateLimiter();
|
|
317
|
+
}
|
|
318
|
+
return defaultRateLimiter;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Resets the default rate limiter instance.
|
|
322
|
+
* Primarily for testing purposes.
|
|
323
|
+
*
|
|
324
|
+
* @internal
|
|
325
|
+
*/
|
|
326
|
+
export function resetDefaultRateLimiter() {
|
|
327
|
+
if (defaultRateLimiter) {
|
|
328
|
+
defaultRateLimiter.clear();
|
|
329
|
+
}
|
|
330
|
+
defaultRateLimiter = null;
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=auth-rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-rate-limiter.js","sourceRoot":"","sources":["../../src/worker/auth-rate-limiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication middleware for PostgresDO Worker routes
|
|
3
|
+
* Integrates with oauth.do for token validation and user-scoped database access
|
|
4
|
+
*
|
|
5
|
+
* Security features:
|
|
6
|
+
* - JWT structure validation (3 segments)
|
|
7
|
+
* - Algorithm validation (rejects alg:none)
|
|
8
|
+
* - Token expiration checking (exp/nbf claims)
|
|
9
|
+
* - Empty signature rejection
|
|
10
|
+
* - Rate limiting for auth failures
|
|
11
|
+
* - SQL injection prevention in database IDs
|
|
12
|
+
* - Token length limits (DoS prevention)
|
|
13
|
+
*/
|
|
14
|
+
import type { Context, MiddlewareHandler } from 'hono';
|
|
15
|
+
export type { Env } from './types';
|
|
16
|
+
import { type TokenCacheConfig, type CacheStats, type AuthenticatedUser, type AuthTokenValidationResult as TokenValidationResult, extractBearerToken } from '@dotdo/postgres-shared';
|
|
17
|
+
export type { AuthenticatedUser, TokenValidationResult };
|
|
18
|
+
/**
|
|
19
|
+
* Standardized error codes for authentication failures.
|
|
20
|
+
* These codes are exposed in API responses to help clients understand failures.
|
|
21
|
+
*/
|
|
22
|
+
export declare const AUTH_ERROR_CODES: {
|
|
23
|
+
/** No token provided */
|
|
24
|
+
readonly UNAUTHORIZED: "UNAUTHORIZED";
|
|
25
|
+
/** Token failed validation */
|
|
26
|
+
readonly INVALID_TOKEN: "INVALID_TOKEN";
|
|
27
|
+
/** Too many failed attempts */
|
|
28
|
+
readonly RATE_LIMITED: "RATE_LIMITED";
|
|
29
|
+
};
|
|
30
|
+
export type AuthErrorCode = (typeof AUTH_ERROR_CODES)[keyof typeof AUTH_ERROR_CODES];
|
|
31
|
+
/**
|
|
32
|
+
* Standardized error messages for authentication failures.
|
|
33
|
+
* Consistent messages improve security by not leaking implementation details.
|
|
34
|
+
*/
|
|
35
|
+
export declare const AUTH_ERROR_MESSAGES: {
|
|
36
|
+
readonly UNAUTHORIZED: "Missing authentication token";
|
|
37
|
+
readonly INVALID_TOKEN: "Invalid authentication token";
|
|
38
|
+
readonly RATE_LIMITED: "Too many authentication failures. Please try again later.";
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Performs a timing-safe comparison of two strings.
|
|
42
|
+
*
|
|
43
|
+
* @security This function uses constant-time comparison to prevent timing attacks.
|
|
44
|
+
* Timing attacks can leak information about the secret by measuring
|
|
45
|
+
* how long the comparison takes.
|
|
46
|
+
*
|
|
47
|
+
* @param a - First string to compare
|
|
48
|
+
* @param b - Second string to compare
|
|
49
|
+
* @returns true if strings are equal, false otherwise
|
|
50
|
+
*/
|
|
51
|
+
export declare function timingSafeEqual(a: string, b: string): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Clears all rate limit state. Intended for testing only.
|
|
54
|
+
*
|
|
55
|
+
* @security In production, this should never be exposed to external callers.
|
|
56
|
+
* Only exported for use in test cleanup between test cases.
|
|
57
|
+
*/
|
|
58
|
+
export declare function clearRateLimitState(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Get rate limiter statistics for monitoring.
|
|
61
|
+
*
|
|
62
|
+
* @returns Current rate limiter stats including size and last cleanup time
|
|
63
|
+
*/
|
|
64
|
+
export declare function getRateLimiterStats(): {
|
|
65
|
+
size: number;
|
|
66
|
+
maxSize: number;
|
|
67
|
+
lastCleanupTime: number;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Generates a safe, deterministic database identifier from a user ID.
|
|
71
|
+
*
|
|
72
|
+
* @security This function provides defense-in-depth sanitization before
|
|
73
|
+
* generating the database ID. Even though validateJWTSecurity
|
|
74
|
+
* already checks for SQL injection, this ensures any user ID
|
|
75
|
+
* that reaches the database layer is safe.
|
|
76
|
+
*
|
|
77
|
+
* Sanitization rules:
|
|
78
|
+
* - `--` -> `_` : Prevents SQL comment injection
|
|
79
|
+
* - `/*` -> `_` : Prevents block comment start
|
|
80
|
+
* - `* /`-> `_` : Prevents block comment end
|
|
81
|
+
* - `;` -> `_` : Prevents statement chaining
|
|
82
|
+
* - `'` -> `_` : Prevents string delimiter attacks
|
|
83
|
+
* - `"` -> `_` : Prevents identifier injection
|
|
84
|
+
*
|
|
85
|
+
* @param userId - User identifier from JWT sub claim
|
|
86
|
+
* @returns Safe database identifier in format "user_{sanitized_id}"
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* generateDatabaseId("user123") // "user_user123"
|
|
91
|
+
* generateDatabaseId("admin'--") // "user_admin___"
|
|
92
|
+
* generateDatabaseId("test@example.com") // "user_test_example_com"
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function generateDatabaseId(userId: string): string;
|
|
96
|
+
/**
|
|
97
|
+
* Configuration for the token validation cache.
|
|
98
|
+
*
|
|
99
|
+
* @security Caching reduces load on the OAuth provider but introduces a
|
|
100
|
+
* window where revoked tokens may still be accepted. Balance
|
|
101
|
+
* TTL based on your security requirements.
|
|
102
|
+
*/
|
|
103
|
+
export interface AuthTokenCacheConfig {
|
|
104
|
+
/** Maximum number of tokens to cache (default: 1000) */
|
|
105
|
+
maxSize?: number;
|
|
106
|
+
/** Cache TTL in milliseconds (default: 60000 = 1 minute) */
|
|
107
|
+
ttl?: number;
|
|
108
|
+
/** Interval for cleanup of expired entries in ms (default: 60000) */
|
|
109
|
+
cleanupInterval?: number;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Configuration options for the authentication middleware.
|
|
113
|
+
*
|
|
114
|
+
* @security Review all options carefully - incorrect configuration can
|
|
115
|
+
* create security vulnerabilities.
|
|
116
|
+
*/
|
|
117
|
+
export interface AuthConfig {
|
|
118
|
+
/**
|
|
119
|
+
* OAuth provider URL for token validation.
|
|
120
|
+
* @default 'https://oauth.do'
|
|
121
|
+
*/
|
|
122
|
+
oauthUrl?: string;
|
|
123
|
+
/**
|
|
124
|
+
* How long to cache valid tokens in milliseconds.
|
|
125
|
+
* @default 60000 (1 minute)
|
|
126
|
+
* @security Lower values improve security (faster revocation) at cost of
|
|
127
|
+
* more OAuth provider requests. Higher values improve performance
|
|
128
|
+
* but delay token revocation.
|
|
129
|
+
*/
|
|
130
|
+
tokenCacheTTL?: number;
|
|
131
|
+
/**
|
|
132
|
+
* Advanced cache configuration options.
|
|
133
|
+
* Overrides tokenCacheTTL if ttl is specified.
|
|
134
|
+
*/
|
|
135
|
+
cacheConfig?: AuthTokenCacheConfig;
|
|
136
|
+
/**
|
|
137
|
+
* Custom token validation function.
|
|
138
|
+
* Use this to integrate with custom OAuth providers or add additional validation.
|
|
139
|
+
*
|
|
140
|
+
* @security Your validator MUST verify the cryptographic signature.
|
|
141
|
+
* Returning valid:true without signature verification is a
|
|
142
|
+
* critical vulnerability.
|
|
143
|
+
*/
|
|
144
|
+
validateToken?: (token: string) => Promise<TokenValidationResult>;
|
|
145
|
+
/**
|
|
146
|
+
* Allow requests without authentication tokens.
|
|
147
|
+
* @default false
|
|
148
|
+
* @security Only enable if your application explicitly handles anonymous users.
|
|
149
|
+
* Anonymous users should have minimal permissions.
|
|
150
|
+
*/
|
|
151
|
+
allowAnonymous?: boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Paths that bypass authentication entirely.
|
|
154
|
+
* @default ['/ping', '/health']
|
|
155
|
+
* @security Keep this list minimal. Only include endpoints that expose
|
|
156
|
+
* no sensitive data and are needed for infrastructure (health checks).
|
|
157
|
+
*/
|
|
158
|
+
publicPaths?: string[];
|
|
159
|
+
/**
|
|
160
|
+
* Custom handler for unauthorized requests.
|
|
161
|
+
* Use to customize error responses or redirect to login pages.
|
|
162
|
+
*/
|
|
163
|
+
onUnauthorized?: (c: Context) => Response;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Authentication context available in request handlers.
|
|
167
|
+
*
|
|
168
|
+
* Access via `getAuth(c)` or `c.get('auth')`.
|
|
169
|
+
*/
|
|
170
|
+
export interface AuthContext {
|
|
171
|
+
/** Authenticated user info, null if not authenticated */
|
|
172
|
+
user: AuthenticatedUser | null;
|
|
173
|
+
/** Raw JWT token, null if not provided */
|
|
174
|
+
token: string | null;
|
|
175
|
+
/** True if user is authenticated */
|
|
176
|
+
isAuthenticated: boolean;
|
|
177
|
+
/** Database ID for this user's isolated database, null if not authenticated */
|
|
178
|
+
databaseId: string | null;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Reconfigures the global token cache with new settings.
|
|
182
|
+
* Disposes the existing cache and creates a new one.
|
|
183
|
+
*
|
|
184
|
+
* @param config - New cache configuration
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* configureTokenCache({
|
|
189
|
+
* maxSize: 5000, // More entries for high-traffic apps
|
|
190
|
+
* defaultTTL: 30000, // 30 second TTL for faster revocation
|
|
191
|
+
* })
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
export declare function configureTokenCache(config: TokenCacheConfig): void;
|
|
195
|
+
/**
|
|
196
|
+
* Returns current token cache statistics for monitoring.
|
|
197
|
+
*
|
|
198
|
+
* @returns Cache stats including hits, misses, and size
|
|
199
|
+
*/
|
|
200
|
+
export declare function getTokenCacheStats(): CacheStats;
|
|
201
|
+
/**
|
|
202
|
+
* Clears all cached tokens. Intended for testing only.
|
|
203
|
+
*
|
|
204
|
+
* @security In production, avoid clearing the cache as it will cause
|
|
205
|
+
* a thundering herd to the OAuth provider.
|
|
206
|
+
*/
|
|
207
|
+
export declare function clearTokenCache(): void;
|
|
208
|
+
export { extractBearerToken };
|
|
209
|
+
/**
|
|
210
|
+
* Creates a Hono middleware handler that validates JWT tokens.
|
|
211
|
+
*
|
|
212
|
+
* This middleware:
|
|
213
|
+
* 1. Skips authentication for public paths
|
|
214
|
+
* 2. Extracts Bearer token from Authorization header
|
|
215
|
+
* 3. Applies rate limiting for failed attempts
|
|
216
|
+
* 4. Validates JWT structure and security claims
|
|
217
|
+
* 5. Validates token with OAuth provider (with caching)
|
|
218
|
+
* 6. Sets authenticated user context
|
|
219
|
+
*
|
|
220
|
+
* @security The middleware applies multiple layers of validation in order
|
|
221
|
+
* of computational cost - cheap checks first (structure, rate limit)
|
|
222
|
+
* before expensive checks (OAuth provider validation).
|
|
223
|
+
*
|
|
224
|
+
* @param config - Authentication configuration options
|
|
225
|
+
* @returns Hono middleware handler
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* ```typescript
|
|
229
|
+
* const app = new Hono()
|
|
230
|
+
* app.use('*', createAuthMiddleware({
|
|
231
|
+
* publicPaths: ['/ping', '/health', '/docs'],
|
|
232
|
+
* tokenCacheTTL: 30000, // 30 second cache
|
|
233
|
+
* }))
|
|
234
|
+
* ```
|
|
235
|
+
*/
|
|
236
|
+
export declare function createAuthMiddleware(config?: AuthConfig): MiddlewareHandler;
|
|
237
|
+
/**
|
|
238
|
+
* Creates a middleware that enforces authentication.
|
|
239
|
+
*
|
|
240
|
+
* Use this on routes that MUST have an authenticated user.
|
|
241
|
+
* For routes that work with optional authentication, use
|
|
242
|
+
* createAuthMiddleware with allowAnonymous:true instead.
|
|
243
|
+
*
|
|
244
|
+
* @returns Hono middleware handler
|
|
245
|
+
*
|
|
246
|
+
* @example
|
|
247
|
+
* ```typescript
|
|
248
|
+
* app.get('/api/private', requireAuth(), (c) => {
|
|
249
|
+
* const user = requireUser(c)
|
|
250
|
+
* return c.json({ userId: user.id })
|
|
251
|
+
* })
|
|
252
|
+
* ```
|
|
253
|
+
*/
|
|
254
|
+
export declare function requireAuth(): MiddlewareHandler;
|
|
255
|
+
/**
|
|
256
|
+
* Retrieves the authentication context from a request.
|
|
257
|
+
*
|
|
258
|
+
* Returns a default unauthenticated context if none is set.
|
|
259
|
+
* This is safe to call on any route, even those without auth middleware.
|
|
260
|
+
*
|
|
261
|
+
* @param c - Hono context
|
|
262
|
+
* @returns Authentication context
|
|
263
|
+
*
|
|
264
|
+
* @example
|
|
265
|
+
* ```typescript
|
|
266
|
+
* app.get('/api/data', (c) => {
|
|
267
|
+
* const auth = getAuth(c)
|
|
268
|
+
* if (auth.isAuthenticated) {
|
|
269
|
+
* return c.json({ user: auth.user })
|
|
270
|
+
* }
|
|
271
|
+
* return c.json({ guest: true })
|
|
272
|
+
* })
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
export declare function getAuth(c: Context): AuthContext;
|
|
276
|
+
/**
|
|
277
|
+
* Retrieves the authenticated user or throws an error.
|
|
278
|
+
*
|
|
279
|
+
* Use this in routes protected by requireAuth() where you need
|
|
280
|
+
* the user object and want TypeScript to know it's non-null.
|
|
281
|
+
*
|
|
282
|
+
* @param c - Hono context
|
|
283
|
+
* @returns Authenticated user
|
|
284
|
+
* @throws Error if user is not authenticated
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* ```typescript
|
|
288
|
+
* app.get('/api/profile', requireAuth(), (c) => {
|
|
289
|
+
* const user = requireUser(c) // Type: AuthenticatedUser (not null)
|
|
290
|
+
* return c.json({ email: user.email })
|
|
291
|
+
* })
|
|
292
|
+
* ```
|
|
293
|
+
*/
|
|
294
|
+
export declare function requireUser(c: Context): AuthenticatedUser;
|
|
295
|
+
/**
|
|
296
|
+
* Retrieves the database ID for the authenticated user or throws an error.
|
|
297
|
+
*
|
|
298
|
+
* The database ID is a sanitized, deterministic identifier derived from
|
|
299
|
+
* the user ID. Use this to access the user's isolated database.
|
|
300
|
+
*
|
|
301
|
+
* @param c - Hono context
|
|
302
|
+
* @returns Database ID string (e.g., "user_abc123")
|
|
303
|
+
* @throws Error if user is not authenticated
|
|
304
|
+
*
|
|
305
|
+
* @example
|
|
306
|
+
* ```typescript
|
|
307
|
+
* app.get('/api/data', requireAuth(), (c) => {
|
|
308
|
+
* const dbId = getDatabaseId(c)
|
|
309
|
+
* const db = await getDatabase(dbId)
|
|
310
|
+
* // ...
|
|
311
|
+
* })
|
|
312
|
+
* ```
|
|
313
|
+
*/
|
|
314
|
+
export declare function getDatabaseId(c: Context): string;
|
|
315
|
+
/**
|
|
316
|
+
* Gets the Durable Object ID for a user's database.
|
|
317
|
+
*
|
|
318
|
+
* @param namespace - Durable Object namespace binding
|
|
319
|
+
* @param userId - User identifier from JWT
|
|
320
|
+
* @returns Durable Object ID for the user's database
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* ```typescript
|
|
324
|
+
* const doId = getUserDOId(env.POSTGRES_DO, user.id)
|
|
325
|
+
* const stub = env.POSTGRES_DO.get(doId)
|
|
326
|
+
* ```
|
|
327
|
+
*/
|
|
328
|
+
export declare function getUserDOId(namespace: DurableObjectNamespace, userId: string): DurableObjectId;
|
|
329
|
+
/**
|
|
330
|
+
* Gets a Durable Object stub for a user's database.
|
|
331
|
+
*
|
|
332
|
+
* Convenience function that combines getUserDOId and namespace.get().
|
|
333
|
+
*
|
|
334
|
+
* @param namespace - Durable Object namespace binding
|
|
335
|
+
* @param userId - User identifier from JWT
|
|
336
|
+
* @returns Durable Object stub for the user's database
|
|
337
|
+
*
|
|
338
|
+
* @example
|
|
339
|
+
* ```typescript
|
|
340
|
+
* const stub = getUserDOStub(env.POSTGRES_DO, user.id)
|
|
341
|
+
* const response = await stub.fetch(request)
|
|
342
|
+
* ```
|
|
343
|
+
*/
|
|
344
|
+
export declare function getUserDOStub(namespace: DurableObjectNamespace, userId: string): DurableObjectStub;
|
|
345
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/worker/auth.ts"],"names":[],"mappings":"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"}
|