@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,495 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RLS Policy SQL Generator
|
|
3
|
+
*
|
|
4
|
+
* SECURITY CRITICAL: This module generates SQL statements for Row-Level Security policies.
|
|
5
|
+
* All SQL generation must prevent SQL injection attacks through proper identifier quoting
|
|
6
|
+
* and validation. Never interpolate untrusted input directly into SQL strings.
|
|
7
|
+
*
|
|
8
|
+
* Key security considerations:
|
|
9
|
+
* - All identifiers (policy names, table names, schema names) must be properly quoted
|
|
10
|
+
* - Double quotes within identifiers must be escaped by doubling them
|
|
11
|
+
* - Table names must be validated before use to prevent SQL injection
|
|
12
|
+
* - Policy expressions (USING, WITH CHECK) are passed through as-is; validation is the
|
|
13
|
+
* responsibility of the caller or the validatePolicy function in validator.ts
|
|
14
|
+
*
|
|
15
|
+
* @module rls/generator
|
|
16
|
+
*/
|
|
17
|
+
import { needsQuoting, validateTableName } from './validator';
|
|
18
|
+
import { InvalidIdentifierError, NotFoundError } from '@dotdo/postgres-shared/errors';
|
|
19
|
+
/**
|
|
20
|
+
* Escape double quotes within an identifier for PostgreSQL.
|
|
21
|
+
*
|
|
22
|
+
* PostgreSQL requires double quotes within quoted identifiers to be escaped
|
|
23
|
+
* by doubling them: " becomes "".
|
|
24
|
+
*
|
|
25
|
+
* SECURITY: This is essential for preventing SQL injection through identifiers
|
|
26
|
+
* that contain quote characters.
|
|
27
|
+
*
|
|
28
|
+
* @param identifier - The identifier to escape
|
|
29
|
+
* @returns The identifier with internal double quotes escaped
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* escapeIdentifier('my"table') // returns 'my""table'
|
|
33
|
+
*/
|
|
34
|
+
function escapeIdentifier(identifier) {
|
|
35
|
+
return identifier.replace(/"/g, '""');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Quote an identifier if necessary for safe SQL generation.
|
|
39
|
+
*
|
|
40
|
+
* PostgreSQL identifiers (table names, column names, policy names) must be quoted
|
|
41
|
+
* if they contain special characters, start with a number, or match reserved keywords.
|
|
42
|
+
*
|
|
43
|
+
* SECURITY: Always use this function when embedding identifiers in generated SQL.
|
|
44
|
+
* Never concatenate raw identifiers directly into SQL strings.
|
|
45
|
+
*
|
|
46
|
+
* @param identifier - The identifier to quote
|
|
47
|
+
* @returns The identifier, quoted with escaped internal quotes if necessary
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* quoteIdentifier('users') // returns 'users' (no quoting needed)
|
|
51
|
+
* quoteIdentifier('my-table') // returns '"my-table"' (hyphen requires quoting)
|
|
52
|
+
* quoteIdentifier('my"table') // returns '"my""table"' (quote escaped)
|
|
53
|
+
*/
|
|
54
|
+
function quoteIdentifier(identifier) {
|
|
55
|
+
if (needsQuoting(identifier)) {
|
|
56
|
+
return `"${escapeIdentifier(identifier)}"`;
|
|
57
|
+
}
|
|
58
|
+
return identifier;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Quote a table name, handling schema.table format.
|
|
62
|
+
*
|
|
63
|
+
* Supports both simple table names and schema-qualified names (schema.table).
|
|
64
|
+
* Each component is individually quoted if necessary.
|
|
65
|
+
*
|
|
66
|
+
* SECURITY: Always use this function when embedding table names in generated SQL.
|
|
67
|
+
* The function properly handles:
|
|
68
|
+
* - Simple table names: 'users' -> 'users' or '"my-table"' -> '"my-table"'
|
|
69
|
+
* - Schema-qualified names: 'public.users' -> 'public.users'
|
|
70
|
+
* - Mixed quoting: 'my-schema.my-table' -> '"my-schema"."my-table"'
|
|
71
|
+
*
|
|
72
|
+
* @param table - The table name, optionally schema-qualified
|
|
73
|
+
* @returns The properly quoted table reference
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* quoteTableName('users') // returns 'users'
|
|
77
|
+
* quoteTableName('public.users') // returns 'public.users'
|
|
78
|
+
* quoteTableName('my-schema.my-table') // returns '"my-schema"."my-table"'
|
|
79
|
+
*/
|
|
80
|
+
function quoteTableName(table) {
|
|
81
|
+
if (table.includes('.')) {
|
|
82
|
+
const parts = table.split('.');
|
|
83
|
+
const schema = parts[0] ?? '';
|
|
84
|
+
const tableName = parts[1] ?? '';
|
|
85
|
+
return `${quoteIdentifier(schema)}.${quoteIdentifier(tableName)}`;
|
|
86
|
+
}
|
|
87
|
+
return quoteIdentifier(table);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Extract the table name from a potentially schema-qualified name.
|
|
91
|
+
*
|
|
92
|
+
* Used when querying pg_policies which stores only the table name without schema.
|
|
93
|
+
*
|
|
94
|
+
* @param table - The table name, optionally schema-qualified
|
|
95
|
+
* @returns The table name without schema prefix
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* extractTableName('public.users') // returns 'users'
|
|
99
|
+
* extractTableName('users') // returns 'users'
|
|
100
|
+
*/
|
|
101
|
+
function extractTableName(table) {
|
|
102
|
+
if (table.includes('.')) {
|
|
103
|
+
return table.split('.')[1] ?? table;
|
|
104
|
+
}
|
|
105
|
+
return table;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Escape a string value for use in SQL single-quoted literals.
|
|
109
|
+
*
|
|
110
|
+
* PostgreSQL requires single quotes within string literals to be escaped
|
|
111
|
+
* by doubling them: ' becomes ''.
|
|
112
|
+
*
|
|
113
|
+
* SECURITY: Use this when embedding string values in SQL queries.
|
|
114
|
+
* Prefer parameterized queries when available.
|
|
115
|
+
*
|
|
116
|
+
* @param value - The string value to escape
|
|
117
|
+
* @returns The string with internal single quotes escaped
|
|
118
|
+
*/
|
|
119
|
+
function escapeStringLiteral(value) {
|
|
120
|
+
return value.replace(/'/g, "''");
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Generate CREATE POLICY SQL statement.
|
|
124
|
+
*
|
|
125
|
+
* Creates a PostgreSQL RLS policy with the specified configuration.
|
|
126
|
+
*
|
|
127
|
+
* SECURITY CRITICAL: This function generates SQL that controls data access.
|
|
128
|
+
* - Policy names and table names are properly quoted to prevent injection
|
|
129
|
+
* - USING and WITH CHECK expressions are passed through as-is; they must be
|
|
130
|
+
* validated separately using validatePolicy() before calling this function
|
|
131
|
+
* - Role names are NOT quoted (PostgreSQL syntax); callers must ensure roles
|
|
132
|
+
* are validated before passing to this function
|
|
133
|
+
*
|
|
134
|
+
* WARNING: Missing USING or WITH CHECK clauses have security implications:
|
|
135
|
+
* - SELECT without USING: PostgreSQL defaults to true (allows all rows)
|
|
136
|
+
* - INSERT without WITH CHECK: PostgreSQL defaults to true (allows all inserts)
|
|
137
|
+
* - UPDATE without USING: Cannot select rows to update
|
|
138
|
+
* - UPDATE without WITH CHECK: PostgreSQL defaults to USING clause value
|
|
139
|
+
*
|
|
140
|
+
* @param policy - The RLS policy definition
|
|
141
|
+
* @returns The complete CREATE POLICY SQL statement
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* const sql = generatePolicySQL({
|
|
145
|
+
* name: 'users_read_own',
|
|
146
|
+
* table: 'users',
|
|
147
|
+
* operation: 'SELECT',
|
|
148
|
+
* using: 'user_id = current_user_id()',
|
|
149
|
+
* roles: ['authenticated'],
|
|
150
|
+
* type: 'permissive'
|
|
151
|
+
* })
|
|
152
|
+
* // Returns: CREATE POLICY users_read_own ON users AS PERMISSIVE FOR SELECT TO authenticated USING (user_id = current_user_id())
|
|
153
|
+
*/
|
|
154
|
+
export function generatePolicySQL(policy) {
|
|
155
|
+
const parts = [];
|
|
156
|
+
// CREATE POLICY name ON table
|
|
157
|
+
// SECURITY: Both policy.name and policy.table are quoted to prevent injection
|
|
158
|
+
parts.push(`CREATE POLICY ${quoteIdentifier(policy.name)} ON ${quoteTableName(policy.table)}`);
|
|
159
|
+
// AS PERMISSIVE | RESTRICTIVE
|
|
160
|
+
// Note: RESTRICTIVE policies are AND-ed together; PERMISSIVE are OR-ed
|
|
161
|
+
parts.push(`AS ${policy.type.toUpperCase()}`);
|
|
162
|
+
// FOR operation
|
|
163
|
+
parts.push(`FOR ${policy.operation}`);
|
|
164
|
+
// TO roles (default to 'public' if empty)
|
|
165
|
+
// WARNING: Role names are not quoted here per PostgreSQL syntax.
|
|
166
|
+
// Callers must validate role names before passing to this function.
|
|
167
|
+
const roles = policy.roles.length > 0 ? policy.roles.join(', ') : 'public';
|
|
168
|
+
parts.push(`TO ${roles}`);
|
|
169
|
+
// USING clause (not for INSERT)
|
|
170
|
+
// SECURITY: The USING expression controls which existing rows are visible.
|
|
171
|
+
// WARNING: If policy.using is empty/undefined, PostgreSQL defaults to true (all rows visible)
|
|
172
|
+
if (policy.using && policy.operation !== 'INSERT') {
|
|
173
|
+
parts.push(`USING (${policy.using})`);
|
|
174
|
+
}
|
|
175
|
+
// WITH CHECK clause (only for INSERT, UPDATE, ALL - not SELECT or DELETE)
|
|
176
|
+
// SECURITY: The WITH CHECK expression controls what new/modified rows are allowed.
|
|
177
|
+
// WARNING: If policy.check is empty/undefined, PostgreSQL defaults to the USING expression
|
|
178
|
+
const allowsWithCheck = policy.operation === 'INSERT' || policy.operation === 'UPDATE' || policy.operation === 'ALL';
|
|
179
|
+
if (policy.check && allowsWithCheck) {
|
|
180
|
+
parts.push(`WITH CHECK (${policy.check})`);
|
|
181
|
+
}
|
|
182
|
+
return parts.join(' ');
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Generate DROP POLICY SQL statement.
|
|
186
|
+
*
|
|
187
|
+
* Creates SQL to drop an existing RLS policy from a table.
|
|
188
|
+
*
|
|
189
|
+
* SECURITY: Policy name and table name are properly quoted to prevent injection.
|
|
190
|
+
*
|
|
191
|
+
* WARNING: Dropping a policy removes access controls. Ensure this is intentional
|
|
192
|
+
* and that replacement policies are in place if needed.
|
|
193
|
+
*
|
|
194
|
+
* @param policyName - The name of the policy to drop
|
|
195
|
+
* @param table - The table the policy is attached to
|
|
196
|
+
* @param ifExists - If true, adds IF EXISTS to prevent errors if policy doesn't exist
|
|
197
|
+
* @returns The complete DROP POLICY SQL statement
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* generateDropPolicySQL('users_read_own', 'users', true)
|
|
201
|
+
* // Returns: DROP POLICY IF EXISTS users_read_own ON users
|
|
202
|
+
*/
|
|
203
|
+
export function generateDropPolicySQL(policyName, table, ifExists = false) {
|
|
204
|
+
const ifExistsClause = ifExists ? 'IF EXISTS ' : '';
|
|
205
|
+
return `DROP POLICY ${ifExistsClause}${quoteIdentifier(policyName)} ON ${quoteTableName(table)}`;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Generate ALTER TABLE ... ENABLE ROW LEVEL SECURITY SQL.
|
|
209
|
+
*
|
|
210
|
+
* Creates SQL to enable RLS on a table. Once enabled, all table access
|
|
211
|
+
* (except by table owners and superusers) is governed by RLS policies.
|
|
212
|
+
*
|
|
213
|
+
* SECURITY CRITICAL:
|
|
214
|
+
* - ENABLE ROW LEVEL SECURITY: Enables RLS but allows table owner to bypass
|
|
215
|
+
* - FORCE ROW LEVEL SECURITY: Enforces RLS even for table owner
|
|
216
|
+
*
|
|
217
|
+
* WARNING: Enabling RLS without any policies will block all access to the table
|
|
218
|
+
* (except for superusers and table owners unless FORCE is used).
|
|
219
|
+
*
|
|
220
|
+
* @param table - The table to enable RLS on
|
|
221
|
+
* @param options - Optional settings
|
|
222
|
+
* @param options.force - If true, uses FORCE ROW LEVEL SECURITY (applies to owner too)
|
|
223
|
+
* @returns The complete ALTER TABLE SQL statement
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* generateEnableRLSSQL('users') // Returns: ALTER TABLE users ENABLE ROW LEVEL SECURITY
|
|
227
|
+
* generateEnableRLSSQL('users', { force: true }) // Returns: ALTER TABLE users FORCE ROW LEVEL SECURITY
|
|
228
|
+
*/
|
|
229
|
+
export function generateEnableRLSSQL(table, options) {
|
|
230
|
+
if (options?.force) {
|
|
231
|
+
return `ALTER TABLE ${quoteTableName(table)} FORCE ROW LEVEL SECURITY`;
|
|
232
|
+
}
|
|
233
|
+
return `ALTER TABLE ${quoteTableName(table)} ENABLE ROW LEVEL SECURITY`;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Generate ALTER TABLE ... DISABLE ROW LEVEL SECURITY SQL.
|
|
237
|
+
*
|
|
238
|
+
* Creates SQL to disable RLS on a table.
|
|
239
|
+
*
|
|
240
|
+
* SECURITY WARNING: Disabling RLS removes all row-level access controls.
|
|
241
|
+
* All users with table-level permissions will have unrestricted access to all rows.
|
|
242
|
+
* Only use this when:
|
|
243
|
+
* - Migrating to a different access control mechanism
|
|
244
|
+
* - Temporarily debugging access issues (re-enable immediately after)
|
|
245
|
+
* - The table genuinely requires no row-level restrictions
|
|
246
|
+
*
|
|
247
|
+
* @param table - The table to disable RLS on
|
|
248
|
+
* @param options - Optional settings
|
|
249
|
+
* @param options.removeForce - If true, uses NO FORCE (removes owner bypass restriction)
|
|
250
|
+
* @returns The complete ALTER TABLE SQL statement
|
|
251
|
+
*
|
|
252
|
+
* @example
|
|
253
|
+
* generateDisableRLSSQL('users') // Returns: ALTER TABLE users DISABLE ROW LEVEL SECURITY
|
|
254
|
+
* generateDisableRLSSQL('users', { removeForce: true }) // Returns: ALTER TABLE users NO FORCE ROW LEVEL SECURITY
|
|
255
|
+
*/
|
|
256
|
+
export function generateDisableRLSSQL(table, options) {
|
|
257
|
+
if (options?.removeForce) {
|
|
258
|
+
return `ALTER TABLE ${quoteTableName(table)} NO FORCE ROW LEVEL SECURITY`;
|
|
259
|
+
}
|
|
260
|
+
return `ALTER TABLE ${quoteTableName(table)} DISABLE ROW LEVEL SECURITY`;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Enable Row-Level Security on a table.
|
|
264
|
+
*
|
|
265
|
+
* Validates the table name and executes the ENABLE ROW LEVEL SECURITY command.
|
|
266
|
+
*
|
|
267
|
+
* SECURITY: Table name is validated to prevent SQL injection before generating SQL.
|
|
268
|
+
*
|
|
269
|
+
* @param pglite - The PGlite instance to execute against
|
|
270
|
+
* @param table - The table to enable RLS on (must pass validation)
|
|
271
|
+
* @param options - Optional settings (see generateEnableRLSSQL)
|
|
272
|
+
* @throws {Error} If table name is invalid (contains SQL injection patterns)
|
|
273
|
+
*
|
|
274
|
+
* @example
|
|
275
|
+
* await enableRLS(pglite, 'users')
|
|
276
|
+
* await enableRLS(pglite, 'users', { force: true })
|
|
277
|
+
*/
|
|
278
|
+
export async function enableRLS(pglite, table, options) {
|
|
279
|
+
// SECURITY: Validate table name to prevent SQL injection
|
|
280
|
+
if (!validateTableName(table)) {
|
|
281
|
+
throw new InvalidIdentifierError(table, 'table', 'Must be a valid SQL identifier (letters, numbers, underscores; must start with letter or underscore)');
|
|
282
|
+
}
|
|
283
|
+
const sql = generateEnableRLSSQL(table, options);
|
|
284
|
+
await pglite.exec(sql);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Disable Row-Level Security on a table.
|
|
288
|
+
*
|
|
289
|
+
* Validates the table name and executes the DISABLE ROW LEVEL SECURITY command.
|
|
290
|
+
*
|
|
291
|
+
* SECURITY WARNING: This removes all row-level access controls from the table.
|
|
292
|
+
* See generateDisableRLSSQL for security considerations.
|
|
293
|
+
*
|
|
294
|
+
* @param pglite - The PGlite instance to execute against
|
|
295
|
+
* @param table - The table to disable RLS on (must pass validation)
|
|
296
|
+
* @param options - Optional settings (see generateDisableRLSSQL)
|
|
297
|
+
* @throws {Error} If table name is invalid (contains SQL injection patterns)
|
|
298
|
+
*
|
|
299
|
+
* @example
|
|
300
|
+
* await disableRLS(pglite, 'users')
|
|
301
|
+
*/
|
|
302
|
+
export async function disableRLS(pglite, table, options) {
|
|
303
|
+
// SECURITY: Validate table name to prevent SQL injection
|
|
304
|
+
if (!validateTableName(table)) {
|
|
305
|
+
throw new InvalidIdentifierError(table, 'table', 'Must be a valid SQL identifier (letters, numbers, underscores; must start with letter or underscore)');
|
|
306
|
+
}
|
|
307
|
+
const sql = generateDisableRLSSQL(table, options);
|
|
308
|
+
await pglite.exec(sql);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Apply an RLS policy to a database.
|
|
312
|
+
*
|
|
313
|
+
* Creates a new RLS policy, optionally replacing an existing one with the same name.
|
|
314
|
+
*
|
|
315
|
+
* SECURITY CRITICAL: This function directly affects data access controls.
|
|
316
|
+
* - Always validate the policy using validatePolicy() before calling this function
|
|
317
|
+
* - The replace option drops the existing policy first (brief window of no protection)
|
|
318
|
+
*
|
|
319
|
+
* @param pglite - The PGlite instance to execute against
|
|
320
|
+
* @param policy - The RLS policy definition to apply
|
|
321
|
+
* @param options - Optional settings
|
|
322
|
+
* @param options.replace - If true, drops existing policy with same name first
|
|
323
|
+
* @param options.ifNotExists - If true, adds IF NOT EXISTS (no error if policy exists)
|
|
324
|
+
*
|
|
325
|
+
* @example
|
|
326
|
+
* const policy = createPolicy({
|
|
327
|
+
* name: 'users_read_own',
|
|
328
|
+
* table: 'users',
|
|
329
|
+
* operation: 'SELECT',
|
|
330
|
+
* using: 'user_id = current_user_id()'
|
|
331
|
+
* })
|
|
332
|
+
* await applyPolicy(pglite, policy)
|
|
333
|
+
*/
|
|
334
|
+
export async function applyPolicy(pglite, policy, options) {
|
|
335
|
+
// Drop existing policy if replace is true
|
|
336
|
+
// WARNING: Brief window between DROP and CREATE where no policy exists
|
|
337
|
+
if (options?.replace) {
|
|
338
|
+
const dropSQL = generateDropPolicySQL(policy.name, policy.table, true);
|
|
339
|
+
await pglite.exec(dropSQL);
|
|
340
|
+
}
|
|
341
|
+
// Generate CREATE POLICY SQL
|
|
342
|
+
let sql = generatePolicySQL(policy);
|
|
343
|
+
// Add IF NOT EXISTS if specified
|
|
344
|
+
if (options?.ifNotExists) {
|
|
345
|
+
sql = sql.replace('CREATE POLICY', 'CREATE POLICY IF NOT EXISTS');
|
|
346
|
+
}
|
|
347
|
+
await pglite.exec(sql);
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Drop a policy by name.
|
|
351
|
+
*
|
|
352
|
+
* Removes an RLS policy from a table.
|
|
353
|
+
*
|
|
354
|
+
* SECURITY WARNING: Dropping a policy removes access controls. Ensure:
|
|
355
|
+
* - This is intentional
|
|
356
|
+
* - Replacement policies are in place if needed
|
|
357
|
+
* - The table owner bypass is acceptable, or FORCE is still enabled
|
|
358
|
+
*
|
|
359
|
+
* @param pglite - The PGlite instance to execute against
|
|
360
|
+
* @param policyName - The name of the policy to drop
|
|
361
|
+
* @param table - The table the policy is attached to
|
|
362
|
+
* @param options - Optional settings
|
|
363
|
+
* @param options.ifExists - If true, no error if policy doesn't exist
|
|
364
|
+
*
|
|
365
|
+
* @example
|
|
366
|
+
* await dropPolicy(pglite, 'users_read_own', 'users', { ifExists: true })
|
|
367
|
+
*/
|
|
368
|
+
export async function dropPolicy(pglite, policyName, table, options) {
|
|
369
|
+
const sql = generateDropPolicySQL(policyName, table, options?.ifExists);
|
|
370
|
+
await pglite.exec(sql);
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Drop all policies on a table.
|
|
374
|
+
*
|
|
375
|
+
* Removes all RLS policies from a table by querying pg_policies and dropping each one.
|
|
376
|
+
*
|
|
377
|
+
* SECURITY WARNING: This removes ALL access controls from the table. Use with extreme caution.
|
|
378
|
+
* Consider disabling RLS entirely if you want to remove all restrictions, or be prepared
|
|
379
|
+
* to immediately apply new policies.
|
|
380
|
+
*
|
|
381
|
+
* @param pglite - The PGlite instance to execute against
|
|
382
|
+
* @param table - The table to remove all policies from
|
|
383
|
+
*
|
|
384
|
+
* @example
|
|
385
|
+
* // WARNING: This removes all security policies!
|
|
386
|
+
* await dropAllPolicies(pglite, 'users')
|
|
387
|
+
*/
|
|
388
|
+
export async function dropAllPolicies(pglite, table) {
|
|
389
|
+
// First get all policies
|
|
390
|
+
const policies = await listPoliciesInternal(pglite, table);
|
|
391
|
+
// Drop each policy
|
|
392
|
+
// Note: Policies are dropped sequentially to maintain predictable state
|
|
393
|
+
for (const policy of policies) {
|
|
394
|
+
await dropPolicy(pglite, policy.name, table);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* List all policies on a table (internal helper).
|
|
399
|
+
*
|
|
400
|
+
* Queries pg_policies system view to retrieve policy information.
|
|
401
|
+
*
|
|
402
|
+
* SECURITY: Table name is escaped to prevent SQL injection.
|
|
403
|
+
*
|
|
404
|
+
* @param pglite - The PGlite instance to query
|
|
405
|
+
* @param table - The table to list policies for
|
|
406
|
+
* @returns Array of policy metadata objects
|
|
407
|
+
*/
|
|
408
|
+
async function listPoliciesInternal(pglite, table) {
|
|
409
|
+
// SECURITY: Extract and escape the table name for safe use in the query
|
|
410
|
+
const tableName = escapeStringLiteral(extractTableName(table));
|
|
411
|
+
const result = await pglite.query(`
|
|
412
|
+
SELECT policyname, cmd, qual, with_check
|
|
413
|
+
FROM pg_policies
|
|
414
|
+
WHERE tablename = '${tableName}'
|
|
415
|
+
`);
|
|
416
|
+
return result.rows.map((row) => {
|
|
417
|
+
const policy = {
|
|
418
|
+
name: row.policyname,
|
|
419
|
+
operation: row.cmd,
|
|
420
|
+
};
|
|
421
|
+
if (row.qual !== null) {
|
|
422
|
+
policy.using = row.qual;
|
|
423
|
+
}
|
|
424
|
+
if (row.with_check !== null) {
|
|
425
|
+
policy.check = row.with_check;
|
|
426
|
+
}
|
|
427
|
+
return policy;
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* List all policies on a table.
|
|
432
|
+
*
|
|
433
|
+
* Queries the pg_policies system view to retrieve complete policy definitions.
|
|
434
|
+
*
|
|
435
|
+
* SECURITY: Table name is escaped to prevent SQL injection.
|
|
436
|
+
*
|
|
437
|
+
* @param pglite - The PGlite instance to query
|
|
438
|
+
* @param table - The table to list policies for
|
|
439
|
+
* @returns Array of complete RLSPolicy objects
|
|
440
|
+
*
|
|
441
|
+
* @example
|
|
442
|
+
* const policies = await listPolicies(pglite, 'users')
|
|
443
|
+
* console.log(policies) // [{ name: 'users_read_own', table: 'users', operation: 'SELECT', ... }]
|
|
444
|
+
*/
|
|
445
|
+
export async function listPolicies(pglite, table) {
|
|
446
|
+
// SECURITY: Extract and escape the table name for safe use in the query
|
|
447
|
+
const tableName = escapeStringLiteral(extractTableName(table));
|
|
448
|
+
const result = await pglite.query(`
|
|
449
|
+
SELECT policyname, cmd, qual, with_check, roles, permissive
|
|
450
|
+
FROM pg_policies
|
|
451
|
+
WHERE tablename = '${tableName}'
|
|
452
|
+
`);
|
|
453
|
+
return result.rows.map((row) => ({
|
|
454
|
+
name: row.policyname,
|
|
455
|
+
table,
|
|
456
|
+
operation: row.cmd,
|
|
457
|
+
using: row.qual ?? undefined,
|
|
458
|
+
check: row.with_check ?? undefined,
|
|
459
|
+
roles: row.roles ?? ['public'],
|
|
460
|
+
type: row.permissive === 'PERMISSIVE' ? 'permissive' : 'restrictive',
|
|
461
|
+
}));
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Check if RLS is enabled on a table.
|
|
465
|
+
*
|
|
466
|
+
* Queries the pg_class system catalog to check if row-level security is enabled.
|
|
467
|
+
*
|
|
468
|
+
* SECURITY: Table name is escaped to prevent SQL injection.
|
|
469
|
+
*
|
|
470
|
+
* @param pglite - The PGlite instance to query
|
|
471
|
+
* @param table - The table to check
|
|
472
|
+
* @returns True if RLS is enabled, false otherwise
|
|
473
|
+
* @throws {Error} If the table does not exist
|
|
474
|
+
*
|
|
475
|
+
* @example
|
|
476
|
+
* const isEnabled = await checkRLSEnabled(pglite, 'users')
|
|
477
|
+
* if (!isEnabled) {
|
|
478
|
+
* await enableRLS(pglite, 'users')
|
|
479
|
+
* }
|
|
480
|
+
*/
|
|
481
|
+
export async function checkRLSEnabled(pglite, table) {
|
|
482
|
+
// SECURITY: Extract and escape the table name for safe use in the query
|
|
483
|
+
const tableName = escapeStringLiteral(extractTableName(table));
|
|
484
|
+
const result = await pglite.query(`
|
|
485
|
+
SELECT relrowsecurity as rowsecurity
|
|
486
|
+
FROM pg_class
|
|
487
|
+
WHERE relname = '${tableName}'
|
|
488
|
+
`);
|
|
489
|
+
const row = result.rows[0];
|
|
490
|
+
if (!row) {
|
|
491
|
+
throw new NotFoundError('Table', extractTableName(table));
|
|
492
|
+
}
|
|
493
|
+
return row.rowsecurity;
|
|
494
|
+
}
|
|
495
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/rls/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RLS (Row-Level Security) Abstraction Layer
|
|
3
|
+
*
|
|
4
|
+
* This module provides a type-safe DSL for creating and managing PostgreSQL
|
|
5
|
+
* Row-Level Security policies.
|
|
6
|
+
*/
|
|
7
|
+
export type { PolicyOperation, PolicyType, TenantColumnType, RLSPolicy, CreatePolicyOptions, EnableRLSOptions, DisableRLSOptions, ApplyPolicyOptions, TenantPolicyOptions, SetTenantContextOptions, PolicyValidationResult, ValidationOptions, DropPolicyOptions, PGliteLike, } from './policy';
|
|
8
|
+
export { createPolicy, createTenantPolicy } from './policy';
|
|
9
|
+
export { validatePolicy, validatePolicySyntax, validateTenantId } from './validator';
|
|
10
|
+
export { generatePolicySQL, enableRLS, disableRLS, applyPolicy, dropPolicy, dropAllPolicies, listPolicies, checkRLSEnabled, } from './generator';
|
|
11
|
+
export type { RLSUser, RLSContext, SetupRLSFromAuthOptions, AdminBypassOptions, AdminOperationResult, } from './auth-integration';
|
|
12
|
+
export { RLSContextManager, createAdminBypassCheck, createTenantPolicyWithBypass, createOwnerPolicyWithBypass, hasRole, hasAnyRole, hasAllRoles, } from './auth-integration';
|
|
13
|
+
import type { PGliteLike, TenantPolicyOptions, SetTenantContextOptions } from './policy';
|
|
14
|
+
/**
|
|
15
|
+
* Apply tenant policies to one or more tables
|
|
16
|
+
*/
|
|
17
|
+
export declare function applyTenantPolicies(pglite: PGliteLike, tables: string | string[], tenantColumn: string, options?: TenantPolicyOptions): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Set the tenant context in the current session
|
|
20
|
+
*/
|
|
21
|
+
export declare function setTenantContext(pglite: PGliteLike, tenantId: string, options?: SetTenantContextOptions): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Clear the tenant context from the current session
|
|
24
|
+
*/
|
|
25
|
+
export declare function clearTenantContext(pglite: PGliteLike, options?: SetTenantContextOptions): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rls/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,GACX,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAG3D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGpF,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAA;AAGpB,YAAY,EACV,OAAO,EACP,UAAU,EACV,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,2BAA2B,EAC3B,OAAO,EACP,UAAU,EACV,WAAW,GACZ,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAMxF;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EACzB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RLS (Row-Level Security) Abstraction Layer
|
|
3
|
+
*
|
|
4
|
+
* This module provides a type-safe DSL for creating and managing PostgreSQL
|
|
5
|
+
* Row-Level Security policies.
|
|
6
|
+
*/
|
|
7
|
+
// Re-export functions from policy.ts
|
|
8
|
+
export { createPolicy, createTenantPolicy } from './policy';
|
|
9
|
+
// Re-export functions from validator.ts
|
|
10
|
+
export { validatePolicy, validatePolicySyntax, validateTenantId } from './validator';
|
|
11
|
+
// Re-export functions from generator.ts
|
|
12
|
+
export { generatePolicySQL, enableRLS, disableRLS, applyPolicy, dropPolicy, dropAllPolicies, listPolicies, checkRLSEnabled, } from './generator';
|
|
13
|
+
// Re-export auth integration functions
|
|
14
|
+
export { RLSContextManager, createAdminBypassCheck, createTenantPolicyWithBypass, createOwnerPolicyWithBypass, hasRole, hasAnyRole, hasAllRoles, } from './auth-integration';
|
|
15
|
+
import { createTenantPolicy } from './policy';
|
|
16
|
+
import { validateTenantId } from './validator';
|
|
17
|
+
import { enableRLS, applyPolicy } from './generator';
|
|
18
|
+
import { InvalidTenantIdError } from '@dotdo/postgres-shared/errors';
|
|
19
|
+
/**
|
|
20
|
+
* Apply tenant policies to one or more tables
|
|
21
|
+
*/
|
|
22
|
+
export async function applyTenantPolicies(pglite, tables, tenantColumn, options) {
|
|
23
|
+
const tableList = Array.isArray(tables) ? tables : [tables];
|
|
24
|
+
for (const table of tableList) {
|
|
25
|
+
// Enable RLS on the table
|
|
26
|
+
await enableRLS(pglite, table);
|
|
27
|
+
// Create and apply tenant policy
|
|
28
|
+
const policy = createTenantPolicy(table, tenantColumn, options);
|
|
29
|
+
if (Array.isArray(policy)) {
|
|
30
|
+
for (const p of policy) {
|
|
31
|
+
await applyPolicy(pglite, p);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
await applyPolicy(pglite, policy);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Set the tenant context in the current session
|
|
41
|
+
*/
|
|
42
|
+
export async function setTenantContext(pglite, tenantId, options) {
|
|
43
|
+
// Validate tenant ID to prevent injection
|
|
44
|
+
if (!validateTenantId(tenantId)) {
|
|
45
|
+
throw new InvalidTenantIdError(tenantId, 'Tenant ID must be alphanumeric with hyphens or underscores');
|
|
46
|
+
}
|
|
47
|
+
const sessionVariable = options?.sessionVariable ?? 'app.tenant_id';
|
|
48
|
+
const localKeyword = options?.local ? 'LOCAL ' : '';
|
|
49
|
+
await pglite.exec(`SET ${localKeyword}${sessionVariable} = '${tenantId}'`);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Clear the tenant context from the current session
|
|
53
|
+
*/
|
|
54
|
+
export async function clearTenantContext(pglite, options) {
|
|
55
|
+
const sessionVariable = options?.sessionVariable ?? 'app.tenant_id';
|
|
56
|
+
await pglite.exec(`RESET ${sessionVariable}`);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rls/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,qCAAqC;AACrC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE3D,wCAAwC;AACxC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEpF,wCAAwC;AACxC,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAA;AAWpB,uCAAuC;AACvC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,2BAA2B,EAC3B,OAAO,EACP,UAAU,EACV,WAAW,GACZ,MAAM,oBAAoB,CAAA;AAI3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAEpE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAkB,EAClB,MAAyB,EACzB,YAAoB,EACpB,OAA6B;IAE7B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAE3D,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,0BAA0B;QAC1B,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAE9B,iCAAiC;QACjC,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;QAE/D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAkB,EAClB,QAAgB,EAChB,OAAiC;IAEjC,0CAA0C;IAC1C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,oBAAoB,CAAC,QAAQ,EAAE,4DAA4D,CAAC,CAAA;IACxG,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,EAAE,eAAe,IAAI,eAAe,CAAA;IACnE,MAAM,YAAY,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IAEnD,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,YAAY,GAAG,eAAe,OAAO,QAAQ,GAAG,CAAC,CAAA;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAkB,EAClB,OAAiC;IAEjC,MAAM,eAAe,GAAG,OAAO,EAAE,eAAe,IAAI,eAAe,CAAA;IAEnE,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,eAAe,EAAE,CAAC,CAAA;AAC/C,CAAC"}
|