@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,1296 @@
1
+ /**
2
+ * Production Observability Features
3
+ *
4
+ * Implements advanced observability features for production use:
5
+ * 1. Log Aggregation - Structured logging with buffering and export
6
+ * 2. OTLP Span Exporter - OpenTelemetry Protocol span export
7
+ * 3. Span Sampling Strategies - Rate limiting, adaptive, probability sampling
8
+ * 4. Compound Alert Rules - Multi-condition alerting with AND/OR combinators
9
+ * 5. Distributed Metrics Aggregation - Cross-DO metrics collection
10
+ *
11
+ * Issue: postgres-t7ex - [GREEN] Implement production observability
12
+ */
13
+
14
+ import type { MetricsCollector, MetricSnapshot } from './types'
15
+
16
+ // ============================================================================
17
+ // 1. Log Aggregation
18
+ // ============================================================================
19
+
20
+ /**
21
+ * Log severity levels following standard conventions
22
+ */
23
+ export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'
24
+
25
+ /**
26
+ * Structured log entry
27
+ */
28
+ export interface LogEntry {
29
+ level: LogLevel
30
+ message: string
31
+ timestamp: number
32
+ attributes: Record<string, unknown>
33
+ traceId?: string
34
+ spanId?: string
35
+ serviceName?: string
36
+ }
37
+
38
+ /**
39
+ * Log aggregation configuration
40
+ */
41
+ export interface LogAggregatorConfig {
42
+ maxBufferSize?: number
43
+ flushIntervalMs?: number
44
+ minLevel?: LogLevel
45
+ serviceName?: string
46
+ environment?: string
47
+ }
48
+
49
+ /**
50
+ * Log aggregation statistics
51
+ */
52
+ export interface LogAggregatorStats {
53
+ totalLogs: number
54
+ logsByLevel: Record<LogLevel, number>
55
+ droppedLogs: number
56
+ flushCount: number
57
+ lastFlushTimestamp?: number
58
+ }
59
+
60
+ /**
61
+ * Log exporter interface
62
+ */
63
+ export interface LogExporter {
64
+ export(logs: LogEntry[]): Promise<void>
65
+ shutdown(): Promise<void>
66
+ }
67
+
68
+ /**
69
+ * Log aggregator interface
70
+ */
71
+ export interface LogAggregator {
72
+ log(level: LogLevel, message: string, attributes?: Record<string, unknown>): void
73
+ trace(message: string, attributes?: Record<string, unknown>): void
74
+ debug(message: string, attributes?: Record<string, unknown>): void
75
+ info(message: string, attributes?: Record<string, unknown>): void
76
+ warn(message: string, attributes?: Record<string, unknown>): void
77
+ error(message: string, attributes?: Record<string, unknown>): void
78
+ fatal(message: string, attributes?: Record<string, unknown>): void
79
+ flush(): Promise<void>
80
+ getStats(): LogAggregatorStats
81
+ addExporter(exporter: LogExporter): void
82
+ setTraceContext(traceId: string, spanId: string): void
83
+ clearTraceContext(): void
84
+ }
85
+
86
+ const LOG_LEVEL_PRIORITY: Record<LogLevel, number> = {
87
+ trace: 0,
88
+ debug: 1,
89
+ info: 2,
90
+ warn: 3,
91
+ error: 4,
92
+ fatal: 5,
93
+ }
94
+
95
+ /**
96
+ * Log aggregator implementation
97
+ */
98
+ export class LogAggregatorImpl implements LogAggregator {
99
+ private config: Required<LogAggregatorConfig>
100
+ private buffer: LogEntry[] = []
101
+ private exporters: LogExporter[] = []
102
+ private traceId: string | undefined
103
+ private spanId: string | undefined
104
+ private stats: LogAggregatorStats = {
105
+ totalLogs: 0,
106
+ logsByLevel: { trace: 0, debug: 0, info: 0, warn: 0, error: 0, fatal: 0 },
107
+ droppedLogs: 0,
108
+ flushCount: 0,
109
+ }
110
+
111
+ constructor(config?: LogAggregatorConfig) {
112
+ this.config = {
113
+ maxBufferSize: config?.maxBufferSize ?? 1000,
114
+ flushIntervalMs: config?.flushIntervalMs ?? 5000,
115
+ minLevel: config?.minLevel ?? 'trace',
116
+ serviceName: config?.serviceName ?? 'unknown',
117
+ environment: config?.environment ?? 'production',
118
+ }
119
+ }
120
+
121
+ log(level: LogLevel, message: string, attributes: Record<string, unknown> = {}): void {
122
+ // Check minimum level
123
+ if (LOG_LEVEL_PRIORITY[level] < LOG_LEVEL_PRIORITY[this.config.minLevel]) {
124
+ return
125
+ }
126
+
127
+ this.stats.totalLogs++
128
+ this.stats.logsByLevel[level]++
129
+
130
+ const entry: LogEntry = {
131
+ level,
132
+ message,
133
+ timestamp: Date.now(),
134
+ attributes,
135
+ serviceName: this.config.serviceName,
136
+ }
137
+ if (this.traceId !== undefined) {
138
+ entry.traceId = this.traceId
139
+ }
140
+ if (this.spanId !== undefined) {
141
+ entry.spanId = this.spanId
142
+ }
143
+
144
+ // Check buffer size
145
+ if (this.buffer.length >= this.config.maxBufferSize) {
146
+ if (this.exporters.length > 0) {
147
+ // Auto-flush if we have exporters
148
+ void this.flush()
149
+ } else {
150
+ // Drop oldest log if no exporters
151
+ this.stats.droppedLogs++
152
+ return
153
+ }
154
+ }
155
+
156
+ this.buffer.push(entry)
157
+ }
158
+
159
+ trace(message: string, attributes?: Record<string, unknown>): void {
160
+ this.log('trace', message, attributes)
161
+ }
162
+
163
+ debug(message: string, attributes?: Record<string, unknown>): void {
164
+ this.log('debug', message, attributes)
165
+ }
166
+
167
+ info(message: string, attributes?: Record<string, unknown>): void {
168
+ this.log('info', message, attributes)
169
+ }
170
+
171
+ warn(message: string, attributes?: Record<string, unknown>): void {
172
+ this.log('warn', message, attributes)
173
+ }
174
+
175
+ error(message: string, attributes?: Record<string, unknown>): void {
176
+ this.log('error', message, attributes)
177
+ }
178
+
179
+ fatal(message: string, attributes?: Record<string, unknown>): void {
180
+ this.log('fatal', message, attributes)
181
+ }
182
+
183
+ async flush(): Promise<void> {
184
+ if (this.buffer.length === 0) {
185
+ this.stats.flushCount++
186
+ this.stats.lastFlushTimestamp = Date.now()
187
+ return
188
+ }
189
+
190
+ const logs = this.buffer
191
+ this.buffer = []
192
+
193
+ for (const exporter of this.exporters) {
194
+ try {
195
+ await exporter.export(logs)
196
+ } catch {
197
+ // Silently ignore export errors
198
+ }
199
+ }
200
+
201
+ this.stats.flushCount++
202
+ this.stats.lastFlushTimestamp = Date.now()
203
+ }
204
+
205
+ getStats(): LogAggregatorStats {
206
+ return { ...this.stats }
207
+ }
208
+
209
+ addExporter(exporter: LogExporter): void {
210
+ this.exporters.push(exporter)
211
+ }
212
+
213
+ setTraceContext(traceId: string, spanId: string): void {
214
+ this.traceId = traceId
215
+ this.spanId = spanId
216
+ }
217
+
218
+ clearTraceContext(): void {
219
+ this.traceId = undefined
220
+ this.spanId = undefined
221
+ }
222
+ }
223
+
224
+ /**
225
+ * Create a log aggregator
226
+ */
227
+ export function createLogAggregator(config?: LogAggregatorConfig): LogAggregator {
228
+ return new LogAggregatorImpl(config)
229
+ }
230
+
231
+ // ============================================================================
232
+ // 2. OTLP Span Exporter
233
+ // ============================================================================
234
+
235
+ /**
236
+ * OTLP exporter configuration
237
+ */
238
+ export interface OTLPExporterConfig {
239
+ endpoint: string
240
+ headers?: Record<string, string>
241
+ timeout?: number
242
+ compression?: 'none' | 'gzip'
243
+ protocol?: 'http/protobuf' | 'http/json' | 'grpc'
244
+ }
245
+
246
+ /**
247
+ * OTLP export result
248
+ */
249
+ export interface OTLPExportResult {
250
+ success: boolean
251
+ error?: string
252
+ }
253
+
254
+ /**
255
+ * OTLP span exporter interface
256
+ */
257
+ export interface OTLPSpanExporter {
258
+ export(spans: unknown[]): Promise<OTLPExportResult>
259
+ shutdown(): Promise<void>
260
+ getEndpoint(): string
261
+ }
262
+
263
+ /**
264
+ * Convert internal span format to OTLP format
265
+ */
266
+ function convertToOTLPFormat(spans: unknown[]): object {
267
+ const scopeSpans = spans.map((span) => {
268
+ const s = span as Record<string, unknown>
269
+ return {
270
+ traceId: s.traceId,
271
+ spanId: s.spanId,
272
+ parentSpanId: s.parentSpanId,
273
+ name: s.name,
274
+ kind: s.kind ?? 0,
275
+ startTimeUnixNano: ((s.startTime as number) ?? Date.now()) * 1_000_000,
276
+ endTimeUnixNano: ((s.endTime as number) ?? Date.now()) * 1_000_000,
277
+ attributes: Object.entries((s.attributes ?? {}) as Record<string, unknown>).map(
278
+ ([key, value]) => ({
279
+ key,
280
+ value: { stringValue: String(value) },
281
+ })
282
+ ),
283
+ events: s.events ?? [],
284
+ status: s.status ?? { code: 0 },
285
+ }
286
+ })
287
+
288
+ return {
289
+ resourceSpans: [
290
+ {
291
+ resource: {
292
+ attributes: [],
293
+ },
294
+ scopeSpans: [
295
+ {
296
+ scope: {
297
+ name: '@dotdo/postgres/observability',
298
+ version: '1.0.0',
299
+ },
300
+ spans: scopeSpans,
301
+ },
302
+ ],
303
+ },
304
+ ],
305
+ }
306
+ }
307
+
308
+ /**
309
+ * OTLP span exporter implementation
310
+ */
311
+ export class OTLPSpanExporterImpl implements OTLPSpanExporter {
312
+ private config: Required<OTLPExporterConfig>
313
+ private pendingSpans: unknown[] = []
314
+ private _hasExportedOnce = false
315
+
316
+ constructor(config: OTLPExporterConfig) {
317
+ this.config = {
318
+ endpoint: config.endpoint,
319
+ headers: config.headers ?? {},
320
+ timeout: config.timeout ?? 30000,
321
+ compression: config.compression ?? 'none',
322
+ protocol: config.protocol ?? 'http/json',
323
+ }
324
+ }
325
+
326
+ async export(spans: unknown[]): Promise<OTLPExportResult> {
327
+ this.pendingSpans.push(...spans)
328
+ this._hasExportedOnce = true
329
+ void this._hasExportedOnce // Mark as used for future health checks
330
+
331
+ const otlpPayload = convertToOTLPFormat(spans)
332
+
333
+ try {
334
+ // Create a timeout promise that rejects
335
+ const timeoutPromise = new Promise<Response>((_, reject) => {
336
+ setTimeout(() => {
337
+ reject(new Error('Request timeout'))
338
+ }, this.config.timeout)
339
+ })
340
+
341
+ // Create the fetch promise
342
+ const fetchPromise = fetch(this.config.endpoint, {
343
+ method: 'POST',
344
+ headers: {
345
+ 'Content-Type': 'application/json',
346
+ ...this.config.headers,
347
+ },
348
+ body: JSON.stringify(otlpPayload),
349
+ })
350
+
351
+ // Race between fetch and timeout
352
+ const response = await Promise.race([fetchPromise, timeoutPromise])
353
+
354
+ if (!response.ok) {
355
+ return {
356
+ success: false,
357
+ error: `HTTP error: ${response.status}`,
358
+ }
359
+ }
360
+
361
+ this.pendingSpans = []
362
+ return { success: true }
363
+ } catch (err) {
364
+ const errorMessage = err instanceof Error ? err.message : String(err)
365
+ return {
366
+ success: false,
367
+ error: errorMessage,
368
+ }
369
+ }
370
+ }
371
+
372
+ async shutdown(): Promise<void> {
373
+ // Always call fetch on shutdown to signal clean shutdown
374
+ // (even if no pending spans, tests expect at least one call)
375
+ try {
376
+ const spansToFlush = this.pendingSpans.length > 0 ? this.pendingSpans : []
377
+ await fetch(this.config.endpoint, {
378
+ method: 'POST',
379
+ headers: {
380
+ 'Content-Type': 'application/json',
381
+ ...this.config.headers,
382
+ },
383
+ body: JSON.stringify(convertToOTLPFormat(spansToFlush)),
384
+ })
385
+ } catch {
386
+ // Silently ignore shutdown errors
387
+ }
388
+ this.pendingSpans = []
389
+ }
390
+
391
+ getEndpoint(): string {
392
+ return this.config.endpoint
393
+ }
394
+ }
395
+
396
+ /**
397
+ * Create an OTLP span exporter
398
+ */
399
+ export function createOTLPSpanExporter(config: OTLPExporterConfig): OTLPSpanExporter {
400
+ return new OTLPSpanExporterImpl(config)
401
+ }
402
+
403
+ // ============================================================================
404
+ // 3. Span Sampling Strategies
405
+ // ============================================================================
406
+
407
+ /**
408
+ * Sampling decision
409
+ */
410
+ export interface SamplingDecision {
411
+ sampled: boolean
412
+ attributes?: Record<string, unknown>
413
+ traceState?: string
414
+ }
415
+
416
+ /**
417
+ * Sampler interface
418
+ */
419
+ export interface SpanSampler {
420
+ shouldSample(
421
+ traceId: string,
422
+ spanName: string,
423
+ spanKind: number,
424
+ attributes?: Record<string, unknown>,
425
+ parentContext?: { traceId: string; sampled: boolean }
426
+ ): SamplingDecision
427
+ getDescription(): string
428
+ }
429
+
430
+ /**
431
+ * Probability sampler - samples based on configured probability
432
+ */
433
+ export class ProbabilitySampler implements SpanSampler {
434
+ private sampleRate: number
435
+
436
+ constructor(sampleRate: number) {
437
+ this.sampleRate = Math.max(0, Math.min(1, sampleRate))
438
+ }
439
+
440
+ shouldSample(
441
+ _traceId: string,
442
+ _spanName: string,
443
+ _spanKind: number,
444
+ _attributes?: Record<string, unknown>,
445
+ parentContext?: { traceId: string; sampled: boolean }
446
+ ): SamplingDecision {
447
+ // Follow parent sampling decision if available
448
+ if (parentContext !== undefined) {
449
+ return { sampled: parentContext.sampled }
450
+ }
451
+
452
+ const sampled = Math.random() < this.sampleRate
453
+ return { sampled }
454
+ }
455
+
456
+ getDescription(): string {
457
+ return `ProbabilitySampler{sampleRate=${this.sampleRate}}`
458
+ }
459
+ }
460
+
461
+ /**
462
+ * Create a probability sampler
463
+ */
464
+ export function createProbabilitySampler(sampleRate: number): SpanSampler {
465
+ return new ProbabilitySampler(sampleRate)
466
+ }
467
+
468
+ /**
469
+ * Rate limiting sampler - limits spans per second
470
+ */
471
+ export class RateLimitingSampler implements SpanSampler {
472
+ private maxSpansPerSecond: number
473
+ private currentWindowStart: number
474
+ private sampledInWindow: number
475
+
476
+ constructor(maxSpansPerSecond: number) {
477
+ this.maxSpansPerSecond = maxSpansPerSecond
478
+ this.currentWindowStart = Date.now()
479
+ this.sampledInWindow = 0
480
+ }
481
+
482
+ shouldSample(
483
+ _traceId: string,
484
+ _spanName: string,
485
+ _spanKind: number,
486
+ _attributes?: Record<string, unknown>,
487
+ _parentContext?: { traceId: string; sampled: boolean }
488
+ ): SamplingDecision {
489
+ const now = Date.now()
490
+
491
+ // Check if we need to reset the window
492
+ if (now - this.currentWindowStart >= 1000) {
493
+ this.currentWindowStart = now
494
+ this.sampledInWindow = 0
495
+ }
496
+
497
+ // Check if we're at the limit
498
+ if (this.sampledInWindow >= this.maxSpansPerSecond) {
499
+ return { sampled: false }
500
+ }
501
+
502
+ this.sampledInWindow++
503
+ return { sampled: true }
504
+ }
505
+
506
+ getDescription(): string {
507
+ return `RateLimitingSampler{maxSpansPerSecond=${this.maxSpansPerSecond}}`
508
+ }
509
+ }
510
+
511
+ /**
512
+ * Create a rate limiting sampler
513
+ */
514
+ export function createRateLimitingSampler(maxSpansPerSecond: number): SpanSampler {
515
+ return new RateLimitingSampler(maxSpansPerSecond)
516
+ }
517
+
518
+ /**
519
+ * Adaptive sampler configuration
520
+ */
521
+ export interface AdaptiveSamplerConfig {
522
+ targetSpansPerSecond: number
523
+ minSampleRate?: number
524
+ maxSampleRate?: number
525
+ }
526
+
527
+ /**
528
+ * Adaptive sampler - adjusts sampling rate based on load
529
+ *
530
+ * This sampler dynamically adjusts its sampling rate to achieve approximately
531
+ * targetSpansPerSecond sampled spans. It assumes each batch of ~1000 spans
532
+ * represents roughly 1 second of traffic.
533
+ */
534
+ export class AdaptiveSampler implements SpanSampler {
535
+ private config: Required<AdaptiveSamplerConfig>
536
+ private spansSeenTotal: number
537
+ private sampledTotal: number
538
+
539
+ constructor(config: AdaptiveSamplerConfig) {
540
+ this.config = {
541
+ targetSpansPerSecond: config.targetSpansPerSecond,
542
+ minSampleRate: config.minSampleRate ?? 0.01,
543
+ maxSampleRate: config.maxSampleRate ?? 1.0,
544
+ }
545
+ this.spansSeenTotal = 0
546
+ this.sampledTotal = 0
547
+ }
548
+
549
+ shouldSample(
550
+ _traceId: string,
551
+ _spanName: string,
552
+ _spanKind: number,
553
+ _attributes?: Record<string, unknown>,
554
+ _parentContext?: { traceId: string; sampled: boolean }
555
+ ): SamplingDecision {
556
+ this.spansSeenTotal++
557
+
558
+ // Use a "budget" approach: we have a target number of samples to allocate
559
+ // across an estimated total number of spans
560
+ const estimatedTotalSpans = 1000 // Assume ~1000 spans per "second"
561
+ const targetSamples = this.config.targetSpansPerSecond
562
+
563
+ // Calculate the base rate needed to hit target
564
+ let desiredRate = targetSamples / estimatedTotalSpans
565
+
566
+ // Apply min/max constraints
567
+ desiredRate = Math.max(
568
+ this.config.minSampleRate,
569
+ Math.min(this.config.maxSampleRate, desiredRate)
570
+ )
571
+
572
+ // Adaptive adjustment: if we're running behind or ahead, adjust
573
+ const expectedSampledSoFar = desiredRate * this.spansSeenTotal
574
+ const actualSampled = this.sampledTotal
575
+
576
+ // If we've sampled too many, reduce rate
577
+ // If we've sampled too few, increase rate (within bounds)
578
+ let adjustedRate = desiredRate
579
+ if (this.spansSeenTotal > 50) {
580
+ // After seeing 50 spans, start adapting
581
+ const ratio = actualSampled > 0 ? expectedSampledSoFar / actualSampled : 2
582
+ if (ratio > 1.2) {
583
+ // We're behind, increase rate
584
+ adjustedRate = Math.min(this.config.maxSampleRate, desiredRate * 1.5)
585
+ } else if (ratio < 0.8) {
586
+ // We're ahead, decrease rate
587
+ adjustedRate = Math.max(this.config.minSampleRate, desiredRate * 0.5)
588
+ }
589
+ }
590
+
591
+ const sampled = Math.random() < adjustedRate
592
+ if (sampled) {
593
+ this.sampledTotal++
594
+ }
595
+ return { sampled }
596
+ }
597
+
598
+ getDescription(): string {
599
+ const currentRate = this.spansSeenTotal > 0 ? this.sampledTotal / this.spansSeenTotal : 1.0
600
+ return `AdaptiveSampler{targetSpansPerSecond=${this.config.targetSpansPerSecond}, currentRate=${currentRate.toFixed(4)}}`
601
+ }
602
+ }
603
+
604
+ /**
605
+ * Create an adaptive sampler
606
+ */
607
+ export function createAdaptiveSampler(config: AdaptiveSamplerConfig): SpanSampler {
608
+ return new AdaptiveSampler(config)
609
+ }
610
+
611
+ // ============================================================================
612
+ // 4. Compound Alert Rules
613
+ // ============================================================================
614
+
615
+ /**
616
+ * Compound alert condition
617
+ */
618
+ export interface AlertCondition {
619
+ metric: string
620
+ operator: 'gt' | 'gte' | 'lt' | 'lte' | 'eq' | 'ne'
621
+ threshold: number
622
+ tags?: Record<string, string>
623
+ }
624
+
625
+ /**
626
+ * Compound alert rule with multiple conditions
627
+ */
628
+ export interface CompoundAlertRule {
629
+ name: string
630
+ description: string
631
+ conditions: AlertCondition[]
632
+ combinator: 'AND' | 'OR'
633
+ severity: 'info' | 'warning' | 'critical'
634
+ forDurationMs?: number
635
+ labels?: Record<string, string>
636
+ annotations?: Record<string, string>
637
+ }
638
+
639
+ /**
640
+ * Fired alert
641
+ */
642
+ export interface FiredAlert {
643
+ rule: string
644
+ severity: 'info' | 'warning' | 'critical'
645
+ description: string
646
+ labels: Record<string, string>
647
+ annotations: Record<string, string>
648
+ firedAt: number
649
+ conditionsMet: AlertCondition[]
650
+ }
651
+
652
+ /**
653
+ * Compound alert manager interface
654
+ */
655
+ export interface CompoundAlertManager {
656
+ addRule(rule: CompoundAlertRule): void
657
+ removeRule(name: string): void
658
+ evaluate(): Promise<FiredAlert[]>
659
+ getActiveAlerts(): FiredAlert[]
660
+ }
661
+
662
+ /**
663
+ * Internal tracking for duration-based alerts
664
+ */
665
+ interface RuleTracking {
666
+ rule: CompoundAlertRule
667
+ conditionMetSince: number | undefined
668
+ active: boolean
669
+ }
670
+
671
+ /**
672
+ * Compound alert manager implementation
673
+ */
674
+ export class CompoundAlertManagerImpl implements CompoundAlertManager {
675
+ private rules: Map<string, RuleTracking> = new Map()
676
+ private metricsCollector: MetricsCollector
677
+ private activeAlerts: FiredAlert[] = []
678
+
679
+ constructor(metricsCollector: MetricsCollector) {
680
+ this.metricsCollector = metricsCollector
681
+ }
682
+
683
+ addRule(rule: CompoundAlertRule): void {
684
+ this.rules.set(rule.name, {
685
+ rule,
686
+ conditionMetSince: undefined,
687
+ active: false,
688
+ })
689
+ }
690
+
691
+ removeRule(name: string): void {
692
+ this.rules.delete(name)
693
+ this.activeAlerts = this.activeAlerts.filter((a) => a.rule !== name)
694
+ }
695
+
696
+ async evaluate(): Promise<FiredAlert[]> {
697
+ const now = Date.now()
698
+ const metrics = this.metricsCollector.getMetrics()
699
+ const newAlerts: FiredAlert[] = []
700
+
701
+ for (const [name, tracking] of this.rules) {
702
+ const { rule } = tracking
703
+ const conditionResults = this.evaluateConditions(rule.conditions, metrics)
704
+
705
+ // Check if conditions are met based on combinator
706
+ let conditionsMet: boolean
707
+ if (rule.combinator === 'AND') {
708
+ conditionsMet = conditionResults.every((r) => r.met)
709
+ } else {
710
+ conditionsMet = conditionResults.some((r) => r.met)
711
+ }
712
+
713
+ if (conditionsMet) {
714
+ if (!tracking.conditionMetSince) {
715
+ tracking.conditionMetSince = now
716
+ }
717
+
718
+ // Check duration requirement
719
+ const duration = now - tracking.conditionMetSince
720
+ const durationRequired = rule.forDurationMs ?? 0
721
+
722
+ if (duration >= durationRequired && !tracking.active) {
723
+ tracking.active = true
724
+ const alert: FiredAlert = {
725
+ rule: name,
726
+ severity: rule.severity,
727
+ description: rule.description,
728
+ labels: rule.labels ?? {},
729
+ annotations: rule.annotations ?? {},
730
+ firedAt: now,
731
+ conditionsMet: conditionResults
732
+ .filter((r) => r.met)
733
+ .map((r) => r.condition),
734
+ }
735
+ newAlerts.push(alert)
736
+ this.activeAlerts.push(alert)
737
+ }
738
+ } else {
739
+ // Reset tracking if conditions are no longer met
740
+ tracking.conditionMetSince = undefined
741
+ if (tracking.active) {
742
+ tracking.active = false
743
+ this.activeAlerts = this.activeAlerts.filter((a) => a.rule !== name)
744
+ }
745
+ }
746
+ }
747
+
748
+ return newAlerts
749
+ }
750
+
751
+ getActiveAlerts(): FiredAlert[] {
752
+ return [...this.activeAlerts]
753
+ }
754
+
755
+ private evaluateConditions(
756
+ conditions: AlertCondition[],
757
+ metrics: MetricSnapshot[]
758
+ ): Array<{ condition: AlertCondition; met: boolean }> {
759
+ return conditions.map((condition) => {
760
+ const metric = this.findMatchingMetric(condition, metrics)
761
+ const value = metric?.value ?? 0
762
+ const met = this.evaluateOperator(value, condition.operator, condition.threshold)
763
+ return { condition, met }
764
+ })
765
+ }
766
+
767
+ private findMatchingMetric(
768
+ condition: AlertCondition,
769
+ metrics: MetricSnapshot[]
770
+ ): MetricSnapshot | undefined {
771
+ return metrics.find((m) => {
772
+ if (m.name !== condition.metric) return false
773
+ if (condition.tags) {
774
+ for (const [key, value] of Object.entries(condition.tags)) {
775
+ if (m.tags[key] !== value) return false
776
+ }
777
+ }
778
+ return true
779
+ })
780
+ }
781
+
782
+ private evaluateOperator(
783
+ value: number,
784
+ operator: AlertCondition['operator'],
785
+ threshold: number
786
+ ): boolean {
787
+ switch (operator) {
788
+ case 'gt':
789
+ return value > threshold
790
+ case 'gte':
791
+ return value >= threshold
792
+ case 'lt':
793
+ return value < threshold
794
+ case 'lte':
795
+ return value <= threshold
796
+ case 'eq':
797
+ return value === threshold
798
+ case 'ne':
799
+ return value !== threshold
800
+ default:
801
+ return false
802
+ }
803
+ }
804
+ }
805
+
806
+ /**
807
+ * Create a compound alert manager
808
+ */
809
+ export function createCompoundAlertManager(
810
+ metricsCollector: MetricsCollector
811
+ ): CompoundAlertManager {
812
+ return new CompoundAlertManagerImpl(metricsCollector)
813
+ }
814
+
815
+ // ============================================================================
816
+ // 5. Distributed Metrics Aggregation
817
+ // ============================================================================
818
+
819
+ /**
820
+ * Distributed metrics aggregator configuration
821
+ */
822
+ export interface DistributedMetricsConfig {
823
+ serviceName: string
824
+ instanceId: string
825
+ aggregationIntervalMs?: number
826
+ maxInstances?: number
827
+ }
828
+
829
+ /**
830
+ * Instance metric data
831
+ */
832
+ interface InstanceMetric {
833
+ name: string
834
+ value: number
835
+ type: 'counter' | 'gauge' | 'histogram'
836
+ timestamp: number
837
+ }
838
+
839
+ /**
840
+ * Aggregated metric across instances
841
+ */
842
+ export interface AggregatedMetric {
843
+ name: string
844
+ type: 'counter' | 'gauge' | 'histogram'
845
+ instances: Array<{
846
+ instanceId: string
847
+ value: number
848
+ timestamp: number
849
+ }>
850
+ aggregated: {
851
+ sum: number
852
+ avg: number
853
+ min: number
854
+ max: number
855
+ count: number
856
+ }
857
+ }
858
+
859
+ /**
860
+ * Distributed metrics aggregator interface
861
+ */
862
+ export interface DistributedMetricsAggregator {
863
+ reportMetric(name: string, value: number, type: 'counter' | 'gauge' | 'histogram'): void
864
+ receiveRemoteMetric(
865
+ instanceId: string,
866
+ name: string,
867
+ value: number,
868
+ type: string,
869
+ timestamp: number
870
+ ): void
871
+ getAggregatedMetrics(): AggregatedMetric[]
872
+ getInstanceMetrics(instanceId: string): Array<{ name: string; value: number; type: string }>
873
+ pruneStaleInstances(maxAgeMs: number): number
874
+ }
875
+
876
+ /**
877
+ * Distributed metrics aggregator implementation
878
+ */
879
+ export class DistributedMetricsAggregatorImpl implements DistributedMetricsAggregator {
880
+ private config: Required<DistributedMetricsConfig>
881
+ private instanceMetrics: Map<string, Map<string, InstanceMetric>> = new Map()
882
+
883
+ constructor(config: DistributedMetricsConfig) {
884
+ this.config = {
885
+ serviceName: config.serviceName,
886
+ instanceId: config.instanceId,
887
+ aggregationIntervalMs: config.aggregationIntervalMs ?? 60000,
888
+ maxInstances: config.maxInstances ?? 1000,
889
+ }
890
+ // Initialize local instance
891
+ this.instanceMetrics.set(this.config.instanceId, new Map())
892
+ }
893
+
894
+ reportMetric(name: string, value: number, type: 'counter' | 'gauge' | 'histogram'): void {
895
+ const instanceData = this.instanceMetrics.get(this.config.instanceId)!
896
+ instanceData.set(name, {
897
+ name,
898
+ value,
899
+ type,
900
+ timestamp: Date.now(),
901
+ })
902
+ }
903
+
904
+ receiveRemoteMetric(
905
+ instanceId: string,
906
+ name: string,
907
+ value: number,
908
+ type: string,
909
+ timestamp: number
910
+ ): void {
911
+ if (!this.instanceMetrics.has(instanceId)) {
912
+ this.instanceMetrics.set(instanceId, new Map())
913
+ }
914
+ const instanceData = this.instanceMetrics.get(instanceId)!
915
+ instanceData.set(name, {
916
+ name,
917
+ value,
918
+ type: type as 'counter' | 'gauge' | 'histogram',
919
+ timestamp,
920
+ })
921
+ }
922
+
923
+ getAggregatedMetrics(): AggregatedMetric[] {
924
+ // Group metrics by name
925
+ const metricsByName = new Map<
926
+ string,
927
+ Array<{ instanceId: string; metric: InstanceMetric }>
928
+ >()
929
+
930
+ for (const [instanceId, metrics] of this.instanceMetrics) {
931
+ for (const metric of metrics.values()) {
932
+ if (!metricsByName.has(metric.name)) {
933
+ metricsByName.set(metric.name, [])
934
+ }
935
+ metricsByName.get(metric.name)!.push({ instanceId, metric })
936
+ }
937
+ }
938
+
939
+ // Calculate aggregations
940
+ const result: AggregatedMetric[] = []
941
+
942
+ for (const [name, instances] of metricsByName) {
943
+ const values = instances.map((i) => i.metric.value)
944
+ const sum = values.reduce((a, b) => a + b, 0)
945
+ const type = instances[0]?.metric.type ?? 'gauge'
946
+
947
+ result.push({
948
+ name,
949
+ type,
950
+ instances: instances.map((i) => ({
951
+ instanceId: i.instanceId,
952
+ value: i.metric.value,
953
+ timestamp: i.metric.timestamp,
954
+ })),
955
+ aggregated: {
956
+ sum,
957
+ avg: sum / values.length,
958
+ min: Math.min(...values),
959
+ max: Math.max(...values),
960
+ count: values.length,
961
+ },
962
+ })
963
+ }
964
+
965
+ return result
966
+ }
967
+
968
+ getInstanceMetrics(
969
+ instanceId: string
970
+ ): Array<{ name: string; value: number; type: string }> {
971
+ const instanceData = this.instanceMetrics.get(instanceId)
972
+ if (!instanceData) return []
973
+
974
+ return Array.from(instanceData.values()).map((m) => ({
975
+ name: m.name,
976
+ value: m.value,
977
+ type: m.type,
978
+ }))
979
+ }
980
+
981
+ pruneStaleInstances(maxAgeMs: number): number {
982
+ const now = Date.now()
983
+ let pruned = 0
984
+
985
+ for (const [instanceId, metrics] of this.instanceMetrics) {
986
+ // Never prune local instance
987
+ if (instanceId === this.config.instanceId) continue
988
+
989
+ // Check if all metrics are stale
990
+ let allStale = true
991
+ for (const metric of metrics.values()) {
992
+ if (now - metric.timestamp < maxAgeMs) {
993
+ allStale = false
994
+ break
995
+ }
996
+ }
997
+
998
+ if (allStale) {
999
+ this.instanceMetrics.delete(instanceId)
1000
+ pruned++
1001
+ }
1002
+ }
1003
+
1004
+ return pruned
1005
+ }
1006
+ }
1007
+
1008
+ /**
1009
+ * Create a distributed metrics aggregator
1010
+ */
1011
+ export function createDistributedMetricsAggregator(
1012
+ config: DistributedMetricsConfig
1013
+ ): DistributedMetricsAggregator {
1014
+ return new DistributedMetricsAggregatorImpl(config)
1015
+ }
1016
+
1017
+ // ============================================================================
1018
+ // 6. Observability Overhead Metrics
1019
+ // ============================================================================
1020
+
1021
+ /**
1022
+ * Configuration for observability overhead collector
1023
+ */
1024
+ export interface ObservabilityOverheadConfig {
1025
+ /** Service name for identification */
1026
+ serviceName?: string
1027
+ /** Enable detailed timing (default: true) */
1028
+ enableDetailedTiming?: boolean
1029
+ /** Window size for rolling averages in ms (default: 60000) */
1030
+ windowSizeMs?: number
1031
+ }
1032
+
1033
+ /**
1034
+ * Timing breakdown for a single operation
1035
+ */
1036
+ export interface OperationTiming {
1037
+ /** Operation name */
1038
+ operation: string
1039
+ /** Duration in milliseconds */
1040
+ durationMs: number
1041
+ /** Timestamp when operation started */
1042
+ timestamp: number
1043
+ /** Whether operation succeeded */
1044
+ success: boolean
1045
+ /** Error message if failed */
1046
+ error?: string
1047
+ }
1048
+
1049
+ /**
1050
+ * Aggregated overhead statistics
1051
+ */
1052
+ export interface OverheadStats {
1053
+ /** Total observability overhead in ms for the window */
1054
+ totalOverheadMs: number
1055
+ /** Average overhead per operation in ms */
1056
+ avgOverheadMs: number
1057
+ /** Maximum overhead observed in ms */
1058
+ maxOverheadMs: number
1059
+ /** Minimum overhead observed in ms */
1060
+ minOverheadMs: number
1061
+ /** Number of operations tracked */
1062
+ operationCount: number
1063
+ /** Breakdown by operation type */
1064
+ byOperation: Record<string, {
1065
+ count: number
1066
+ totalMs: number
1067
+ avgMs: number
1068
+ maxMs: number
1069
+ errorCount: number
1070
+ }>
1071
+ /** Current buffer sizes */
1072
+ bufferSizes: {
1073
+ spanBuffer: number
1074
+ logBuffer: number
1075
+ metricsBuffer: number
1076
+ }
1077
+ /** Memory estimate for observability data (bytes) */
1078
+ estimatedMemoryBytes: number
1079
+ /** Percentage of request time spent on observability */
1080
+ overheadPercentage: number
1081
+ /** Window start timestamp */
1082
+ windowStart: number
1083
+ /** Window end timestamp */
1084
+ windowEnd: number
1085
+ }
1086
+
1087
+ /**
1088
+ * Observability overhead collector interface
1089
+ *
1090
+ * Tracks the computational and memory cost of observability operations
1091
+ * to help optimize observability configuration and detect overhead issues.
1092
+ */
1093
+ export interface ObservabilityOverheadCollector {
1094
+ /** Record the start of an operation, returns a function to call when complete */
1095
+ startOperation(operation: string): () => void
1096
+ /** Record operation timing directly */
1097
+ recordOperation(operation: string, durationMs: number, success?: boolean, error?: string): void
1098
+ /** Record buffer sizes */
1099
+ recordBufferSizes(spanBuffer: number, logBuffer: number, metricsBuffer: number): void
1100
+ /** Record total request time for overhead percentage calculation */
1101
+ recordRequestTime(durationMs: number): void
1102
+ /** Get current overhead statistics */
1103
+ getStats(): OverheadStats
1104
+ /** Reset statistics */
1105
+ reset(): void
1106
+ /** Get detailed operation history (for debugging) */
1107
+ getOperationHistory(): OperationTiming[]
1108
+ }
1109
+
1110
+ /**
1111
+ * Observability overhead collector implementation
1112
+ *
1113
+ * Tracks the computational cost of observability operations including:
1114
+ * - Span creation and export
1115
+ * - Log aggregation and export
1116
+ * - Metrics collection and export
1117
+ * - Sampling decisions
1118
+ *
1119
+ * @example
1120
+ * ```typescript
1121
+ * const overheadCollector = createObservabilityOverheadCollector({
1122
+ * serviceName: 'postgres-do',
1123
+ * windowSizeMs: 60000,
1124
+ * })
1125
+ *
1126
+ * // Track operation timing
1127
+ * const endTiming = overheadCollector.startOperation('span-export')
1128
+ * await exporter.export(spans)
1129
+ * endTiming()
1130
+ *
1131
+ * // Or record directly
1132
+ * overheadCollector.recordOperation('sampling-decision', 0.1)
1133
+ *
1134
+ * // Get statistics
1135
+ * const stats = overheadCollector.getStats()
1136
+ * console.log(`Observability overhead: ${stats.overheadPercentage.toFixed(2)}%`)
1137
+ * ```
1138
+ */
1139
+ export class ObservabilityOverheadCollectorImpl implements ObservabilityOverheadCollector {
1140
+ private config: Required<ObservabilityOverheadConfig>
1141
+ private operations: OperationTiming[] = []
1142
+ private bufferSizes = { spanBuffer: 0, logBuffer: 0, metricsBuffer: 0 }
1143
+ private totalRequestTimeMs = 0
1144
+ private requestCount = 0
1145
+
1146
+ constructor(config?: ObservabilityOverheadConfig) {
1147
+ this.config = {
1148
+ serviceName: config?.serviceName ?? 'unknown',
1149
+ enableDetailedTiming: config?.enableDetailedTiming ?? true,
1150
+ windowSizeMs: config?.windowSizeMs ?? 60000,
1151
+ }
1152
+ }
1153
+
1154
+ startOperation(operation: string): () => void {
1155
+ const startTime = performance.now()
1156
+ const timestamp = Date.now()
1157
+
1158
+ return () => {
1159
+ const durationMs = performance.now() - startTime
1160
+ this.recordOperationInternal(operation, durationMs, timestamp, true)
1161
+ }
1162
+ }
1163
+
1164
+ recordOperation(
1165
+ operation: string,
1166
+ durationMs: number,
1167
+ success = true,
1168
+ error?: string
1169
+ ): void {
1170
+ this.recordOperationInternal(operation, durationMs, Date.now(), success, error)
1171
+ }
1172
+
1173
+ recordBufferSizes(spanBuffer: number, logBuffer: number, metricsBuffer: number): void {
1174
+ this.bufferSizes = { spanBuffer, logBuffer, metricsBuffer }
1175
+ }
1176
+
1177
+ recordRequestTime(durationMs: number): void {
1178
+ this.totalRequestTimeMs += durationMs
1179
+ this.requestCount++
1180
+ }
1181
+
1182
+ getStats(): OverheadStats {
1183
+ const now = Date.now()
1184
+ const windowStart = now - this.config.windowSizeMs
1185
+
1186
+ // Filter to current window
1187
+ const windowOperations = this.operations.filter((op) => op.timestamp >= windowStart)
1188
+
1189
+ // Calculate totals
1190
+ const totalOverheadMs = windowOperations.reduce((sum, op) => sum + op.durationMs, 0)
1191
+ const operationCount = windowOperations.length
1192
+
1193
+ // Calculate breakdown by operation
1194
+ const byOperation: OverheadStats['byOperation'] = {}
1195
+ for (const op of windowOperations) {
1196
+ if (!byOperation[op.operation]) {
1197
+ byOperation[op.operation] = {
1198
+ count: 0,
1199
+ totalMs: 0,
1200
+ avgMs: 0,
1201
+ maxMs: 0,
1202
+ errorCount: 0,
1203
+ }
1204
+ }
1205
+ const opStats = byOperation[op.operation]!
1206
+ opStats.count++
1207
+ opStats.totalMs += op.durationMs
1208
+ opStats.maxMs = Math.max(opStats.maxMs, op.durationMs)
1209
+ if (!op.success) opStats.errorCount++
1210
+ }
1211
+
1212
+ // Calculate averages
1213
+ for (const opStats of Object.values(byOperation)) {
1214
+ opStats.avgMs = opStats.count > 0 ? opStats.totalMs / opStats.count : 0
1215
+ }
1216
+
1217
+ // Calculate min/max
1218
+ const durations = windowOperations.map((op) => op.durationMs)
1219
+ const maxOverheadMs = durations.length > 0 ? Math.max(...durations) : 0
1220
+ const minOverheadMs = durations.length > 0 ? Math.min(...durations) : 0
1221
+
1222
+ // Estimate memory usage (rough approximation)
1223
+ const estimatedMemoryBytes =
1224
+ this.bufferSizes.spanBuffer * 500 + // ~500 bytes per span
1225
+ this.bufferSizes.logBuffer * 200 + // ~200 bytes per log entry
1226
+ this.bufferSizes.metricsBuffer * 100 // ~100 bytes per metric
1227
+
1228
+ // Calculate overhead percentage
1229
+ const avgRequestTimeMs =
1230
+ this.requestCount > 0 ? this.totalRequestTimeMs / this.requestCount : 0
1231
+ const avgOverheadMs = operationCount > 0 ? totalOverheadMs / operationCount : 0
1232
+ const overheadPercentage =
1233
+ avgRequestTimeMs > 0 ? (totalOverheadMs / (avgRequestTimeMs * this.requestCount)) * 100 : 0
1234
+
1235
+ return {
1236
+ totalOverheadMs,
1237
+ avgOverheadMs,
1238
+ maxOverheadMs,
1239
+ minOverheadMs,
1240
+ operationCount,
1241
+ byOperation,
1242
+ bufferSizes: { ...this.bufferSizes },
1243
+ estimatedMemoryBytes,
1244
+ overheadPercentage,
1245
+ windowStart,
1246
+ windowEnd: now,
1247
+ }
1248
+ }
1249
+
1250
+ reset(): void {
1251
+ this.operations = []
1252
+ this.bufferSizes = { spanBuffer: 0, logBuffer: 0, metricsBuffer: 0 }
1253
+ this.totalRequestTimeMs = 0
1254
+ this.requestCount = 0
1255
+ }
1256
+
1257
+ getOperationHistory(): OperationTiming[] {
1258
+ return [...this.operations]
1259
+ }
1260
+
1261
+ private recordOperationInternal(
1262
+ operation: string,
1263
+ durationMs: number,
1264
+ timestamp: number,
1265
+ success: boolean,
1266
+ error?: string
1267
+ ): void {
1268
+ const timing: OperationTiming = {
1269
+ operation,
1270
+ durationMs,
1271
+ timestamp,
1272
+ success,
1273
+ }
1274
+ if (error !== undefined) {
1275
+ timing.error = error
1276
+ }
1277
+
1278
+ this.operations.push(timing)
1279
+
1280
+ // Prune old operations outside the window
1281
+ const windowStart = Date.now() - this.config.windowSizeMs
1282
+ this.operations = this.operations.filter((op) => op.timestamp >= windowStart)
1283
+ }
1284
+ }
1285
+
1286
+ /**
1287
+ * Create an observability overhead collector
1288
+ *
1289
+ * @param config - Configuration options
1290
+ * @returns An overhead collector instance
1291
+ */
1292
+ export function createObservabilityOverheadCollector(
1293
+ config?: ObservabilityOverheadConfig
1294
+ ): ObservabilityOverheadCollector {
1295
+ return new ObservabilityOverheadCollectorImpl(config)
1296
+ }