@relkit/observability-local 0.0.0-stage → 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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +4 -2
  3. package/dist/index.d.ts +9 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +8 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/local/duckdb-batch-cursors.d.ts +10 -0
  8. package/dist/local/duckdb-batch-cursors.d.ts.map +1 -0
  9. package/dist/local/duckdb-batch-cursors.js +30 -0
  10. package/dist/local/duckdb-batch-cursors.js.map +1 -0
  11. package/dist/local/duckdb-batch-insert.d.ts +8 -0
  12. package/dist/local/duckdb-batch-insert.d.ts.map +1 -0
  13. package/dist/local/duckdb-batch-insert.js +29 -0
  14. package/dist/local/duckdb-batch-insert.js.map +1 -0
  15. package/dist/local/duckdb-batch-prepare.d.ts +7 -0
  16. package/dist/local/duckdb-batch-prepare.d.ts.map +1 -0
  17. package/dist/local/duckdb-batch-prepare.js +29 -0
  18. package/dist/local/duckdb-batch-prepare.js.map +1 -0
  19. package/dist/local/duckdb-batch-receipts.d.ts +7 -0
  20. package/dist/local/duckdb-batch-receipts.d.ts.map +1 -0
  21. package/dist/local/duckdb-batch-receipts.js +24 -0
  22. package/dist/local/duckdb-batch-receipts.js.map +1 -0
  23. package/dist/local/duckdb-batch.d.ts +8 -0
  24. package/dist/local/duckdb-batch.d.ts.map +1 -0
  25. package/dist/local/duckdb-batch.js +19 -0
  26. package/dist/local/duckdb-batch.js.map +1 -0
  27. package/dist/local/duckdb-batch.types.d.ts +19 -0
  28. package/dist/local/duckdb-batch.types.d.ts.map +1 -0
  29. package/dist/local/duckdb-batch.types.js +2 -0
  30. package/dist/local/duckdb-batch.types.js.map +1 -0
  31. package/dist/local/duckdb-database-effect.d.ts +88 -0
  32. package/dist/local/duckdb-database-effect.d.ts.map +1 -0
  33. package/dist/local/duckdb-database-effect.js +81 -0
  34. package/dist/local/duckdb-database-effect.js.map +1 -0
  35. package/dist/local/duckdb-database.d.ts +101 -0
  36. package/dist/local/duckdb-database.d.ts.map +1 -0
  37. package/dist/local/duckdb-database.js +61 -0
  38. package/dist/local/duckdb-database.js.map +1 -0
  39. package/dist/local/duckdb-database.types.d.ts +19 -0
  40. package/dist/local/duckdb-database.types.d.ts.map +1 -0
  41. package/dist/local/duckdb-database.types.js +2 -0
  42. package/dist/local/duckdb-database.types.js.map +1 -0
  43. package/dist/local/duckdb-driver.d.ts +25 -0
  44. package/dist/local/duckdb-driver.d.ts.map +1 -0
  45. package/dist/local/duckdb-driver.js +34 -0
  46. package/dist/local/duckdb-driver.js.map +1 -0
  47. package/dist/local/duckdb-driver.types.d.ts +96 -0
  48. package/dist/local/duckdb-driver.types.d.ts.map +1 -0
  49. package/dist/local/duckdb-driver.types.js +2 -0
  50. package/dist/local/duckdb-driver.types.js.map +1 -0
  51. package/dist/local/duckdb-error.d.ts +32 -0
  52. package/dist/local/duckdb-error.d.ts.map +1 -0
  53. package/dist/local/duckdb-error.js +36 -0
  54. package/dist/local/duckdb-error.js.map +1 -0
  55. package/dist/local/duckdb-metrics.d.ts +17 -0
  56. package/dist/local/duckdb-metrics.d.ts.map +1 -0
  57. package/dist/local/duckdb-metrics.js +30 -0
  58. package/dist/local/duckdb-metrics.js.map +1 -0
  59. package/dist/local/duckdb-query-detail.d.ts +40 -0
  60. package/dist/local/duckdb-query-detail.d.ts.map +1 -0
  61. package/dist/local/duckdb-query-detail.js +43 -0
  62. package/dist/local/duckdb-query-detail.js.map +1 -0
  63. package/dist/local/duckdb-query-effect.d.ts +42 -0
  64. package/dist/local/duckdb-query-effect.d.ts.map +1 -0
  65. package/dist/local/duckdb-query-effect.js +10 -0
  66. package/dist/local/duckdb-query-effect.js.map +1 -0
  67. package/dist/local/duckdb-query-error.d.ts +32 -0
  68. package/dist/local/duckdb-query-error.d.ts.map +1 -0
  69. package/dist/local/duckdb-query-error.js +35 -0
  70. package/dist/local/duckdb-query-error.js.map +1 -0
  71. package/dist/local/duckdb-query-filters.d.ts +9 -0
  72. package/dist/local/duckdb-query-filters.d.ts.map +1 -0
  73. package/dist/local/duckdb-query-filters.js +51 -0
  74. package/dist/local/duckdb-query-filters.js.map +1 -0
  75. package/dist/local/duckdb-query-list.d.ts +7 -0
  76. package/dist/local/duckdb-query-list.d.ts.map +1 -0
  77. package/dist/local/duckdb-query-list.js +26 -0
  78. package/dist/local/duckdb-query-list.js.map +1 -0
  79. package/dist/local/duckdb-query-plan.d.ts +8 -0
  80. package/dist/local/duckdb-query-plan.d.ts.map +1 -0
  81. package/dist/local/duckdb-query-plan.js +49 -0
  82. package/dist/local/duckdb-query-plan.js.map +1 -0
  83. package/dist/local/duckdb-query-rows.d.ts +8 -0
  84. package/dist/local/duckdb-query-rows.d.ts.map +1 -0
  85. package/dist/local/duckdb-query-rows.js +23 -0
  86. package/dist/local/duckdb-query-rows.js.map +1 -0
  87. package/dist/local/duckdb-query-rows.types.d.ts +8 -0
  88. package/dist/local/duckdb-query-rows.types.d.ts.map +1 -0
  89. package/dist/local/duckdb-query-rows.types.js +2 -0
  90. package/dist/local/duckdb-query-rows.types.js.map +1 -0
  91. package/dist/local/duckdb-query.d.ts +49 -0
  92. package/dist/local/duckdb-query.d.ts.map +1 -0
  93. package/dist/local/duckdb-query.js +29 -0
  94. package/dist/local/duckdb-query.js.map +1 -0
  95. package/dist/local/duckdb-retention.d.ts +6 -0
  96. package/dist/local/duckdb-retention.d.ts.map +1 -0
  97. package/dist/local/duckdb-retention.js +22 -0
  98. package/dist/local/duckdb-retention.js.map +1 -0
  99. package/dist/local/duckdb-schema.d.ts +17 -0
  100. package/dist/local/duckdb-schema.d.ts.map +1 -0
  101. package/dist/local/duckdb-schema.js +39 -0
  102. package/dist/local/duckdb-schema.js.map +1 -0
  103. package/dist/local/duckdb-sql.d.ts +35 -0
  104. package/dist/local/duckdb-sql.d.ts.map +1 -0
  105. package/dist/local/duckdb-sql.js +35 -0
  106. package/dist/local/duckdb-sql.js.map +1 -0
  107. package/dist/local/duckdb-storage-state.types.d.ts +12 -0
  108. package/dist/local/duckdb-storage-state.types.d.ts.map +1 -0
  109. package/dist/local/duckdb-storage-state.types.js +2 -0
  110. package/dist/local/duckdb-storage-state.types.js.map +1 -0
  111. package/dist/local/duckdb-storage.d.ts +8 -0
  112. package/dist/local/duckdb-storage.d.ts.map +1 -0
  113. package/dist/local/duckdb-storage.js +33 -0
  114. package/dist/local/duckdb-storage.js.map +1 -0
  115. package/dist/local/duckdb-storage.types.d.ts +44 -0
  116. package/dist/local/duckdb-storage.types.d.ts.map +1 -0
  117. package/dist/local/duckdb-storage.types.js +2 -0
  118. package/dist/local/duckdb-storage.types.js.map +1 -0
  119. package/dist/local/duckdb-transaction.d.ts +7 -0
  120. package/dist/local/duckdb-transaction.d.ts.map +1 -0
  121. package/dist/local/duckdb-transaction.js +25 -0
  122. package/dist/local/duckdb-transaction.js.map +1 -0
  123. package/dist/local/duckdb-worker-database.d.ts +25 -0
  124. package/dist/local/duckdb-worker-database.d.ts.map +1 -0
  125. package/dist/local/duckdb-worker-database.js +53 -0
  126. package/dist/local/duckdb-worker-database.js.map +1 -0
  127. package/dist/local/duckdb-worker-effect.d.ts +26 -0
  128. package/dist/local/duckdb-worker-effect.d.ts.map +1 -0
  129. package/dist/local/duckdb-worker-effect.js +29 -0
  130. package/dist/local/duckdb-worker-effect.js.map +1 -0
  131. package/dist/local/duckdb-worker-ipc.d.ts +7 -0
  132. package/dist/local/duckdb-worker-ipc.d.ts.map +1 -0
  133. package/dist/local/duckdb-worker-ipc.js +40 -0
  134. package/dist/local/duckdb-worker-ipc.js.map +1 -0
  135. package/dist/local/duckdb-worker-maintenance.d.ts +7 -0
  136. package/dist/local/duckdb-worker-maintenance.d.ts.map +1 -0
  137. package/dist/local/duckdb-worker-maintenance.js +25 -0
  138. package/dist/local/duckdb-worker-maintenance.js.map +1 -0
  139. package/dist/local/duckdb-worker-process.d.ts +5 -0
  140. package/dist/local/duckdb-worker-process.d.ts.map +1 -0
  141. package/dist/local/duckdb-worker-process.js +19 -0
  142. package/dist/local/duckdb-worker-process.js.map +1 -0
  143. package/dist/local/duckdb-worker-process.types.d.ts +21 -0
  144. package/dist/local/duckdb-worker-process.types.d.ts.map +1 -0
  145. package/dist/local/duckdb-worker-process.types.js +2 -0
  146. package/dist/local/duckdb-worker-process.types.js.map +1 -0
  147. package/dist/local/duckdb-worker-signals.d.ts +5 -0
  148. package/dist/local/duckdb-worker-signals.d.ts.map +1 -0
  149. package/dist/local/duckdb-worker-signals.js +22 -0
  150. package/dist/local/duckdb-worker-signals.js.map +1 -0
  151. package/dist/local/duckdb-worker-state.types.d.ts +12 -0
  152. package/dist/local/duckdb-worker-state.types.d.ts.map +1 -0
  153. package/dist/local/duckdb-worker-state.types.js +2 -0
  154. package/dist/local/duckdb-worker-state.types.js.map +1 -0
  155. package/dist/local/duckdb-worker.d.ts +2 -0
  156. package/dist/local/duckdb-worker.d.ts.map +1 -0
  157. package/dist/local/duckdb-worker.js +18 -0
  158. package/dist/local/duckdb-worker.js.map +1 -0
  159. package/dist/local/duckdb-worker.types.d.ts +38 -0
  160. package/dist/local/duckdb-worker.types.d.ts.map +1 -0
  161. package/dist/local/duckdb-worker.types.js +2 -0
  162. package/dist/local/duckdb-worker.types.js.map +1 -0
  163. package/dist/local/import-history-effect.d.ts +9 -0
  164. package/dist/local/import-history-effect.d.ts.map +1 -0
  165. package/dist/local/import-history-effect.js +32 -0
  166. package/dist/local/import-history-effect.js.map +1 -0
  167. package/dist/local/import-history-files.d.ts +5 -0
  168. package/dist/local/import-history-files.d.ts.map +1 -0
  169. package/dist/local/import-history-files.js +37 -0
  170. package/dist/local/import-history-files.js.map +1 -0
  171. package/dist/local/import-history-line.d.ts +6 -0
  172. package/dist/local/import-history-line.d.ts.map +1 -0
  173. package/dist/local/import-history-line.js +51 -0
  174. package/dist/local/import-history-line.js.map +1 -0
  175. package/dist/local/import-history-lines.d.ts +8 -0
  176. package/dist/local/import-history-lines.d.ts.map +1 -0
  177. package/dist/local/import-history-lines.js +27 -0
  178. package/dist/local/import-history-lines.js.map +1 -0
  179. package/dist/local/import-history-lines.types.d.ts +11 -0
  180. package/dist/local/import-history-lines.types.d.ts.map +1 -0
  181. package/dist/local/import-history-lines.types.js +2 -0
  182. package/dist/local/import-history-lines.types.js.map +1 -0
  183. package/dist/local/import-history.d.ts +18 -0
  184. package/dist/local/import-history.d.ts.map +1 -0
  185. package/dist/local/import-history.js +26 -0
  186. package/dist/local/import-history.js.map +1 -0
  187. package/dist/local/import-history.types.d.ts +28 -0
  188. package/dist/local/import-history.types.d.ts.map +1 -0
  189. package/dist/local/import-history.types.js +2 -0
  190. package/dist/local/import-history.types.js.map +1 -0
  191. package/dist/local/worker-client-effect.d.ts +9 -0
  192. package/dist/local/worker-client-effect.d.ts.map +1 -0
  193. package/dist/local/worker-client-effect.js +54 -0
  194. package/dist/local/worker-client-effect.js.map +1 -0
  195. package/dist/local/worker-client-send.d.ts +13 -0
  196. package/dist/local/worker-client-send.d.ts.map +1 -0
  197. package/dist/local/worker-client-send.js +82 -0
  198. package/dist/local/worker-client-send.js.map +1 -0
  199. package/dist/local/worker-client-service.d.ts +33 -0
  200. package/dist/local/worker-client-service.d.ts.map +1 -0
  201. package/dist/local/worker-client-service.js +31 -0
  202. package/dist/local/worker-client-service.js.map +1 -0
  203. package/dist/local/worker-client-state.d.ts +9 -0
  204. package/dist/local/worker-client-state.d.ts.map +1 -0
  205. package/dist/local/worker-client-state.js +96 -0
  206. package/dist/local/worker-client-state.js.map +1 -0
  207. package/dist/local/worker-client-state.types.d.ts +24 -0
  208. package/dist/local/worker-client-state.types.d.ts.map +1 -0
  209. package/dist/local/worker-client-state.types.js +2 -0
  210. package/dist/local/worker-client-state.types.js.map +1 -0
  211. package/dist/local/worker-client.d.ts +21 -0
  212. package/dist/local/worker-client.d.ts.map +1 -0
  213. package/dist/local/worker-client.js +35 -0
  214. package/dist/local/worker-client.js.map +1 -0
  215. package/dist/local/worker.d.ts +15 -0
  216. package/dist/local/worker.d.ts.map +1 -0
  217. package/dist/local/worker.js +12 -0
  218. package/dist/local/worker.js.map +1 -0
  219. package/package.json +54 -4
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Owns duckdb query error for the optional local history store.
3
+ * Shared records and query contracts come from lightweight observability; native
4
+ * handles and worker lifetimes remain owned by this storage package.
5
+ */
6
+ import { Schema } from "effect";
7
+ import { ObservabilityQueryError } from "@relkit/observability";
8
+ /**
9
+ * Invalid local query input reported through the Effect error channel.
10
+ *
11
+ * @example
12
+ * const failure = new DuckdbQueryError({
13
+ * code: "RELKIT_OBSERVABILITY_QUERY_INVALID", message: "Invalid cursor",
14
+ * });
15
+ */
16
+ export class DuckdbQueryError extends Schema.TaggedError()("DuckdbQueryError", {
17
+ code: Schema.Literals([
18
+ "RELKIT_OBSERVABILITY_QUERY_INVALID",
19
+ "RELKIT_OBSERVABILITY_QUERY_PROTOCOL_MISMATCH",
20
+ ]),
21
+ message: Schema.String,
22
+ }) {
23
+ }
24
+ /**
25
+ * Converts a query validation exception to a tagged Effect error.
26
+ *
27
+ * @param error - Compatibility query exception.
28
+ * @returns Tagged query failure with its stable public code.
29
+ * @example
30
+ * const failure = duckdbQueryError(error);
31
+ */
32
+ export function duckdbQueryError(error) {
33
+ return new DuckdbQueryError({ code: error.code, message: error.message });
34
+ }
35
+ //# sourceMappingURL=duckdb-query-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query-error.js","sourceRoot":"","sources":["../../src/local/duckdb-query-error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;QACpB,oCAAoC;QACpC,8CAA8C;KAC/C,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AACL;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA8B;IAC7D,OAAO,IAAI,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,9 @@
1
+ /** Compiles validated query filters into bound native SQL parameters; no user value becomes SQL. */
2
+ import type { DuckDBValue } from "@duckdb/node-api";
3
+ import type { NormalizedQuery } from "@relkit/observability/internal/query";
4
+ /** @param kind - Signal family. @param query - Validated query. @returns SQL clauses and ordered values. */
5
+ export declare function duckdbQueryFilters(kind: "logs" | "requests" | "traces", query: NormalizedQuery): {
6
+ clauses: string[];
7
+ values: DuckDBValue[];
8
+ };
9
+ //# sourceMappingURL=duckdb-query-filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query-filters.d.ts","sourceRoot":"","sources":["../../src/local/duckdb-query-filters.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,4GAA4G;AAC5G,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,EAAE,KAAK,EAAE,eAAe;;;EA2C9F"}
@@ -0,0 +1,51 @@
1
+ /** @param kind - Signal family. @param query - Validated query. @returns SQL clauses and ordered values. */
2
+ export function duckdbQueryFilters(kind, query) {
3
+ const clauses = [
4
+ kind === "logs"
5
+ ? "signal = 'log'"
6
+ : kind === "requests"
7
+ ? "signal = 'request'"
8
+ : "signal IN ('trace', 'span', 'request')",
9
+ ];
10
+ const values = [];
11
+ const add = (clause, value) => {
12
+ clauses.push(clause);
13
+ values.push(value);
14
+ };
15
+ const descending = query.order === "desc";
16
+ if (query.cursor !== undefined && !(kind === "traces" && query.traceId === undefined))
17
+ add(`id ${descending ? "<" : ">"} ?`, BigInt(query.cursor));
18
+ if (query.fromMs !== undefined)
19
+ add("recorded_at >= ?", query.fromMs);
20
+ if (query.toMs !== undefined)
21
+ add("recorded_at <= ?", query.toMs);
22
+ if (query.source !== undefined)
23
+ add("origin = ?", query.source);
24
+ if (query.search?.trim())
25
+ add("strpos(lower(payload::VARCHAR), lower(?)) > 0", query.search.trim());
26
+ for (const [key, column] of Object.entries({
27
+ severity: "level",
28
+ routeId: "routeId",
29
+ functionId: "functionId",
30
+ outcome: "outcome",
31
+ serviceId: "serviceId",
32
+ generationId: "generationId",
33
+ graphHash: "graphHash",
34
+ })) {
35
+ const value = query[key];
36
+ if (typeof value === "string")
37
+ add(`json_extract_string(payload, '$.${column}') = ?`, value);
38
+ }
39
+ for (const [key, column] of Object.entries({
40
+ traceId: "trace_id",
41
+ spanId: "span_id",
42
+ requestId: "request_id",
43
+ originRequestId: "origin_request_id",
44
+ })) {
45
+ const value = query[key];
46
+ if (typeof value === "string")
47
+ add(`${column} = ?`, value);
48
+ }
49
+ return { clauses, values };
50
+ }
51
+ //# sourceMappingURL=duckdb-query-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query-filters.js","sourceRoot":"","sources":["../../src/local/duckdb-query-filters.ts"],"names":[],"mappings":"AAIA,4GAA4G;AAC5G,MAAM,UAAU,kBAAkB,CAAC,IAAoC,EAAE,KAAsB;IAC7F,MAAM,OAAO,GAAG;QACd,IAAI,KAAK,MAAM;YACb,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,IAAI,KAAK,UAAU;gBACnB,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,wCAAwC;KAC/C,CAAC;IACF,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,KAAkB,EAAQ,EAAE;QACvD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;QACnF,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;QACtB,GAAG,CAAC,+CAA+C,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5E,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;QACzC,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,YAAY;QACxB,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,WAAW;QACtB,YAAY,EAAE,cAAc;QAC5B,SAAS,EAAE,WAAW;KACvB,CAAC,EAAE,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,GAAsC,CAAC,CAAC;QAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,GAAG,CAAC,mCAAmC,MAAM,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/F,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;QACzC,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,YAAY;QACvB,eAAe,EAAE,mBAAmB;KACrC,CAAC,EAAE,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,GAAsC,CAAC,CAAC;QAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,GAAG,CAAC,GAAG,MAAM,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Executes a validated list plan and emits versioned cursor pages over committed history. */
2
+ import { Effect } from "effect";
3
+ import type { ObservabilityQueryRequest } from "@relkit/observability";
4
+ import type { DuckdbReadRows } from "./duckdb-query-rows.types.js";
5
+ /** @param rows - Serialized native reader. @returns Lazy list operation with database/query typed failures. */
6
+ export declare function makeDuckdbList(rows: DuckdbReadRows): (kind: "logs" | "requests" | "traces", input?: ObservabilityQueryRequest | undefined) => Effect.Effect<import("@relkit/observability").ObservabilityQueryPage<import("@relkit/observability/local/record").StoredLocalRecord>, import("./duckdb-query-error.js").DuckdbQueryError | import("./duckdb-error.js").DuckdbError, never>;
7
+ //# sourceMappingURL=duckdb-query-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query-list.d.ts","sourceRoot":"","sources":["../../src/local/duckdb-query-list.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAMvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,+GAA+G;AAC/G,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,uUAsBlD"}
@@ -0,0 +1,26 @@
1
+ /** Executes a validated list plan and emits versioned cursor pages over committed history. */
2
+ import { Effect } from "effect";
3
+ import { ObservabilityQueryError } from "@relkit/observability";
4
+ import { response, validate } from "@relkit/observability/internal/query";
5
+ import { duckdbQueryPlan } from "./duckdb-query-plan.js";
6
+ import { duckdbError } from "./duckdb-error.js";
7
+ import { duckdbQueryError } from "./duckdb-query-error.js";
8
+ import { observeDuckdb } from "./duckdb-metrics.js";
9
+ /** @param rows - Serialized native reader. @returns Lazy list operation with database/query typed failures. */
10
+ export function makeDuckdbList(rows) {
11
+ return Effect.fn("ObservabilityDuckdb.query.list")(function* (kind, input = {}) {
12
+ return yield* observeDuckdb("list", Effect.gen(function* () {
13
+ const query = yield* Effect.try({
14
+ try: () => validate(input, 100),
15
+ catch: (cause) => cause instanceof ObservabilityQueryError
16
+ ? duckdbQueryError(cause)
17
+ : duckdbError("validate", cause),
18
+ });
19
+ const plan = duckdbQueryPlan(kind, query);
20
+ const found = yield* rows(plan.sql, plan.values);
21
+ const page = found.slice(0, query.limit);
22
+ return response(page, found.length > query.limit ? page.at(-1)?.cursor : undefined);
23
+ }));
24
+ });
25
+ }
26
+ //# sourceMappingURL=duckdb-query-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query-list.js","sourceRoot":"","sources":["../../src/local/duckdb-query-list.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,+GAA+G;AAC/G,MAAM,UAAU,cAAc,CAAC,IAAoB;IACjD,OAAO,MAAM,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC,QAAQ,CAAC,EAC1D,IAAoC,EACpC,QAAmC,EAAE;QAErC,OAAO,KAAK,CAAC,CAAC,aAAa,CACzB,MAAM,EACN,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC9B,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC/B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,KAAK,YAAY,uBAAuB;oBACtC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC;oBACzB,CAAC,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC;aACrC,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtF,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Builds history paging SQL with stable request/trace revision selection and bound parameters. */
2
+ import type { NormalizedQuery } from "@relkit/observability/internal/query";
3
+ /** @param kind - Query signal family. @param query - Validated paging/filter request. @returns Native SQL and ordered bindings. */
4
+ export declare function duckdbQueryPlan(kind: "logs" | "requests" | "traces", query: NormalizedQuery): {
5
+ sql: string;
6
+ values: import("@duckdb/node-api").DuckDBValue[];
7
+ };
8
+ //# sourceMappingURL=duckdb-query-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query-plan.d.ts","sourceRoot":"","sources":["../../src/local/duckdb-query-plan.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAG5E,mIAAmI;AACnI,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,EAAE,KAAK,EAAE,eAAe;;;EAiC3F"}
@@ -0,0 +1,49 @@
1
+ import { duckdbQueryFilters } from "./duckdb-query-filters.js";
2
+ const select = "SELECT id::VARCHAR AS cursor, payload::VARCHAR AS payload, origin FROM records";
3
+ /** @param kind - Query signal family. @param query - Validated paging/filter request. @returns Native SQL and ordered bindings. */
4
+ export function duckdbQueryPlan(kind, query) {
5
+ const { clauses, values } = duckdbQueryFilters(kind, query);
6
+ const descending = query.order === "desc";
7
+ const distinctTraces = kind === "traces" && query.traceId === undefined;
8
+ if (distinctTraces)
9
+ return {
10
+ sql: `WITH matching AS (
11
+ SELECT DISTINCT trace_id FROM records WHERE ${clauses.join(" AND ")} AND trace_id IS NOT NULL
12
+ ), ranked AS (
13
+ SELECT id, payload, origin,
14
+ row_number() OVER (
15
+ PARTITION BY trace_id
16
+ ORDER BY CASE signal WHEN 'request' THEN 3 WHEN 'trace' THEN 2 ELSE 1 END DESC, id DESC
17
+ ) AS trace_rank
18
+ FROM records
19
+ WHERE trace_id IN (SELECT trace_id FROM matching)
20
+ AND signal IN ('trace', 'span', 'request')
21
+ )
22
+ SELECT id::VARCHAR AS cursor, payload::VARCHAR AS payload, origin
23
+ FROM ranked WHERE trace_rank = 1
24
+ ${query.cursor === undefined ? "" : `AND id ${descending ? "<" : ">"} ?`}
25
+ ORDER BY id ${descending ? "DESC" : "ASC"} LIMIT ?`,
26
+ values: [
27
+ ...values,
28
+ ...(query.cursor === undefined ? [] : [BigInt(query.cursor)]),
29
+ query.limit + 1,
30
+ ],
31
+ };
32
+ const listSelect = querySelect(kind);
33
+ return {
34
+ sql: `${listSelect} ${clauses.join(" AND ")} ORDER BY id ${descending ? "DESC" : "ASC"} LIMIT ?`,
35
+ values: [...values, query.limit + 1],
36
+ };
37
+ }
38
+ /** @param kind - Signal family. @returns Request revision projection or ordinary record projection. */
39
+ function querySelect(kind) {
40
+ return kind === "requests"
41
+ ? `${select.replace("FROM records", `FROM (
42
+ SELECT *, row_number() OVER (
43
+ PARTITION BY request_id
44
+ ORDER BY CASE json_extract_string(payload, '$.phase') WHEN 'completed' THEN 1 ELSE 0 END DESC, id DESC
45
+ ) AS request_rank FROM records WHERE signal = 'request'
46
+ )`)} WHERE request_rank = 1 AND`
47
+ : `${select} WHERE`;
48
+ }
49
+ //# sourceMappingURL=duckdb-query-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query-plan.js","sourceRoot":"","sources":["../../src/local/duckdb-query-plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,MAAM,MAAM,GAAG,gFAAgF,CAAC;AAChG,mIAAmI;AACnI,MAAM,UAAU,eAAe,CAAC,IAAoC,EAAE,KAAsB;IAC1F,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;IACxE,IAAI,cAAc;QAChB,OAAO;YACL,GAAG,EAAE;2DACgD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;;;;;;;;;;;;;eAajE,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;yBAC5D,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU;YACxD,MAAM,EAAE;gBACN,GAAG,MAAM;gBACT,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC7D,KAAK,CAAC,KAAK,GAAG,CAAC;aAChB;SACF,CAAC;IACJ,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO;QACL,GAAG,EAAE,GAAG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU;QAChG,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;KACrC,CAAC;AACJ,CAAC;AACD,uGAAuG;AACvG,SAAS,WAAW,CAAC,IAAoC;IACvD,OAAO,IAAI,KAAK,UAAU;QACxB,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CACf,cAAc,EACd;;;;;cAKM,CACP,6BAA6B;QAChC,CAAC,CAAC,GAAG,MAAM,QAAQ,CAAC;AACxB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Decodes native JSON rows into validated diagnostic records under the shared database permit. */
2
+ import type { DuckDBValue } from "@duckdb/node-api";
3
+ import { Effect, Semaphore } from "effect";
4
+ import type { StoredLocalRecord } from "@relkit/observability/local/record";
5
+ import type { DuckdbConnectionPort } from "./duckdb-driver.types.js";
6
+ /** @param connection - Scoped native connection. @param permit - Database serialization. @returns The validated row reader. */
7
+ export declare function makeDuckdbRows(connection: DuckdbConnectionPort, permit: Semaphore.Semaphore): (sql: string, values?: DuckDBValue[] | undefined) => Effect.Effect<StoredLocalRecord[], import("./duckdb-error.js").DuckdbError, never>;
8
+ //# sourceMappingURL=duckdb-query-rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query-rows.d.ts","sourceRoot":"","sources":["../../src/local/duckdb-query-rows.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAG5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,+HAA+H;AAC/H,wBAAgB,cAAc,CAAC,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,SAAS,CAAC,SAAS,2IAiB3F"}
@@ -0,0 +1,23 @@
1
+ import { Effect, Semaphore } from "effect";
2
+ import { validateLocalRecord } from "@relkit/observability/local/record";
3
+ import { duckdbError } from "./duckdb-error.js";
4
+ import { readDuckdbSql } from "./duckdb-sql.js";
5
+ /** @param connection - Scoped native connection. @param permit - Database serialization. @returns The validated row reader. */
6
+ export function makeDuckdbRows(connection, permit) {
7
+ return Effect.fn("ObservabilityDuckdb.rows")(function* (sql, values = []) {
8
+ const result = yield* permit.withPermit(readDuckdbSql(connection, "query", sql, values));
9
+ return yield* Effect.try({
10
+ try: () => result.getRowObjectsJson().map((item) => {
11
+ const envelope = {
12
+ key: `read:${String(item.cursor)}`,
13
+ origin: item.origin,
14
+ record: JSON.parse(String(item.payload)),
15
+ };
16
+ validateLocalRecord(envelope);
17
+ return { ...envelope.record, cursor: String(item.cursor), origin: envelope.origin };
18
+ }),
19
+ catch: (cause) => duckdbError("decode", cause),
20
+ });
21
+ });
22
+ }
23
+ //# sourceMappingURL=duckdb-query-rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query-rows.js","sourceRoot":"","sources":["../../src/local/duckdb-query-rows.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,+HAA+H;AAC/H,MAAM,UAAU,cAAc,CAAC,UAAgC,EAAE,MAA2B;IAC1F,OAAO,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAW,EAAE,SAAwB,EAAE;QAC7F,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QACzF,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACvB,GAAG,EAAE,GAAwB,EAAE,CAC7B,MAAM,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACtC,MAAM,QAAQ,GAAG;oBACf,GAAG,EAAE,QAAQ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;oBAClC,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACzC,CAAC;gBACF,mBAAmB,CAAC,QAAQ,CAAC,CAAC;gBAC9B,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtF,CAAC,CAAC;YACJ,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** SQL row reader shared by native list/detail query operations. */
2
+ import type { Effect } from "effect";
3
+ import type { DuckDBValue } from "@duckdb/node-api";
4
+ import type { StoredLocalRecord } from "@relkit/observability/local/record";
5
+ import type { DuckdbError } from "./duckdb-error.js";
6
+ /** Reads only fully decoded stored records from native SQL. */
7
+ export type DuckdbReadRows = (sql: string, values?: DuckDBValue[]) => Effect.Effect<StoredLocalRecord[], DuckdbError>;
8
+ //# sourceMappingURL=duckdb-query-rows.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query-rows.types.d.ts","sourceRoot":"","sources":["../../src/local/duckdb-query-rows.types.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG,CAC3B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,WAAW,EAAE,KACnB,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,WAAW,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=duckdb-query-rows.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query-rows.types.js","sourceRoot":"","sources":["../../src/local/duckdb-query-rows.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import type { DuckdbConnectionPort } from "./duckdb-driver.types.js";
2
+ import type { ObservabilityQueryRequest } from "@relkit/observability";
3
+ /**
4
+ * Creates Promise query adapters for a scoped DuckDB connection.
5
+ *
6
+ * @param connection - Scoped database connection.
7
+ * @returns Query operations retaining the public Promise signatures.
8
+ * @example
9
+ * const query = createDuckdbQuery(connection);
10
+ * const page = await query.list("logs");
11
+ */
12
+ export declare function createDuckdbQuery(connection: DuckdbConnectionPort): {
13
+ list: (kind: "logs" | "requests" | "traces", input?: ObservabilityQueryRequest) => Promise<import("@relkit/observability").ObservabilityQueryPage<import("@relkit/observability/local/record").StoredLocalRecord>>;
14
+ detail: (kind: "log" | "request" | "trace", id: string) => Promise<{
15
+ log: import("@relkit/observability/local/record").StoredLocalRecord;
16
+ items: readonly never[];
17
+ nextCursor?: string;
18
+ protocol: typeof import("@relkit/observability").OBSERVABILITY_QUERY_PROTOCOL;
19
+ version: typeof import("@relkit/observability").OBSERVABILITY_QUERY_VERSION;
20
+ } | {
21
+ request: import("@relkit/observability").RequestRecord;
22
+ spans: readonly import("@relkit/observability").SpanRecord[];
23
+ roots: readonly import("@relkit/observability").SpanNode[];
24
+ continuations: readonly {
25
+ readonly traceId: string;
26
+ readonly active: boolean;
27
+ }[];
28
+ records: readonly import("@relkit/observability").ObservabilityRecord[];
29
+ counts: {
30
+ readonly records: number;
31
+ readonly spans: number;
32
+ readonly continuations: number;
33
+ };
34
+ incomplete: readonly string[];
35
+ items: readonly never[];
36
+ nextCursor?: string;
37
+ protocol: typeof import("@relkit/observability").OBSERVABILITY_QUERY_PROTOCOL;
38
+ version: typeof import("@relkit/observability").OBSERVABILITY_QUERY_VERSION;
39
+ } | {
40
+ trace: import("@relkit/observability/local/record").StoredLocalRecord | undefined;
41
+ spans: import("@relkit/observability").SpanRecord[];
42
+ records: readonly import("@relkit/observability/local/record").StoredLocalRecord[];
43
+ items: readonly import("@relkit/observability/local/record").StoredLocalRecord[];
44
+ nextCursor?: string;
45
+ protocol: typeof import("@relkit/observability").OBSERVABILITY_QUERY_PROTOCOL;
46
+ version: typeof import("@relkit/observability").OBSERVABILITY_QUERY_VERSION;
47
+ } | undefined>;
48
+ };
49
+ //# sourceMappingURL=duckdb-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query.d.ts","sourceRoot":"","sources":["../../src/local/duckdb-query.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAIrE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvE;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,oBAAoB;iBAajD,MAAM,GAAG,UAAU,GAAG,QAAQ,UAAS,yBAAyB;mBAE9D,KAAK,GAAG,SAAS,GAAG,OAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEzD"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Owns duckdb query for the optional local history store.
3
+ * Shared records and query contracts come from lightweight observability; native
4
+ * handles and worker lifetimes remain owned by this storage package.
5
+ */
6
+ import { Effect, Semaphore } from "effect";
7
+ import { makeDuckdbQueryEffect } from "./duckdb-query-effect.js";
8
+ import { DuckdbQueryError } from "./duckdb-query-error.js";
9
+ import { ObservabilityQueryError } from "@relkit/observability";
10
+ /**
11
+ * Creates Promise query adapters for a scoped DuckDB connection.
12
+ *
13
+ * @param connection - Scoped database connection.
14
+ * @returns Query operations retaining the public Promise signatures.
15
+ * @example
16
+ * const query = createDuckdbQuery(connection);
17
+ * const page = await query.list("logs");
18
+ */
19
+ export function createDuckdbQuery(connection) {
20
+ const query = makeDuckdbQueryEffect(connection, Semaphore.makeUnsafe(1));
21
+ const run = (effect) => Effect.runPromise(effect.pipe(Effect.mapError((error) => error instanceof DuckdbQueryError
22
+ ? new ObservabilityQueryError(error.code, error.message)
23
+ : error)));
24
+ return {
25
+ list: (kind, input = {}) => run(query.list(kind, input)),
26
+ detail: (kind, id) => run(query.detail(kind, id)),
27
+ };
28
+ }
29
+ //# sourceMappingURL=duckdb-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-query.js","sourceRoot":"","sources":["../../src/local/duckdb-query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAgC;IAChE,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,CAAO,MAA2B,EAAc,EAAE,CAC5D,MAAM,CAAC,UAAU,CACf,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,KAAK,YAAY,gBAAgB;QAC/B,CAAC,CAAC,IAAI,uBAAuB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;QACxD,CAAC,CAAC,KAAK,CACV,CACF,CACF,CAAC;IACJ,OAAO;QACL,IAAI,EAAE,CAAC,IAAoC,EAAE,QAAmC,EAAE,EAAE,EAAE,CACpF,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,MAAM,EAAE,CAAC,IAAiC,EAAE,EAAU,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KACvF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /** Applies the existing history/receipt retention policy inside the caller's database permit. */
2
+ import { Effect } from "effect";
3
+ import type { DuckdbStorageState } from "./duckdb-storage-state.types.js";
4
+ /** @param state - Store-owned connection and policy. @returns Typed retention completion; no database is acquired here. */
5
+ export declare const retainDuckdbRecords: (state: DuckdbStorageState) => Effect.Effect<void, import("./duckdb-error.js").DuckdbError, never>;
6
+ //# sourceMappingURL=duckdb-retention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-retention.d.ts","sourceRoot":"","sources":["../../src/local/duckdb-retention.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,OAAO,EAAS,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,2HAA2H;AAC3H,eAAO,MAAM,mBAAmB,oGA8B9B,CAAC"}
@@ -0,0 +1,22 @@
1
+ /** Applies the existing history/receipt retention policy inside the caller's database permit. */
2
+ import { Clock, Effect } from "effect";
3
+ import { observeDuckdb } from "./duckdb-metrics.js";
4
+ import { runDuckdbSql } from "./duckdb-sql.js";
5
+ /** @param state - Store-owned connection and policy. @returns Typed retention completion; no database is acquired here. */
6
+ export const retainDuckdbRecords = Effect.fn("ObservabilityDuckdb.retain")(function* (state) {
7
+ return yield* observeDuckdb("retain", Effect.gen(function* () {
8
+ const now = yield* Clock.currentTimeMillis;
9
+ const age = state.retention.maxAgeMs ?? 7 * 24 * 60 * 60 * 1000;
10
+ const maximum = state.retention.maxBytes ?? 256 * 1024 * 1024;
11
+ const entries = state.retention.maxEntries ?? Number.MAX_SAFE_INTEGER;
12
+ yield* runDuckdbSql(state.connection, "retain", "DELETE FROM records WHERE recorded_at < ?", [
13
+ now - age,
14
+ ]);
15
+ yield* runDuckdbSql(state.connection, "retain", `DELETE FROM records WHERE id IN (
16
+ SELECT id FROM (SELECT id, sum(bytes) OVER (ORDER BY id DESC) AS total,
17
+ row_number() OVER (ORDER BY id DESC) AS position FROM records) WHERE total > ? OR position > ?
18
+ )`, [maximum, entries]);
19
+ yield* runDuckdbSql(state.connection, "retain", "DELETE FROM receipts WHERE received_at < ? AND NOT starts_with(key, 'legacy:')", [now - 7 * 24 * 60 * 60 * 1000]);
20
+ }));
21
+ });
22
+ //# sourceMappingURL=duckdb-retention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-retention.js","sourceRoot":"","sources":["../../src/local/duckdb-retention.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,2HAA2H;AAC3H,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,EAClF,KAAyB;IAEzB,OAAO,KAAK,CAAC,CAAC,aAAa,CACzB,QAAQ,EACR,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAChE,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;QAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,gBAAgB,CAAC;QACtE,KAAK,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,2CAA2C,EAAE;YAC3F,GAAG,GAAG,GAAG;SACV,CAAC,CAAC;QACH,KAAK,CAAC,CAAC,YAAY,CACjB,KAAK,CAAC,UAAU,EAChB,QAAQ,EACR;;;QAGA,EACA,CAAC,OAAO,EAAE,OAAO,CAAC,CACnB,CAAC;QACF,KAAK,CAAC,CAAC,YAAY,CACjB,KAAK,CAAC,UAAU,EAChB,QAAQ,EACR,gFAAgF,EAChF,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAChC,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Owns duckdb schema for the optional local history store.
3
+ * Shared records and query contracts come from lightweight observability; native
4
+ * handles and worker lifetimes remain owned by this storage package.
5
+ */
6
+ import { Effect } from "effect";
7
+ import type { DuckdbConnectionPort } from "./duckdb-driver.types.js";
8
+ /**
9
+ * Initializes the local observability schema and checks compatibility.
10
+ *
11
+ * @param connection - Connection owned by the open database Scope.
12
+ * @returns An Effect completing after schema validation or a tagged error.
13
+ * @example
14
+ * yield* initializeDuckdbSchema(connection);
15
+ */
16
+ export declare const initializeDuckdbSchema: (connection: DuckdbConnectionPort) => Effect.Effect<undefined, import("./duckdb-error.js").DuckdbError, never>;
17
+ //# sourceMappingURL=duckdb-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-schema.d.ts","sourceRoot":"","sources":["../../src/local/duckdb-schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,gHAoCjC,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Owns duckdb schema for the optional local history store.
3
+ * Shared records and query contracts come from lightweight observability; native
4
+ * handles and worker lifetimes remain owned by this storage package.
5
+ */
6
+ import { Effect } from "effect";
7
+ import { duckdbError } from "./duckdb-error.js";
8
+ import { readDuckdbSql, runDuckdbSql } from "./duckdb-sql.js";
9
+ /**
10
+ * Initializes the local observability schema and checks compatibility.
11
+ *
12
+ * @param connection - Connection owned by the open database Scope.
13
+ * @returns An Effect completing after schema validation or a tagged error.
14
+ * @example
15
+ * yield* initializeDuckdbSchema(connection);
16
+ */
17
+ export const initializeDuckdbSchema = Effect.fn("ObservabilityDuckdb.schema")(function* (connection) {
18
+ yield* runDuckdbSql(connection, "schema", `
19
+ CREATE SEQUENCE IF NOT EXISTS record_ids;
20
+ CREATE TABLE IF NOT EXISTS records (
21
+ id BIGINT PRIMARY KEY DEFAULT nextval('record_ids'), origin VARCHAR NOT NULL,
22
+ signal VARCHAR NOT NULL, recorded_at BIGINT NOT NULL, received_at BIGINT NOT NULL,
23
+ request_id VARCHAR, origin_request_id VARCHAR, trace_id VARCHAR, span_id VARCHAR,
24
+ bytes BIGINT NOT NULL, payload JSON NOT NULL
25
+ );
26
+ CREATE TABLE IF NOT EXISTS receipts (key VARCHAR PRIMARY KEY, received_at BIGINT NOT NULL);
27
+ CREATE TABLE IF NOT EXISTS imports (source VARCHAR PRIMARY KEY, malformed BIGINT NOT NULL);
28
+ CREATE INDEX IF NOT EXISTS records_trace ON records(trace_id);
29
+ CREATE INDEX IF NOT EXISTS records_request ON records(request_id);
30
+ CREATE INDEX IF NOT EXISTS records_origin_request ON records(origin_request_id);
31
+ CREATE INDEX IF NOT EXISTS records_span ON records(trace_id, span_id);
32
+ `);
33
+ const result = yield* readDuckdbSql(connection, "schema", "SELECT name FROM pragma_table_info('records')");
34
+ const columns = result.getRowObjectsJson().map((row) => String(row.name));
35
+ for (const required of ["origin_request_id", "span_id"])
36
+ if (!columns.includes(required))
37
+ return yield* Effect.fail(duckdbError("schema", new Error("RELKIT_OBSERVABILITY_STATE_INCOMPATIBLE: use fresh development state")));
38
+ });
39
+ //# sourceMappingURL=duckdb-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-schema.js","sourceRoot":"","sources":["../../src/local/duckdb-schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC9D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,EACrF,UAAgC;IAEhC,KAAK,CAAC,CAAC,YAAY,CACjB,UAAU,EACV,QAAQ,EACR;;;;;;;;;;;;;;GAcD,CACA,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CACjC,UAAU,EACV,QAAQ,EACR,+CAA+C,CAChD,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,KAAK,MAAM,QAAQ,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,WAAW,CACT,QAAQ,EACR,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAClF,CACF,CAAC;AACR,CAAC,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Owns duckdb sql for the optional local history store.
3
+ * Shared records and query contracts come from lightweight observability; native
4
+ * handles and worker lifetimes remain owned by this storage package.
5
+ */
6
+ import type { DuckDBValue } from "@duckdb/node-api";
7
+ import { Effect } from "effect";
8
+ import type { DuckdbConnectionPort, DuckdbRows } from "./duckdb-driver.types.js";
9
+ /**
10
+ * Runs one native SQL command without closing its connection during interruption.
11
+ * DuckDB's Promise API has no cancellation signal, so interruption waits for
12
+ * the native command to settle before Scope finalizers release the handles.
13
+ *
14
+ * @param connection - Scoped DuckDB connection.
15
+ * @param operation - Stable label for a typed failure.
16
+ * @param sql - SQL statement.
17
+ * @param values - Bound values.
18
+ * @returns An Effect completing after the native command or a DuckdbError.
19
+ * @example
20
+ * yield* runDuckdbSql(connection, "checkpoint", "CHECKPOINT");
21
+ */
22
+ export declare const runDuckdbSql: (connection: DuckdbConnectionPort, operation: string, sql: string, values?: DuckDBValue[] | undefined) => Effect.Effect<void | import("@duckdb/node-api").DuckDBMaterializedResult, import("./duckdb-error.js").DuckdbError, never>;
23
+ /**
24
+ * Reads rows from one native SQL command under the owning connection Scope.
25
+ *
26
+ * @param connection - Scoped DuckDB connection.
27
+ * @param operation - Stable label for a typed failure.
28
+ * @param sql - SQL query.
29
+ * @param values - Bound values.
30
+ * @returns An Effect with a completed row reader or a DuckdbError.
31
+ * @example
32
+ * const result = yield* readDuckdbSql(connection, "schema", "SELECT 1");
33
+ */
34
+ export declare const readDuckdbSql: (connection: DuckdbConnectionPort, operation: string, sql: string, values?: DuckDBValue[] | undefined) => Effect.Effect<DuckdbRows, import("./duckdb-error.js").DuckdbError, never>;
35
+ //# sourceMappingURL=duckdb-sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-sql.d.ts","sourceRoot":"","sources":["../../src/local/duckdb-sql.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,qOAQxB,CAAC;AACF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,qLAazB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { Effect } from "effect";
2
+ import { duckdbError } from "./duckdb-error.js";
3
+ /**
4
+ * Runs one native SQL command without closing its connection during interruption.
5
+ * DuckDB's Promise API has no cancellation signal, so interruption waits for
6
+ * the native command to settle before Scope finalizers release the handles.
7
+ *
8
+ * @param connection - Scoped DuckDB connection.
9
+ * @param operation - Stable label for a typed failure.
10
+ * @param sql - SQL statement.
11
+ * @param values - Bound values.
12
+ * @returns An Effect completing after the native command or a DuckdbError.
13
+ * @example
14
+ * yield* runDuckdbSql(connection, "checkpoint", "CHECKPOINT");
15
+ */
16
+ export const runDuckdbSql = Effect.fn("ObservabilityDuckdb.sql.run")((connection, operation, sql, values) => Effect.uninterruptible(Effect.tryPromise({
17
+ try: () => connection.run(sql, values),
18
+ catch: (cause) => duckdbError(operation, cause),
19
+ })));
20
+ /**
21
+ * Reads rows from one native SQL command under the owning connection Scope.
22
+ *
23
+ * @param connection - Scoped DuckDB connection.
24
+ * @param operation - Stable label for a typed failure.
25
+ * @param sql - SQL query.
26
+ * @param values - Bound values.
27
+ * @returns An Effect with a completed row reader or a DuckdbError.
28
+ * @example
29
+ * const result = yield* readDuckdbSql(connection, "schema", "SELECT 1");
30
+ */
31
+ export const readDuckdbSql = Effect.fn("ObservabilityDuckdb.sql.read")((connection, operation, sql, values) => Effect.uninterruptible(Effect.tryPromise({
32
+ try: () => connection.runAndReadAll(sql, values),
33
+ catch: (cause) => duckdbError(operation, cause),
34
+ })));
35
+ //# sourceMappingURL=duckdb-sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-sql.js","sourceRoot":"","sources":["../../src/local/duckdb-sql.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAClE,CAAC,UAAgC,EAAE,SAAiB,EAAE,GAAW,EAAE,MAAsB,EAAE,EAAE,CAC3F,MAAM,CAAC,eAAe,CACpB,MAAM,CAAC,UAAU,CAAC;IAChB,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;IACtC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC;CAChD,CAAC,CACH,CACJ,CAAC;AACF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,8BAA8B,CAAC,CACpE,CACE,UAAgC,EAChC,SAAiB,EACjB,GAAW,EACX,MAAsB,EACqC,EAAE,CAC7D,MAAM,CAAC,eAAe,CACpB,MAAM,CAAC,UAAU,CAAC;IAChB,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC;IAChD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC;CAChD,CAAC,CACH,CACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /** Retention/redaction policy captured by one serialized native history store. */
2
+ import type { Semaphore } from "effect";
3
+ import type { RedactionPolicy, TelemetryLocalRetentionPolicy } from "@relkit/observability";
4
+ import type { DuckdbConnectionPort } from "./duckdb-driver.types.js";
5
+ /** Mutable configuration shares the same permit as writes and queries. */
6
+ export interface DuckdbStorageState {
7
+ readonly connection: DuckdbConnectionPort;
8
+ readonly permit: Semaphore.Semaphore;
9
+ retention: TelemetryLocalRetentionPolicy;
10
+ redaction: RedactionPolicy | undefined;
11
+ }
12
+ //# sourceMappingURL=duckdb-storage-state.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-storage-state.types.d.ts","sourceRoot":"","sources":["../../src/local/duckdb-storage-state.types.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;IACrC,SAAS,EAAE,6BAA6B,CAAC;IACzC,SAAS,EAAE,eAAe,GAAG,SAAS,CAAC;CACxC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=duckdb-storage-state.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-storage-state.types.js","sourceRoot":"","sources":["../../src/local/duckdb-storage-state.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ /** Composes serialized append, retention configuration and checkpoint operations for one native history owner. */
2
+ import { type Semaphore } from "effect";
3
+ import type { RedactionPolicy, TelemetryLocalRetentionPolicy } from "@relkit/observability";
4
+ import type { DuckdbConnectionPort } from "./duckdb-driver.types.js";
5
+ import type { DuckdbStorageEffects } from "./duckdb-storage.types.js";
6
+ /** @param connection - Scoped native connection. @param permit - Shared database serialization. @param configured - Retention policy. @param initialRedaction - Admission policy. @returns Native store capabilities. */
7
+ export declare function makeDuckdbStorage(connection: DuckdbConnectionPort, permit: Semaphore.Semaphore, configured: TelemetryLocalRetentionPolicy, initialRedaction?: RedactionPolicy): DuckdbStorageEffects;
8
+ //# sourceMappingURL=duckdb-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-storage.d.ts","sourceRoot":"","sources":["../../src/local/duckdb-storage.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAMtE,yNAAyN;AACzN,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,oBAAoB,EAChC,MAAM,EAAE,SAAS,CAAC,SAAS,EAC3B,UAAU,EAAE,6BAA6B,EACzC,gBAAgB,CAAC,EAAE,eAAe,GACjC,oBAAoB,CAqCtB"}