@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,848 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hostname-based Multi-tenant DO Routing
|
|
3
|
+
*
|
|
4
|
+
* Purpose: Route incoming requests to the correct Durable Object based on
|
|
5
|
+
* tenant identification extracted from hostname, path, or headers.
|
|
6
|
+
*
|
|
7
|
+
* This module provides a flexible tenant routing system that supports:
|
|
8
|
+
* - Subdomain-based tenancy (tenant1.app.com)
|
|
9
|
+
* - Path-based tenancy (/tenant1/api/...)
|
|
10
|
+
* - Header-based tenancy (X-Tenant-ID)
|
|
11
|
+
* - Custom extraction functions
|
|
12
|
+
* - Blocked tenant lists
|
|
13
|
+
* - Tenant isolation guarantees
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Standard HTTP header names used by the tenant router
|
|
17
|
+
*/
|
|
18
|
+
export declare const HEADERS: {
|
|
19
|
+
/** Header containing the tenant identifier */
|
|
20
|
+
readonly TENANT_ID: "X-Tenant-ID";
|
|
21
|
+
/** Header containing the correlation/request ID */
|
|
22
|
+
readonly CORRELATION_ID: "X-Correlation-ID";
|
|
23
|
+
/** Header containing the trace ID for distributed tracing */
|
|
24
|
+
readonly TRACE_ID: "X-Trace-ID";
|
|
25
|
+
/** Header containing the span ID for distributed tracing */
|
|
26
|
+
readonly SPAN_ID: "X-Span-ID";
|
|
27
|
+
/** Header containing the parent span ID for distributed tracing */
|
|
28
|
+
readonly PARENT_SPAN_ID: "X-Parent-Span-ID";
|
|
29
|
+
/** Header indicating whether the trace is sampled */
|
|
30
|
+
readonly TRACE_SAMPLED: "X-Trace-Sampled";
|
|
31
|
+
};
|
|
32
|
+
export type HeaderName = (typeof HEADERS)[keyof typeof HEADERS];
|
|
33
|
+
export declare const DEFAULT_HEADER_NAME: "X-Tenant-ID";
|
|
34
|
+
export declare const DEFAULT_PATH_PREFIX = "/";
|
|
35
|
+
export declare const DEFAULT_REQUEST_TIMEOUT_MS = 30000;
|
|
36
|
+
/**
|
|
37
|
+
* Validate that a tenant ID is safe and well-formed.
|
|
38
|
+
*
|
|
39
|
+
* Security requirements:
|
|
40
|
+
* - Non-empty and within length limits
|
|
41
|
+
* - Starts with alphanumeric character
|
|
42
|
+
* - Contains only alphanumeric, underscore, or hyphen
|
|
43
|
+
* - No control characters (including null bytes)
|
|
44
|
+
* - No path traversal sequences
|
|
45
|
+
*
|
|
46
|
+
* @param tenantId The tenant ID to validate
|
|
47
|
+
* @returns true if the tenant ID is valid, false otherwise
|
|
48
|
+
*/
|
|
49
|
+
export declare function isValidTenantId(tenantId: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Source of tenant identification
|
|
52
|
+
*/
|
|
53
|
+
export type TenantExtractionSource = 'subdomain' | 'path' | 'header' | 'custom';
|
|
54
|
+
/**
|
|
55
|
+
* Result of tenant extraction from a request
|
|
56
|
+
*/
|
|
57
|
+
export interface TenantExtractionResult {
|
|
58
|
+
/** The extracted tenant identifier, or null if extraction failed */
|
|
59
|
+
tenantId: string | null;
|
|
60
|
+
/** How the tenant was identified */
|
|
61
|
+
source: TenantExtractionSource;
|
|
62
|
+
/** Original hostname from the request */
|
|
63
|
+
originalHostname: string;
|
|
64
|
+
/** Modified path (with tenant prefix stripped for path-based extraction) */
|
|
65
|
+
modifiedPath?: string | undefined;
|
|
66
|
+
/** Additional metadata from custom extractors */
|
|
67
|
+
metadata?: Record<string, unknown> | undefined;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Routing metadata about how the tenant was resolved
|
|
71
|
+
*/
|
|
72
|
+
export interface RoutingMetadata {
|
|
73
|
+
/** Which extractor type was used */
|
|
74
|
+
extractorType: TenantExtractionSource;
|
|
75
|
+
/** Whether the tenant was found in cache (if caching is enabled) */
|
|
76
|
+
cached?: boolean;
|
|
77
|
+
/** The DO ID that was generated */
|
|
78
|
+
doId: string;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Timing information for the routing operation
|
|
82
|
+
*/
|
|
83
|
+
export interface RoutingTiming {
|
|
84
|
+
/** Time taken to extract tenant from request (ms) */
|
|
85
|
+
extractionTimeMs: number;
|
|
86
|
+
/** Time taken to route to DO (ms) */
|
|
87
|
+
routingTimeMs: number;
|
|
88
|
+
/** Total time for the entire operation (ms) */
|
|
89
|
+
totalTimeMs: number;
|
|
90
|
+
/** Timestamp when routing started */
|
|
91
|
+
startTimestamp: number;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Tenant context information
|
|
95
|
+
*/
|
|
96
|
+
export interface TenantContext {
|
|
97
|
+
/** The tenant identifier */
|
|
98
|
+
tenantId: string;
|
|
99
|
+
/** How the tenant was identified */
|
|
100
|
+
source: TenantExtractionSource;
|
|
101
|
+
/** Additional metadata from extraction */
|
|
102
|
+
metadata?: Record<string, unknown> | undefined;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Result of routing a request to a tenant's DO
|
|
106
|
+
*/
|
|
107
|
+
export interface TenantRoutingResult {
|
|
108
|
+
/** The response from the DO */
|
|
109
|
+
response: Response;
|
|
110
|
+
/** Routing metadata about how tenant was resolved */
|
|
111
|
+
routingMetadata: RoutingMetadata;
|
|
112
|
+
/** Timing information for the operation */
|
|
113
|
+
timing: RoutingTiming;
|
|
114
|
+
/** Tenant context information */
|
|
115
|
+
tenantContext: TenantContext;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Function signature for custom tenant extraction
|
|
119
|
+
*/
|
|
120
|
+
export type TenantExtractor = (request: Request) => TenantExtractionResult | Promise<TenantExtractionResult>;
|
|
121
|
+
/**
|
|
122
|
+
* Simplified extractor that just returns tenant ID or null
|
|
123
|
+
*/
|
|
124
|
+
export type SimpleTenantExtractor = (request: Request) => string | null | Promise<string | null>;
|
|
125
|
+
/**
|
|
126
|
+
* Preset extractor types
|
|
127
|
+
*/
|
|
128
|
+
export type PresetExtractorType = 'subdomain' | 'path' | 'header';
|
|
129
|
+
/**
|
|
130
|
+
* Callback for dynamic blocked tenant checks
|
|
131
|
+
*/
|
|
132
|
+
export type BlockedTenantCallback = (tenantId: string, request: Request) => boolean | Promise<boolean>;
|
|
133
|
+
/**
|
|
134
|
+
* Function to transform tenant IDs before routing
|
|
135
|
+
*/
|
|
136
|
+
export type TenantTransformer = (tenantId: string) => string;
|
|
137
|
+
/**
|
|
138
|
+
* Custom error response formatter
|
|
139
|
+
*/
|
|
140
|
+
export type ErrorResponseFormatter = (status: number, message: string, correlationId: string, tenantId?: string) => Response;
|
|
141
|
+
/**
|
|
142
|
+
* Log levels for structured logging
|
|
143
|
+
*/
|
|
144
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
145
|
+
/**
|
|
146
|
+
* Structured log entry
|
|
147
|
+
*/
|
|
148
|
+
export interface LogEntry {
|
|
149
|
+
level: LogLevel;
|
|
150
|
+
message: string;
|
|
151
|
+
tenantId?: string;
|
|
152
|
+
correlationId?: string;
|
|
153
|
+
timestamp: number;
|
|
154
|
+
data?: Record<string, unknown>;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Logger interface for observability
|
|
158
|
+
*/
|
|
159
|
+
export interface TenantRouterLogger {
|
|
160
|
+
log(entry: LogEntry): void;
|
|
161
|
+
debug(message: string, data?: Record<string, unknown>): void;
|
|
162
|
+
info(message: string, data?: Record<string, unknown>): void;
|
|
163
|
+
warn(message: string, data?: Record<string, unknown>): void;
|
|
164
|
+
error(message: string, data?: Record<string, unknown>): void;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Metrics data for a single request
|
|
168
|
+
*/
|
|
169
|
+
export interface RequestMetrics {
|
|
170
|
+
tenantId: string;
|
|
171
|
+
method: string;
|
|
172
|
+
path: string;
|
|
173
|
+
status: number;
|
|
174
|
+
routingLatencyMs: number;
|
|
175
|
+
doResponseTimeMs: number;
|
|
176
|
+
timestamp: number;
|
|
177
|
+
correlationId: string;
|
|
178
|
+
traceId?: string | undefined;
|
|
179
|
+
spanId?: string | undefined;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Metrics collector interface for observability
|
|
183
|
+
*/
|
|
184
|
+
export interface MetricsCollector {
|
|
185
|
+
/**
|
|
186
|
+
* Record metrics for a routed request
|
|
187
|
+
*/
|
|
188
|
+
recordRequest(metrics: RequestMetrics): void;
|
|
189
|
+
/**
|
|
190
|
+
* Increment request count for a tenant
|
|
191
|
+
*/
|
|
192
|
+
incrementRequestCount(tenantId: string): void;
|
|
193
|
+
/**
|
|
194
|
+
* Record routing latency
|
|
195
|
+
*/
|
|
196
|
+
recordLatency(tenantId: string, latencyMs: number): void;
|
|
197
|
+
/**
|
|
198
|
+
* Record DO response time
|
|
199
|
+
*/
|
|
200
|
+
recordDoResponseTime(tenantId: string, responseTimeMs: number): void;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Trace context for distributed tracing
|
|
204
|
+
*/
|
|
205
|
+
export interface TraceContext {
|
|
206
|
+
traceId: string;
|
|
207
|
+
spanId: string;
|
|
208
|
+
parentSpanId?: string;
|
|
209
|
+
sampled?: boolean;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Function to extract trace context from request
|
|
213
|
+
*/
|
|
214
|
+
export type TraceContextExtractor = (request: Request) => TraceContext | null;
|
|
215
|
+
/**
|
|
216
|
+
* Function to generate a new span ID
|
|
217
|
+
*/
|
|
218
|
+
export type SpanIdGenerator = () => string;
|
|
219
|
+
/**
|
|
220
|
+
* Core routing configuration
|
|
221
|
+
*/
|
|
222
|
+
export interface RoutingConfig {
|
|
223
|
+
/** The Durable Object namespace to route requests to */
|
|
224
|
+
doNamespace: DurableObjectNamespace;
|
|
225
|
+
/**
|
|
226
|
+
* How to extract tenant from requests:
|
|
227
|
+
* - 'subdomain': Extract from hostname subdomain
|
|
228
|
+
* - 'path': Extract from URL path
|
|
229
|
+
* - 'header': Extract from HTTP header
|
|
230
|
+
* - TenantExtractor: Custom extraction function
|
|
231
|
+
*/
|
|
232
|
+
extractTenant: TenantExtractor | SimpleTenantExtractor | PresetExtractorType;
|
|
233
|
+
/**
|
|
234
|
+
* Base domain for subdomain extraction (e.g., 'app.com')
|
|
235
|
+
* Required for proper subdomain extraction with multi-level TLDs
|
|
236
|
+
*/
|
|
237
|
+
baseDomain?: string;
|
|
238
|
+
/**
|
|
239
|
+
* Path prefix for path-based extraction
|
|
240
|
+
* e.g., '/orgs' would extract from /orgs/{tenant}/...
|
|
241
|
+
* @default '/'
|
|
242
|
+
*/
|
|
243
|
+
pathPrefix?: string;
|
|
244
|
+
/**
|
|
245
|
+
* Header name for header-based extraction
|
|
246
|
+
* @default 'X-Tenant-ID'
|
|
247
|
+
*/
|
|
248
|
+
headerName?: string;
|
|
249
|
+
/**
|
|
250
|
+
* Request timeout in milliseconds
|
|
251
|
+
* @default 30000
|
|
252
|
+
*/
|
|
253
|
+
requestTimeoutMs?: number;
|
|
254
|
+
/**
|
|
255
|
+
* List of blocked tenant identifiers
|
|
256
|
+
* Supports exact matches and wildcard patterns (e.g., 'admin*')
|
|
257
|
+
*/
|
|
258
|
+
blockedTenants?: string[];
|
|
259
|
+
/**
|
|
260
|
+
* Dynamic callback for checking if a tenant is blocked
|
|
261
|
+
*/
|
|
262
|
+
blockedTenantCallback?: BlockedTenantCallback;
|
|
263
|
+
/**
|
|
264
|
+
* Custom error response formatter
|
|
265
|
+
*/
|
|
266
|
+
errorResponseFormatter?: ErrorResponseFormatter;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Observability configuration
|
|
270
|
+
*/
|
|
271
|
+
export interface ObservabilityConfig {
|
|
272
|
+
/** Metrics collector for recording request metrics */
|
|
273
|
+
metricsCollector?: MetricsCollector;
|
|
274
|
+
/** Logger for structured logging */
|
|
275
|
+
logger?: TenantRouterLogger;
|
|
276
|
+
/** Function to extract trace context from incoming requests */
|
|
277
|
+
traceContextExtractor?: TraceContextExtractor;
|
|
278
|
+
/**
|
|
279
|
+
* Whether to propagate trace context to forwarded requests
|
|
280
|
+
* @default true
|
|
281
|
+
*/
|
|
282
|
+
propagateTraceContext?: boolean;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Rate limiting configuration
|
|
286
|
+
*/
|
|
287
|
+
export interface RateLimitingConfig {
|
|
288
|
+
/**
|
|
289
|
+
* Enable rate limiting
|
|
290
|
+
* @default false
|
|
291
|
+
*/
|
|
292
|
+
enabled?: boolean;
|
|
293
|
+
/**
|
|
294
|
+
* Maximum requests allowed within the window
|
|
295
|
+
*/
|
|
296
|
+
maxRequests?: number;
|
|
297
|
+
/**
|
|
298
|
+
* Time window in milliseconds
|
|
299
|
+
* @default 60000 (1 minute)
|
|
300
|
+
*/
|
|
301
|
+
windowMs?: number;
|
|
302
|
+
/**
|
|
303
|
+
* List of tenant IDs that bypass rate limiting
|
|
304
|
+
*/
|
|
305
|
+
bypassTenants?: string[];
|
|
306
|
+
/**
|
|
307
|
+
* Dynamic callback for checking if a tenant should bypass rate limiting
|
|
308
|
+
*/
|
|
309
|
+
bypassCallback?: (tenantId: string, request: Request) => boolean | Promise<boolean>;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Domain caching configuration
|
|
313
|
+
*/
|
|
314
|
+
export interface DomainCachingConfig {
|
|
315
|
+
/**
|
|
316
|
+
* Enable domain mapping cache
|
|
317
|
+
* @default false
|
|
318
|
+
*/
|
|
319
|
+
enabled?: boolean;
|
|
320
|
+
/**
|
|
321
|
+
* Cache TTL in milliseconds
|
|
322
|
+
* @default 300000 (5 minutes)
|
|
323
|
+
*/
|
|
324
|
+
ttlMs?: number;
|
|
325
|
+
/**
|
|
326
|
+
* Maximum number of cache entries
|
|
327
|
+
* @default 10000
|
|
328
|
+
*/
|
|
329
|
+
maxEntries?: number;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Complete tenant router configuration
|
|
333
|
+
* Extends RoutingConfig with nested sub-configs for better organization
|
|
334
|
+
*/
|
|
335
|
+
export interface TenantRouterConfig extends RoutingConfig {
|
|
336
|
+
/**
|
|
337
|
+
* Whether to strip the tenant segment from the forwarded path
|
|
338
|
+
* @default true
|
|
339
|
+
*/
|
|
340
|
+
stripTenantFromPath?: boolean;
|
|
341
|
+
/**
|
|
342
|
+
* Transform tenant ID before routing (e.g., lowercase normalization)
|
|
343
|
+
*/
|
|
344
|
+
transformTenant?: TenantTransformer;
|
|
345
|
+
/**
|
|
346
|
+
* Ordered list of extraction strategies to try
|
|
347
|
+
* First successful extraction wins
|
|
348
|
+
*/
|
|
349
|
+
extractionOrder?: PresetExtractorType[];
|
|
350
|
+
/** Observability settings */
|
|
351
|
+
observability?: ObservabilityConfig;
|
|
352
|
+
/** Rate limiting settings */
|
|
353
|
+
rateLimit?: RateLimitingConfig;
|
|
354
|
+
/** Domain caching settings */
|
|
355
|
+
domainCache?: DomainCachingConfig;
|
|
356
|
+
/**
|
|
357
|
+
* @deprecated Use blockedTenantCallback instead
|
|
358
|
+
* Dynamic callback for checking if a tenant is blocked
|
|
359
|
+
*/
|
|
360
|
+
isBlocked?: BlockedTenantCallback;
|
|
361
|
+
/**
|
|
362
|
+
* @deprecated Use errorResponseFormatter instead
|
|
363
|
+
* Custom error response formatter
|
|
364
|
+
*/
|
|
365
|
+
formatError?: ErrorResponseFormatter;
|
|
366
|
+
/**
|
|
367
|
+
* @deprecated Use domainCache.ttlMs instead
|
|
368
|
+
* Cache TTL for custom domain mappings in milliseconds
|
|
369
|
+
* @default 300000 (5 minutes)
|
|
370
|
+
*/
|
|
371
|
+
domainCacheTtlMs?: number;
|
|
372
|
+
/**
|
|
373
|
+
* @deprecated Use rateLimit.maxRequests instead (with windowMs: 60000)
|
|
374
|
+
* Per-tenant rate limit (requests per minute)
|
|
375
|
+
* Set to 0 to disable rate limiting
|
|
376
|
+
* @default 0
|
|
377
|
+
*/
|
|
378
|
+
rateLimitPerMinute?: number;
|
|
379
|
+
/**
|
|
380
|
+
* @deprecated Use observability.metricsCollector instead
|
|
381
|
+
* Metrics collector for recording request metrics
|
|
382
|
+
*/
|
|
383
|
+
metricsCollector?: MetricsCollector;
|
|
384
|
+
/**
|
|
385
|
+
* @deprecated Use observability.logger instead
|
|
386
|
+
* Logger for structured logging
|
|
387
|
+
*/
|
|
388
|
+
logger?: TenantRouterLogger;
|
|
389
|
+
/**
|
|
390
|
+
* @deprecated Use observability.traceContextExtractor instead
|
|
391
|
+
* Function to extract trace context from incoming requests
|
|
392
|
+
*/
|
|
393
|
+
traceContextExtractor?: TraceContextExtractor;
|
|
394
|
+
/**
|
|
395
|
+
* @deprecated Use observability.propagateTraceContext instead
|
|
396
|
+
* Whether to propagate trace context to forwarded requests
|
|
397
|
+
* @default true
|
|
398
|
+
*/
|
|
399
|
+
propagateTraceContext?: boolean;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* The TenantRouter interface for routing requests to tenant-specific DOs
|
|
403
|
+
*/
|
|
404
|
+
export interface TenantRouter {
|
|
405
|
+
/**
|
|
406
|
+
* Route a request to the appropriate tenant's Durable Object
|
|
407
|
+
* @param request The incoming request
|
|
408
|
+
* @returns Response from the tenant's DO
|
|
409
|
+
*
|
|
410
|
+
* @example
|
|
411
|
+
* ```typescript
|
|
412
|
+
* export default {
|
|
413
|
+
* async fetch(request: Request, env: Env) {
|
|
414
|
+
* const router = createTenantRouter({
|
|
415
|
+
* doNamespace: env.TENANT_DO,
|
|
416
|
+
* extractTenant: 'subdomain',
|
|
417
|
+
* baseDomain: 'myapp.com',
|
|
418
|
+
* })
|
|
419
|
+
*
|
|
420
|
+
* // Route request to tenant's DO
|
|
421
|
+
* return router.route(request)
|
|
422
|
+
* }
|
|
423
|
+
* }
|
|
424
|
+
* ```
|
|
425
|
+
*/
|
|
426
|
+
route(request: Request): Promise<Response>;
|
|
427
|
+
/**
|
|
428
|
+
* Route a request and return detailed routing result
|
|
429
|
+
* @param request The incoming request
|
|
430
|
+
* @returns Full routing result with response, metadata, timing, and context
|
|
431
|
+
*
|
|
432
|
+
* @example
|
|
433
|
+
* ```typescript
|
|
434
|
+
* const result = await router.routeWithResult(request)
|
|
435
|
+
*
|
|
436
|
+
* console.log(`Tenant: ${result.tenantContext.tenantId}`)
|
|
437
|
+
* console.log(`Source: ${result.routingMetadata.extractorType}`)
|
|
438
|
+
* console.log(`Total time: ${result.timing.totalTimeMs}ms`)
|
|
439
|
+
*
|
|
440
|
+
* return result.response
|
|
441
|
+
* ```
|
|
442
|
+
*/
|
|
443
|
+
routeWithResult(request: Request): Promise<TenantRoutingResult>;
|
|
444
|
+
/**
|
|
445
|
+
* Extract tenant ID from a request without routing
|
|
446
|
+
* @param request The incoming request
|
|
447
|
+
* @returns The tenant ID or null if not found
|
|
448
|
+
*
|
|
449
|
+
* @example
|
|
450
|
+
* ```typescript
|
|
451
|
+
* const tenantId = await router.getTenantId(request)
|
|
452
|
+
* if (!tenantId) {
|
|
453
|
+
* return new Response('Tenant not found', { status: 400 })
|
|
454
|
+
* }
|
|
455
|
+
* console.log(`Processing request for tenant: ${tenantId}`)
|
|
456
|
+
* ```
|
|
457
|
+
*/
|
|
458
|
+
getTenantId(request: Request): Promise<string | null>;
|
|
459
|
+
/**
|
|
460
|
+
* Get full extraction result from a request
|
|
461
|
+
* @param request The incoming request
|
|
462
|
+
* @returns The extraction result with metadata
|
|
463
|
+
*/
|
|
464
|
+
extractTenant(request: Request): Promise<TenantExtractionResult>;
|
|
465
|
+
/**
|
|
466
|
+
* Check if a tenant is blocked
|
|
467
|
+
* @param tenantId The tenant identifier
|
|
468
|
+
* @param request The original request (for context in dynamic checks)
|
|
469
|
+
* @returns True if the tenant is blocked
|
|
470
|
+
*/
|
|
471
|
+
isBlocked(tenantId: string, request: Request): Promise<boolean>;
|
|
472
|
+
/**
|
|
473
|
+
* Get the DO stub for a specific tenant
|
|
474
|
+
* @param tenantId The tenant identifier
|
|
475
|
+
* @returns The Durable Object stub
|
|
476
|
+
*
|
|
477
|
+
* @example
|
|
478
|
+
* ```typescript
|
|
479
|
+
* const stub = router.getStub('acme-corp')
|
|
480
|
+
*
|
|
481
|
+
* // Make a custom request to the tenant's DO
|
|
482
|
+
* const response = await stub.fetch('https://internal/api/health')
|
|
483
|
+
* ```
|
|
484
|
+
*/
|
|
485
|
+
getStub(tenantId: string): DurableObjectStub;
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Preset tenant extraction functions
|
|
489
|
+
*
|
|
490
|
+
* @example
|
|
491
|
+
* ```typescript
|
|
492
|
+
* // Use preset extractors with createTenantRouter
|
|
493
|
+
* const router = createTenantRouter({
|
|
494
|
+
* doNamespace: env.TENANT_DO,
|
|
495
|
+
* extractTenant: 'subdomain', // Uses extractors.subdomain internally
|
|
496
|
+
* baseDomain: 'myapp.com',
|
|
497
|
+
* })
|
|
498
|
+
*
|
|
499
|
+
* // Or use extractors directly
|
|
500
|
+
* const subdomainExtractor = extractors.subdomain('myapp.com')
|
|
501
|
+
* const tenantId = subdomainExtractor(request) // 'acme' from acme.myapp.com
|
|
502
|
+
* ```
|
|
503
|
+
*/
|
|
504
|
+
export declare const extractors: {
|
|
505
|
+
/**
|
|
506
|
+
* Extract tenant from subdomain
|
|
507
|
+
* e.g., tenant1.app.com -> tenant1
|
|
508
|
+
*
|
|
509
|
+
* @param baseDomain Optional base domain for proper TLD handling
|
|
510
|
+
*
|
|
511
|
+
* @example
|
|
512
|
+
* ```typescript
|
|
513
|
+
* const extractor = extractors.subdomain('myapp.com')
|
|
514
|
+
*
|
|
515
|
+
* // acme.myapp.com -> 'acme'
|
|
516
|
+
* // www.myapp.com -> null (apex domain)
|
|
517
|
+
* // myapp.com -> null (apex domain)
|
|
518
|
+
* ```
|
|
519
|
+
*/
|
|
520
|
+
subdomain: (baseDomain?: string) => SimpleTenantExtractor;
|
|
521
|
+
/**
|
|
522
|
+
* Extract tenant from URL path
|
|
523
|
+
* e.g., /tenant1/api/users -> tenant1
|
|
524
|
+
*
|
|
525
|
+
* @param prefix Path prefix before tenant segment
|
|
526
|
+
*
|
|
527
|
+
* @example
|
|
528
|
+
* ```typescript
|
|
529
|
+
* const extractor = extractors.path('/orgs')
|
|
530
|
+
*
|
|
531
|
+
* // /orgs/acme/users -> 'acme'
|
|
532
|
+
* // /orgs/bigcorp/api/data -> 'bigcorp'
|
|
533
|
+
* // /api/users -> null (no match)
|
|
534
|
+
* ```
|
|
535
|
+
*/
|
|
536
|
+
path: (prefix?: string) => SimpleTenantExtractor;
|
|
537
|
+
/**
|
|
538
|
+
* Extract tenant from HTTP header
|
|
539
|
+
* e.g., X-Tenant-ID: tenant1 -> tenant1
|
|
540
|
+
*
|
|
541
|
+
* @param headerName The header to extract from
|
|
542
|
+
*
|
|
543
|
+
* @example
|
|
544
|
+
* ```typescript
|
|
545
|
+
* const extractor = extractors.header('X-Org-ID')
|
|
546
|
+
*
|
|
547
|
+
* // Request with header 'X-Org-ID: acme' -> 'acme'
|
|
548
|
+
* // Request without header -> null
|
|
549
|
+
* ```
|
|
550
|
+
*/
|
|
551
|
+
header: (headerName?: string) => SimpleTenantExtractor;
|
|
552
|
+
/**
|
|
553
|
+
* Try multiple extractors in order
|
|
554
|
+
* Returns first successful extraction
|
|
555
|
+
*
|
|
556
|
+
* @param extractorFns Array of extractors to try
|
|
557
|
+
*
|
|
558
|
+
* @example
|
|
559
|
+
* ```typescript
|
|
560
|
+
* // Try subdomain first, then fall back to header
|
|
561
|
+
* const extractor = extractors.combined([
|
|
562
|
+
* extractors.subdomain('myapp.com'),
|
|
563
|
+
* extractors.header('X-Tenant-ID'),
|
|
564
|
+
* ])
|
|
565
|
+
*
|
|
566
|
+
* // acme.myapp.com -> 'acme' (from subdomain)
|
|
567
|
+
* // myapp.com with X-Tenant-ID: bigcorp -> 'bigcorp' (from header)
|
|
568
|
+
* ```
|
|
569
|
+
*/
|
|
570
|
+
combined: (extractorFns: SimpleTenantExtractor[]) => SimpleTenantExtractor;
|
|
571
|
+
};
|
|
572
|
+
/**
|
|
573
|
+
* Create a new TenantRouter instance
|
|
574
|
+
*
|
|
575
|
+
* @param config Router configuration
|
|
576
|
+
* @returns A configured TenantRouter
|
|
577
|
+
*
|
|
578
|
+
* @example
|
|
579
|
+
* ```typescript
|
|
580
|
+
* // Subdomain-based routing
|
|
581
|
+
* const router = createTenantRouter({
|
|
582
|
+
* doNamespace: env.TENANT_DO,
|
|
583
|
+
* extractTenant: 'subdomain',
|
|
584
|
+
* baseDomain: 'myapp.com',
|
|
585
|
+
* })
|
|
586
|
+
*
|
|
587
|
+
* // Path-based routing
|
|
588
|
+
* const router = createTenantRouter({
|
|
589
|
+
* doNamespace: env.TENANT_DO,
|
|
590
|
+
* extractTenant: 'path',
|
|
591
|
+
* pathPrefix: '/api/tenants',
|
|
592
|
+
* })
|
|
593
|
+
*
|
|
594
|
+
* // Header-based routing
|
|
595
|
+
* const router = createTenantRouter({
|
|
596
|
+
* doNamespace: env.TENANT_DO,
|
|
597
|
+
* extractTenant: 'header',
|
|
598
|
+
* headerName: 'X-Org-ID',
|
|
599
|
+
* })
|
|
600
|
+
*
|
|
601
|
+
* // Custom extractor
|
|
602
|
+
* const router = createTenantRouter({
|
|
603
|
+
* doNamespace: env.TENANT_DO,
|
|
604
|
+
* extractTenant: (req) => {
|
|
605
|
+
* const url = new URL(req.url)
|
|
606
|
+
* return url.searchParams.get('tenant')
|
|
607
|
+
* },
|
|
608
|
+
* })
|
|
609
|
+
* ```
|
|
610
|
+
*/
|
|
611
|
+
export declare function createTenantRouter(config: TenantRouterConfig): TenantRouter;
|
|
612
|
+
/**
|
|
613
|
+
* Request with tenant context attached
|
|
614
|
+
*/
|
|
615
|
+
export interface TenantRequest extends Request {
|
|
616
|
+
tenantId: string;
|
|
617
|
+
tenantMetadata?: Record<string, unknown>;
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* Tenant routing metrics
|
|
621
|
+
*/
|
|
622
|
+
export interface TenantRoutingMetrics {
|
|
623
|
+
requestCount: number;
|
|
624
|
+
successCount: number;
|
|
625
|
+
errorCount: number;
|
|
626
|
+
blockedCount: number;
|
|
627
|
+
avgRoutingLatencyMs: number;
|
|
628
|
+
avgDoResponseTimeMs: number;
|
|
629
|
+
}
|
|
630
|
+
/**
|
|
631
|
+
* Per-tenant metrics
|
|
632
|
+
*/
|
|
633
|
+
export interface PerTenantMetrics {
|
|
634
|
+
tenantId: string;
|
|
635
|
+
requestCount: number;
|
|
636
|
+
lastRequestAt: number;
|
|
637
|
+
avgResponseTimeMs: number;
|
|
638
|
+
}
|
|
639
|
+
/**
|
|
640
|
+
* Error thrown when tenant cannot be identified
|
|
641
|
+
*/
|
|
642
|
+
export declare class TenantNotFoundError extends Error {
|
|
643
|
+
readonly request?: Request | undefined;
|
|
644
|
+
constructor(message?: string, request?: Request | undefined);
|
|
645
|
+
}
|
|
646
|
+
/**
|
|
647
|
+
* Error thrown when tenant is blocked
|
|
648
|
+
*/
|
|
649
|
+
export declare class TenantBlockedError extends Error {
|
|
650
|
+
readonly tenantId: string;
|
|
651
|
+
constructor(tenantId: string, message?: string);
|
|
652
|
+
}
|
|
653
|
+
/**
|
|
654
|
+
* Error thrown when tenant ID format is invalid
|
|
655
|
+
*/
|
|
656
|
+
export declare class InvalidTenantIdError extends Error {
|
|
657
|
+
readonly tenantId: string;
|
|
658
|
+
constructor(tenantId: string, message?: string);
|
|
659
|
+
}
|
|
660
|
+
/**
|
|
661
|
+
* Error thrown when DO request times out
|
|
662
|
+
*/
|
|
663
|
+
export declare class TenantTimeoutError extends Error {
|
|
664
|
+
readonly tenantId: string;
|
|
665
|
+
readonly timeoutMs: number;
|
|
666
|
+
constructor(tenantId: string, timeoutMs: number, message?: string);
|
|
667
|
+
}
|
|
668
|
+
/**
|
|
669
|
+
* Error thrown when DO is unreachable
|
|
670
|
+
*/
|
|
671
|
+
export declare class TenantUnavailableError extends Error {
|
|
672
|
+
readonly tenantId: string;
|
|
673
|
+
readonly cause?: Error | undefined;
|
|
674
|
+
constructor(tenantId: string, cause?: Error, message?: string);
|
|
675
|
+
}
|
|
676
|
+
/**
|
|
677
|
+
* Rate limit configuration
|
|
678
|
+
*/
|
|
679
|
+
export interface RateLimitConfig {
|
|
680
|
+
/**
|
|
681
|
+
* Maximum requests allowed within the window
|
|
682
|
+
*/
|
|
683
|
+
maxRequests: number;
|
|
684
|
+
/**
|
|
685
|
+
* Time window in milliseconds
|
|
686
|
+
* @default 60000 (1 minute)
|
|
687
|
+
*/
|
|
688
|
+
windowMs?: number;
|
|
689
|
+
/**
|
|
690
|
+
* List of tenant IDs that bypass rate limiting
|
|
691
|
+
*/
|
|
692
|
+
bypassTenants?: string[];
|
|
693
|
+
/**
|
|
694
|
+
* Custom function to determine if a tenant should bypass rate limiting
|
|
695
|
+
*/
|
|
696
|
+
bypassCallback?: (tenantId: string, request: Request) => boolean | Promise<boolean>;
|
|
697
|
+
}
|
|
698
|
+
/**
|
|
699
|
+
* Rate limit state for a single tenant
|
|
700
|
+
*/
|
|
701
|
+
export interface RateLimitState {
|
|
702
|
+
/** Number of requests in the current window */
|
|
703
|
+
requestCount: number;
|
|
704
|
+
/** Timestamp when the window started */
|
|
705
|
+
windowStart: number;
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* Rate limit check result
|
|
709
|
+
*/
|
|
710
|
+
export interface RateLimitResult {
|
|
711
|
+
/** Whether the request is allowed */
|
|
712
|
+
allowed: boolean;
|
|
713
|
+
/** Current request count in the window */
|
|
714
|
+
currentCount: number;
|
|
715
|
+
/** Maximum requests allowed */
|
|
716
|
+
maxRequests: number;
|
|
717
|
+
/** Seconds until the rate limit resets */
|
|
718
|
+
retryAfterSeconds: number;
|
|
719
|
+
/** Whether this tenant bypasses rate limiting */
|
|
720
|
+
bypassed: boolean;
|
|
721
|
+
}
|
|
722
|
+
/**
|
|
723
|
+
* In-memory rate limiter for per-tenant request tracking
|
|
724
|
+
*/
|
|
725
|
+
export declare class TenantRateLimiter {
|
|
726
|
+
private state;
|
|
727
|
+
private readonly maxRequests;
|
|
728
|
+
private readonly windowMs;
|
|
729
|
+
private readonly bypassTenants;
|
|
730
|
+
private readonly bypassCallback?;
|
|
731
|
+
constructor(config: RateLimitConfig);
|
|
732
|
+
/**
|
|
733
|
+
* Check if a request should be allowed for the given tenant
|
|
734
|
+
*/
|
|
735
|
+
check(tenantId: string, request: Request): Promise<RateLimitResult>;
|
|
736
|
+
/**
|
|
737
|
+
* Get the current state for a tenant (for testing/debugging)
|
|
738
|
+
*/
|
|
739
|
+
getState(tenantId: string): RateLimitState | undefined;
|
|
740
|
+
/**
|
|
741
|
+
* Reset rate limit state for a tenant
|
|
742
|
+
*/
|
|
743
|
+
reset(tenantId: string): void;
|
|
744
|
+
/**
|
|
745
|
+
* Reset all rate limit state
|
|
746
|
+
*/
|
|
747
|
+
resetAll(): void;
|
|
748
|
+
/**
|
|
749
|
+
* Clean up expired entries from the rate limit state map
|
|
750
|
+
* Removes entries that are 2x past their window to prevent unbounded memory growth
|
|
751
|
+
*/
|
|
752
|
+
private cleanupExpiredEntries;
|
|
753
|
+
/**
|
|
754
|
+
* Get the current number of tracked tenants (for monitoring/debugging)
|
|
755
|
+
*/
|
|
756
|
+
getTrackedTenantCount(): number;
|
|
757
|
+
}
|
|
758
|
+
/**
|
|
759
|
+
* Error thrown when rate limit is exceeded
|
|
760
|
+
*/
|
|
761
|
+
export declare class TenantRateLimitError extends Error {
|
|
762
|
+
readonly tenantId: string;
|
|
763
|
+
readonly retryAfterSeconds: number;
|
|
764
|
+
constructor(tenantId: string, retryAfterSeconds: number, message?: string);
|
|
765
|
+
}
|
|
766
|
+
/**
|
|
767
|
+
* Cache entry for domain-to-tenant mappings
|
|
768
|
+
*/
|
|
769
|
+
export interface DomainCacheEntry {
|
|
770
|
+
/** The tenant ID mapped to this domain */
|
|
771
|
+
tenantId: string;
|
|
772
|
+
/** Timestamp when this entry was cached */
|
|
773
|
+
cachedAt: number;
|
|
774
|
+
/** Additional metadata */
|
|
775
|
+
metadata?: Record<string, unknown> | undefined;
|
|
776
|
+
}
|
|
777
|
+
/**
|
|
778
|
+
* Configuration for the domain mapping cache
|
|
779
|
+
*/
|
|
780
|
+
export interface DomainCacheConfig {
|
|
781
|
+
/** TTL for cache entries in milliseconds */
|
|
782
|
+
ttlMs: number;
|
|
783
|
+
/** Maximum number of entries to cache */
|
|
784
|
+
maxEntries?: number;
|
|
785
|
+
}
|
|
786
|
+
/**
|
|
787
|
+
* Cache statistics
|
|
788
|
+
*/
|
|
789
|
+
export interface CacheStats {
|
|
790
|
+
hits: number;
|
|
791
|
+
misses: number;
|
|
792
|
+
size: number;
|
|
793
|
+
invalidations: number;
|
|
794
|
+
}
|
|
795
|
+
/**
|
|
796
|
+
* Interface for domain-to-tenant mapping cache
|
|
797
|
+
*/
|
|
798
|
+
export interface DomainMappingCache {
|
|
799
|
+
/** Get a cached tenant ID for a domain */
|
|
800
|
+
get(domain: string): DomainCacheEntry | null;
|
|
801
|
+
/** Set a domain-to-tenant mapping in the cache */
|
|
802
|
+
set(domain: string, tenantId: string, metadata?: Record<string, unknown>): void;
|
|
803
|
+
/** Invalidate a specific domain mapping */
|
|
804
|
+
invalidate(domain: string): void;
|
|
805
|
+
/** Invalidate all cache entries */
|
|
806
|
+
invalidateAll(): void;
|
|
807
|
+
/** Check if cache has a valid (non-expired) entry for a domain */
|
|
808
|
+
has(domain: string): boolean;
|
|
809
|
+
/** Warm the cache with known domain-to-tenant mappings */
|
|
810
|
+
warm(mappings: Record<string, string>): void;
|
|
811
|
+
/** Get the current cache size */
|
|
812
|
+
size(): number;
|
|
813
|
+
/** Get cache statistics */
|
|
814
|
+
stats(): CacheStats;
|
|
815
|
+
}
|
|
816
|
+
/**
|
|
817
|
+
* Create a new domain mapping cache
|
|
818
|
+
*
|
|
819
|
+
* @param config Cache configuration
|
|
820
|
+
* @returns A DomainMappingCache instance
|
|
821
|
+
*
|
|
822
|
+
* @example
|
|
823
|
+
* ```typescript
|
|
824
|
+
* const cache = createDomainMappingCache({ ttlMs: 300000 }) // 5 minute TTL
|
|
825
|
+
*
|
|
826
|
+
* // Set a mapping
|
|
827
|
+
* cache.set('custom.example.com', 'tenant1')
|
|
828
|
+
*
|
|
829
|
+
* // Get a mapping (returns null if expired or not found)
|
|
830
|
+
* const entry = cache.get('custom.example.com')
|
|
831
|
+
* if (entry) {
|
|
832
|
+
* console.log(entry.tenantId) // 'tenant1'
|
|
833
|
+
* }
|
|
834
|
+
*
|
|
835
|
+
* // Warm cache on startup
|
|
836
|
+
* cache.warm({
|
|
837
|
+
* 'acme.com': 'acme-inc',
|
|
838
|
+
* 'bigcorp.io': 'bigcorp',
|
|
839
|
+
* })
|
|
840
|
+
*
|
|
841
|
+
* // Invalidate on config change
|
|
842
|
+
* cache.invalidate('acme.com')
|
|
843
|
+
* // or invalidate all
|
|
844
|
+
* cache.invalidateAll()
|
|
845
|
+
* ```
|
|
846
|
+
*/
|
|
847
|
+
export declare function createDomainMappingCache(config: DomainCacheConfig): DomainMappingCache;
|
|
848
|
+
//# sourceMappingURL=tenant-router.d.ts.map
|