@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,1039 @@
1
+ /**
2
+ * Bulk Migration Orchestrator
3
+ *
4
+ * Orchestrates large-scale migrations across many Durable Object instances.
5
+ * When migrating existing user DOs to a new schema version, this provides
6
+ * batch processing, concurrency control, retry logic, and rollback coordination.
7
+ *
8
+ * Key features:
9
+ * - Queue-based migration dispatch using Cloudflare Queues
10
+ * - Batch processing with configurable concurrency limits
11
+ * - Automatic retry logic for failed migrations
12
+ * - Coordinated rollback across multiple DOs
13
+ * - Progress tracking and status monitoring
14
+ *
15
+ * @module migrations/bulk-orchestrator
16
+ */
17
+
18
+ import type { Migration, QueryExecutor } from './types'
19
+ import type { MigrationRegistry } from './registry'
20
+ import { createLogger, LogLevel, type ILogger } from '@dotdo/postgres-shared'
21
+
22
+ // Re-export batch types for external use
23
+ export type { BatchMigrationResult, BatchRollbackResult } from './types'
24
+
25
+ // Module-level logger for BulkMigrationOrchestrator
26
+ // Level is DEBUG because the debug config flag gates whether log() is called at all.
27
+ // The logger just provides structured output - the filtering happens at call site.
28
+ const bulkOrchestratorLogger: ILogger = createLogger({
29
+ level: LogLevel.DEBUG,
30
+ prefix: '[BulkMigrationOrchestrator]',
31
+ })
32
+
33
+ /**
34
+ * Selector for targeting DOs to migrate
35
+ */
36
+ export interface DOSelector {
37
+ /**
38
+ * Filter by DO ID prefix (e.g., 'user_')
39
+ */
40
+ idPrefix?: string
41
+
42
+ /**
43
+ * Filter by DO IDs (explicit list)
44
+ */
45
+ ids?: string[]
46
+
47
+ /**
48
+ * Maximum number of DOs to select
49
+ */
50
+ limit?: number
51
+
52
+ /**
53
+ * Custom filter function
54
+ */
55
+ filter?: (id: string) => boolean
56
+ }
57
+
58
+ /**
59
+ * Migration job status
60
+ */
61
+ export type MigrationJobStatus =
62
+ | 'pending'
63
+ | 'queued'
64
+ | 'running'
65
+ | 'completed'
66
+ | 'failed'
67
+ | 'retrying'
68
+ | 'rolled_back'
69
+
70
+ /**
71
+ * Individual DO migration job
72
+ */
73
+ export interface DOBulkMigrationJob {
74
+ /** Unique job ID */
75
+ jobId: string
76
+
77
+ /** Migration ID being applied */
78
+ migrationId: string
79
+
80
+ /** DO ID to migrate */
81
+ doId: string
82
+
83
+ /** Current job status */
84
+ status: MigrationJobStatus
85
+
86
+ /** Number of retry attempts */
87
+ retryCount: number
88
+
89
+ /** Maximum retry attempts */
90
+ maxRetries: number
91
+
92
+ /** Error message if failed */
93
+ error?: string
94
+
95
+ /** When the job was created */
96
+ createdAt: Date
97
+
98
+ /** When the job was last updated */
99
+ updatedAt: Date
100
+
101
+ /** When the job completed (success or failure) */
102
+ completedAt?: Date
103
+
104
+ /** Execution time in milliseconds */
105
+ executionTimeMs?: number
106
+ }
107
+
108
+ /**
109
+ * Bulk migration batch
110
+ */
111
+ export interface MigrationBatch {
112
+ /** Batch ID */
113
+ batchId: string
114
+
115
+ /** Migration ID */
116
+ migrationId: string
117
+
118
+ /** Jobs in this batch */
119
+ jobs: DOBulkMigrationJob[]
120
+
121
+ /** Total jobs in batch */
122
+ totalJobs: number
123
+
124
+ /** Completed jobs */
125
+ completedJobs: number
126
+
127
+ /** Failed jobs */
128
+ failedJobs: number
129
+
130
+ /** When the batch started */
131
+ startedAt: Date
132
+
133
+ /** When the batch completed */
134
+ completedAt?: Date
135
+ }
136
+
137
+ /**
138
+ * Bulk migration progress
139
+ */
140
+ export interface BulkMigrationProgress {
141
+ /** Migration ID */
142
+ migrationId: string
143
+
144
+ /** Total DOs to migrate */
145
+ total: number
146
+
147
+ /** Successfully migrated */
148
+ completed: number
149
+
150
+ /** Failed migrations */
151
+ failed: number
152
+
153
+ /** Currently running */
154
+ running: number
155
+
156
+ /** Queued for processing */
157
+ queued: number
158
+
159
+ /** Overall progress percentage (0-100) */
160
+ progressPercent: number
161
+ }
162
+
163
+ /**
164
+ * Cloudflare Queue message for migration dispatch
165
+ */
166
+ export interface MigrationQueueMessage {
167
+ /** Message type */
168
+ type: 'migrate' | 'rollback' | 'retry'
169
+
170
+ /** Migration ID */
171
+ migrationId: string
172
+
173
+ /** DO ID to process */
174
+ doId: string
175
+
176
+ /** Job ID for tracking */
177
+ jobId: string
178
+
179
+ /** Retry attempt number */
180
+ retryAttempt: number
181
+
182
+ /** Batch ID for coordination */
183
+ batchId: string
184
+ }
185
+
186
+ /**
187
+ * Bulk migration orchestrator configuration
188
+ */
189
+ export interface BulkOrchestratorConfig {
190
+ /**
191
+ * Migration registry
192
+ */
193
+ registry: MigrationRegistry
194
+
195
+ /**
196
+ * Cloudflare Queue binding for dispatching migrations
197
+ */
198
+ queue?: Queue<MigrationQueueMessage>
199
+
200
+ /**
201
+ * Maximum number of concurrent migrations
202
+ * Default: 10
203
+ */
204
+ concurrency?: number
205
+
206
+ /**
207
+ * Maximum retry attempts for failed migrations
208
+ * Default: 3
209
+ */
210
+ maxRetries?: number
211
+
212
+ /**
213
+ * Retry delay in milliseconds
214
+ * Default: 1000 (1 second)
215
+ */
216
+ retryDelayMs?: number
217
+
218
+ /**
219
+ * Batch size for processing
220
+ * Default: 100
221
+ */
222
+ batchSize?: number
223
+
224
+ /**
225
+ * Storage for job state (KV, DO, etc.)
226
+ */
227
+ storage?: BulkMigrationStorage
228
+
229
+ /**
230
+ * Enable debug logging
231
+ * Default: false
232
+ */
233
+ debug?: boolean
234
+ }
235
+
236
+ /**
237
+ * Storage interface for bulk migration state
238
+ */
239
+ export interface BulkMigrationStorage {
240
+ /**
241
+ * Get a migration job by ID
242
+ */
243
+ getJob(jobId: string): Promise<DOBulkMigrationJob | null>
244
+
245
+ /**
246
+ * Save a migration job
247
+ */
248
+ saveJob(job: DOBulkMigrationJob): Promise<void>
249
+
250
+ /**
251
+ * Get all jobs for a migration
252
+ */
253
+ getJobsForMigration(migrationId: string): Promise<DOBulkMigrationJob[]>
254
+
255
+ /**
256
+ * Get batch by ID
257
+ */
258
+ getBatch(batchId: string): Promise<MigrationBatch | null>
259
+
260
+ /**
261
+ * Save batch
262
+ */
263
+ saveBatch(batch: MigrationBatch): Promise<void>
264
+
265
+ /**
266
+ * Delete job
267
+ */
268
+ deleteJob(jobId: string): Promise<void>
269
+ }
270
+
271
+ /**
272
+ * In-memory storage implementation (for testing/development)
273
+ */
274
+ export class InMemoryBulkMigrationStorage implements BulkMigrationStorage {
275
+ private jobs: Map<string, DOBulkMigrationJob> = new Map()
276
+ private batches: Map<string, MigrationBatch> = new Map()
277
+
278
+ async getJob(jobId: string): Promise<DOBulkMigrationJob | null> {
279
+ return this.jobs.get(jobId) ?? null
280
+ }
281
+
282
+ async saveJob(job: DOBulkMigrationJob): Promise<void> {
283
+ this.jobs.set(job.jobId, job)
284
+ }
285
+
286
+ async getJobsForMigration(migrationId: string): Promise<DOBulkMigrationJob[]> {
287
+ return Array.from(this.jobs.values()).filter((job) => job.migrationId === migrationId)
288
+ }
289
+
290
+ async getBatch(batchId: string): Promise<MigrationBatch | null> {
291
+ return this.batches.get(batchId) ?? null
292
+ }
293
+
294
+ async saveBatch(batch: MigrationBatch): Promise<void> {
295
+ this.batches.set(batch.batchId, batch)
296
+ }
297
+
298
+ async deleteJob(jobId: string): Promise<void> {
299
+ this.jobs.delete(jobId)
300
+ }
301
+
302
+ /**
303
+ * Clear all data (for testing)
304
+ */
305
+ clear(): void {
306
+ this.jobs.clear()
307
+ this.batches.clear()
308
+ }
309
+ }
310
+
311
+ /**
312
+ * Generate a unique ID
313
+ */
314
+ function generateId(prefix: string): string {
315
+ const timestamp = Date.now().toString(36)
316
+ const random = Math.random().toString(36).substring(2, 10)
317
+ return `${prefix}_${timestamp}_${random}`
318
+ }
319
+
320
+ /**
321
+ * Bulk Migration Orchestrator
322
+ *
323
+ * Coordinates migrations across many Durable Object instances.
324
+ *
325
+ * @example
326
+ * ```typescript
327
+ * const orchestrator = new BulkMigrationOrchestrator({
328
+ * registry: migrationRegistry,
329
+ * queue: env.MIGRATION_QUEUE,
330
+ * concurrency: 20,
331
+ * maxRetries: 3,
332
+ * })
333
+ *
334
+ * // Schedule migration for all user DOs
335
+ * const batch = await orchestrator.scheduleMigration('0005_add_field', {
336
+ * idPrefix: 'user_',
337
+ * })
338
+ *
339
+ * // Check progress
340
+ * const progress = await orchestrator.getProgress('0005_add_field')
341
+ * console.log(`Progress: ${progress.progressPercent}%`)
342
+ *
343
+ * // Retry failed migrations
344
+ * await orchestrator.retryFailed('0005_add_field')
345
+ *
346
+ * // Rollback if needed
347
+ * await orchestrator.rollbackAll('0005_add_field')
348
+ * ```
349
+ */
350
+ export class BulkMigrationOrchestrator {
351
+ private registry: MigrationRegistry
352
+ private queue: Queue<MigrationQueueMessage> | undefined
353
+ private config: Required<Omit<BulkOrchestratorConfig, 'registry' | 'queue' | 'storage'>>
354
+ private storage: BulkMigrationStorage
355
+ /** @internal Reserved for future concurrent batch tracking */
356
+ private _activeBatches: Map<string, Promise<void>> = new Map()
357
+
358
+ constructor(config: BulkOrchestratorConfig) {
359
+ void this._activeBatches // Reserved for future concurrent batch tracking
360
+ this.registry = config.registry
361
+ this.queue = config.queue
362
+ this.config = {
363
+ concurrency: config.concurrency ?? 10,
364
+ maxRetries: config.maxRetries ?? 3,
365
+ retryDelayMs: config.retryDelayMs ?? 1000,
366
+ batchSize: config.batchSize ?? 100,
367
+ debug: config.debug ?? false,
368
+ }
369
+ this.storage = config.storage ?? new InMemoryBulkMigrationStorage()
370
+ }
371
+
372
+ /**
373
+ * Log debug message
374
+ */
375
+ private log(message: string, ...args: unknown[]): void {
376
+ if (this.config.debug) {
377
+ bulkOrchestratorLogger.debug(message, args.length > 0 ? { args } : undefined)
378
+ }
379
+ }
380
+
381
+ /**
382
+ * Get DO IDs matching the selector
383
+ *
384
+ * Note: In production, this would typically query a DO namespace listing
385
+ * or a registry of active DOs. This is a simplified implementation.
386
+ */
387
+ private async getDOIds(
388
+ selector: DOSelector,
389
+ getDOIdsFn?: (selector: DOSelector) => Promise<string[]>
390
+ ): Promise<string[]> {
391
+ // If a custom function is provided, use it
392
+ if (getDOIdsFn) {
393
+ return getDOIdsFn(selector)
394
+ }
395
+
396
+ // Otherwise, require explicit IDs
397
+ if (!selector.ids || selector.ids.length === 0) {
398
+ throw new Error(
399
+ 'selector.ids must be provided, or pass getDOIdsFn to scheduleMigration()'
400
+ )
401
+ }
402
+
403
+ let ids = selector.ids
404
+
405
+ // Apply prefix filter
406
+ if (selector.idPrefix) {
407
+ ids = ids.filter((id) => id.startsWith(selector.idPrefix!))
408
+ }
409
+
410
+ // Apply custom filter
411
+ if (selector.filter) {
412
+ ids = ids.filter(selector.filter)
413
+ }
414
+
415
+ // Apply limit
416
+ if (selector.limit) {
417
+ ids = ids.slice(0, selector.limit)
418
+ }
419
+
420
+ return ids
421
+ }
422
+
423
+ /**
424
+ * Schedule a migration for all DOs matching the selector
425
+ *
426
+ * @param migrationId Migration ID to run
427
+ * @param selector DO selector
428
+ * @param getDOIdsFn Optional function to get DO IDs (for production use)
429
+ * @returns Batch information
430
+ *
431
+ * @example
432
+ * ```typescript
433
+ * // With explicit IDs
434
+ * await orchestrator.scheduleMigration('0005_add_field', {
435
+ * ids: ['user_1', 'user_2', 'user_3'],
436
+ * })
437
+ *
438
+ * // With custom DO listing function
439
+ * await orchestrator.scheduleMigration('0005_add_field', {
440
+ * idPrefix: 'user_',
441
+ * }, async (selector) => {
442
+ * // Query your DO namespace or registry
443
+ * return await listActiveDOs(selector)
444
+ * })
445
+ * ```
446
+ */
447
+ async scheduleMigration(
448
+ migrationId: string,
449
+ selector: DOSelector,
450
+ getDOIdsFn?: (selector: DOSelector) => Promise<string[]>
451
+ ): Promise<MigrationBatch> {
452
+ this.log(`Scheduling migration ${migrationId}`)
453
+
454
+ // Validate migration exists
455
+ const migration = this.registry.getMigration(migrationId)
456
+ if (!migration) {
457
+ throw new Error(`Migration ${migrationId} not found in registry`)
458
+ }
459
+
460
+ // Get DO IDs to migrate
461
+ const doIds = await this.getDOIds(selector, getDOIdsFn)
462
+ this.log(`Found ${doIds.length} DOs to migrate`)
463
+
464
+ // Create batch
465
+ const batchId = generateId('batch')
466
+ const batch: MigrationBatch = {
467
+ batchId,
468
+ migrationId,
469
+ jobs: [],
470
+ totalJobs: doIds.length,
471
+ completedJobs: 0,
472
+ failedJobs: 0,
473
+ startedAt: new Date(),
474
+ }
475
+
476
+ // Create jobs for each DO
477
+ const jobs: DOBulkMigrationJob[] = []
478
+ for (const doId of doIds) {
479
+ const jobId = generateId('job')
480
+ const job: DOBulkMigrationJob = {
481
+ jobId,
482
+ migrationId,
483
+ doId,
484
+ status: 'pending',
485
+ retryCount: 0,
486
+ maxRetries: this.config.maxRetries,
487
+ createdAt: new Date(),
488
+ updatedAt: new Date(),
489
+ }
490
+ jobs.push(job)
491
+ await this.storage.saveJob(job)
492
+ }
493
+
494
+ batch.jobs = jobs
495
+ await this.storage.saveBatch(batch)
496
+
497
+ // Queue the jobs
498
+ if (this.queue) {
499
+ await this.queueJobs(batch, jobs)
500
+ }
501
+
502
+ this.log(`Batch ${batchId} created with ${jobs.length} jobs`)
503
+
504
+ return batch
505
+ }
506
+
507
+ /**
508
+ * Queue jobs for processing
509
+ */
510
+ private async queueJobs(batch: MigrationBatch, jobs: DOBulkMigrationJob[]): Promise<void> {
511
+ if (!this.queue) {
512
+ throw new Error('Queue not configured')
513
+ }
514
+
515
+ // Send jobs to queue in batches
516
+ for (let i = 0; i < jobs.length; i += this.config.batchSize) {
517
+ const batchJobs = jobs.slice(i, i + this.config.batchSize)
518
+ const messages: MessageSendRequest<MigrationQueueMessage>[] = batchJobs.map((job) => ({
519
+ body: {
520
+ type: 'migrate',
521
+ migrationId: job.migrationId,
522
+ doId: job.doId,
523
+ jobId: job.jobId,
524
+ retryAttempt: 0,
525
+ batchId: batch.batchId,
526
+ },
527
+ }))
528
+
529
+ await this.queue.sendBatch(messages)
530
+
531
+ // Update job status to queued
532
+ for (const job of batchJobs) {
533
+ job.status = 'queued'
534
+ job.updatedAt = new Date()
535
+ await this.storage.saveJob(job)
536
+ }
537
+ }
538
+ }
539
+
540
+ /**
541
+ * Process a batch of migration jobs with concurrency control
542
+ *
543
+ * @param batch Jobs to process
544
+ * @param getExecutor Function to get QueryExecutor for a DO ID
545
+ * @returns Processing results
546
+ *
547
+ * @example
548
+ * ```typescript
549
+ * const batch = await orchestrator.getBatch(batchId)
550
+ * await orchestrator.processBatch(batch, async (doId) => {
551
+ * const stub = env.MY_DO.get(env.MY_DO.idFromName(doId))
552
+ * return stub.getExecutor()
553
+ * })
554
+ * ```
555
+ */
556
+ async processBatch(
557
+ batch: MigrationBatch,
558
+ getExecutor: (doId: string) => Promise<QueryExecutor>
559
+ ): Promise<{
560
+ completed: number
561
+ failed: number
562
+ results: Array<{ jobId: string; success: boolean; error?: string }>
563
+ }> {
564
+ this.log(`Processing batch ${batch.batchId} with ${batch.jobs.length} jobs`)
565
+
566
+ const results: Array<{ jobId: string; success: boolean; error?: string }> = []
567
+ let completed = 0
568
+ let failed = 0
569
+
570
+ // Process jobs with concurrency control
571
+ const activeJobs: Promise<void>[] = []
572
+
573
+ for (const job of batch.jobs) {
574
+ // Skip already completed jobs
575
+ if (job.status === 'completed' || job.status === 'rolled_back') {
576
+ continue
577
+ }
578
+
579
+ // Wait if we've hit concurrency limit
580
+ if (activeJobs.length >= this.config.concurrency) {
581
+ await Promise.race(activeJobs)
582
+ }
583
+
584
+ // Process job
585
+ const jobPromise = this.processJob(job, getExecutor)
586
+ .then((result) => {
587
+ if (result.success) {
588
+ completed++
589
+ } else {
590
+ failed++
591
+ }
592
+ results.push(result)
593
+
594
+ // Remove from active jobs
595
+ const index = activeJobs.indexOf(jobPromise)
596
+ if (index >= 0) {
597
+ activeJobs.splice(index, 1)
598
+ }
599
+ })
600
+ .catch((error) => {
601
+ this.log(`Job ${job.jobId} error:`, error)
602
+ failed++
603
+ results.push({
604
+ jobId: job.jobId,
605
+ success: false,
606
+ error: error instanceof Error ? error.message : String(error),
607
+ })
608
+
609
+ // Remove from active jobs
610
+ const index = activeJobs.indexOf(jobPromise)
611
+ if (index >= 0) {
612
+ activeJobs.splice(index, 1)
613
+ }
614
+ })
615
+
616
+ activeJobs.push(jobPromise)
617
+ }
618
+
619
+ // Wait for all remaining jobs
620
+ await Promise.all(activeJobs)
621
+
622
+ // Update batch
623
+ batch.completedJobs = completed
624
+ batch.failedJobs = failed
625
+ if (completed + failed >= batch.totalJobs) {
626
+ batch.completedAt = new Date()
627
+ }
628
+ await this.storage.saveBatch(batch)
629
+
630
+ this.log(`Batch ${batch.batchId} processing complete: ${completed} succeeded, ${failed} failed`)
631
+
632
+ return { completed, failed, results }
633
+ }
634
+
635
+ /**
636
+ * Process a single migration job
637
+ */
638
+ private async processJob(
639
+ job: DOBulkMigrationJob,
640
+ getExecutor: (doId: string) => Promise<QueryExecutor>
641
+ ): Promise<{ jobId: string; success: boolean; error?: string }> {
642
+ this.log(`Processing job ${job.jobId} for DO ${job.doId}`)
643
+
644
+ const startTime = performance.now()
645
+
646
+ try {
647
+ // Update job status
648
+ job.status = 'running'
649
+ job.updatedAt = new Date()
650
+ await this.storage.saveJob(job)
651
+
652
+ // Get executor for this DO
653
+ const executor = await getExecutor(job.doId)
654
+
655
+ // Get migration
656
+ const migration = this.registry.getMigration(job.migrationId)
657
+ if (!migration) {
658
+ throw new Error(`Migration ${job.migrationId} not found`)
659
+ }
660
+
661
+ // Execute migration
662
+ await this.executeMigration(executor, migration)
663
+
664
+ // Update job as completed
665
+ const executionTimeMs = Math.round(performance.now() - startTime)
666
+ job.status = 'completed'
667
+ job.completedAt = new Date()
668
+ job.updatedAt = new Date()
669
+ job.executionTimeMs = executionTimeMs
670
+ await this.storage.saveJob(job)
671
+
672
+ this.log(`Job ${job.jobId} completed in ${executionTimeMs}ms`)
673
+
674
+ return { jobId: job.jobId, success: true }
675
+ } catch (error) {
676
+ const executionTimeMs = Math.round(performance.now() - startTime)
677
+ const errorMessage = error instanceof Error ? error.message : String(error)
678
+
679
+ this.log(`Job ${job.jobId} failed:`, errorMessage)
680
+
681
+ // Check if we should retry
682
+ if (job.retryCount < job.maxRetries) {
683
+ job.status = 'retrying'
684
+ job.retryCount++
685
+ job.error = errorMessage
686
+ job.updatedAt = new Date()
687
+ job.executionTimeMs = executionTimeMs
688
+ await this.storage.saveJob(job)
689
+
690
+ // Schedule retry (with exponential backoff)
691
+ const retryDelay = this.config.retryDelayMs * Math.pow(2, job.retryCount - 1)
692
+ await new Promise((resolve) => setTimeout(resolve, retryDelay))
693
+
694
+ // Retry
695
+ return this.processJob(job, getExecutor)
696
+ } else {
697
+ // Max retries exceeded
698
+ job.status = 'failed'
699
+ job.error = errorMessage
700
+ job.completedAt = new Date()
701
+ job.updatedAt = new Date()
702
+ job.executionTimeMs = executionTimeMs
703
+ await this.storage.saveJob(job)
704
+
705
+ return { jobId: job.jobId, success: false, error: errorMessage }
706
+ }
707
+ }
708
+ }
709
+
710
+ /**
711
+ * Execute a migration on a single DO
712
+ */
713
+ private async executeMigration(
714
+ executor: QueryExecutor,
715
+ migration: Migration
716
+ ): Promise<void> {
717
+ // Check if migration is already applied
718
+ const checkResult = await executor.query<{ count: number }>(
719
+ `SELECT COUNT(*) as count FROM _migrations WHERE id = $1 AND status = 'applied'`,
720
+ [migration.id]
721
+ )
722
+
723
+ if (checkResult.rows[0]?.count && checkResult.rows[0].count > 0) {
724
+ this.log(`Migration ${migration.id} already applied, skipping`)
725
+ return
726
+ }
727
+
728
+ // Execute migration in a transaction
729
+ await executor.query('BEGIN')
730
+
731
+ try {
732
+ // Run migration SQL
733
+ await executor.query(migration.up)
734
+
735
+ // Record migration
736
+ const checksum = await this.calculateChecksum(migration.up)
737
+ await executor.query(
738
+ `INSERT INTO _migrations (id, name, version, checksum, execution_time_ms, status)
739
+ VALUES ($1, $2, $3, $4, 0, 'applied')
740
+ ON CONFLICT (id) DO UPDATE SET
741
+ status = 'applied',
742
+ applied_at = CURRENT_TIMESTAMP`,
743
+ [migration.id, migration.name, migration.version, checksum]
744
+ )
745
+
746
+ await executor.query('COMMIT')
747
+ } catch (error) {
748
+ await executor.query('ROLLBACK')
749
+ throw error
750
+ }
751
+ }
752
+
753
+ /**
754
+ * Calculate checksum for migration content
755
+ */
756
+ private async calculateChecksum(content: string): Promise<string> {
757
+ const encoder = new TextEncoder()
758
+ const data = encoder.encode(content)
759
+ const hashBuffer = await crypto.subtle.digest('SHA-256', data)
760
+ const hashArray = Array.from(new Uint8Array(hashBuffer))
761
+ return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')
762
+ }
763
+
764
+ /**
765
+ * Get migration progress
766
+ *
767
+ * @param migrationId Migration ID to check
768
+ * @returns Progress information
769
+ */
770
+ async getProgress(migrationId: string): Promise<BulkMigrationProgress> {
771
+ const jobs = await this.storage.getJobsForMigration(migrationId)
772
+
773
+ const total = jobs.length
774
+ const completed = jobs.filter((j) => j.status === 'completed').length
775
+ const failed = jobs.filter((j) => j.status === 'failed').length
776
+ const running = jobs.filter((j) => j.status === 'running').length
777
+ const queued = jobs.filter((j) => j.status === 'queued' || j.status === 'pending').length
778
+
779
+ const progressPercent = total > 0 ? Math.round((completed / total) * 100) : 0
780
+
781
+ return {
782
+ migrationId,
783
+ total,
784
+ completed,
785
+ failed,
786
+ running,
787
+ queued,
788
+ progressPercent,
789
+ }
790
+ }
791
+
792
+ /**
793
+ * Retry all failed migrations for a migration ID
794
+ *
795
+ * @param migrationId Migration ID
796
+ * @param getExecutor Function to get QueryExecutor for a DO ID
797
+ * @returns Number of jobs retried
798
+ */
799
+ async retryFailed(
800
+ migrationId: string,
801
+ getExecutor: (doId: string) => Promise<QueryExecutor>
802
+ ): Promise<number> {
803
+ this.log(`Retrying failed migrations for ${migrationId}`)
804
+
805
+ const jobs = await this.storage.getJobsForMigration(migrationId)
806
+ const failedJobs = jobs.filter((j) => j.status === 'failed')
807
+
808
+ this.log(`Found ${failedJobs.length} failed jobs to retry`)
809
+
810
+ // Reset retry count and status
811
+ for (const job of failedJobs) {
812
+ job.retryCount = 0
813
+ job.status = 'pending'
814
+ delete job.error
815
+ job.updatedAt = new Date()
816
+ await this.storage.saveJob(job)
817
+ }
818
+
819
+ // Create a temporary batch for processing
820
+ const batchId = generateId('retry_batch')
821
+ const batch: MigrationBatch = {
822
+ batchId,
823
+ migrationId,
824
+ jobs: failedJobs,
825
+ totalJobs: failedJobs.length,
826
+ completedJobs: 0,
827
+ failedJobs: 0,
828
+ startedAt: new Date(),
829
+ }
830
+
831
+ // Process the batch
832
+ await this.processBatch(batch, getExecutor)
833
+
834
+ return failedJobs.length
835
+ }
836
+
837
+ /**
838
+ * Rollback all DOs for a migration
839
+ *
840
+ * Coordinates rollback across all DOs that have this migration applied.
841
+ *
842
+ * @param migrationId Migration ID to rollback
843
+ * @param getExecutor Function to get QueryExecutor for a DO ID
844
+ * @returns Rollback results
845
+ */
846
+ async rollbackAll(
847
+ migrationId: string,
848
+ getExecutor: (doId: string) => Promise<QueryExecutor>
849
+ ): Promise<{
850
+ total: number
851
+ succeeded: number
852
+ failed: number
853
+ results: Array<{ doId: string; success: boolean; error?: string }>
854
+ }> {
855
+ this.log(`Rolling back migration ${migrationId}`)
856
+
857
+ // Get migration
858
+ const migration = this.registry.getMigration(migrationId)
859
+ if (!migration) {
860
+ throw new Error(`Migration ${migrationId} not found in registry`)
861
+ }
862
+
863
+ if (!migration.down) {
864
+ throw new Error(`Migration ${migrationId} has no rollback SQL defined`)
865
+ }
866
+
867
+ // Get all jobs for this migration that were completed
868
+ const jobs = await this.storage.getJobsForMigration(migrationId)
869
+ const completedJobs = jobs.filter((j) => j.status === 'completed')
870
+
871
+ this.log(`Found ${completedJobs.length} completed migrations to rollback`)
872
+
873
+ const results: Array<{ doId: string; success: boolean; error?: string }> = []
874
+ let succeeded = 0
875
+ let failed = 0
876
+
877
+ // Process rollbacks with concurrency control
878
+ const activeRollbacks: Promise<void>[] = []
879
+
880
+ for (const job of completedJobs) {
881
+ // Wait if we've hit concurrency limit
882
+ if (activeRollbacks.length >= this.config.concurrency) {
883
+ await Promise.race(activeRollbacks)
884
+ }
885
+
886
+ const rollbackPromise = this.rollbackJob(job, migration, getExecutor)
887
+ .then((result) => {
888
+ if (result.success) {
889
+ succeeded++
890
+ } else {
891
+ failed++
892
+ }
893
+ results.push(result)
894
+
895
+ // Remove from active rollbacks
896
+ const index = activeRollbacks.indexOf(rollbackPromise)
897
+ if (index >= 0) {
898
+ activeRollbacks.splice(index, 1)
899
+ }
900
+ })
901
+ .catch((error) => {
902
+ this.log(`Rollback for DO ${job.doId} error:`, error)
903
+ failed++
904
+ results.push({
905
+ doId: job.doId,
906
+ success: false,
907
+ error: error instanceof Error ? error.message : String(error),
908
+ })
909
+
910
+ // Remove from active rollbacks
911
+ const index = activeRollbacks.indexOf(rollbackPromise)
912
+ if (index >= 0) {
913
+ activeRollbacks.splice(index, 1)
914
+ }
915
+ })
916
+
917
+ activeRollbacks.push(rollbackPromise)
918
+ }
919
+
920
+ // Wait for all rollbacks
921
+ await Promise.all(activeRollbacks)
922
+
923
+ this.log(
924
+ `Rollback complete for ${migrationId}: ${succeeded} succeeded, ${failed} failed`
925
+ )
926
+
927
+ return {
928
+ total: completedJobs.length,
929
+ succeeded,
930
+ failed,
931
+ results,
932
+ }
933
+ }
934
+
935
+ /**
936
+ * Rollback a single migration job
937
+ */
938
+ private async rollbackJob(
939
+ job: DOBulkMigrationJob,
940
+ migration: Migration,
941
+ getExecutor: (doId: string) => Promise<QueryExecutor>
942
+ ): Promise<{ doId: string; success: boolean; error?: string }> {
943
+ this.log(`Rolling back job ${job.jobId} for DO ${job.doId}`)
944
+
945
+ try {
946
+ const executor = await getExecutor(job.doId)
947
+
948
+ // Execute rollback in a transaction
949
+ await executor.query('BEGIN')
950
+
951
+ try {
952
+ await executor.query(migration.down!)
953
+ await executor.query(
954
+ `UPDATE _migrations SET status = 'rolled_back', applied_at = CURRENT_TIMESTAMP WHERE id = $1`,
955
+ [migration.id]
956
+ )
957
+ await executor.query('COMMIT')
958
+
959
+ // Update job status
960
+ job.status = 'rolled_back'
961
+ job.updatedAt = new Date()
962
+ await this.storage.saveJob(job)
963
+
964
+ return { doId: job.doId, success: true }
965
+ } catch (error) {
966
+ await executor.query('ROLLBACK')
967
+ throw error
968
+ }
969
+ } catch (error) {
970
+ const errorMessage = error instanceof Error ? error.message : String(error)
971
+ this.log(`Rollback failed for DO ${job.doId}:`, errorMessage)
972
+ return { doId: job.doId, success: false, error: errorMessage }
973
+ }
974
+ }
975
+
976
+ /**
977
+ * Get batch by ID
978
+ */
979
+ async getBatch(batchId: string): Promise<MigrationBatch | null> {
980
+ return this.storage.getBatch(batchId)
981
+ }
982
+
983
+ /**
984
+ * Get job by ID
985
+ */
986
+ async getJob(jobId: string): Promise<DOBulkMigrationJob | null> {
987
+ return this.storage.getJob(jobId)
988
+ }
989
+
990
+ /**
991
+ * Get all jobs for a migration
992
+ */
993
+ async getJobs(migrationId: string): Promise<DOBulkMigrationJob[]> {
994
+ return this.storage.getJobsForMigration(migrationId)
995
+ }
996
+
997
+ /**
998
+ * Cancel a batch
999
+ *
1000
+ * Cancels all pending/queued jobs in a batch.
1001
+ */
1002
+ async cancelBatch(batchId: string): Promise<number> {
1003
+ const batch = await this.storage.getBatch(batchId)
1004
+ if (!batch) {
1005
+ throw new Error(`Batch ${batchId} not found`)
1006
+ }
1007
+
1008
+ let cancelled = 0
1009
+ for (const job of batch.jobs) {
1010
+ if (job.status === 'pending' || job.status === 'queued') {
1011
+ await this.storage.deleteJob(job.jobId)
1012
+ cancelled++
1013
+ }
1014
+ }
1015
+
1016
+ this.log(`Cancelled ${cancelled} jobs in batch ${batchId}`)
1017
+
1018
+ return cancelled
1019
+ }
1020
+ }
1021
+
1022
+ /**
1023
+ * Create a bulk migration orchestrator
1024
+ *
1025
+ * @example
1026
+ * ```typescript
1027
+ * const orchestrator = createBulkMigrationOrchestrator({
1028
+ * registry: migrationRegistry,
1029
+ * queue: env.MIGRATION_QUEUE,
1030
+ * concurrency: 20,
1031
+ * maxRetries: 3,
1032
+ * })
1033
+ * ```
1034
+ */
1035
+ export function createBulkMigrationOrchestrator(
1036
+ config: BulkOrchestratorConfig
1037
+ ): BulkMigrationOrchestrator {
1038
+ return new BulkMigrationOrchestrator(config)
1039
+ }