@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.
Files changed (1129) hide show
  1. package/README.md +868 -0
  2. package/dist/cdc/change-stream.d.ts +44 -0
  3. package/dist/cdc/change-stream.d.ts.map +1 -0
  4. package/dist/cdc/change-stream.js +95 -0
  5. package/dist/cdc/change-stream.js.map +1 -0
  6. package/dist/cdc/filter.d.ts +58 -0
  7. package/dist/cdc/filter.d.ts.map +1 -0
  8. package/dist/cdc/filter.js +520 -0
  9. package/dist/cdc/filter.js.map +1 -0
  10. package/dist/cdc/index.d.ts +47 -0
  11. package/dist/cdc/index.d.ts.map +1 -0
  12. package/dist/cdc/index.js +50 -0
  13. package/dist/cdc/index.js.map +1 -0
  14. package/dist/cdc/resume-token.d.ts +60 -0
  15. package/dist/cdc/resume-token.d.ts.map +1 -0
  16. package/dist/cdc/resume-token.js +228 -0
  17. package/dist/cdc/resume-token.js.map +1 -0
  18. package/dist/cdc/transport/index.d.ts +7 -0
  19. package/dist/cdc/transport/index.d.ts.map +1 -0
  20. package/dist/cdc/transport/index.js +7 -0
  21. package/dist/cdc/transport/index.js.map +1 -0
  22. package/dist/cdc/transport/sse.d.ts +120 -0
  23. package/dist/cdc/transport/sse.d.ts.map +1 -0
  24. package/dist/cdc/transport/sse.js +590 -0
  25. package/dist/cdc/transport/sse.js.map +1 -0
  26. package/dist/cdc/transport/websocket.d.ts +130 -0
  27. package/dist/cdc/transport/websocket.d.ts.map +1 -0
  28. package/dist/cdc/transport/websocket.js +688 -0
  29. package/dist/cdc/transport/websocket.js.map +1 -0
  30. package/dist/cdc/types.d.ts +306 -0
  31. package/dist/cdc/types.d.ts.map +1 -0
  32. package/dist/cdc/types.js +8 -0
  33. package/dist/cdc/types.js.map +1 -0
  34. package/dist/config/index.d.ts +25 -0
  35. package/dist/config/index.d.ts.map +1 -0
  36. package/dist/config/index.js +25 -0
  37. package/dist/config/index.js.map +1 -0
  38. package/dist/config/memory.d.ts +139 -0
  39. package/dist/config/memory.d.ts.map +1 -0
  40. package/dist/config/memory.js +157 -0
  41. package/dist/config/memory.js.map +1 -0
  42. package/dist/config/storage.d.ts +157 -0
  43. package/dist/config/storage.d.ts.map +1 -0
  44. package/dist/config/storage.js +178 -0
  45. package/dist/config/storage.js.map +1 -0
  46. package/dist/config/streaming.d.ts +117 -0
  47. package/dist/config/streaming.d.ts.map +1 -0
  48. package/dist/config/streaming.js +132 -0
  49. package/dist/config/streaming.js.map +1 -0
  50. package/dist/config/timeouts.d.ts +168 -0
  51. package/dist/config/timeouts.d.ts.map +1 -0
  52. package/dist/config/timeouts.js +192 -0
  53. package/dist/config/timeouts.js.map +1 -0
  54. package/dist/extensions/config.d.ts +89 -0
  55. package/dist/extensions/config.d.ts.map +1 -0
  56. package/dist/extensions/config.js +216 -0
  57. package/dist/extensions/config.js.map +1 -0
  58. package/dist/extensions/geo.d.ts +452 -0
  59. package/dist/extensions/geo.d.ts.map +1 -0
  60. package/dist/extensions/geo.js +583 -0
  61. package/dist/extensions/geo.js.map +1 -0
  62. package/dist/extensions/index.d.ts +167 -0
  63. package/dist/extensions/index.d.ts.map +1 -0
  64. package/dist/extensions/index.js +99 -0
  65. package/dist/extensions/index.js.map +1 -0
  66. package/dist/extensions/loader.d.ts +226 -0
  67. package/dist/extensions/loader.d.ts.map +1 -0
  68. package/dist/extensions/loader.js +456 -0
  69. package/dist/extensions/loader.js.map +1 -0
  70. package/dist/extensions/pgmq-lite.d.ts +330 -0
  71. package/dist/extensions/pgmq-lite.d.ts.map +1 -0
  72. package/dist/extensions/pgmq-lite.js +648 -0
  73. package/dist/extensions/pgmq-lite.js.map +1 -0
  74. package/dist/extensions/plugins.d.ts +260 -0
  75. package/dist/extensions/plugins.d.ts.map +1 -0
  76. package/dist/extensions/plugins.js +535 -0
  77. package/dist/extensions/plugins.js.map +1 -0
  78. package/dist/extensions/registry.d.ts +93 -0
  79. package/dist/extensions/registry.d.ts.map +1 -0
  80. package/dist/extensions/registry.js +182 -0
  81. package/dist/extensions/registry.js.map +1 -0
  82. package/dist/extensions/vector.d.ts +106 -0
  83. package/dist/extensions/vector.d.ts.map +1 -0
  84. package/dist/extensions/vector.js +129 -0
  85. package/dist/extensions/vector.js.map +1 -0
  86. package/dist/iceberg/analytics.d.ts +279 -0
  87. package/dist/iceberg/analytics.d.ts.map +1 -0
  88. package/dist/iceberg/analytics.js +448 -0
  89. package/dist/iceberg/analytics.js.map +1 -0
  90. package/dist/iceberg/catalog-api.d.ts +39 -0
  91. package/dist/iceberg/catalog-api.d.ts.map +1 -0
  92. package/dist/iceberg/catalog-api.js +388 -0
  93. package/dist/iceberg/catalog-api.js.map +1 -0
  94. package/dist/iceberg/catalog.d.ts +401 -0
  95. package/dist/iceberg/catalog.d.ts.map +1 -0
  96. package/dist/iceberg/catalog.js +677 -0
  97. package/dist/iceberg/catalog.js.map +1 -0
  98. package/dist/iceberg/duckdb-wasm.d.ts +447 -0
  99. package/dist/iceberg/duckdb-wasm.d.ts.map +1 -0
  100. package/dist/iceberg/duckdb-wasm.js +600 -0
  101. package/dist/iceberg/duckdb-wasm.js.map +1 -0
  102. package/dist/iceberg/index.d.ts +92 -0
  103. package/dist/iceberg/index.d.ts.map +1 -0
  104. package/dist/iceberg/index.js +119 -0
  105. package/dist/iceberg/index.js.map +1 -0
  106. package/dist/iceberg/metadata.d.ts +214 -0
  107. package/dist/iceberg/metadata.d.ts.map +1 -0
  108. package/dist/iceberg/metadata.js +535 -0
  109. package/dist/iceberg/metadata.js.map +1 -0
  110. package/dist/iceberg/optimizer.d.ts +296 -0
  111. package/dist/iceberg/optimizer.d.ts.map +1 -0
  112. package/dist/iceberg/optimizer.js +889 -0
  113. package/dist/iceberg/optimizer.js.map +1 -0
  114. package/dist/iceberg/parquet.d.ts +447 -0
  115. package/dist/iceberg/parquet.d.ts.map +1 -0
  116. package/dist/iceberg/parquet.js +1225 -0
  117. package/dist/iceberg/parquet.js.map +1 -0
  118. package/dist/iceberg/r2-organization.d.ts +422 -0
  119. package/dist/iceberg/r2-organization.d.ts.map +1 -0
  120. package/dist/iceberg/r2-organization.js +672 -0
  121. package/dist/iceberg/r2-organization.js.map +1 -0
  122. package/dist/iceberg/scheduler-do-example.d.ts +158 -0
  123. package/dist/iceberg/scheduler-do-example.d.ts.map +1 -0
  124. package/dist/iceberg/scheduler-do-example.js +261 -0
  125. package/dist/iceberg/scheduler-do-example.js.map +1 -0
  126. package/dist/iceberg/scheduler.d.ts +434 -0
  127. package/dist/iceberg/scheduler.d.ts.map +1 -0
  128. package/dist/iceberg/scheduler.js +818 -0
  129. package/dist/iceberg/scheduler.js.map +1 -0
  130. package/dist/iceberg/schema.d.ts +149 -0
  131. package/dist/iceberg/schema.d.ts.map +1 -0
  132. package/dist/iceberg/schema.js +525 -0
  133. package/dist/iceberg/schema.js.map +1 -0
  134. package/dist/iceberg/snapshot-manager.d.ts +406 -0
  135. package/dist/iceberg/snapshot-manager.d.ts.map +1 -0
  136. package/dist/iceberg/snapshot-manager.js +934 -0
  137. package/dist/iceberg/snapshot-manager.js.map +1 -0
  138. package/dist/iceberg/sql-router.d.ts +194 -0
  139. package/dist/iceberg/sql-router.d.ts.map +1 -0
  140. package/dist/iceberg/sql-router.js +180 -0
  141. package/dist/iceberg/sql-router.js.map +1 -0
  142. package/dist/iceberg/test-fixtures.d.ts +151 -0
  143. package/dist/iceberg/test-fixtures.d.ts.map +1 -0
  144. package/dist/iceberg/test-fixtures.js +446 -0
  145. package/dist/iceberg/test-fixtures.js.map +1 -0
  146. package/dist/iceberg/time-travel-api.d.ts +102 -0
  147. package/dist/iceberg/time-travel-api.d.ts.map +1 -0
  148. package/dist/iceberg/time-travel-api.js +437 -0
  149. package/dist/iceberg/time-travel-api.js.map +1 -0
  150. package/dist/iceberg/time-travel.d.ts +293 -0
  151. package/dist/iceberg/time-travel.d.ts.map +1 -0
  152. package/dist/iceberg/time-travel.js +689 -0
  153. package/dist/iceberg/time-travel.js.map +1 -0
  154. package/dist/iceberg/transformer.d.ts +356 -0
  155. package/dist/iceberg/transformer.d.ts.map +1 -0
  156. package/dist/iceberg/transformer.js +770 -0
  157. package/dist/iceberg/transformer.js.map +1 -0
  158. package/dist/iceberg/types.d.ts +318 -0
  159. package/dist/iceberg/types.d.ts.map +1 -0
  160. package/dist/iceberg/types.js +9 -0
  161. package/dist/iceberg/types.js.map +1 -0
  162. package/dist/iceberg/writer.d.ts +144 -0
  163. package/dist/iceberg/writer.d.ts.map +1 -0
  164. package/dist/iceberg/writer.js +452 -0
  165. package/dist/iceberg/writer.js.map +1 -0
  166. package/dist/index.d.ts +50 -0
  167. package/dist/index.d.ts.map +1 -0
  168. package/dist/index.js +69 -0
  169. package/dist/index.js.map +1 -0
  170. package/dist/lineage/index.d.ts +11 -0
  171. package/dist/lineage/index.d.ts.map +1 -0
  172. package/dist/lineage/index.js +11 -0
  173. package/dist/lineage/index.js.map +1 -0
  174. package/dist/lineage/integration.d.ts +134 -0
  175. package/dist/lineage/integration.d.ts.map +1 -0
  176. package/dist/lineage/integration.js +258 -0
  177. package/dist/lineage/integration.js.map +1 -0
  178. package/dist/lineage/tracker.d.ts +189 -0
  179. package/dist/lineage/tracker.d.ts.map +1 -0
  180. package/dist/lineage/tracker.js +1352 -0
  181. package/dist/lineage/tracker.js.map +1 -0
  182. package/dist/lineage/types.d.ts +318 -0
  183. package/dist/lineage/types.d.ts.map +1 -0
  184. package/dist/lineage/types.js +9 -0
  185. package/dist/lineage/types.js.map +1 -0
  186. package/dist/middleware/index.d.ts +11 -0
  187. package/dist/middleware/index.d.ts.map +1 -0
  188. package/dist/middleware/index.js +16 -0
  189. package/dist/middleware/index.js.map +1 -0
  190. package/dist/middleware/rate-limit.d.ts +397 -0
  191. package/dist/middleware/rate-limit.d.ts.map +1 -0
  192. package/dist/middleware/rate-limit.js +507 -0
  193. package/dist/middleware/rate-limit.js.map +1 -0
  194. package/dist/migration-tooling/external-migration.d.ts +601 -0
  195. package/dist/migration-tooling/external-migration.d.ts.map +1 -0
  196. package/dist/migration-tooling/external-migration.js +1612 -0
  197. package/dist/migration-tooling/external-migration.js.map +1 -0
  198. package/dist/migration-tooling/index.d.ts +19 -0
  199. package/dist/migration-tooling/index.d.ts.map +1 -0
  200. package/dist/migration-tooling/index.js +19 -0
  201. package/dist/migration-tooling/index.js.map +1 -0
  202. package/dist/migrations/auto-migrator.d.ts +289 -0
  203. package/dist/migrations/auto-migrator.d.ts.map +1 -0
  204. package/dist/migrations/auto-migrator.js +396 -0
  205. package/dist/migrations/auto-migrator.js.map +1 -0
  206. package/dist/migrations/bulk-orchestrator.d.ts +403 -0
  207. package/dist/migrations/bulk-orchestrator.d.ts.map +1 -0
  208. package/dist/migrations/bulk-orchestrator.js +646 -0
  209. package/dist/migrations/bulk-orchestrator.js.map +1 -0
  210. package/dist/migrations/compatibility.d.ts +216 -0
  211. package/dist/migrations/compatibility.d.ts.map +1 -0
  212. package/dist/migrations/compatibility.js +651 -0
  213. package/dist/migrations/compatibility.js.map +1 -0
  214. package/dist/migrations/do-migrations.d.ts +101 -0
  215. package/dist/migrations/do-migrations.d.ts.map +1 -0
  216. package/dist/migrations/do-migrations.js +1060 -0
  217. package/dist/migrations/do-migrations.js.map +1 -0
  218. package/dist/migrations/do-migrations.types.d.ts +550 -0
  219. package/dist/migrations/do-migrations.types.d.ts.map +1 -0
  220. package/dist/migrations/do-migrations.types.js +15 -0
  221. package/dist/migrations/do-migrations.types.js.map +1 -0
  222. package/dist/migrations/drizzle-compat.d.ts +163 -0
  223. package/dist/migrations/drizzle-compat.d.ts.map +1 -0
  224. package/dist/migrations/drizzle-compat.js +273 -0
  225. package/dist/migrations/drizzle-compat.js.map +1 -0
  226. package/dist/migrations/index.d.ts +109 -0
  227. package/dist/migrations/index.d.ts.map +1 -0
  228. package/dist/migrations/index.js +127 -0
  229. package/dist/migrations/index.js.map +1 -0
  230. package/dist/migrations/migration-api.d.ts +161 -0
  231. package/dist/migrations/migration-api.d.ts.map +1 -0
  232. package/dist/migrations/migration-api.js +499 -0
  233. package/dist/migrations/migration-api.js.map +1 -0
  234. package/dist/migrations/progress-tracker-do.d.ts +195 -0
  235. package/dist/migrations/progress-tracker-do.d.ts.map +1 -0
  236. package/dist/migrations/progress-tracker-do.js +339 -0
  237. package/dist/migrations/progress-tracker-do.js.map +1 -0
  238. package/dist/migrations/progress-tracker-kv.d.ts +103 -0
  239. package/dist/migrations/progress-tracker-kv.d.ts.map +1 -0
  240. package/dist/migrations/progress-tracker-kv.js +231 -0
  241. package/dist/migrations/progress-tracker-kv.js.map +1 -0
  242. package/dist/migrations/progress-tracker.d.ts +320 -0
  243. package/dist/migrations/progress-tracker.d.ts.map +1 -0
  244. package/dist/migrations/progress-tracker.js +443 -0
  245. package/dist/migrations/progress-tracker.js.map +1 -0
  246. package/dist/migrations/registry.d.ts +231 -0
  247. package/dist/migrations/registry.d.ts.map +1 -0
  248. package/dist/migrations/registry.js +376 -0
  249. package/dist/migrations/registry.js.map +1 -0
  250. package/dist/migrations/runner.d.ts +197 -0
  251. package/dist/migrations/runner.d.ts.map +1 -0
  252. package/dist/migrations/runner.js +1167 -0
  253. package/dist/migrations/runner.js.map +1 -0
  254. package/dist/migrations/schema-generator.d.ts +111 -0
  255. package/dist/migrations/schema-generator.d.ts.map +1 -0
  256. package/dist/migrations/schema-generator.js +335 -0
  257. package/dist/migrations/schema-generator.js.map +1 -0
  258. package/dist/migrations/testing.d.ts +321 -0
  259. package/dist/migrations/testing.d.ts.map +1 -0
  260. package/dist/migrations/testing.js +645 -0
  261. package/dist/migrations/testing.js.map +1 -0
  262. package/dist/migrations/types.d.ts +503 -0
  263. package/dist/migrations/types.d.ts.map +1 -0
  264. package/dist/migrations/types.js +11 -0
  265. package/dist/migrations/types.js.map +1 -0
  266. package/dist/migrations/validator.d.ts +215 -0
  267. package/dist/migrations/validator.d.ts.map +1 -0
  268. package/dist/migrations/validator.js +494 -0
  269. package/dist/migrations/validator.js.map +1 -0
  270. package/dist/observability/alerting.d.ts +116 -0
  271. package/dist/observability/alerting.d.ts.map +1 -0
  272. package/dist/observability/alerting.js +353 -0
  273. package/dist/observability/alerting.js.map +1 -0
  274. package/dist/observability/analytics-engine.d.ts +357 -0
  275. package/dist/observability/analytics-engine.d.ts.map +1 -0
  276. package/dist/observability/analytics-engine.js +430 -0
  277. package/dist/observability/analytics-engine.js.map +1 -0
  278. package/dist/observability/cost-metrics.d.ts +269 -0
  279. package/dist/observability/cost-metrics.d.ts.map +1 -0
  280. package/dist/observability/cost-metrics.js +560 -0
  281. package/dist/observability/cost-metrics.js.map +1 -0
  282. package/dist/observability/cross-do-tracing.d.ts +305 -0
  283. package/dist/observability/cross-do-tracing.d.ts.map +1 -0
  284. package/dist/observability/cross-do-tracing.js +431 -0
  285. package/dist/observability/cross-do-tracing.js.map +1 -0
  286. package/dist/observability/error-rate-collector.d.ts +163 -0
  287. package/dist/observability/error-rate-collector.d.ts.map +1 -0
  288. package/dist/observability/error-rate-collector.js +306 -0
  289. package/dist/observability/error-rate-collector.js.map +1 -0
  290. package/dist/observability/exporters.d.ts +231 -0
  291. package/dist/observability/exporters.d.ts.map +1 -0
  292. package/dist/observability/exporters.js +479 -0
  293. package/dist/observability/exporters.js.map +1 -0
  294. package/dist/observability/health-check.d.ts +106 -0
  295. package/dist/observability/health-check.d.ts.map +1 -0
  296. package/dist/observability/health-check.js +243 -0
  297. package/dist/observability/health-check.js.map +1 -0
  298. package/dist/observability/index.d.ts +297 -0
  299. package/dist/observability/index.d.ts.map +1 -0
  300. package/dist/observability/index.js +455 -0
  301. package/dist/observability/index.js.map +1 -0
  302. package/dist/observability/instrumentation.d.ts +222 -0
  303. package/dist/observability/instrumentation.d.ts.map +1 -0
  304. package/dist/observability/instrumentation.js +532 -0
  305. package/dist/observability/instrumentation.js.map +1 -0
  306. package/dist/observability/memory-metrics.d.ts +227 -0
  307. package/dist/observability/memory-metrics.d.ts.map +1 -0
  308. package/dist/observability/memory-metrics.js +688 -0
  309. package/dist/observability/memory-metrics.js.map +1 -0
  310. package/dist/observability/metrics-endpoint.d.ts +91 -0
  311. package/dist/observability/metrics-endpoint.d.ts.map +1 -0
  312. package/dist/observability/metrics-endpoint.js +246 -0
  313. package/dist/observability/metrics-endpoint.js.map +1 -0
  314. package/dist/observability/metrics.d.ts +88 -0
  315. package/dist/observability/metrics.d.ts.map +1 -0
  316. package/dist/observability/metrics.js +253 -0
  317. package/dist/observability/metrics.js.map +1 -0
  318. package/dist/observability/observability-features.d.ts +488 -0
  319. package/dist/observability/observability-features.d.ts.map +1 -0
  320. package/dist/observability/observability-features.js +773 -0
  321. package/dist/observability/observability-features.js.map +1 -0
  322. package/dist/observability/prometheus.d.ts +39 -0
  323. package/dist/observability/prometheus.d.ts.map +1 -0
  324. package/dist/observability/prometheus.js +120 -0
  325. package/dist/observability/prometheus.js.map +1 -0
  326. package/dist/observability/propagation.d.ts +126 -0
  327. package/dist/observability/propagation.d.ts.map +1 -0
  328. package/dist/observability/propagation.js +234 -0
  329. package/dist/observability/propagation.js.map +1 -0
  330. package/dist/observability/query-latency.d.ts +243 -0
  331. package/dist/observability/query-latency.d.ts.map +1 -0
  332. package/dist/observability/query-latency.js +292 -0
  333. package/dist/observability/query-latency.js.map +1 -0
  334. package/dist/observability/query-performance.d.ts +169 -0
  335. package/dist/observability/query-performance.d.ts.map +1 -0
  336. package/dist/observability/query-performance.js +290 -0
  337. package/dist/observability/query-performance.js.map +1 -0
  338. package/dist/observability/storage-tier-metrics.d.ts +174 -0
  339. package/dist/observability/storage-tier-metrics.d.ts.map +1 -0
  340. package/dist/observability/storage-tier-metrics.js +306 -0
  341. package/dist/observability/storage-tier-metrics.js.map +1 -0
  342. package/dist/observability/tier-cost-optimizer.d.ts +155 -0
  343. package/dist/observability/tier-cost-optimizer.d.ts.map +1 -0
  344. package/dist/observability/tier-cost-optimizer.js +536 -0
  345. package/dist/observability/tier-cost-optimizer.js.map +1 -0
  346. package/dist/observability/tracer.d.ts +149 -0
  347. package/dist/observability/tracer.d.ts.map +1 -0
  348. package/dist/observability/tracer.js +435 -0
  349. package/dist/observability/tracer.js.map +1 -0
  350. package/dist/observability/types.d.ts +402 -0
  351. package/dist/observability/types.d.ts.map +1 -0
  352. package/dist/observability/types.js +103 -0
  353. package/dist/observability/types.js.map +1 -0
  354. package/dist/pglite/workers-pglite.d.ts +138 -0
  355. package/dist/pglite/workers-pglite.d.ts.map +1 -0
  356. package/dist/pglite/workers-pglite.js +143 -0
  357. package/dist/pglite/workers-pglite.js.map +1 -0
  358. package/dist/pglite-assets/pglite.data +0 -0
  359. package/dist/pglite-assets/pglite.wasm +0 -0
  360. package/dist/playground/index.d.ts +52 -0
  361. package/dist/playground/index.d.ts.map +1 -0
  362. package/dist/playground/index.js +55 -0
  363. package/dist/playground/index.js.map +1 -0
  364. package/dist/playground/keyboard-shortcuts.d.ts +116 -0
  365. package/dist/playground/keyboard-shortcuts.d.ts.map +1 -0
  366. package/dist/playground/keyboard-shortcuts.js +588 -0
  367. package/dist/playground/keyboard-shortcuts.js.map +1 -0
  368. package/dist/playground/playground.d.ts +82 -0
  369. package/dist/playground/playground.d.ts.map +1 -0
  370. package/dist/playground/playground.js +271 -0
  371. package/dist/playground/playground.js.map +1 -0
  372. package/dist/playground/query-executor.d.ts +115 -0
  373. package/dist/playground/query-executor.d.ts.map +1 -0
  374. package/dist/playground/query-executor.js +558 -0
  375. package/dist/playground/query-executor.js.map +1 -0
  376. package/dist/playground/query-history.d.ts +92 -0
  377. package/dist/playground/query-history.d.ts.map +1 -0
  378. package/dist/playground/query-history.js +259 -0
  379. package/dist/playground/query-history.js.map +1 -0
  380. package/dist/playground/result-formatter.d.ts +59 -0
  381. package/dist/playground/result-formatter.d.ts.map +1 -0
  382. package/dist/playground/result-formatter.js +341 -0
  383. package/dist/playground/result-formatter.js.map +1 -0
  384. package/dist/playground/sample-datasets.d.ts +77 -0
  385. package/dist/playground/sample-datasets.d.ts.map +1 -0
  386. package/dist/playground/sample-datasets.js +641 -0
  387. package/dist/playground/sample-datasets.js.map +1 -0
  388. package/dist/playground/sample-queries.d.ts +73 -0
  389. package/dist/playground/sample-queries.d.ts.map +1 -0
  390. package/dist/playground/sample-queries.js +1095 -0
  391. package/dist/playground/sample-queries.js.map +1 -0
  392. package/dist/playground/schema-explorer.d.ts +55 -0
  393. package/dist/playground/schema-explorer.d.ts.map +1 -0
  394. package/dist/playground/schema-explorer.js +473 -0
  395. package/dist/playground/schema-explorer.js.map +1 -0
  396. package/dist/playground/types.d.ts +430 -0
  397. package/dist/playground/types.d.ts.map +1 -0
  398. package/dist/playground/types.js +10 -0
  399. package/dist/playground/types.js.map +1 -0
  400. package/dist/readonly/cache-reader.d.ts +145 -0
  401. package/dist/readonly/cache-reader.d.ts.map +1 -0
  402. package/dist/readonly/cache-reader.js +198 -0
  403. package/dist/readonly/cache-reader.js.map +1 -0
  404. package/dist/readonly/config.d.ts +74 -0
  405. package/dist/readonly/config.d.ts.map +1 -0
  406. package/dist/readonly/config.js +67 -0
  407. package/dist/readonly/config.js.map +1 -0
  408. package/dist/readonly/index.d.ts +22 -0
  409. package/dist/readonly/index.d.ts.map +1 -0
  410. package/dist/readonly/index.js +17 -0
  411. package/dist/readonly/index.js.map +1 -0
  412. package/dist/readonly/pglite-wrapper.d.ts +82 -0
  413. package/dist/readonly/pglite-wrapper.d.ts.map +1 -0
  414. package/dist/readonly/pglite-wrapper.js +123 -0
  415. package/dist/readonly/pglite-wrapper.js.map +1 -0
  416. package/dist/readonly/worker.d.ts +142 -0
  417. package/dist/readonly/worker.d.ts.map +1 -0
  418. package/dist/readonly/worker.js +187 -0
  419. package/dist/readonly/worker.js.map +1 -0
  420. package/dist/readonly/write-blocker.d.ts +47 -0
  421. package/dist/readonly/write-blocker.d.ts.map +1 -0
  422. package/dist/readonly/write-blocker.js +136 -0
  423. package/dist/readonly/write-blocker.js.map +1 -0
  424. package/dist/recovery/disaster-recovery.d.ts +326 -0
  425. package/dist/recovery/disaster-recovery.d.ts.map +1 -0
  426. package/dist/recovery/disaster-recovery.js +799 -0
  427. package/dist/recovery/disaster-recovery.js.map +1 -0
  428. package/dist/recovery/index.d.ts +12 -0
  429. package/dist/recovery/index.d.ts.map +1 -0
  430. package/dist/recovery/index.js +12 -0
  431. package/dist/recovery/index.js.map +1 -0
  432. package/dist/recovery/parquet-parser.d.ts +321 -0
  433. package/dist/recovery/parquet-parser.d.ts.map +1 -0
  434. package/dist/recovery/parquet-parser.js +797 -0
  435. package/dist/recovery/parquet-parser.js.map +1 -0
  436. package/dist/retention/index.d.ts +50 -0
  437. package/dist/retention/index.d.ts.map +1 -0
  438. package/dist/retention/index.js +50 -0
  439. package/dist/retention/index.js.map +1 -0
  440. package/dist/retention/policy.d.ts +344 -0
  441. package/dist/retention/policy.d.ts.map +1 -0
  442. package/dist/retention/policy.js +472 -0
  443. package/dist/retention/policy.js.map +1 -0
  444. package/dist/retention/purger.d.ts +187 -0
  445. package/dist/retention/purger.d.ts.map +1 -0
  446. package/dist/retention/purger.js +411 -0
  447. package/dist/retention/purger.js.map +1 -0
  448. package/dist/rls/auth-integration.d.ts +280 -0
  449. package/dist/rls/auth-integration.d.ts.map +1 -0
  450. package/dist/rls/auth-integration.js +399 -0
  451. package/dist/rls/auth-integration.js.map +1 -0
  452. package/dist/rls/generator.d.ts +249 -0
  453. package/dist/rls/generator.d.ts.map +1 -0
  454. package/dist/rls/generator.js +495 -0
  455. package/dist/rls/generator.js.map +1 -0
  456. package/dist/rls/index.d.ts +26 -0
  457. package/dist/rls/index.d.ts.map +1 -0
  458. package/dist/rls/index.js +58 -0
  459. package/dist/rls/index.js.map +1 -0
  460. package/dist/rls/policy.d.ts +116 -0
  461. package/dist/rls/policy.d.ts.map +1 -0
  462. package/dist/rls/policy.js +77 -0
  463. package/dist/rls/policy.js.map +1 -0
  464. package/dist/rls/validator.d.ts +155 -0
  465. package/dist/rls/validator.d.ts.map +1 -0
  466. package/dist/rls/validator.js +792 -0
  467. package/dist/rls/validator.js.map +1 -0
  468. package/dist/routing/adaptive-router.d.ts +317 -0
  469. package/dist/routing/adaptive-router.d.ts.map +1 -0
  470. package/dist/routing/adaptive-router.js +554 -0
  471. package/dist/routing/adaptive-router.js.map +1 -0
  472. package/dist/routing/circuit-breaker.d.ts +339 -0
  473. package/dist/routing/circuit-breaker.d.ts.map +1 -0
  474. package/dist/routing/circuit-breaker.js +620 -0
  475. package/dist/routing/circuit-breaker.js.map +1 -0
  476. package/dist/routing/cost-metrics.d.ts +133 -0
  477. package/dist/routing/cost-metrics.d.ts.map +1 -0
  478. package/dist/routing/cost-metrics.js +259 -0
  479. package/dist/routing/cost-metrics.js.map +1 -0
  480. package/dist/routing/do-connection-pool.d.ts +243 -0
  481. package/dist/routing/do-connection-pool.d.ts.map +1 -0
  482. package/dist/routing/do-connection-pool.js +572 -0
  483. package/dist/routing/do-connection-pool.js.map +1 -0
  484. package/dist/routing/index.d.ts +59 -0
  485. package/dist/routing/index.d.ts.map +1 -0
  486. package/dist/routing/index.js +59 -0
  487. package/dist/routing/index.js.map +1 -0
  488. package/dist/routing/query-complexity-estimator.d.ts +73 -0
  489. package/dist/routing/query-complexity-estimator.d.ts.map +1 -0
  490. package/dist/routing/query-complexity-estimator.js +327 -0
  491. package/dist/routing/query-complexity-estimator.js.map +1 -0
  492. package/dist/routing/request-coalescing.d.ts +178 -0
  493. package/dist/routing/request-coalescing.d.ts.map +1 -0
  494. package/dist/routing/request-coalescing.js +325 -0
  495. package/dist/routing/request-coalescing.js.map +1 -0
  496. package/dist/routing/runtime-router.d.ts +107 -0
  497. package/dist/routing/runtime-router.d.ts.map +1 -0
  498. package/dist/routing/runtime-router.js +246 -0
  499. package/dist/routing/runtime-router.js.map +1 -0
  500. package/dist/routing/tenant-router.d.ts +848 -0
  501. package/dist/routing/tenant-router.d.ts.map +1 -0
  502. package/dist/routing/tenant-router.js +1056 -0
  503. package/dist/routing/tenant-router.js.map +1 -0
  504. package/dist/routing/websocket-pool.d.ts +119 -0
  505. package/dist/routing/websocket-pool.d.ts.map +1 -0
  506. package/dist/routing/websocket-pool.js +436 -0
  507. package/dist/routing/websocket-pool.js.map +1 -0
  508. package/dist/storage/cache-layer.d.ts +159 -0
  509. package/dist/storage/cache-layer.d.ts.map +1 -0
  510. package/dist/storage/cache-layer.js +245 -0
  511. package/dist/storage/cache-layer.js.map +1 -0
  512. package/dist/storage/cost-aware-tiering.d.ts +258 -0
  513. package/dist/storage/cost-aware-tiering.d.ts.map +1 -0
  514. package/dist/storage/cost-aware-tiering.js +526 -0
  515. package/dist/storage/cost-aware-tiering.js.map +1 -0
  516. package/dist/storage/index.d.ts +87 -0
  517. package/dist/storage/index.d.ts.map +1 -0
  518. package/dist/storage/index.js +78 -0
  519. package/dist/storage/index.js.map +1 -0
  520. package/dist/storage/interfaces.d.ts +856 -0
  521. package/dist/storage/interfaces.d.ts.map +1 -0
  522. package/dist/storage/interfaces.js +69 -0
  523. package/dist/storage/interfaces.js.map +1 -0
  524. package/dist/storage/r2-layer.d.ts +226 -0
  525. package/dist/storage/r2-layer.d.ts.map +1 -0
  526. package/dist/storage/r2-layer.js +307 -0
  527. package/dist/storage/r2-layer.js.map +1 -0
  528. package/dist/storage/r2-overflow.d.ts +344 -0
  529. package/dist/storage/r2-overflow.d.ts.map +1 -0
  530. package/dist/storage/r2-overflow.js +730 -0
  531. package/dist/storage/r2-overflow.js.map +1 -0
  532. package/dist/storage/r2-page-vfs.d.ts +374 -0
  533. package/dist/storage/r2-page-vfs.d.ts.map +1 -0
  534. package/dist/storage/r2-page-vfs.js +754 -0
  535. package/dist/storage/r2-page-vfs.js.map +1 -0
  536. package/dist/storage/swr-cache.d.ts +181 -0
  537. package/dist/storage/swr-cache.d.ts.map +1 -0
  538. package/dist/storage/swr-cache.js +295 -0
  539. package/dist/storage/swr-cache.js.map +1 -0
  540. package/dist/storage/tiered-orchestrator.d.ts +951 -0
  541. package/dist/storage/tiered-orchestrator.d.ts.map +1 -0
  542. package/dist/storage/tiered-orchestrator.js +1731 -0
  543. package/dist/storage/tiered-orchestrator.js.map +1 -0
  544. package/dist/storage/tiered-vfs-swr.d.ts +279 -0
  545. package/dist/storage/tiered-vfs-swr.d.ts.map +1 -0
  546. package/dist/storage/tiered-vfs-swr.js +584 -0
  547. package/dist/storage/tiered-vfs-swr.js.map +1 -0
  548. package/dist/storage/tiered-vfs.d.ts +405 -0
  549. package/dist/storage/tiered-vfs.d.ts.map +1 -0
  550. package/dist/storage/tiered-vfs.js +833 -0
  551. package/dist/storage/tiered-vfs.js.map +1 -0
  552. package/dist/streaming/backpressure-controller.d.ts +173 -0
  553. package/dist/streaming/backpressure-controller.d.ts.map +1 -0
  554. package/dist/streaming/backpressure-controller.js +344 -0
  555. package/dist/streaming/backpressure-controller.js.map +1 -0
  556. package/dist/streaming/buffer-pool.d.ts +241 -0
  557. package/dist/streaming/buffer-pool.d.ts.map +1 -0
  558. package/dist/streaming/buffer-pool.js +381 -0
  559. package/dist/streaming/buffer-pool.js.map +1 -0
  560. package/dist/streaming/cdc-iceberg-connector.d.ts +272 -0
  561. package/dist/streaming/cdc-iceberg-connector.d.ts.map +1 -0
  562. package/dist/streaming/cdc-iceberg-connector.js +408 -0
  563. package/dist/streaming/cdc-iceberg-connector.js.map +1 -0
  564. package/dist/streaming/index.d.ts +111 -0
  565. package/dist/streaming/index.d.ts.map +1 -0
  566. package/dist/streaming/index.js +128 -0
  567. package/dist/streaming/index.js.map +1 -0
  568. package/dist/streaming/live-cdc-stream.d.ts +400 -0
  569. package/dist/streaming/live-cdc-stream.d.ts.map +1 -0
  570. package/dist/streaming/live-cdc-stream.js +703 -0
  571. package/dist/streaming/live-cdc-stream.js.map +1 -0
  572. package/dist/streaming/memory-bounded-stream.d.ts +207 -0
  573. package/dist/streaming/memory-bounded-stream.d.ts.map +1 -0
  574. package/dist/streaming/memory-bounded-stream.js +340 -0
  575. package/dist/streaming/memory-bounded-stream.js.map +1 -0
  576. package/dist/streaming/query-streamer.d.ts +379 -0
  577. package/dist/streaming/query-streamer.d.ts.map +1 -0
  578. package/dist/streaming/query-streamer.js +495 -0
  579. package/dist/streaming/query-streamer.js.map +1 -0
  580. package/dist/streaming/response-streaming.d.ts +203 -0
  581. package/dist/streaming/response-streaming.d.ts.map +1 -0
  582. package/dist/streaming/response-streaming.js +449 -0
  583. package/dist/streaming/response-streaming.js.map +1 -0
  584. package/dist/types/branded.d.ts +859 -0
  585. package/dist/types/branded.d.ts.map +1 -0
  586. package/dist/types/branded.js +891 -0
  587. package/dist/types/branded.js.map +1 -0
  588. package/dist/types/utilities.d.ts +757 -0
  589. package/dist/types/utilities.d.ts.map +1 -0
  590. package/dist/types/utilities.js +447 -0
  591. package/dist/types/utilities.js.map +1 -0
  592. package/dist/wal/replay-engine.d.ts +344 -0
  593. package/dist/wal/replay-engine.d.ts.map +1 -0
  594. package/dist/wal/replay-engine.js +975 -0
  595. package/dist/wal/replay-engine.js.map +1 -0
  596. package/dist/worker/__mocks__/capnweb.d.ts +13 -0
  597. package/dist/worker/__mocks__/capnweb.d.ts.map +1 -0
  598. package/dist/worker/__mocks__/capnweb.js +15 -0
  599. package/dist/worker/__mocks__/capnweb.js.map +1 -0
  600. package/dist/worker/__mocks__/cloudflare-workers.d.ts +31 -0
  601. package/dist/worker/__mocks__/cloudflare-workers.d.ts.map +1 -0
  602. package/dist/worker/__mocks__/cloudflare-workers.js +33 -0
  603. package/dist/worker/__mocks__/cloudflare-workers.js.map +1 -0
  604. package/dist/worker/__mocks__/pglite.data.d.ts +3 -0
  605. package/dist/worker/__mocks__/pglite.data.d.ts.map +1 -0
  606. package/dist/worker/__mocks__/pglite.data.js +20 -0
  607. package/dist/worker/__mocks__/pglite.data.js.map +1 -0
  608. package/dist/worker/__mocks__/pglite.wasm.d.ts +3 -0
  609. package/dist/worker/__mocks__/pglite.wasm.d.ts.map +1 -0
  610. package/dist/worker/__mocks__/pglite.wasm.js +30 -0
  611. package/dist/worker/__mocks__/pglite.wasm.js.map +1 -0
  612. package/dist/worker/auth-rate-limiter.d.ts +270 -0
  613. package/dist/worker/auth-rate-limiter.d.ts.map +1 -0
  614. package/dist/worker/auth-rate-limiter.js +332 -0
  615. package/dist/worker/auth-rate-limiter.js.map +1 -0
  616. package/dist/worker/auth.d.ts +345 -0
  617. package/dist/worker/auth.d.ts.map +1 -0
  618. package/dist/worker/auth.js +837 -0
  619. package/dist/worker/auth.js.map +1 -0
  620. package/dist/worker/cdc-backpressure.d.ts +338 -0
  621. package/dist/worker/cdc-backpressure.d.ts.map +1 -0
  622. package/dist/worker/cdc-backpressure.js +619 -0
  623. package/dist/worker/cdc-backpressure.js.map +1 -0
  624. package/dist/worker/cdc-sse.d.ts +277 -0
  625. package/dist/worker/cdc-sse.d.ts.map +1 -0
  626. package/dist/worker/cdc-sse.js +528 -0
  627. package/dist/worker/cdc-sse.js.map +1 -0
  628. package/dist/worker/cdc-websocket.d.ts +252 -0
  629. package/dist/worker/cdc-websocket.d.ts.map +1 -0
  630. package/dist/worker/cdc-websocket.js +940 -0
  631. package/dist/worker/cdc-websocket.js.map +1 -0
  632. package/dist/worker/cdc.d.ts +95 -0
  633. package/dist/worker/cdc.d.ts.map +1 -0
  634. package/dist/worker/cdc.js +211 -0
  635. package/dist/worker/cdc.js.map +1 -0
  636. package/dist/worker/concerns/auth-concern.d.ts +50 -0
  637. package/dist/worker/concerns/auth-concern.d.ts.map +1 -0
  638. package/dist/worker/concerns/auth-concern.js +131 -0
  639. package/dist/worker/concerns/auth-concern.js.map +1 -0
  640. package/dist/worker/concerns/cdc-concern.d.ts +99 -0
  641. package/dist/worker/concerns/cdc-concern.d.ts.map +1 -0
  642. package/dist/worker/concerns/cdc-concern.js +137 -0
  643. package/dist/worker/concerns/cdc-concern.js.map +1 -0
  644. package/dist/worker/concerns/index.d.ts +22 -0
  645. package/dist/worker/concerns/index.d.ts.map +1 -0
  646. package/dist/worker/concerns/index.js +13 -0
  647. package/dist/worker/concerns/index.js.map +1 -0
  648. package/dist/worker/concerns/query-execution-concern.d.ts +104 -0
  649. package/dist/worker/concerns/query-execution-concern.d.ts.map +1 -0
  650. package/dist/worker/concerns/query-execution-concern.js +95 -0
  651. package/dist/worker/concerns/query-execution-concern.js.map +1 -0
  652. package/dist/worker/concerns/storage-orchestration-concern.d.ts +78 -0
  653. package/dist/worker/concerns/storage-orchestration-concern.d.ts.map +1 -0
  654. package/dist/worker/concerns/storage-orchestration-concern.js +240 -0
  655. package/dist/worker/concerns/storage-orchestration-concern.js.map +1 -0
  656. package/dist/worker/do-auth-manager.d.ts +108 -0
  657. package/dist/worker/do-auth-manager.d.ts.map +1 -0
  658. package/dist/worker/do-auth-manager.js +212 -0
  659. package/dist/worker/do-auth-manager.js.map +1 -0
  660. package/dist/worker/do-pglite-manager.d.ts +137 -0
  661. package/dist/worker/do-pglite-manager.d.ts.map +1 -0
  662. package/dist/worker/do-pglite-manager.js +228 -0
  663. package/dist/worker/do-pglite-manager.js.map +1 -0
  664. package/dist/worker/do.d.ts +556 -0
  665. package/dist/worker/do.d.ts.map +1 -0
  666. package/dist/worker/do.js +1441 -0
  667. package/dist/worker/do.js.map +1 -0
  668. package/dist/worker/entry.d.ts +23 -0
  669. package/dist/worker/entry.d.ts.map +1 -0
  670. package/dist/worker/entry.js +362 -0
  671. package/dist/worker/entry.js.map +1 -0
  672. package/dist/worker/errors.d.ts +106 -0
  673. package/dist/worker/errors.d.ts.map +1 -0
  674. package/dist/worker/errors.js +178 -0
  675. package/dist/worker/errors.js.map +1 -0
  676. package/dist/worker/health-check-manager.d.ts +141 -0
  677. package/dist/worker/health-check-manager.d.ts.map +1 -0
  678. package/dist/worker/health-check-manager.js +145 -0
  679. package/dist/worker/health-check-manager.js.map +1 -0
  680. package/dist/worker/index.d.ts +60 -0
  681. package/dist/worker/index.d.ts.map +1 -0
  682. package/dist/worker/index.js +67 -0
  683. package/dist/worker/index.js.map +1 -0
  684. package/dist/worker/memory-pressure.d.ts +892 -0
  685. package/dist/worker/memory-pressure.d.ts.map +1 -0
  686. package/dist/worker/memory-pressure.js +1990 -0
  687. package/dist/worker/memory-pressure.js.map +1 -0
  688. package/dist/worker/migration-manager.d.ts +153 -0
  689. package/dist/worker/migration-manager.d.ts.map +1 -0
  690. package/dist/worker/migration-manager.js +461 -0
  691. package/dist/worker/migration-manager.js.map +1 -0
  692. package/dist/worker/plugin-manager.d.ts +147 -0
  693. package/dist/worker/plugin-manager.d.ts.map +1 -0
  694. package/dist/worker/plugin-manager.js +408 -0
  695. package/dist/worker/plugin-manager.js.map +1 -0
  696. package/dist/worker/proxy.d.ts +330 -0
  697. package/dist/worker/proxy.d.ts.map +1 -0
  698. package/dist/worker/proxy.js +504 -0
  699. package/dist/worker/proxy.js.map +1 -0
  700. package/dist/worker/query-execution-manager.d.ts +107 -0
  701. package/dist/worker/query-execution-manager.d.ts.map +1 -0
  702. package/dist/worker/query-execution-manager.js +155 -0
  703. package/dist/worker/query-execution-manager.js.map +1 -0
  704. package/dist/worker/query-executor.d.ts +163 -0
  705. package/dist/worker/query-executor.d.ts.map +1 -0
  706. package/dist/worker/query-executor.js +413 -0
  707. package/dist/worker/query-executor.js.map +1 -0
  708. package/dist/worker/query-stats-manager.d.ts +117 -0
  709. package/dist/worker/query-stats-manager.d.ts.map +1 -0
  710. package/dist/worker/query-stats-manager.js +162 -0
  711. package/dist/worker/query-stats-manager.js.map +1 -0
  712. package/dist/worker/result-handler.d.ts +192 -0
  713. package/dist/worker/result-handler.d.ts.map +1 -0
  714. package/dist/worker/result-handler.js +346 -0
  715. package/dist/worker/result-handler.js.map +1 -0
  716. package/dist/worker/routes.d.ts +135 -0
  717. package/dist/worker/routes.d.ts.map +1 -0
  718. package/dist/worker/routes.js +460 -0
  719. package/dist/worker/routes.js.map +1 -0
  720. package/dist/worker/rpc-methods-manager.d.ts +142 -0
  721. package/dist/worker/rpc-methods-manager.d.ts.map +1 -0
  722. package/dist/worker/rpc-methods-manager.js +195 -0
  723. package/dist/worker/rpc-methods-manager.js.map +1 -0
  724. package/dist/worker/rpc.d.ts +259 -0
  725. package/dist/worker/rpc.d.ts.map +1 -0
  726. package/dist/worker/rpc.js +398 -0
  727. package/dist/worker/rpc.js.map +1 -0
  728. package/dist/worker/schema-version.d.ts +209 -0
  729. package/dist/worker/schema-version.d.ts.map +1 -0
  730. package/dist/worker/schema-version.js +450 -0
  731. package/dist/worker/schema-version.js.map +1 -0
  732. package/dist/worker/session-manager.d.ts +282 -0
  733. package/dist/worker/session-manager.d.ts.map +1 -0
  734. package/dist/worker/session-manager.js +523 -0
  735. package/dist/worker/session-manager.js.map +1 -0
  736. package/dist/worker/shutdown-manager.d.ts +188 -0
  737. package/dist/worker/shutdown-manager.d.ts.map +1 -0
  738. package/dist/worker/shutdown-manager.js +347 -0
  739. package/dist/worker/shutdown-manager.js.map +1 -0
  740. package/dist/worker/sql-transform.d.ts +61 -0
  741. package/dist/worker/sql-transform.d.ts.map +1 -0
  742. package/dist/worker/sql-transform.js +312 -0
  743. package/dist/worker/sql-transform.js.map +1 -0
  744. package/dist/worker/types.d.ts +738 -0
  745. package/dist/worker/types.d.ts.map +1 -0
  746. package/dist/worker/types.js +6 -0
  747. package/dist/worker/types.js.map +1 -0
  748. package/dist/worker/user-routes.d.ts +76 -0
  749. package/dist/worker/user-routes.d.ts.map +1 -0
  750. package/dist/worker/user-routes.js +188 -0
  751. package/dist/worker/user-routes.js.map +1 -0
  752. package/dist/worker/wal-facade.d.ts +138 -0
  753. package/dist/worker/wal-facade.d.ts.map +1 -0
  754. package/dist/worker/wal-facade.js +184 -0
  755. package/dist/worker/wal-facade.js.map +1 -0
  756. package/dist/worker/wal-r2.d.ts +271 -0
  757. package/dist/worker/wal-r2.d.ts.map +1 -0
  758. package/dist/worker/wal-r2.js +689 -0
  759. package/dist/worker/wal-r2.js.map +1 -0
  760. package/dist/worker/wal-replay.d.ts +361 -0
  761. package/dist/worker/wal-replay.d.ts.map +1 -0
  762. package/dist/worker/wal-replay.js +628 -0
  763. package/dist/worker/wal-replay.js.map +1 -0
  764. package/dist/worker/wal-retention.d.ts +389 -0
  765. package/dist/worker/wal-retention.d.ts.map +1 -0
  766. package/dist/worker/wal-retention.js +763 -0
  767. package/dist/worker/wal-retention.js.map +1 -0
  768. package/dist/worker/wal.d.ts +278 -0
  769. package/dist/worker/wal.d.ts.map +1 -0
  770. package/dist/worker/wal.js +467 -0
  771. package/dist/worker/wal.js.map +1 -0
  772. package/dist/worker/websocket.d.ts +85 -0
  773. package/dist/worker/websocket.d.ts.map +1 -0
  774. package/dist/worker/websocket.js +227 -0
  775. package/dist/worker/websocket.js.map +1 -0
  776. package/package.json +108 -0
  777. package/src/cdc/change-stream.ts +137 -0
  778. package/src/cdc/filter.ts +646 -0
  779. package/src/cdc/index.ts +112 -0
  780. package/src/cdc/resume-token.ts +280 -0
  781. package/src/cdc/transport/index.ts +7 -0
  782. package/src/cdc/transport/sse.ts +723 -0
  783. package/src/cdc/transport/websocket.ts +873 -0
  784. package/src/cdc/types.ts +346 -0
  785. package/src/config/index.ts +25 -0
  786. package/src/config/memory.ts +177 -0
  787. package/src/config/storage.ts +204 -0
  788. package/src/config/streaming.ts +147 -0
  789. package/src/config/timeouts.ts +221 -0
  790. package/src/extensions/config.test.ts +187 -0
  791. package/src/extensions/config.ts +278 -0
  792. package/src/extensions/geo.test.ts +455 -0
  793. package/src/extensions/geo.ts +858 -0
  794. package/src/extensions/index.test.ts +259 -0
  795. package/src/extensions/index.ts +227 -0
  796. package/src/extensions/loader.test.ts +555 -0
  797. package/src/extensions/loader.ts +588 -0
  798. package/src/extensions/pgmq-lite.test.ts +727 -0
  799. package/src/extensions/pgmq-lite.ts +770 -0
  800. package/src/extensions/plugins.test.ts +528 -0
  801. package/src/extensions/plugins.ts +718 -0
  802. package/src/extensions/registry.test.ts +202 -0
  803. package/src/extensions/registry.ts +267 -0
  804. package/src/extensions/vector.test.ts +195 -0
  805. package/src/extensions/vector.ts +217 -0
  806. package/src/iceberg/SCHEDULER.md +580 -0
  807. package/src/iceberg/analytics.test.ts +703 -0
  808. package/src/iceberg/analytics.ts +727 -0
  809. package/src/iceberg/catalog-api.test.ts +838 -0
  810. package/src/iceberg/catalog-api.ts +520 -0
  811. package/src/iceberg/catalog.test.ts +680 -0
  812. package/src/iceberg/catalog.ts +1007 -0
  813. package/src/iceberg/iceberg.test.ts +705 -0
  814. package/src/iceberg/index.ts +406 -0
  815. package/src/iceberg/metadata.test.ts +632 -0
  816. package/src/iceberg/metadata.ts +649 -0
  817. package/src/iceberg/optimizer.test.ts +868 -0
  818. package/src/iceberg/optimizer.ts +1287 -0
  819. package/src/iceberg/parquet.test.ts +899 -0
  820. package/src/iceberg/parquet.ts +1640 -0
  821. package/src/iceberg/r2-organization.test.ts +615 -0
  822. package/src/iceberg/r2-organization.ts +951 -0
  823. package/src/iceberg/scheduler-do-example.ts +364 -0
  824. package/src/iceberg/scheduler.test.ts +861 -0
  825. package/src/iceberg/scheduler.ts +1201 -0
  826. package/src/iceberg/schema.test.ts +547 -0
  827. package/src/iceberg/schema.ts +616 -0
  828. package/src/iceberg/snapshot-manager.test.ts +919 -0
  829. package/src/iceberg/snapshot-manager.ts +1369 -0
  830. package/src/iceberg/sql-router.test.ts +334 -0
  831. package/src/iceberg/sql-router.ts +337 -0
  832. package/src/iceberg/test-fixtures.ts +605 -0
  833. package/src/iceberg/time-travel-api.test.ts +1029 -0
  834. package/src/iceberg/time-travel-api.ts +731 -0
  835. package/src/iceberg/time-travel.test.ts +1218 -0
  836. package/src/iceberg/time-travel.ts +1052 -0
  837. package/src/iceberg/transformer.test.ts +689 -0
  838. package/src/iceberg/transformer.ts +1029 -0
  839. package/src/iceberg/types.ts +373 -0
  840. package/src/iceberg/writer.test.ts +716 -0
  841. package/src/iceberg/writer.ts +590 -0
  842. package/src/index.ts +212 -0
  843. package/src/lineage/index.ts +42 -0
  844. package/src/lineage/integration.ts +334 -0
  845. package/src/lineage/tracker.ts +1618 -0
  846. package/src/lineage/types.ts +354 -0
  847. package/src/middleware/index.ts +36 -0
  848. package/src/middleware/rate-limit-concurrent.test.ts +794 -0
  849. package/src/middleware/rate-limit.test.ts +1568 -0
  850. package/src/middleware/rate-limit.ts +840 -0
  851. package/src/migration-tooling/external-migration.test.ts +1864 -0
  852. package/src/migration-tooling/external-migration.ts +2355 -0
  853. package/src/migration-tooling/index.ts +19 -0
  854. package/src/migrations/ARCHITECTURE.md +474 -0
  855. package/src/migrations/PROGRESS_TRACKING.md +485 -0
  856. package/src/migrations/auto-migrator.test.ts +732 -0
  857. package/src/migrations/auto-migrator.ts +531 -0
  858. package/src/migrations/bulk-orchestrator.test.ts +801 -0
  859. package/src/migrations/bulk-orchestrator.ts +1039 -0
  860. package/src/migrations/compatibility.test.ts +958 -0
  861. package/src/migrations/compatibility.ts +902 -0
  862. package/src/migrations/do-migrations.test.ts +2620 -0
  863. package/src/migrations/do-migrations.ts +1289 -0
  864. package/src/migrations/do-migrations.types.ts +715 -0
  865. package/src/migrations/drizzle-compat.test.ts +210 -0
  866. package/src/migrations/drizzle-compat.ts +337 -0
  867. package/src/migrations/index.ts +334 -0
  868. package/src/migrations/migration-api.test.ts +438 -0
  869. package/src/migrations/migration-api.ts +704 -0
  870. package/src/migrations/progress-tracker-do.ts +518 -0
  871. package/src/migrations/progress-tracker-kv.ts +305 -0
  872. package/src/migrations/progress-tracker.test.ts +937 -0
  873. package/src/migrations/progress-tracker.ts +665 -0
  874. package/src/migrations/registry.test.ts +331 -0
  875. package/src/migrations/registry.ts +468 -0
  876. package/src/migrations/rollback.test.ts +644 -0
  877. package/src/migrations/runner.test.ts +807 -0
  878. package/src/migrations/runner.test.ts.backup +759 -0
  879. package/src/migrations/runner.ts +1459 -0
  880. package/src/migrations/schema-generator.test.ts +649 -0
  881. package/src/migrations/schema-generator.ts +513 -0
  882. package/src/migrations/testing.ts +1037 -0
  883. package/src/migrations/types.ts +573 -0
  884. package/src/migrations/validator.test.ts +660 -0
  885. package/src/migrations/validator.ts +741 -0
  886. package/src/observability/alerting.test.ts +1133 -0
  887. package/src/observability/alerting.ts +455 -0
  888. package/src/observability/analytics-engine.ts +733 -0
  889. package/src/observability/cost-metrics.ts +804 -0
  890. package/src/observability/cross-do-tracing.test.ts +516 -0
  891. package/src/observability/cross-do-tracing.ts +588 -0
  892. package/src/observability/dashboards/postgres-do-overview.json +1656 -0
  893. package/src/observability/error-rate-collector.test.ts +977 -0
  894. package/src/observability/error-rate-collector.ts +518 -0
  895. package/src/observability/exporters.test.ts +365 -0
  896. package/src/observability/exporters.ts +650 -0
  897. package/src/observability/health-check.test.ts +353 -0
  898. package/src/observability/health-check.ts +341 -0
  899. package/src/observability/index.test.ts +298 -0
  900. package/src/observability/index.ts +885 -0
  901. package/src/observability/instrumentation.test.ts +428 -0
  902. package/src/observability/instrumentation.ts +788 -0
  903. package/src/observability/memory-metrics.test.ts +355 -0
  904. package/src/observability/memory-metrics.ts +990 -0
  905. package/src/observability/metrics-endpoint.test.ts +402 -0
  906. package/src/observability/metrics-endpoint.ts +374 -0
  907. package/src/observability/metrics.test.ts +291 -0
  908. package/src/observability/metrics.ts +315 -0
  909. package/src/observability/observability-features.ts +1296 -0
  910. package/src/observability/prometheus.test.ts +292 -0
  911. package/src/observability/prometheus.ts +170 -0
  912. package/src/observability/propagation.test.ts +417 -0
  913. package/src/observability/propagation.ts +294 -0
  914. package/src/observability/query-latency.ts +586 -0
  915. package/src/observability/query-performance.test.ts +406 -0
  916. package/src/observability/query-performance.ts +491 -0
  917. package/src/observability/storage-tier-metrics.test.ts +633 -0
  918. package/src/observability/storage-tier-metrics.ts +570 -0
  919. package/src/observability/tier-cost-optimizer.ts +740 -0
  920. package/src/observability/tracer.test.ts +346 -0
  921. package/src/observability/tracer.ts +585 -0
  922. package/src/observability/types.test.ts +726 -0
  923. package/src/observability/types.ts +434 -0
  924. package/src/pglite/auto-demotion.test.ts +477 -0
  925. package/src/pglite/auto-demotion.ts +385 -0
  926. package/src/pglite/auto-promotion.test.ts +824 -0
  927. package/src/pglite/auto-promotion.ts +547 -0
  928. package/src/pglite/cache-layer.test.ts +469 -0
  929. package/src/pglite/cache-layer.ts +271 -0
  930. package/src/pglite/cold-start-manager.ts +1260 -0
  931. package/src/pglite/cold-start-optimizer.test.ts +937 -0
  932. package/src/pglite/cold-start-optimizer.ts +1895 -0
  933. package/src/pglite/dovfs-adapter.ts +1122 -0
  934. package/src/pglite/dovfs.ts +1258 -0
  935. package/src/pglite/etag-cache.test.ts +844 -0
  936. package/src/pglite/etag-cache.ts +526 -0
  937. package/src/pglite/index.ts +442 -0
  938. package/src/pglite/init.test.ts +455 -0
  939. package/src/pglite/init.ts +574 -0
  940. package/src/pglite/lifecycle.test.ts +599 -0
  941. package/src/pglite/lifecycle.ts +704 -0
  942. package/src/pglite/parallel-loader.test.ts +586 -0
  943. package/src/pglite/parallel-loader.ts +481 -0
  944. package/src/pglite/production-pglite.test.ts +666 -0
  945. package/src/pglite/production-pglite.ts +537 -0
  946. package/src/pglite/query-executor.ts +614 -0
  947. package/src/pglite/r2-layer.test.ts +501 -0
  948. package/src/pglite/r2-layer.ts +322 -0
  949. package/src/pglite/tiered-init.test.ts +725 -0
  950. package/src/pglite/tiered-init.ts +556 -0
  951. package/src/pglite/tiered-vfs.test.ts +726 -0
  952. package/src/pglite/tiered-vfs.ts +33 -0
  953. package/src/pglite/tiering-stats.test.ts +531 -0
  954. package/src/pglite/tiering-stats.ts +407 -0
  955. package/src/pglite/transaction-hooks.ts +343 -0
  956. package/src/pglite/warm-loader.test.ts +1701 -0
  957. package/src/pglite/warm-loader.ts +528 -0
  958. package/src/pglite/workers-pglite.ts +224 -0
  959. package/src/pglite-assets/pglite.data +0 -0
  960. package/src/pglite-assets/pglite.wasm +0 -0
  961. package/src/pglite.d.ts +47 -0
  962. package/src/playground/index.ts +137 -0
  963. package/src/playground/keyboard-shortcuts.ts +677 -0
  964. package/src/playground/playground.ts +323 -0
  965. package/src/playground/query-executor.ts +669 -0
  966. package/src/playground/query-history.ts +328 -0
  967. package/src/playground/result-formatter.ts +420 -0
  968. package/src/playground/sample-datasets.ts +674 -0
  969. package/src/playground/sample-queries.ts +1168 -0
  970. package/src/playground/schema-explorer.ts +558 -0
  971. package/src/playground/types.ts +518 -0
  972. package/src/readonly/cache-reader.test.ts +460 -0
  973. package/src/readonly/cache-reader.ts +313 -0
  974. package/src/readonly/config.test.ts +187 -0
  975. package/src/readonly/config.ts +128 -0
  976. package/src/readonly/index.ts +50 -0
  977. package/src/readonly/pglite-wrapper.test.ts +278 -0
  978. package/src/readonly/pglite-wrapper.ts +184 -0
  979. package/src/readonly/worker.test.ts +533 -0
  980. package/src/readonly/worker.ts +341 -0
  981. package/src/readonly/write-blocker.test.ts +459 -0
  982. package/src/readonly/write-blocker.ts +175 -0
  983. package/src/recovery/disaster-recovery.test.ts +618 -0
  984. package/src/recovery/disaster-recovery.ts +1181 -0
  985. package/src/recovery/index.ts +43 -0
  986. package/src/recovery/parquet-parser.ts +974 -0
  987. package/src/retention/index.ts +74 -0
  988. package/src/retention/policy.test.ts +571 -0
  989. package/src/retention/policy.ts +774 -0
  990. package/src/retention/purger.test.ts +465 -0
  991. package/src/retention/purger.ts +558 -0
  992. package/src/rls/auth-integration.test.ts +752 -0
  993. package/src/rls/auth-integration.ts +533 -0
  994. package/src/rls/generator.test.ts +829 -0
  995. package/src/rls/generator.ts +573 -0
  996. package/src/rls/index.ts +128 -0
  997. package/src/rls/policy.ts +208 -0
  998. package/src/rls/rls.test.ts +1071 -0
  999. package/src/rls/validator.test.ts +930 -0
  1000. package/src/rls/validator.ts +895 -0
  1001. package/src/routing/adaptive-router.test.ts +884 -0
  1002. package/src/routing/adaptive-router.ts +845 -0
  1003. package/src/routing/circuit-breaker.test.ts +1505 -0
  1004. package/src/routing/circuit-breaker.ts +852 -0
  1005. package/src/routing/cost-metrics.test.ts +565 -0
  1006. package/src/routing/cost-metrics.ts +408 -0
  1007. package/src/routing/do-connection-pool.test.ts +1109 -0
  1008. package/src/routing/do-connection-pool.ts +828 -0
  1009. package/src/routing/index.ts +158 -0
  1010. package/src/routing/query-complexity-estimator.test.ts +356 -0
  1011. package/src/routing/query-complexity-estimator.ts +444 -0
  1012. package/src/routing/request-coalescing.test.ts +738 -0
  1013. package/src/routing/request-coalescing.ts +475 -0
  1014. package/src/routing/runtime-router.test.ts +436 -0
  1015. package/src/routing/runtime-router.ts +357 -0
  1016. package/src/routing/tenant-router.test.ts +2493 -0
  1017. package/src/routing/tenant-router.ts +1908 -0
  1018. package/src/routing/websocket-pool.test.ts +551 -0
  1019. package/src/routing/websocket-pool.ts +577 -0
  1020. package/src/storage/access-pattern-tracker.test.ts +874 -0
  1021. package/src/storage/cache-layer.test.ts +560 -0
  1022. package/src/storage/cache-layer.ts +328 -0
  1023. package/src/storage/cost-aware-tiering.test.ts +652 -0
  1024. package/src/storage/cost-aware-tiering.ts +794 -0
  1025. package/src/storage/do-sqlite-blobs.test.ts +937 -0
  1026. package/src/storage/index.ts +272 -0
  1027. package/src/storage/interfaces.ts +974 -0
  1028. package/src/storage/r2-layer.test.ts +653 -0
  1029. package/src/storage/r2-layer.ts +434 -0
  1030. package/src/storage/r2-overflow.ts +920 -0
  1031. package/src/storage/r2-page-vfs.test.ts +2348 -0
  1032. package/src/storage/r2-page-vfs.ts +1054 -0
  1033. package/src/storage/swr-cache.test.ts +832 -0
  1034. package/src/storage/swr-cache.ts +398 -0
  1035. package/src/storage/swr-tiered-integration.test.ts +617 -0
  1036. package/src/storage/tiered-orchestrator.test.ts +2441 -0
  1037. package/src/storage/tiered-orchestrator.ts +2081 -0
  1038. package/src/storage/tiered-vfs-swr.test.ts +736 -0
  1039. package/src/storage/tiered-vfs-swr.ts +735 -0
  1040. package/src/storage/tiered-vfs.test.ts +793 -0
  1041. package/src/storage/tiered-vfs.ts +1082 -0
  1042. package/src/streaming/backpressure-controller.ts +452 -0
  1043. package/src/streaming/buffer-pool.ts +484 -0
  1044. package/src/streaming/cdc-iceberg-connector.ts +605 -0
  1045. package/src/streaming/index.ts +225 -0
  1046. package/src/streaming/live-cdc-stream.ts +985 -0
  1047. package/src/streaming/memory-bounded-stream.ts +443 -0
  1048. package/src/streaming/query-streamer.ts +662 -0
  1049. package/src/streaming/response-streaming.ts +557 -0
  1050. package/src/types/branded.ts +1075 -0
  1051. package/src/types/branded.ts.backup +273 -0
  1052. package/src/types/utilities.ts +1023 -0
  1053. package/src/types/wasm.d.ts +30 -0
  1054. package/src/validation/typed-errors.test.ts +420 -0
  1055. package/src/wal/replay-engine.ts +1264 -0
  1056. package/src/worker/__mocks__/capnweb.ts +15 -0
  1057. package/src/worker/__mocks__/pglite.data.ts +22 -0
  1058. package/src/worker/__mocks__/pglite.wasm.ts +33 -0
  1059. package/src/worker/auth-rate-limiter.test.ts +272 -0
  1060. package/src/worker/auth-rate-limiter.ts +448 -0
  1061. package/src/worker/auth.security-red.test.ts +1236 -0
  1062. package/src/worker/auth.security.test.ts +822 -0
  1063. package/src/worker/auth.test.ts +469 -0
  1064. package/src/worker/auth.ts +1104 -0
  1065. package/src/worker/cdc-backpressure.test.ts +726 -0
  1066. package/src/worker/cdc-backpressure.ts +866 -0
  1067. package/src/worker/cdc-sse.test.ts +780 -0
  1068. package/src/worker/cdc-sse.ts +728 -0
  1069. package/src/worker/cdc-websocket.ts +1229 -0
  1070. package/src/worker/cdc-ws.test.ts +1009 -0
  1071. package/src/worker/cdc.test.ts +327 -0
  1072. package/src/worker/cdc.ts +289 -0
  1073. package/src/worker/concerns/auth-concern.ts +179 -0
  1074. package/src/worker/concerns/cdc-concern.ts +247 -0
  1075. package/src/worker/concerns/index.ts +58 -0
  1076. package/src/worker/concerns/query-execution-concern.ts +194 -0
  1077. package/src/worker/concerns/storage-orchestration-concern.ts +373 -0
  1078. package/src/worker/discriminated-types.test.ts +280 -0
  1079. package/src/worker/do-auth-manager.ts +257 -0
  1080. package/src/worker/do-decomposition.test.ts +1236 -0
  1081. package/src/worker/do-pglite-manager.ts +302 -0
  1082. package/src/worker/do.test.ts +2254 -0
  1083. package/src/worker/do.ts +1878 -0
  1084. package/src/worker/entry.ts +417 -0
  1085. package/src/worker/errors.ts +285 -0
  1086. package/src/worker/health-check-manager.test.ts +261 -0
  1087. package/src/worker/health-check-manager.ts +231 -0
  1088. package/src/worker/index.ts +389 -0
  1089. package/src/worker/memory-pressure.test.ts +1460 -0
  1090. package/src/worker/memory-pressure.ts +2650 -0
  1091. package/src/worker/migration-manager.ts +582 -0
  1092. package/src/worker/neon-compat.test.ts +332 -0
  1093. package/src/worker/plugin-manager.ts +485 -0
  1094. package/src/worker/postgres.do-rpc.d.ts +76 -0
  1095. package/src/worker/proxy.ts +694 -0
  1096. package/src/worker/query-execution-manager.test.ts +303 -0
  1097. package/src/worker/query-execution-manager.ts +219 -0
  1098. package/src/worker/query-executor.test.ts +282 -0
  1099. package/src/worker/query-executor.ts +560 -0
  1100. package/src/worker/query-stats-manager.ts +229 -0
  1101. package/src/worker/result-handler.test.ts +364 -0
  1102. package/src/worker/result-handler.ts +510 -0
  1103. package/src/worker/routes.test.ts +795 -0
  1104. package/src/worker/routes.ts +650 -0
  1105. package/src/worker/rpc-methods-manager.test.ts +326 -0
  1106. package/src/worker/rpc-methods-manager.ts +276 -0
  1107. package/src/worker/rpc.ts +524 -0
  1108. package/src/worker/schema-version.ts +605 -0
  1109. package/src/worker/session-manager.test.ts +506 -0
  1110. package/src/worker/session-manager.ts +732 -0
  1111. package/src/worker/shutdown-manager.ts +469 -0
  1112. package/src/worker/sql-transform.test.ts +286 -0
  1113. package/src/worker/sql-transform.ts +368 -0
  1114. package/src/worker/supabase-compat.test.ts +621 -0
  1115. package/src/worker/types.test.ts +292 -0
  1116. package/src/worker/types.ts +873 -0
  1117. package/src/worker/user-routes.test.ts +703 -0
  1118. package/src/worker/user-routes.ts +303 -0
  1119. package/src/worker/wal-facade.ts +235 -0
  1120. package/src/worker/wal-r2.test.ts +570 -0
  1121. package/src/worker/wal-r2.ts +930 -0
  1122. package/src/worker/wal-replay.test.ts +845 -0
  1123. package/src/worker/wal-replay.ts +897 -0
  1124. package/src/worker/wal-retention.test.ts +758 -0
  1125. package/src/worker/wal-retention.ts +1075 -0
  1126. package/src/worker/wal.test.ts +618 -0
  1127. package/src/worker/wal.ts +697 -0
  1128. package/src/worker/websocket.test.ts +296 -0
  1129. package/src/worker/websocket.ts +284 -0
@@ -0,0 +1,837 @@
1
+ import { TokenCache, extractBearerToken, generateDatabaseId as sharedGenerateDatabaseId, validateToken as sharedValidateToken, DEFAULT_OAUTH_URL, DEFAULT_TOKEN_CACHE_TTL, } from '@dotdo/postgres-shared';
2
+ // ============================================================================
3
+ // Security Constants
4
+ // ============================================================================
5
+ /**
6
+ * Maximum allowed JWT token length in bytes.
7
+ *
8
+ * @security Prevents DoS attacks via oversized tokens that could exhaust memory
9
+ * or CPU during parsing. 8KB is generous for legitimate JWTs while
10
+ * blocking maliciously large payloads.
11
+ *
12
+ * @see https://datatracker.ietf.org/doc/html/rfc7519 - JWT specification
13
+ */
14
+ const MAX_TOKEN_LENGTH = 8192;
15
+ /**
16
+ * Maximum allowed clock skew between server and token issuer in seconds.
17
+ *
18
+ * @security Allows for reasonable time differences between systems while
19
+ * preventing replay attacks with expired tokens. 60 seconds is
20
+ * standard practice for distributed systems.
21
+ *
22
+ * @see https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4 - exp claim
23
+ * @see https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.5 - nbf claim
24
+ */
25
+ const MAX_CLOCK_SKEW_SECONDS = 60;
26
+ /**
27
+ * Time window for rate limiting in milliseconds (1 minute).
28
+ *
29
+ * @security Sliding window for tracking authentication failures per token prefix.
30
+ * Balances security (blocking brute force) with usability (not too short).
31
+ */
32
+ const RATE_LIMIT_WINDOW_MS = 60000;
33
+ /**
34
+ * Maximum authentication failures allowed per rate limit window.
35
+ *
36
+ * @security Prevents brute force and credential stuffing attacks. 10 failures
37
+ * per minute is strict enough to stop automated attacks while allowing
38
+ * for legitimate user errors.
39
+ */
40
+ const RATE_LIMIT_MAX_FAILURES = 10;
41
+ /**
42
+ * Prefix for rate limit tracking keys.
43
+ *
44
+ * @security Uses token prefix (first 20 chars) to prevent attackers from
45
+ * evading rate limits by rotating tokens while keeping signature.
46
+ */
47
+ const RATE_LIMIT_KEY_PREFIX = 'token:';
48
+ /**
49
+ * Number of token characters used for rate limit key generation.
50
+ *
51
+ * @security 20 characters is enough to identify unique tokens without
52
+ * storing full tokens in memory for rate limiting.
53
+ */
54
+ const RATE_LIMIT_KEY_LENGTH = 20;
55
+ /**
56
+ * Maximum number of rate limit entries to store in memory.
57
+ *
58
+ * @security Prevents memory exhaustion attacks where an attacker sends requests
59
+ * with many unique token prefixes to grow the Map unboundedly.
60
+ * 10,000 entries at ~100 bytes each = ~1MB memory budget.
61
+ */
62
+ const RATE_LIMIT_MAX_ENTRIES = 10000;
63
+ /**
64
+ * Interval for cleaning up expired rate limit entries in milliseconds.
65
+ *
66
+ * @security Periodic cleanup prevents memory leaks from expired entries.
67
+ * Every 5 minutes balances cleanup overhead with memory efficiency.
68
+ */
69
+ const RATE_LIMIT_CLEANUP_INTERVAL_MS = 300000;
70
+ // ============================================================================
71
+ // Error Codes - Consistent error response codes
72
+ // ============================================================================
73
+ /**
74
+ * Standardized error codes for authentication failures.
75
+ * These codes are exposed in API responses to help clients understand failures.
76
+ */
77
+ export const AUTH_ERROR_CODES = {
78
+ /** No token provided */
79
+ UNAUTHORIZED: 'UNAUTHORIZED',
80
+ /** Token failed validation */
81
+ INVALID_TOKEN: 'INVALID_TOKEN',
82
+ /** Too many failed attempts */
83
+ RATE_LIMITED: 'RATE_LIMITED',
84
+ };
85
+ /**
86
+ * Standardized error messages for authentication failures.
87
+ * Consistent messages improve security by not leaking implementation details.
88
+ */
89
+ export const AUTH_ERROR_MESSAGES = {
90
+ [AUTH_ERROR_CODES.UNAUTHORIZED]: 'Missing authentication token',
91
+ [AUTH_ERROR_CODES.INVALID_TOKEN]: 'Invalid authentication token',
92
+ [AUTH_ERROR_CODES.RATE_LIMITED]: 'Too many authentication failures. Please try again later.',
93
+ };
94
+ /**
95
+ * Performs a timing-safe comparison of two strings.
96
+ *
97
+ * @security This function uses constant-time comparison to prevent timing attacks.
98
+ * Timing attacks can leak information about the secret by measuring
99
+ * how long the comparison takes.
100
+ *
101
+ * @param a - First string to compare
102
+ * @param b - Second string to compare
103
+ * @returns true if strings are equal, false otherwise
104
+ */
105
+ export function timingSafeEqual(a, b) {
106
+ if (a.length !== b.length) {
107
+ // Still do comparison to prevent timing leaks on length difference
108
+ let result = 0;
109
+ for (let i = 0; i < a.length; i++) {
110
+ result |= a.charCodeAt(i) ^ (b.charCodeAt(i % b.length) || 0);
111
+ }
112
+ return false;
113
+ }
114
+ let result = 0;
115
+ for (let i = 0; i < a.length; i++) {
116
+ result |= a.charCodeAt(i) ^ b.charCodeAt(i);
117
+ }
118
+ return result === 0;
119
+ }
120
+ // ============================================================================
121
+ // Default Configuration Values
122
+ // ============================================================================
123
+ /**
124
+ * Default paths that bypass authentication.
125
+ *
126
+ * @security These paths expose minimal information and are required for
127
+ * health checks and load balancer probes. No sensitive data
128
+ * should ever be exposed on these endpoints.
129
+ */
130
+ const DEFAULT_PUBLIC_PATHS = ['/ping', '/health'];
131
+ /**
132
+ * In-memory rate limiter for authentication failures.
133
+ *
134
+ * @security This is a simple sliding window rate limiter. In production with
135
+ * multiple Workers, consider using Durable Objects or external
136
+ * storage for distributed rate limiting.
137
+ *
138
+ * @note Keys are token prefixes, not full tokens, to prevent memory exhaustion
139
+ * while still providing per-token-family rate limiting.
140
+ *
141
+ * Memory bounds:
142
+ * - Max entries: 10,000 (RATE_LIMIT_MAX_ENTRIES)
143
+ * - Periodic cleanup: every 5 minutes (RATE_LIMIT_CLEANUP_INTERVAL_MS)
144
+ * - LRU-style eviction when at capacity
145
+ */
146
+ const authFailureRateLimiter = new Map();
147
+ /**
148
+ * Timestamp of the last cleanup operation.
149
+ * Used to track when periodic cleanup should run.
150
+ */
151
+ let lastCleanupTime = Date.now();
152
+ /**
153
+ * Performs cleanup of expired rate limit entries.
154
+ * Called lazily during checkRateLimit to avoid needing a timer.
155
+ *
156
+ * @security This prevents memory leaks from accumulated expired entries.
157
+ * Uses lazy cleanup during normal operations instead of a timer
158
+ * to work better with Cloudflare Workers' event-driven model.
159
+ *
160
+ * @returns Number of entries removed
161
+ */
162
+ function cleanupExpiredRateLimitEntries() {
163
+ const now = Date.now();
164
+ let removed = 0;
165
+ // Remove entries older than the rate limit window
166
+ for (const [key, entry] of authFailureRateLimiter) {
167
+ if (now - entry.windowStart > RATE_LIMIT_WINDOW_MS) {
168
+ authFailureRateLimiter.delete(key);
169
+ removed++;
170
+ }
171
+ }
172
+ lastCleanupTime = now;
173
+ return removed;
174
+ }
175
+ /**
176
+ * Evicts oldest entries when rate limiter is at capacity.
177
+ * Uses Map iteration order (insertion order) for LRU-like eviction.
178
+ *
179
+ * @security Prevents memory exhaustion from attackers creating many unique
180
+ * rate limit keys. Evicts 10% of entries to amortize eviction cost.
181
+ */
182
+ function evictOldestEntries() {
183
+ // Evict 10% of max entries to amortize eviction overhead
184
+ const evictCount = Math.ceil(RATE_LIMIT_MAX_ENTRIES / 10);
185
+ let evicted = 0;
186
+ for (const key of authFailureRateLimiter.keys()) {
187
+ if (evicted >= evictCount)
188
+ break;
189
+ authFailureRateLimiter.delete(key);
190
+ evicted++;
191
+ }
192
+ }
193
+ /**
194
+ * Checks if a request should be rate limited based on prior failures.
195
+ *
196
+ * Uses a sliding window algorithm:
197
+ * 1. If no entry exists or window expired, start a new window with count=1
198
+ * 2. Otherwise, increment the failure count
199
+ * 3. Return true if count exceeds the threshold
200
+ *
201
+ * Memory safety:
202
+ * - Runs periodic cleanup every RATE_LIMIT_CLEANUP_INTERVAL_MS
203
+ * - Evicts oldest entries when at RATE_LIMIT_MAX_ENTRIES capacity
204
+ *
205
+ * @security Prevents brute force attacks by limiting authentication attempts.
206
+ * Attack vector: Attacker tries many passwords/tokens in rapid succession.
207
+ * Mitigation: After 10 failures in 60 seconds, all requests with that
208
+ * token prefix are blocked.
209
+ *
210
+ * @param key - Rate limit key (typically "token:" + first 20 chars of token)
211
+ * @returns true if the request should be rate limited, false otherwise
212
+ */
213
+ function checkRateLimit(key) {
214
+ const now = Date.now();
215
+ // Lazy cleanup: run periodically during normal operations
216
+ // This avoids needing a timer which doesn't work well in Workers
217
+ if (now - lastCleanupTime > RATE_LIMIT_CLEANUP_INTERVAL_MS) {
218
+ cleanupExpiredRateLimitEntries();
219
+ }
220
+ // Check if we need to evict before adding a new entry
221
+ if (!authFailureRateLimiter.has(key) && authFailureRateLimiter.size >= RATE_LIMIT_MAX_ENTRIES) {
222
+ evictOldestEntries();
223
+ }
224
+ const entry = authFailureRateLimiter.get(key);
225
+ if (!entry || now - entry.windowStart > RATE_LIMIT_WINDOW_MS) {
226
+ authFailureRateLimiter.set(key, { count: 1, windowStart: now });
227
+ return false;
228
+ }
229
+ entry.count++;
230
+ return entry.count > RATE_LIMIT_MAX_FAILURES;
231
+ }
232
+ /**
233
+ * Clears all rate limit state. Intended for testing only.
234
+ *
235
+ * @security In production, this should never be exposed to external callers.
236
+ * Only exported for use in test cleanup between test cases.
237
+ */
238
+ export function clearRateLimitState() {
239
+ authFailureRateLimiter.clear();
240
+ lastCleanupTime = Date.now();
241
+ }
242
+ /**
243
+ * Get rate limiter statistics for monitoring.
244
+ *
245
+ * @returns Current rate limiter stats including size and last cleanup time
246
+ */
247
+ export function getRateLimiterStats() {
248
+ return {
249
+ size: authFailureRateLimiter.size,
250
+ maxSize: RATE_LIMIT_MAX_ENTRIES,
251
+ lastCleanupTime,
252
+ };
253
+ }
254
+ /**
255
+ * Validates a JWT token against security requirements BEFORE cryptographic verification.
256
+ *
257
+ * This function performs structural and timing validation to reject obviously
258
+ * invalid or malicious tokens without incurring the cost of signature verification.
259
+ *
260
+ * @security This function prevents the following attack vectors:
261
+ *
262
+ * 1. **DoS via oversized tokens**: Attackers send huge tokens to exhaust memory/CPU.
263
+ * Mitigation: Reject tokens > 8KB before any parsing.
264
+ *
265
+ * 2. **Algorithm confusion (alg:none)**: Attacker crafts unsigned token with alg:none.
266
+ * Mitigation: Explicitly reject none/None/NONE algorithms.
267
+ * @see https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/
268
+ *
269
+ * 3. **Replay attacks with expired tokens**: Attacker captures and replays old tokens.
270
+ * Mitigation: Check exp claim with 60-second clock skew tolerance.
271
+ *
272
+ * 4. **Future-dated tokens**: Attacker creates tokens with nbf far in the future.
273
+ * Mitigation: Check nbf claim with 60-second clock skew tolerance.
274
+ *
275
+ * 5. **SQL injection via claims**: Attacker embeds SQL in sub claim to attack database.
276
+ * Mitigation: Validate sub claim against SQL injection patterns.
277
+ *
278
+ * 6. **Empty signature bypass**: Attacker sends token with empty signature segment.
279
+ * Mitigation: Explicitly check signature is non-empty.
280
+ *
281
+ * @param token - Raw JWT string from Authorization header
282
+ * @returns Validation result with decoded header/payload if successful
283
+ *
284
+ * @example
285
+ * ```typescript
286
+ * const result = validateJWTSecurity(token)
287
+ * if (!result.valid) {
288
+ * return unauthorized(result.error)
289
+ * }
290
+ * // Proceed to cryptographic verification
291
+ * ```
292
+ */
293
+ function validateJWTSecurity(token) {
294
+ // SECURITY: Prevent DoS via oversized tokens
295
+ if (token.length > MAX_TOKEN_LENGTH) {
296
+ return { valid: false, error: 'Token exceeds maximum length' };
297
+ }
298
+ // SECURITY: JWT must have exactly 3 segments (header.payload.signature)
299
+ const parts = token.split('.');
300
+ if (parts.length !== 3) {
301
+ return { valid: false, error: 'Invalid JWT structure - must have 3 segments' };
302
+ }
303
+ const [headerB64, payloadB64, signature] = parts;
304
+ // SECURITY: Empty segments indicate malformed or crafted tokens
305
+ if (!headerB64 || !payloadB64) {
306
+ return { valid: false, error: 'Invalid JWT - empty header or payload' };
307
+ }
308
+ // SECURITY: Empty signature indicates unsigned token (potential alg:none bypass)
309
+ if (!signature || signature.length === 0) {
310
+ return { valid: false, error: 'Invalid JWT - empty signature' };
311
+ }
312
+ // Parse and validate header
313
+ let header;
314
+ try {
315
+ header = JSON.parse(atob(headerB64));
316
+ }
317
+ catch {
318
+ return { valid: false, error: 'Invalid JWT header encoding' };
319
+ }
320
+ // SECURITY: Explicitly reject alg:none and common case variations
321
+ // This is a critical security check - the alg:none attack is well-documented
322
+ const alg = header.alg;
323
+ if (!alg || alg === 'none' || alg === 'None' || alg === 'NONE') {
324
+ return { valid: false, error: 'Invalid algorithm - alg:none not allowed' };
325
+ }
326
+ // Parse and validate payload
327
+ let payload;
328
+ try {
329
+ payload = JSON.parse(atob(payloadB64));
330
+ }
331
+ catch {
332
+ return { valid: false, error: 'Invalid JWT payload encoding' };
333
+ }
334
+ const now = Math.floor(Date.now() / 1000);
335
+ // SECURITY: Validate exp claim type and value
336
+ if (payload.exp !== undefined) {
337
+ // exp must be a finite number (not string, array, object, NaN, or Infinity)
338
+ if (typeof payload.exp !== 'number' || !Number.isFinite(payload.exp)) {
339
+ return { valid: false, error: 'Invalid exp claim - must be a finite number' };
340
+ }
341
+ const exp = payload.exp;
342
+ // Reject tokens at or past their expiration (exp === now means expired)
343
+ if (exp + MAX_CLOCK_SKEW_SECONDS <= now) {
344
+ return { valid: false, error: 'Token has expired' };
345
+ }
346
+ // SECURITY: Reject tokens with unreasonably long lifetime (max 7 days)
347
+ const maxFutureExp = now + 7 * 24 * 60 * 60;
348
+ if (exp > maxFutureExp) {
349
+ return { valid: false, error: 'Token expiration too far in future' };
350
+ }
351
+ }
352
+ // SECURITY: Validate nbf claim type and value
353
+ if (payload.nbf !== undefined) {
354
+ if (typeof payload.nbf !== 'number' || !Number.isFinite(payload.nbf)) {
355
+ return { valid: false, error: 'Invalid nbf claim - must be a finite number' };
356
+ }
357
+ const nbf = payload.nbf;
358
+ // Reject tokens at exactly the skew boundary (strict)
359
+ if (nbf - MAX_CLOCK_SKEW_SECONDS >= now) {
360
+ return { valid: false, error: 'Token not yet valid' };
361
+ }
362
+ }
363
+ // SECURITY: Validate iat claim type and check for future-dated tokens
364
+ if (payload.iat !== undefined) {
365
+ if (typeof payload.iat !== 'number' || !Number.isFinite(payload.iat)) {
366
+ return { valid: false, error: 'Invalid iat claim - must be a finite number' };
367
+ }
368
+ const iat = payload.iat;
369
+ // Reject tokens issued too far in the future (clock manipulation)
370
+ if (iat - MAX_CLOCK_SKEW_SECONDS > now) {
371
+ return { valid: false, error: 'Token issued in the future' };
372
+ }
373
+ // SECURITY: Reject tokens with iat set far in the past (lifetime manipulation)
374
+ const maxPastIat = now - 365 * 24 * 60 * 60; // Max 1 year ago
375
+ if (iat < maxPastIat) {
376
+ return { valid: false, error: 'Token issued too long ago' };
377
+ }
378
+ }
379
+ // SECURITY: Validate that exp > nbf when both are present
380
+ if (payload.exp !== undefined && payload.nbf !== undefined) {
381
+ if (payload.exp <= payload.nbf) {
382
+ return { valid: false, error: 'Invalid token - exp must be greater than nbf' };
383
+ }
384
+ }
385
+ // SECURITY: Check sub claim - must be a string if present
386
+ const sub = payload.sub;
387
+ if (sub !== undefined && typeof sub !== 'string') {
388
+ return { valid: false, error: 'Invalid sub claim - must be a string' };
389
+ }
390
+ // SECURITY: Check sub claim for SQL injection patterns
391
+ if (typeof sub === 'string' && containsSQLInjection(sub)) {
392
+ return { valid: false, error: 'Invalid user ID - contains forbidden characters' };
393
+ }
394
+ // SECURITY: Check email claim for SQL injection patterns
395
+ const email = payload.email;
396
+ if (email !== undefined) {
397
+ if (typeof email !== 'string') {
398
+ return { valid: false, error: 'Invalid email claim - must be a string' };
399
+ }
400
+ if (containsSQLInjection(email)) {
401
+ return { valid: false, error: 'Invalid email - contains forbidden characters' };
402
+ }
403
+ }
404
+ return { valid: true, header, payload };
405
+ }
406
+ /**
407
+ * SQL injection patterns to detect in user-controlled input.
408
+ *
409
+ * @security Each pattern targets a specific SQL injection technique:
410
+ *
411
+ * - `--` : SQL comment syntax, used to truncate queries
412
+ * - `;` : Statement terminator, enables multi-statement injection
413
+ * - `'` : String delimiter, enables string escaping attacks
414
+ * - `"` : Identifier delimiter, enables identifier injection
415
+ * - `/*` : Block comment start, used to obfuscate injections
416
+ * - `* /`: Block comment end, paired with start for injection
417
+ * - `DROP/DELETE/INSERT/UPDATE/SELECT/UNION`: Destructive or data-exfiltrating keywords
418
+ *
419
+ * @note This is a defense-in-depth measure. Primary SQL injection prevention
420
+ * should use parameterized queries. This catches malicious data before
421
+ * it reaches the database layer.
422
+ */
423
+ const SQL_INJECTION_PATTERNS = [
424
+ /--/, // SQL line comment - truncates query
425
+ /;/, // Statement terminator - allows chaining
426
+ /'/, // String delimiter - escaping attacks
427
+ /"/, // Identifier delimiter - injection
428
+ /\/\*/, // Block comment start - obfuscation
429
+ /\*\//, // Block comment end - obfuscation
430
+ /\bDROP\b/i, // DDL - data destruction
431
+ /\bDELETE\b/i, // DML - data deletion
432
+ /\bINSERT\b/i, // DML - unauthorized inserts
433
+ /\bUPDATE\b/i, // DML - data modification
434
+ /\bSELECT\b/i, // DQL - data exfiltration
435
+ /\bUNION\b/i, // Set operator - query manipulation
436
+ ];
437
+ /**
438
+ * Detects potential SQL injection patterns in a string.
439
+ *
440
+ * @security This is a blocklist-based detection. It catches common SQL injection
441
+ * patterns but should NOT be the only line of defense. Always use
442
+ * parameterized queries for database operations.
443
+ *
444
+ * @param value - String to check for SQL injection patterns
445
+ * @returns true if any SQL injection pattern is detected
446
+ *
447
+ * @example
448
+ * ```typescript
449
+ * containsSQLInjection("user123") // false - safe
450
+ * containsSQLInjection("admin'--") // true - comment injection
451
+ * containsSQLInjection("1; DROP TABLE") // true - statement chaining
452
+ * ```
453
+ */
454
+ function containsSQLInjection(value) {
455
+ return SQL_INJECTION_PATTERNS.some((pattern) => pattern.test(value));
456
+ }
457
+ /**
458
+ * Generates a safe, deterministic database identifier from a user ID.
459
+ *
460
+ * @security This function provides defense-in-depth sanitization before
461
+ * generating the database ID. Even though validateJWTSecurity
462
+ * already checks for SQL injection, this ensures any user ID
463
+ * that reaches the database layer is safe.
464
+ *
465
+ * Sanitization rules:
466
+ * - `--` -> `_` : Prevents SQL comment injection
467
+ * - `/*` -> `_` : Prevents block comment start
468
+ * - `* /`-> `_` : Prevents block comment end
469
+ * - `;` -> `_` : Prevents statement chaining
470
+ * - `'` -> `_` : Prevents string delimiter attacks
471
+ * - `"` -> `_` : Prevents identifier injection
472
+ *
473
+ * @param userId - User identifier from JWT sub claim
474
+ * @returns Safe database identifier in format "user_{sanitized_id}"
475
+ *
476
+ * @example
477
+ * ```typescript
478
+ * generateDatabaseId("user123") // "user_user123"
479
+ * generateDatabaseId("admin'--") // "user_admin___"
480
+ * generateDatabaseId("test@example.com") // "user_test_example_com"
481
+ * ```
482
+ */
483
+ export function generateDatabaseId(userId) {
484
+ // SECURITY: Ensure userId is a string (defense-in-depth)
485
+ if (typeof userId !== 'string') {
486
+ throw new Error('Invalid userId - must be a string');
487
+ }
488
+ // SECURITY: Replace all non-alphanumeric characters with underscores
489
+ // This is the most secure approach - only allow safe characters
490
+ const sanitized = userId
491
+ // First handle null bytes and control characters
492
+ .replace(/\x00/g, '_') // Null byte
493
+ .replace(/[\x01-\x1f\x7f]/g, '_') // Control characters
494
+ // Handle common SQL injection patterns
495
+ .replace(/--/g, '_') // SQL comment
496
+ .replace(/\/\*/g, '_') // Block comment start
497
+ .replace(/\*\//g, '_') // Block comment end
498
+ // Handle shell injection patterns
499
+ .replace(/\$/g, '_') // Shell variable
500
+ .replace(/`/g, '_') // Shell backtick
501
+ .replace(/\|/g, '_') // Pipe
502
+ .replace(/&/g, '_') // Background/AND
503
+ // Handle individual dangerous characters
504
+ .replace(/;/g, '_') // Statement terminator / shell separator
505
+ .replace(/'/g, '_') // String delimiter
506
+ .replace(/"/g, '_') // Identifier delimiter
507
+ .replace(/\\/g, '_') // Escape character
508
+ .replace(/\n/g, '_') // Newline
509
+ .replace(/\r/g, '_') // Carriage return
510
+ // Final sanitization: only allow alphanumeric, underscore, hyphen, dot, @
511
+ // Then replace anything else
512
+ .replace(/[^a-zA-Z0-9_\-\.@]/g, '_');
513
+ return sharedGenerateDatabaseId(sanitized);
514
+ }
515
+ /**
516
+ * Default cache configuration values.
517
+ *
518
+ * @security These defaults balance security and performance:
519
+ * - 1000 entries: Limits memory usage
520
+ * - 60s TTL: Quick revocation while reducing OAuth provider load
521
+ * - 60s cleanup: Regular purging of expired entries
522
+ */
523
+ const DEFAULT_CACHE_CONFIG = {
524
+ maxSize: 1000,
525
+ defaultTTL: 60000,
526
+ cleanupInterval: 60000,
527
+ };
528
+ /**
529
+ * Global token validation cache instance.
530
+ * @internal
531
+ */
532
+ let tokenCache = new TokenCache(DEFAULT_CACHE_CONFIG);
533
+ /**
534
+ * Reconfigures the global token cache with new settings.
535
+ * Disposes the existing cache and creates a new one.
536
+ *
537
+ * @param config - New cache configuration
538
+ *
539
+ * @example
540
+ * ```typescript
541
+ * configureTokenCache({
542
+ * maxSize: 5000, // More entries for high-traffic apps
543
+ * defaultTTL: 30000, // 30 second TTL for faster revocation
544
+ * })
545
+ * ```
546
+ */
547
+ export function configureTokenCache(config) {
548
+ tokenCache.dispose();
549
+ tokenCache = new TokenCache({
550
+ ...DEFAULT_CACHE_CONFIG,
551
+ ...config,
552
+ });
553
+ }
554
+ /**
555
+ * Returns current token cache statistics for monitoring.
556
+ *
557
+ * @returns Cache stats including hits, misses, and size
558
+ */
559
+ export function getTokenCacheStats() {
560
+ return tokenCache.stats;
561
+ }
562
+ /**
563
+ * Clears all cached tokens. Intended for testing only.
564
+ *
565
+ * @security In production, avoid clearing the cache as it will cause
566
+ * a thundering herd to the OAuth provider.
567
+ */
568
+ export function clearTokenCache() {
569
+ tokenCache.clear();
570
+ }
571
+ export { extractBearerToken };
572
+ /**
573
+ * Creates a Hono middleware handler that validates JWT tokens.
574
+ *
575
+ * This middleware:
576
+ * 1. Skips authentication for public paths
577
+ * 2. Extracts Bearer token from Authorization header
578
+ * 3. Applies rate limiting for failed attempts
579
+ * 4. Validates JWT structure and security claims
580
+ * 5. Validates token with OAuth provider (with caching)
581
+ * 6. Sets authenticated user context
582
+ *
583
+ * @security The middleware applies multiple layers of validation in order
584
+ * of computational cost - cheap checks first (structure, rate limit)
585
+ * before expensive checks (OAuth provider validation).
586
+ *
587
+ * @param config - Authentication configuration options
588
+ * @returns Hono middleware handler
589
+ *
590
+ * @example
591
+ * ```typescript
592
+ * const app = new Hono()
593
+ * app.use('*', createAuthMiddleware({
594
+ * publicPaths: ['/ping', '/health', '/docs'],
595
+ * tokenCacheTTL: 30000, // 30 second cache
596
+ * }))
597
+ * ```
598
+ */
599
+ export function createAuthMiddleware(config = {}) {
600
+ const { oauthUrl = DEFAULT_OAUTH_URL, tokenCacheTTL = DEFAULT_TOKEN_CACHE_TTL, cacheConfig, validateToken, allowAnonymous = false, publicPaths = DEFAULT_PUBLIC_PATHS, onUnauthorized, } = config;
601
+ if (cacheConfig) {
602
+ // Build config without undefined values for exactOptionalPropertyTypes
603
+ // Use explicit default values to avoid assigning potentially-undefined optional properties
604
+ const tokenCacheConfig = {
605
+ maxSize: cacheConfig.maxSize ?? 1000,
606
+ defaultTTL: cacheConfig.ttl ?? tokenCacheTTL,
607
+ cleanupInterval: cacheConfig.cleanupInterval ?? 60000,
608
+ };
609
+ configureTokenCache(tokenCacheConfig);
610
+ }
611
+ return async (c, next) => {
612
+ const path = new URL(c.req.url).pathname;
613
+ if (publicPaths.some((p) => path === p || path.startsWith(p + '/'))) {
614
+ c.set('auth', {
615
+ user: null,
616
+ token: null,
617
+ isAuthenticated: false,
618
+ databaseId: null,
619
+ });
620
+ return next();
621
+ }
622
+ const token = extractBearerToken(c.req.raw);
623
+ if (!token) {
624
+ if (allowAnonymous) {
625
+ c.set('auth', {
626
+ user: null,
627
+ token: null,
628
+ isAuthenticated: false,
629
+ databaseId: null,
630
+ });
631
+ return next();
632
+ }
633
+ if (onUnauthorized) {
634
+ return onUnauthorized(c);
635
+ }
636
+ return c.json({
637
+ error: true,
638
+ code: AUTH_ERROR_CODES.UNAUTHORIZED,
639
+ message: 'Missing authentication token',
640
+ }, 401);
641
+ }
642
+ // SECURITY: Use token prefix for rate limit key to prevent evasion
643
+ const rateLimitKey = RATE_LIMIT_KEY_PREFIX + token.slice(0, RATE_LIMIT_KEY_LENGTH);
644
+ if (checkRateLimit(rateLimitKey)) {
645
+ return c.json({
646
+ error: true,
647
+ code: AUTH_ERROR_CODES.RATE_LIMITED,
648
+ message: 'Too many authentication failures. Please try again later.',
649
+ }, 429);
650
+ }
651
+ const securityCheck = validateJWTSecurity(token);
652
+ if (!securityCheck.valid) {
653
+ if (onUnauthorized) {
654
+ return onUnauthorized(c);
655
+ }
656
+ return c.json({
657
+ error: true,
658
+ code: AUTH_ERROR_CODES.INVALID_TOKEN,
659
+ message: securityCheck.error || 'Token failed security validation',
660
+ }, 401);
661
+ }
662
+ let validationResult = tokenCache.get(token);
663
+ if (!validationResult) {
664
+ validationResult = validateToken
665
+ ? await validateToken(token)
666
+ : await sharedValidateToken(token, { oauthUrl });
667
+ if (validationResult.valid) {
668
+ tokenCache.set(token, validationResult, tokenCacheTTL);
669
+ }
670
+ }
671
+ if (!validationResult.valid) {
672
+ if (onUnauthorized) {
673
+ return onUnauthorized(c);
674
+ }
675
+ return c.json({
676
+ error: true,
677
+ code: AUTH_ERROR_CODES.INVALID_TOKEN,
678
+ message: validationResult.error || 'Invalid authentication token',
679
+ }, 401);
680
+ }
681
+ const user = validationResult.user;
682
+ c.set('auth', {
683
+ user,
684
+ token,
685
+ isAuthenticated: true,
686
+ databaseId: generateDatabaseId(user.id),
687
+ });
688
+ return next();
689
+ };
690
+ }
691
+ /**
692
+ * Creates a middleware that enforces authentication.
693
+ *
694
+ * Use this on routes that MUST have an authenticated user.
695
+ * For routes that work with optional authentication, use
696
+ * createAuthMiddleware with allowAnonymous:true instead.
697
+ *
698
+ * @returns Hono middleware handler
699
+ *
700
+ * @example
701
+ * ```typescript
702
+ * app.get('/api/private', requireAuth(), (c) => {
703
+ * const user = requireUser(c)
704
+ * return c.json({ userId: user.id })
705
+ * })
706
+ * ```
707
+ */
708
+ export function requireAuth() {
709
+ return async (c, next) => {
710
+ const auth = c.get('auth');
711
+ if (!auth?.isAuthenticated) {
712
+ return c.json({
713
+ error: true,
714
+ code: AUTH_ERROR_CODES.UNAUTHORIZED,
715
+ message: 'Authentication required',
716
+ }, 401);
717
+ }
718
+ return next();
719
+ };
720
+ }
721
+ /**
722
+ * Retrieves the authentication context from a request.
723
+ *
724
+ * Returns a default unauthenticated context if none is set.
725
+ * This is safe to call on any route, even those without auth middleware.
726
+ *
727
+ * @param c - Hono context
728
+ * @returns Authentication context
729
+ *
730
+ * @example
731
+ * ```typescript
732
+ * app.get('/api/data', (c) => {
733
+ * const auth = getAuth(c)
734
+ * if (auth.isAuthenticated) {
735
+ * return c.json({ user: auth.user })
736
+ * }
737
+ * return c.json({ guest: true })
738
+ * })
739
+ * ```
740
+ */
741
+ export function getAuth(c) {
742
+ const auth = c.get('auth');
743
+ return (auth || {
744
+ user: null,
745
+ token: null,
746
+ isAuthenticated: false,
747
+ databaseId: null,
748
+ });
749
+ }
750
+ /**
751
+ * Retrieves the authenticated user or throws an error.
752
+ *
753
+ * Use this in routes protected by requireAuth() where you need
754
+ * the user object and want TypeScript to know it's non-null.
755
+ *
756
+ * @param c - Hono context
757
+ * @returns Authenticated user
758
+ * @throws Error if user is not authenticated
759
+ *
760
+ * @example
761
+ * ```typescript
762
+ * app.get('/api/profile', requireAuth(), (c) => {
763
+ * const user = requireUser(c) // Type: AuthenticatedUser (not null)
764
+ * return c.json({ email: user.email })
765
+ * })
766
+ * ```
767
+ */
768
+ export function requireUser(c) {
769
+ const auth = getAuth(c);
770
+ if (!auth.user) {
771
+ throw new Error('User not authenticated');
772
+ }
773
+ return auth.user;
774
+ }
775
+ /**
776
+ * Retrieves the database ID for the authenticated user or throws an error.
777
+ *
778
+ * The database ID is a sanitized, deterministic identifier derived from
779
+ * the user ID. Use this to access the user's isolated database.
780
+ *
781
+ * @param c - Hono context
782
+ * @returns Database ID string (e.g., "user_abc123")
783
+ * @throws Error if user is not authenticated
784
+ *
785
+ * @example
786
+ * ```typescript
787
+ * app.get('/api/data', requireAuth(), (c) => {
788
+ * const dbId = getDatabaseId(c)
789
+ * const db = await getDatabase(dbId)
790
+ * // ...
791
+ * })
792
+ * ```
793
+ */
794
+ export function getDatabaseId(c) {
795
+ const auth = getAuth(c);
796
+ if (!auth.databaseId) {
797
+ throw new Error('User not authenticated - no database ID');
798
+ }
799
+ return auth.databaseId;
800
+ }
801
+ /**
802
+ * Gets the Durable Object ID for a user's database.
803
+ *
804
+ * @param namespace - Durable Object namespace binding
805
+ * @param userId - User identifier from JWT
806
+ * @returns Durable Object ID for the user's database
807
+ *
808
+ * @example
809
+ * ```typescript
810
+ * const doId = getUserDOId(env.POSTGRES_DO, user.id)
811
+ * const stub = env.POSTGRES_DO.get(doId)
812
+ * ```
813
+ */
814
+ export function getUserDOId(namespace, userId) {
815
+ const databaseId = generateDatabaseId(userId);
816
+ return namespace.idFromName(databaseId);
817
+ }
818
+ /**
819
+ * Gets a Durable Object stub for a user's database.
820
+ *
821
+ * Convenience function that combines getUserDOId and namespace.get().
822
+ *
823
+ * @param namespace - Durable Object namespace binding
824
+ * @param userId - User identifier from JWT
825
+ * @returns Durable Object stub for the user's database
826
+ *
827
+ * @example
828
+ * ```typescript
829
+ * const stub = getUserDOStub(env.POSTGRES_DO, user.id)
830
+ * const response = await stub.fetch(request)
831
+ * ```
832
+ */
833
+ export function getUserDOStub(namespace, userId) {
834
+ const id = getUserDOId(namespace, userId);
835
+ return namespace.get(id);
836
+ }
837
+ //# sourceMappingURL=auth.js.map