@laserdata/laser-sdk 0.5.3 → 0.6.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 (356) hide show
  1. package/README.md +105 -79
  2. package/dist/agent/agdx.d.ts +8 -3
  3. package/dist/agent/agdx.d.ts.map +1 -1
  4. package/dist/agent/agdx.js +39 -22
  5. package/dist/agent/agdx.js.map +1 -1
  6. package/dist/agent/builder.d.ts +25 -15
  7. package/dist/agent/builder.d.ts.map +1 -1
  8. package/dist/agent/builder.js +103 -59
  9. package/dist/agent/builder.js.map +1 -1
  10. package/dist/agent/context.d.ts +3 -6
  11. package/dist/agent/context.d.ts.map +1 -1
  12. package/dist/agent/context.js +17 -9
  13. package/dist/agent/context.js.map +1 -1
  14. package/dist/agent/contract.d.ts +2 -2
  15. package/dist/agent/contract.d.ts.map +1 -1
  16. package/dist/agent/contract.js +10 -6
  17. package/dist/agent/contract.js.map +1 -1
  18. package/dist/agent/memory-handler.d.ts +25 -0
  19. package/dist/agent/memory-handler.d.ts.map +1 -0
  20. package/dist/agent/memory-handler.js +43 -0
  21. package/dist/agent/memory-handler.js.map +1 -0
  22. package/dist/agent/registry.d.ts +3 -10
  23. package/dist/agent/registry.d.ts.map +1 -1
  24. package/dist/agent/registry.js +22 -19
  25. package/dist/agent/registry.js.map +1 -1
  26. package/dist/agent/reliable-consumer.d.ts +19 -9
  27. package/dist/agent/reliable-consumer.d.ts.map +1 -1
  28. package/dist/agent/reliable-consumer.js +193 -54
  29. package/dist/agent/reliable-consumer.js.map +1 -1
  30. package/dist/agent/replies.d.ts +6 -0
  31. package/dist/agent/replies.d.ts.map +1 -1
  32. package/dist/agent/replies.js +55 -4
  33. package/dist/agent/replies.js.map +1 -1
  34. package/dist/agent/router.d.ts +1 -1
  35. package/dist/agent/router.d.ts.map +1 -1
  36. package/dist/agent/router.js +5 -19
  37. package/dist/agent/router.js.map +1 -1
  38. package/dist/agent/scope.d.ts +7 -3
  39. package/dist/agent/scope.d.ts.map +1 -1
  40. package/dist/agent/scope.js +11 -1
  41. package/dist/agent/scope.js.map +1 -1
  42. package/dist/agent/timer.d.ts +6 -0
  43. package/dist/agent/timer.d.ts.map +1 -0
  44. package/dist/agent/timer.js +21 -0
  45. package/dist/agent/timer.js.map +1 -0
  46. package/dist/agent/workflow.d.ts +16 -19
  47. package/dist/agent/workflow.d.ts.map +1 -1
  48. package/dist/agent/workflow.js +17 -6
  49. package/dist/agent/workflow.js.map +1 -1
  50. package/dist/blob.d.ts +2 -3
  51. package/dist/blob.d.ts.map +1 -1
  52. package/dist/blob.js.map +1 -1
  53. package/dist/bridges/a2a.d.ts +34 -23
  54. package/dist/bridges/a2a.d.ts.map +1 -1
  55. package/dist/bridges/a2a.js +29 -19
  56. package/dist/bridges/a2a.js.map +1 -1
  57. package/dist/bridges/hops.d.ts +1 -1
  58. package/dist/bridges/hops.d.ts.map +1 -1
  59. package/dist/bridges/hops.js +1 -1
  60. package/dist/bridges/hops.js.map +1 -1
  61. package/dist/bridges/mcp.d.ts +27 -7
  62. package/dist/bridges/mcp.d.ts.map +1 -1
  63. package/dist/bridges/mcp.js +24 -9
  64. package/dist/bridges/mcp.js.map +1 -1
  65. package/dist/client/bytes.d.ts +5 -0
  66. package/dist/client/bytes.d.ts.map +1 -1
  67. package/dist/client/bytes.js +15 -0
  68. package/dist/client/bytes.js.map +1 -1
  69. package/dist/client/capabilities.d.ts +25 -13
  70. package/dist/client/capabilities.d.ts.map +1 -1
  71. package/dist/client/capabilities.js +145 -123
  72. package/dist/client/capabilities.js.map +1 -1
  73. package/dist/client/error-classify.d.ts +57 -0
  74. package/dist/client/error-classify.d.ts.map +1 -0
  75. package/dist/client/error-classify.js +347 -0
  76. package/dist/client/error-classify.js.map +1 -0
  77. package/dist/client/errors.d.ts +113 -40
  78. package/dist/client/errors.d.ts.map +1 -1
  79. package/dist/client/errors.js +191 -53
  80. package/dist/client/errors.js.map +1 -1
  81. package/dist/client/internals.d.ts +1 -0
  82. package/dist/client/internals.d.ts.map +1 -1
  83. package/dist/client/internals.js +1 -0
  84. package/dist/client/internals.js.map +1 -1
  85. package/dist/client/laser.d.ts +62 -46
  86. package/dist/client/laser.d.ts.map +1 -1
  87. package/dist/client/laser.js +206 -120
  88. package/dist/client/laser.js.map +1 -1
  89. package/dist/client/managed.d.ts +3 -0
  90. package/dist/client/managed.d.ts.map +1 -1
  91. package/dist/client/managed.js +70 -3
  92. package/dist/client/managed.js.map +1 -1
  93. package/dist/context-scope.d.ts +25 -9
  94. package/dist/context-scope.d.ts.map +1 -1
  95. package/dist/context-scope.js +36 -9
  96. package/dist/context-scope.js.map +1 -1
  97. package/dist/context.d.ts +33 -16
  98. package/dist/context.d.ts.map +1 -1
  99. package/dist/context.js +174 -95
  100. package/dist/context.js.map +1 -1
  101. package/dist/conversation-state.d.ts +1 -1
  102. package/dist/conversation-state.d.ts.map +1 -1
  103. package/dist/conversation-state.js +35 -16
  104. package/dist/conversation-state.js.map +1 -1
  105. package/dist/govern.d.ts +24 -5
  106. package/dist/govern.d.ts.map +1 -1
  107. package/dist/govern.js +116 -28
  108. package/dist/govern.js.map +1 -1
  109. package/dist/iggy/apache-iggy.d.ts +59 -56
  110. package/dist/iggy/apache-iggy.d.ts.map +1 -1
  111. package/dist/iggy/apache-iggy.js +300 -137
  112. package/dist/iggy/apache-iggy.js.map +1 -1
  113. package/dist/index.d.ts +97 -65
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +49 -30
  116. package/dist/index.js.map +1 -1
  117. package/dist/intent.d.ts +16 -2
  118. package/dist/intent.d.ts.map +1 -1
  119. package/dist/intent.js +50 -18
  120. package/dist/intent.js.map +1 -1
  121. package/dist/managed/coordination.d.ts +82 -0
  122. package/dist/managed/coordination.d.ts.map +1 -0
  123. package/dist/managed/coordination.js +367 -0
  124. package/dist/managed/coordination.js.map +1 -0
  125. package/dist/managed/destinations.d.ts +4 -3
  126. package/dist/managed/destinations.d.ts.map +1 -1
  127. package/dist/managed/destinations.js +29 -13
  128. package/dist/managed/destinations.js.map +1 -1
  129. package/dist/managed/filters.d.ts +5 -5
  130. package/dist/managed/filters.d.ts.map +1 -1
  131. package/dist/managed/filters.js +39 -22
  132. package/dist/managed/filters.js.map +1 -1
  133. package/dist/managed/forks.d.ts +8 -11
  134. package/dist/managed/forks.d.ts.map +1 -1
  135. package/dist/managed/forks.js +33 -13
  136. package/dist/managed/forks.js.map +1 -1
  137. package/dist/managed/graph.d.ts +1 -4
  138. package/dist/managed/graph.d.ts.map +1 -1
  139. package/dist/managed/graph.js +5 -3
  140. package/dist/managed/graph.js.map +1 -1
  141. package/dist/managed/kv.d.ts +26 -14
  142. package/dist/managed/kv.d.ts.map +1 -1
  143. package/dist/managed/kv.js +88 -61
  144. package/dist/managed/kv.js.map +1 -1
  145. package/dist/managed/projections.d.ts +5 -8
  146. package/dist/managed/projections.d.ts.map +1 -1
  147. package/dist/managed/projections.js +22 -2
  148. package/dist/managed/projections.js.map +1 -1
  149. package/dist/managed/query.d.ts +20 -6
  150. package/dist/managed/query.d.ts.map +1 -1
  151. package/dist/managed/query.js +97 -24
  152. package/dist/managed/query.js.map +1 -1
  153. package/dist/managed/runs.d.ts +2 -4
  154. package/dist/managed/runs.d.ts.map +1 -1
  155. package/dist/managed/runs.js +9 -1
  156. package/dist/managed/runs.js.map +1 -1
  157. package/dist/managed/watch.d.ts +2 -4
  158. package/dist/managed/watch.d.ts.map +1 -1
  159. package/dist/managed/watch.js +9 -1
  160. package/dist/managed/watch.js.map +1 -1
  161. package/dist/memory/handle.d.ts +75 -22
  162. package/dist/memory/handle.d.ts.map +1 -1
  163. package/dist/memory/handle.js +232 -58
  164. package/dist/memory/handle.js.map +1 -1
  165. package/dist/memory/log-memory.d.ts +24 -12
  166. package/dist/memory/log-memory.d.ts.map +1 -1
  167. package/dist/memory/log-memory.js +214 -100
  168. package/dist/memory/log-memory.js.map +1 -1
  169. package/dist/memory/topic.d.ts +2 -2
  170. package/dist/memory/topic.d.ts.map +1 -1
  171. package/dist/memory/topic.js +7 -5
  172. package/dist/memory/topic.js.map +1 -1
  173. package/dist/memory/types.d.ts +41 -5
  174. package/dist/memory/types.d.ts.map +1 -1
  175. package/dist/memory/types.js +44 -18
  176. package/dist/memory/types.js.map +1 -1
  177. package/dist/memory/vector-memory.d.ts +8 -6
  178. package/dist/memory/vector-memory.d.ts.map +1 -1
  179. package/dist/memory/vector-memory.js +65 -34
  180. package/dist/memory/vector-memory.js.map +1 -1
  181. package/dist/memory.d.ts +6 -5
  182. package/dist/memory.d.ts.map +1 -1
  183. package/dist/memory.js +4 -4
  184. package/dist/memory.js.map +1 -1
  185. package/dist/provenance/agent-topic.d.ts +3 -1
  186. package/dist/provenance/agent-topic.d.ts.map +1 -1
  187. package/dist/provenance/agent-topic.js +3 -1
  188. package/dist/provenance/agent-topic.js.map +1 -1
  189. package/dist/provenance/provenance.d.ts +3 -3
  190. package/dist/provenance/provenance.d.ts.map +1 -1
  191. package/dist/provenance/provenance.js +30 -18
  192. package/dist/provenance/provenance.js.map +1 -1
  193. package/dist/runtime/clock.d.ts +3 -0
  194. package/dist/runtime/clock.d.ts.map +1 -1
  195. package/dist/runtime/clock.js +16 -3
  196. package/dist/runtime/clock.js.map +1 -1
  197. package/dist/schema-codecs.d.ts +7 -3
  198. package/dist/schema-codecs.d.ts.map +1 -1
  199. package/dist/schema-codecs.js +80 -12
  200. package/dist/schema-codecs.js.map +1 -1
  201. package/dist/session.d.ts +27 -18
  202. package/dist/session.d.ts.map +1 -1
  203. package/dist/session.js +95 -37
  204. package/dist/session.js.map +1 -1
  205. package/dist/signing.d.ts +11 -5
  206. package/dist/signing.d.ts.map +1 -1
  207. package/dist/signing.js +64 -21
  208. package/dist/signing.js.map +1 -1
  209. package/dist/snapshot.d.ts +10 -2
  210. package/dist/snapshot.d.ts.map +1 -1
  211. package/dist/snapshot.js +62 -28
  212. package/dist/snapshot.js.map +1 -1
  213. package/dist/state-store.d.ts +1 -1
  214. package/dist/state-store.d.ts.map +1 -1
  215. package/dist/state-store.js.map +1 -1
  216. package/dist/stream/batching.d.ts +81 -0
  217. package/dist/stream/batching.d.ts.map +1 -0
  218. package/dist/stream/batching.js +210 -0
  219. package/dist/stream/batching.js.map +1 -0
  220. package/dist/stream/bson.d.ts +3 -0
  221. package/dist/stream/bson.d.ts.map +1 -0
  222. package/dist/stream/bson.js +245 -0
  223. package/dist/stream/bson.js.map +1 -0
  224. package/dist/stream/codecs.d.ts +58 -6
  225. package/dist/stream/codecs.d.ts.map +1 -1
  226. package/dist/stream/codecs.js +143 -59
  227. package/dist/stream/codecs.js.map +1 -1
  228. package/dist/stream/consumer-group.d.ts +13 -10
  229. package/dist/stream/consumer-group.d.ts.map +1 -1
  230. package/dist/stream/consumer-group.js +91 -31
  231. package/dist/stream/consumer-group.js.map +1 -1
  232. package/dist/stream/consumer-start.d.ts +17 -0
  233. package/dist/stream/consumer-start.d.ts.map +1 -0
  234. package/dist/stream/consumer-start.js +2 -0
  235. package/dist/stream/consumer-start.js.map +1 -0
  236. package/dist/stream/consumer.d.ts +166 -24
  237. package/dist/stream/consumer.d.ts.map +1 -1
  238. package/dist/stream/consumer.js +451 -68
  239. package/dist/stream/consumer.js.map +1 -1
  240. package/dist/stream/cursor.d.ts +5 -12
  241. package/dist/stream/cursor.d.ts.map +1 -1
  242. package/dist/stream/cursor.js +34 -8
  243. package/dist/stream/cursor.js.map +1 -1
  244. package/dist/stream/header-value.d.ts +61 -15
  245. package/dist/stream/header-value.d.ts.map +1 -1
  246. package/dist/stream/header-value.js.map +1 -1
  247. package/dist/stream/message.d.ts +17 -0
  248. package/dist/stream/message.d.ts.map +1 -0
  249. package/dist/stream/message.js +9 -0
  250. package/dist/stream/message.js.map +1 -0
  251. package/dist/stream/producer.d.ts +127 -11
  252. package/dist/stream/producer.d.ts.map +1 -1
  253. package/dist/stream/producer.js +401 -36
  254. package/dist/stream/producer.js.map +1 -1
  255. package/dist/stream/publish.d.ts +6 -15
  256. package/dist/stream/publish.d.ts.map +1 -1
  257. package/dist/stream/publish.js +18 -28
  258. package/dist/stream/publish.js.map +1 -1
  259. package/dist/stream/record.d.ts +4 -6
  260. package/dist/stream/record.d.ts.map +1 -1
  261. package/dist/stream/record.js +4 -3
  262. package/dist/stream/record.js.map +1 -1
  263. package/dist/stream/routing.d.ts +12 -0
  264. package/dist/stream/routing.d.ts.map +1 -1
  265. package/dist/stream/routing.js +6 -1
  266. package/dist/stream/routing.js.map +1 -1
  267. package/dist/stream/stream.d.ts +1 -4
  268. package/dist/stream/stream.d.ts.map +1 -1
  269. package/dist/stream/stream.js +5 -1
  270. package/dist/stream/stream.js.map +1 -1
  271. package/dist/stream/topic.d.ts +22 -23
  272. package/dist/stream/topic.d.ts.map +1 -1
  273. package/dist/stream/topic.js +90 -30
  274. package/dist/stream/topic.js.map +1 -1
  275. package/dist/stream/typed-topic.d.ts +9 -13
  276. package/dist/stream/typed-topic.d.ts.map +1 -1
  277. package/dist/stream/typed-topic.js +25 -10
  278. package/dist/stream/typed-topic.js.map +1 -1
  279. package/dist/swarm.d.ts +0 -1
  280. package/dist/swarm.d.ts.map +1 -1
  281. package/dist/swarm.js +1 -0
  282. package/dist/swarm.js.map +1 -1
  283. package/dist/testing.d.ts +3 -3
  284. package/dist/testing.d.ts.map +1 -1
  285. package/dist/testing.js +3 -3
  286. package/dist/testing.js.map +1 -1
  287. package/dist/types/ids.d.ts +17 -2
  288. package/dist/types/ids.d.ts.map +1 -1
  289. package/dist/types/ids.js +34 -14
  290. package/dist/types/ids.js.map +1 -1
  291. package/dist/wire/agent.d.ts +22 -0
  292. package/dist/wire/agent.d.ts.map +1 -1
  293. package/dist/wire/agent.js +80 -25
  294. package/dist/wire/agent.js.map +1 -1
  295. package/dist/wire/authz.d.ts +35 -1
  296. package/dist/wire/authz.d.ts.map +1 -1
  297. package/dist/wire/authz.js +45 -15
  298. package/dist/wire/authz.js.map +1 -1
  299. package/dist/wire/cbor.d.ts.map +1 -1
  300. package/dist/wire/cbor.js +13 -2
  301. package/dist/wire/cbor.js.map +1 -1
  302. package/dist/wire/checkpoint.d.ts +17 -12
  303. package/dist/wire/checkpoint.d.ts.map +1 -1
  304. package/dist/wire/checkpoint.js +28 -3
  305. package/dist/wire/checkpoint.js.map +1 -1
  306. package/dist/wire/control.d.ts +82 -0
  307. package/dist/wire/control.d.ts.map +1 -1
  308. package/dist/wire/control.js +219 -0
  309. package/dist/wire/control.js.map +1 -1
  310. package/dist/wire/filter-eval.d.ts +41 -7
  311. package/dist/wire/filter-eval.d.ts.map +1 -1
  312. package/dist/wire/filter-eval.js +26 -28
  313. package/dist/wire/filter-eval.js.map +1 -1
  314. package/dist/wire/filter.d.ts +51 -17
  315. package/dist/wire/filter.d.ts.map +1 -1
  316. package/dist/wire/filter.js +99 -10
  317. package/dist/wire/filter.js.map +1 -1
  318. package/dist/wire/fork.d.ts +14 -1
  319. package/dist/wire/fork.d.ts.map +1 -1
  320. package/dist/wire/fork.js +19 -8
  321. package/dist/wire/fork.js.map +1 -1
  322. package/dist/wire/graph.d.ts +3 -0
  323. package/dist/wire/graph.d.ts.map +1 -1
  324. package/dist/wire/graph.js +18 -4
  325. package/dist/wire/graph.js.map +1 -1
  326. package/dist/wire/hello.d.ts +4 -1
  327. package/dist/wire/hello.d.ts.map +1 -1
  328. package/dist/wire/hello.js +13 -3
  329. package/dist/wire/hello.js.map +1 -1
  330. package/dist/wire/index.d.ts +4 -1
  331. package/dist/wire/index.d.ts.map +1 -1
  332. package/dist/wire/index.js +4 -1
  333. package/dist/wire/index.js.map +1 -1
  334. package/dist/wire/kv.d.ts +37 -2
  335. package/dist/wire/kv.d.ts.map +1 -1
  336. package/dist/wire/kv.js +36 -18
  337. package/dist/wire/kv.js.map +1 -1
  338. package/dist/wire/query.d.ts +6 -0
  339. package/dist/wire/query.d.ts.map +1 -1
  340. package/dist/wire/query.js +38 -12
  341. package/dist/wire/query.js.map +1 -1
  342. package/dist/wire/schema.d.ts +29 -6
  343. package/dist/wire/schema.d.ts.map +1 -1
  344. package/dist/wire/schema.js +61 -26
  345. package/dist/wire/schema.js.map +1 -1
  346. package/dist/wire/snapshot.js +1 -1
  347. package/dist/wire/snapshot.js.map +1 -1
  348. package/dist/wire/value.d.ts +10 -2
  349. package/dist/wire/value.d.ts.map +1 -1
  350. package/dist/wire/value.js +29 -3
  351. package/dist/wire/value.js.map +1 -1
  352. package/package.json +2 -3
  353. package/dist/stream/polling-strategy.d.ts +0 -14
  354. package/dist/stream/polling-strategy.d.ts.map +0 -1
  355. package/dist/stream/polling-strategy.js +0 -2
  356. package/dist/stream/polling-strategy.js.map +0 -1
package/dist/snapshot.js CHANGED
@@ -1,10 +1,18 @@
1
1
  import { decodeOne, encodeNamed, expectMap } from "./wire/cbor.js";
2
2
  import { decodeFoldSnapshot, encodeFoldSnapshot } from "./wire/snapshot.js";
3
+ import { NoStreamError } from "./client/errors.js";
3
4
  import { INTERNAL_TRANSPORT } from "./client/internals.js";
4
5
  export const DEFAULT_SNAPSHOT_NAMESPACE = "agent.snapshots";
5
6
  export const DEFAULT_SNAPSHOT_TOPIC = "agent.snapshots";
6
- function sameConversation(left, right) {
7
- return left.toString() === right.toString();
7
+ const SCAN_BATCH = 256n;
8
+ /** Encode a fold snapshot to the named-field CBOR bytes used by Rust. */
9
+ export function encodeSnapshot(snapshot) {
10
+ return encodeNamed(encodeFoldSnapshot(snapshot));
11
+ }
12
+ /** Decode a fold snapshot from its stored bytes. */
13
+ export function decodeSnapshot(payload) {
14
+ const context = "fold snapshot";
15
+ return decodeFoldSnapshot(expectMap(decodeOne(payload, context), context), context);
8
16
  }
9
17
  export class TopicSnapshotStore {
10
18
  laser;
@@ -13,39 +21,42 @@ export class TopicSnapshotStore {
13
21
  this.laser = laser;
14
22
  this.topic = topic;
15
23
  }
24
+ /** Walks each partition backward from its tail and stops at the newest
25
+ * record for the conversation, so a hit costs the distance to the last
26
+ * checkpoint. A conversation with no snapshot walks the whole topic, so keep
27
+ * the snapshots topic on retention. */
16
28
  async latest(conversation) {
17
29
  const stream = this.laser.defaultStream;
18
- if (stream === undefined)
19
- return undefined;
20
- const partitions = await this.laser[INTERNAL_TRANSPORT]().findTopicPartitionCount(stream, this.topic);
30
+ if (stream === undefined) {
31
+ throw new NoStreamError("a snapshot lookup requires a default stream, use connectWithStream() or withDefaultStream()");
32
+ }
33
+ const transport = this.laser[INTERNAL_TRANSPORT]();
34
+ const partitions = await transport.findTopicPartitionCount(stream, this.topic);
21
35
  if (partitions === undefined)
22
36
  return undefined;
23
- const cursor = await this.laser.topic(this.topic).replay({ batchSize: 256 });
24
- let latest;
25
- for (;;) {
26
- const records = await cursor.poll();
27
- if (records.length === 0)
28
- break;
29
- for (const record of records) {
30
- let snapshot;
31
- try {
32
- const context = "fold snapshot";
33
- snapshot = decodeFoldSnapshot(expectMap(decodeOne(record.payload, context), context), context);
34
- }
35
- catch {
36
- continue;
37
- }
38
- if (!sameConversation(snapshot.conversation, conversation))
39
- continue;
40
- const timestamp = record.timestampMicros ?? 0n;
41
- if (latest === undefined ||
42
- timestamp > latest.timestamp ||
43
- (timestamp === latest.timestamp && record.offset > latest.offset)) {
44
- latest = { snapshot, timestamp, offset: record.offset };
37
+ let newest;
38
+ for (let partitionId = 0; partitionId < partitions; partitionId += 1) {
39
+ const target = { kind: "single", partitionId };
40
+ const tail = await transport.pollMessages(stream, this.topic, target, { kind: "last" }, 1, false);
41
+ const last = tail[tail.length - 1];
42
+ if (last === undefined)
43
+ continue;
44
+ let end = last.offset + 1n;
45
+ // Newest window first, and within a window the highest matching offset
46
+ // wins, so the walk stops at the conversation's latest checkpoint.
47
+ while (end > 0n) {
48
+ const start = end > SCAN_BATCH ? end - SCAN_BATCH : 0n;
49
+ const window = await transport.pollMessages(stream, this.topic, target, { kind: "offset", value: start }, Number(SCAN_BATCH), false);
50
+ const found = newestMatch(window, end, conversation);
51
+ if (found !== undefined) {
52
+ if (newest === undefined || found.offset > newest.offset)
53
+ newest = found;
54
+ break;
45
55
  }
56
+ end = start;
46
57
  }
47
58
  }
48
- return latest?.snapshot;
59
+ return newest?.snapshot;
49
60
  }
50
61
  async save(snapshot) {
51
62
  await this.laser.topic(this.topic).send(encodeNamed(encodeFoldSnapshot(snapshot)), {
@@ -77,4 +88,27 @@ export class KvSnapshotStore {
77
88
  .send();
78
89
  }
79
90
  }
91
+ function sameConversation(left, right) {
92
+ return left.toString() === right.toString();
93
+ }
94
+ function snapshotOf(payload) {
95
+ try {
96
+ return decodeSnapshot(payload);
97
+ }
98
+ catch {
99
+ return undefined;
100
+ }
101
+ }
102
+ function newestMatch(window, end, conversation) {
103
+ for (let index = window.length - 1; index >= 0; index -= 1) {
104
+ const message = window[index];
105
+ if (message === undefined || message.offset >= end)
106
+ continue;
107
+ const snapshot = snapshotOf(message.payload);
108
+ if (snapshot !== undefined && sameConversation(snapshot.conversation, conversation)) {
109
+ return { offset: message.offset, snapshot };
110
+ }
111
+ }
112
+ return undefined;
113
+ }
80
114
  //# sourceMappingURL=snapshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ export declare class InMemoryStore implements StateStore {
10
10
  delete(key: string): Promise<void>;
11
11
  }
12
12
  export declare class FileStore implements StateStore {
13
- readonly root: string;
13
+ private readonly root;
14
14
  constructor(root: string);
15
15
  get(key: string): Promise<Uint8Array | undefined>;
16
16
  set(key: string, value: Uint8Array): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;IACjD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnC;AAED,qBAAa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IAExD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAGhD;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjD;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjC;CACF;AAQD,qBAAa,SAAU,YAAW,UAAU;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAjC,YAAqB,IAAI,EAAE,MAAM,EAAI;IAE/B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAOtD;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAWvD;IAEK,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvC;IAED,OAAO,CAAC,OAAO;CAGhB"}
1
+ {"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;IACjD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnC;AAED,qBAAa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IAExD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAGhD;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjD;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjC;CACF;AAQD,qBAAa,SAAU,YAAW,UAAU;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,MAAM,EAAI;IAEvC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAOtD;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAWvD;IAEK,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvC;IAED,OAAO,CAAC,OAAO;CAGhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-store.js","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-store.js","sourceRoot":"","sources":["../src/state-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { type BytesLike } from "../client/bytes.js";
2
+ import type { MessageWithHeaders } from "../iggy/apache-iggy.js";
3
+ import type { HeaderValue } from "./header-value.js";
4
+ /** Flush at this many queued records unless overridden. */
5
+ export declare const DEFAULT_MAX_RECORDS = 512;
6
+ /** Flush at this many queued payload bytes unless overridden (1 MiB). */
7
+ export declare const DEFAULT_MAX_BYTES: number;
8
+ /** Flush a non-empty queue after at most this many milliseconds unless overridden. */
9
+ export declare const DEFAULT_LINGER_MS = 5;
10
+ /** The smallest linger the timer runs at. */
11
+ export declare const MIN_LINGER_MS = 1;
12
+ /** Appends one flushed batch under the handle's partitioning. */
13
+ export type BatchSink = (records: readonly MessageWithHeaders[], partitionKey: Uint8Array | undefined) => Promise<unknown>;
14
+ /**
15
+ * Builds a `BatchingProducer`, opened with `topic.batching()`. The batch
16
+ * flushes on whichever of `maxRecords`, `maxBytes`, or `lingerMs` trips first.
17
+ */
18
+ export declare class BatchingProducerBuilder {
19
+ private readonly sink;
20
+ private readonly stream;
21
+ private readonly topic;
22
+ private maxRecordsValue;
23
+ private maxBytesValue;
24
+ private lingerValue;
25
+ private partitionKeyValue;
26
+ private constructor();
27
+ /** Flush once this many records are queued. */
28
+ maxRecords(count: number): this;
29
+ /** Flush once the queued payload bytes reach this bound. */
30
+ maxBytes(bytes: number): this;
31
+ /** Flush a non-empty queue after at most this long, so a trickle of records
32
+ * never waits for a full batch. */
33
+ linger(milliseconds: number): this;
34
+ /** Pins every record of this handle to one partition key, so ordering within
35
+ * the key is never interleaved. Without a key, each flushed batch is
36
+ * spread by the balanced partitioner. */
37
+ partitionKey(key: string | BytesLike): this;
38
+ /** Builds the handle and starts its linger timer. */
39
+ build(): BatchingProducer;
40
+ }
41
+ /**
42
+ * A size-and-time batching publisher over one topic: `send` enqueues, and the
43
+ * queue flushes as one append when `maxRecords`, `maxBytes`, or the linger
44
+ * trips. `flush()` is the guaranteed path, and `close()` flushes and stops the
45
+ * timer.
46
+ *
47
+ * A failed linger flush never stops the timer. Its failure is kept and thrown
48
+ * by the next `send()`, `flush()`, or `close()`. When several batches fail
49
+ * before the caller asks, the report is one `PublishFailedError` that lists
50
+ * the records of all of them.
51
+ */
52
+ export declare class BatchingProducer implements AsyncDisposable {
53
+ private readonly sink;
54
+ private readonly target;
55
+ private readonly partitionKey;
56
+ private readonly maxRecords;
57
+ private readonly maxBytes;
58
+ private queue;
59
+ private payloadBytes;
60
+ private flushing;
61
+ private readonly timer;
62
+ private closed;
63
+ private failure;
64
+ private constructor();
65
+ /** Enqueues one payload with optional headers. Flushes inline when a size
66
+ * bound trips, so backpressure lands on the sender. An error is the failure
67
+ * of that inline flush and lists this record as unconfirmed. A failure an
68
+ * earlier linger flush left is thrown here instead of queueing the record,
69
+ * with this record added to its unconfirmed list, so a failing topic never
70
+ * grows the queue. */
71
+ send(payload: BytesLike, headers?: ReadonlyMap<string, HeaderValue>): Promise<void>;
72
+ /** Flushes everything queued as one batch append, then reports the failure
73
+ * an earlier linger flush left, if any. A no-op on an empty queue. */
74
+ flush(): Promise<void>;
75
+ private drain;
76
+ /** Flushes, stops the linger timer, and reports a kept linger failure. */
77
+ close(): Promise<void>;
78
+ /** Delegates async disposal to `close()`. */
79
+ [Symbol.asyncDispose](): Promise<void>;
80
+ }
81
+ //# sourceMappingURL=batching.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batching.d.ts","sourceRoot":"","sources":["../../src/stream/batching.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,oBAAoB,CAAA;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB,MAAM,CAAA;AACtC,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,QAAc,CAAA;AAC5C,sFAAsF;AACtF,eAAO,MAAM,iBAAiB,IAAI,CAAA;AAClC,6CAA6C;AAC7C,eAAO,MAAM,aAAa,IAAI,CAAA;AAE9B,iEAAiE;AACjE,MAAM,MAAM,SAAS,GAAG,CACtB,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,YAAY,EAAE,UAAU,GAAG,SAAS,KACjC,OAAO,CAAC,OAAO,CAAC,CAAA;AAErB;;;GAGG;AACH,qBAAa,uBAAuB;IAOhC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IARxB,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,iBAAiB,CAAwB;IAEjD,OAAO,eAIH;IAOJ,+CAA+C;IAC/C,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG9B;IAED,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAG5B;IAED;uCACmC;IACnC,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAMjC;IAED;;6CAEyC;IACzC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAI1C;IAED,qDAAqD;IACrD,KAAK,IAAI,gBAAgB,CASxB;CACF;AAED;;;;;;;;;;GAUG;AACH,qBAAa,gBAAiB,YAAW,eAAe;IASpD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAZ3B,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAyC;IAExD,OAAO,eAYN;IAcD;;;;;0BAKsB;IAChB,IAAI,CACR,OAAO,EAAE,SAAS,EAClB,OAAO,GAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAa,GACpD,OAAO,CAAC,IAAI,CAAC,CAgBf;IAED;0EACsE;IACtE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;IAKD,OAAO,CAAC,KAAK;IAqCb,0EAA0E;IACpE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAK3B;IAED,6CAA6C;IAC7C,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAErC;CACF"}
@@ -0,0 +1,210 @@
1
+ import { ownedBytes } from "../client/bytes.js";
2
+ import { InvalidError, PublishFailedError } from "../client/errors.js";
3
+ /** Flush at this many queued records unless overridden. */
4
+ export const DEFAULT_MAX_RECORDS = 512;
5
+ /** Flush at this many queued payload bytes unless overridden (1 MiB). */
6
+ export const DEFAULT_MAX_BYTES = 1024 * 1024;
7
+ /** Flush a non-empty queue after at most this many milliseconds unless overridden. */
8
+ export const DEFAULT_LINGER_MS = 5;
9
+ /** The smallest linger the timer runs at. */
10
+ export const MIN_LINGER_MS = 1;
11
+ /**
12
+ * Builds a `BatchingProducer`, opened with `topic.batching()`. The batch
13
+ * flushes on whichever of `maxRecords`, `maxBytes`, or `lingerMs` trips first.
14
+ */
15
+ export class BatchingProducerBuilder {
16
+ sink;
17
+ stream;
18
+ topic;
19
+ maxRecordsValue = DEFAULT_MAX_RECORDS;
20
+ maxBytesValue = DEFAULT_MAX_BYTES;
21
+ lingerValue = DEFAULT_LINGER_MS;
22
+ partitionKeyValue;
23
+ constructor(sink, stream, topic) {
24
+ this.sink = sink;
25
+ this.stream = stream;
26
+ this.topic = topic;
27
+ }
28
+ /** @internal */
29
+ static create(sink, stream, topic) {
30
+ return new BatchingProducerBuilder(sink, stream, topic);
31
+ }
32
+ /** Flush once this many records are queued. */
33
+ maxRecords(count) {
34
+ this.maxRecordsValue = Math.max(1, positive(count, "maxRecords"));
35
+ return this;
36
+ }
37
+ /** Flush once the queued payload bytes reach this bound. */
38
+ maxBytes(bytes) {
39
+ this.maxBytesValue = Math.max(1, positive(bytes, "maxBytes"));
40
+ return this;
41
+ }
42
+ /** Flush a non-empty queue after at most this long, so a trickle of records
43
+ * never waits for a full batch. */
44
+ linger(milliseconds) {
45
+ if (!Number.isFinite(milliseconds) || milliseconds < 0) {
46
+ throw new InvalidError("linger must be a non-negative finite number");
47
+ }
48
+ this.lingerValue = milliseconds;
49
+ return this;
50
+ }
51
+ /** Pins every record of this handle to one partition key, so ordering within
52
+ * the key is never interleaved. Without a key, each flushed batch is
53
+ * spread by the balanced partitioner. */
54
+ partitionKey(key) {
55
+ this.partitionKeyValue =
56
+ typeof key === "string" ? new TextEncoder().encode(key) : ownedBytes(key);
57
+ return this;
58
+ }
59
+ /** Builds the handle and starts its linger timer. */
60
+ build() {
61
+ return BatchingProducer.create(this.sink, { stream: this.stream, topic: this.topic }, this.partitionKeyValue, this.maxRecordsValue, this.maxBytesValue, Math.max(MIN_LINGER_MS, this.lingerValue));
62
+ }
63
+ }
64
+ /**
65
+ * A size-and-time batching publisher over one topic: `send` enqueues, and the
66
+ * queue flushes as one append when `maxRecords`, `maxBytes`, or the linger
67
+ * trips. `flush()` is the guaranteed path, and `close()` flushes and stops the
68
+ * timer.
69
+ *
70
+ * A failed linger flush never stops the timer. Its failure is kept and thrown
71
+ * by the next `send()`, `flush()`, or `close()`. When several batches fail
72
+ * before the caller asks, the report is one `PublishFailedError` that lists
73
+ * the records of all of them.
74
+ */
75
+ export class BatchingProducer {
76
+ sink;
77
+ target;
78
+ partitionKey;
79
+ maxRecords;
80
+ maxBytes;
81
+ queue = [];
82
+ payloadBytes = 0;
83
+ flushing = Promise.resolve();
84
+ timer;
85
+ closed = false;
86
+ failure;
87
+ constructor(sink, target, partitionKey, maxRecords, maxBytes, lingerMs) {
88
+ this.sink = sink;
89
+ this.target = target;
90
+ this.partitionKey = partitionKey;
91
+ this.maxRecords = maxRecords;
92
+ this.maxBytes = maxBytes;
93
+ this.timer = setInterval(() => {
94
+ void this.drain("timer");
95
+ }, lingerMs);
96
+ this.timer.unref();
97
+ }
98
+ /** @internal */
99
+ static create(sink, target, partitionKey, maxRecords, maxBytes, lingerMs) {
100
+ return new BatchingProducer(sink, target, partitionKey, maxRecords, maxBytes, lingerMs);
101
+ }
102
+ /** Enqueues one payload with optional headers. Flushes inline when a size
103
+ * bound trips, so backpressure lands on the sender. An error is the failure
104
+ * of that inline flush and lists this record as unconfirmed. A failure an
105
+ * earlier linger flush left is thrown here instead of queueing the record,
106
+ * with this record added to its unconfirmed list, so a failing topic never
107
+ * grows the queue. */
108
+ async send(payload, headers = new Map()) {
109
+ if (this.closed)
110
+ throw new InvalidError("send() called after close()");
111
+ const bytes = ownedBytes(payload);
112
+ const record = { payload: bytes, headers: new Map(headers) };
113
+ // A flush in flight may still keep a failure, so the check waits for it.
114
+ await this.flushing;
115
+ const kept = this.failure;
116
+ if (kept !== undefined) {
117
+ this.failure = undefined;
118
+ throw refuse(kept.error, record, this.target);
119
+ }
120
+ this.queue.push(record);
121
+ this.payloadBytes += bytes.byteLength;
122
+ if (this.queue.length >= this.maxRecords || this.payloadBytes >= this.maxBytes) {
123
+ await this.drain("send");
124
+ }
125
+ }
126
+ /** Flushes everything queued as one batch append, then reports the failure
127
+ * an earlier linger flush left, if any. A no-op on an empty queue. */
128
+ flush() {
129
+ return this.drain("caller");
130
+ }
131
+ // Drains run one at a time, so batches reach the log in queue order. A
132
+ // sender hears its own inline flush. The timer keeps a failure. The caller
133
+ // hears everything kept so far together with its own flush.
134
+ drain(trigger) {
135
+ const next = this.flushing.then(async () => {
136
+ const batch = this.queue;
137
+ this.queue = [];
138
+ this.payloadBytes = 0;
139
+ let sent;
140
+ if (batch.length > 0) {
141
+ try {
142
+ await this.sink(batch, this.partitionKey);
143
+ }
144
+ catch (error) {
145
+ sent = { error };
146
+ }
147
+ }
148
+ if (trigger === "send") {
149
+ if (sent !== undefined)
150
+ throw sent.error;
151
+ return;
152
+ }
153
+ if (trigger === "timer") {
154
+ if (sent !== undefined) {
155
+ this.failure =
156
+ this.failure === undefined
157
+ ? sent
158
+ : { error: mergeFailures(this.failure.error, sent.error) };
159
+ }
160
+ return;
161
+ }
162
+ const kept = this.failure;
163
+ this.failure = undefined;
164
+ if (kept !== undefined) {
165
+ throw sent === undefined ? kept.error : mergeFailures(kept.error, sent.error);
166
+ }
167
+ if (sent !== undefined)
168
+ throw sent.error;
169
+ });
170
+ this.flushing = next.catch(() => undefined);
171
+ return next;
172
+ }
173
+ /** Flushes, stops the linger timer, and reports a kept linger failure. */
174
+ async close() {
175
+ if (this.closed)
176
+ return;
177
+ this.closed = true;
178
+ clearInterval(this.timer);
179
+ await this.flush();
180
+ }
181
+ /** Delegates async disposal to `close()`. */
182
+ [Symbol.asyncDispose]() {
183
+ return this.close();
184
+ }
185
+ }
186
+ // One report for every batch that failed: the first cause, with the records
187
+ // of the later batch added. A later failure that carries no records gives way
188
+ // to the earlier one.
189
+ function mergeFailures(earlier, later) {
190
+ if (!(earlier instanceof PublishFailedError) || !(later instanceof PublishFailedError)) {
191
+ return earlier;
192
+ }
193
+ return new PublishFailedError(earlier.stream, earlier.topic, [...earlier.committed, ...later.committed], [...earlier.unconfirmed, ...later.unconfirmed], earlier.cause);
194
+ }
195
+ // A kept failure reported to a sender, with the sender's record added to the
196
+ // unconfirmed records because it was never queued. A kept failure that lists
197
+ // no records becomes the cause of a publish failure for this one record.
198
+ function refuse(failure, record, target) {
199
+ if (!(failure instanceof PublishFailedError)) {
200
+ return new PublishFailedError(target.stream, target.topic, [], [record], failure);
201
+ }
202
+ return new PublishFailedError(failure.stream, failure.topic, failure.committed, [...failure.unconfirmed, record], failure.cause);
203
+ }
204
+ function positive(value, name) {
205
+ if (!Number.isSafeInteger(value) || value < 0) {
206
+ throw new InvalidError(`${name} must be a non-negative safe integer`);
207
+ }
208
+ return value;
209
+ }
210
+ //# sourceMappingURL=batching.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batching.js","sourceRoot":"","sources":["../../src/stream/batching.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function encodeBsonDocument(value: unknown): Uint8Array;
2
+ export declare function decodeBsonDocument(payload: Uint8Array): Record<string, unknown>;
3
+ //# sourceMappingURL=bson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bson.d.ts","sourceRoot":"","sources":["../../src/stream/bson.ts"],"names":[],"mappings":"AAmBA,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAM7D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK/E"}