@laserdata/laser-sdk 0.0.1-rc.2 → 0.0.1-rc.22

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 (434) hide show
  1. package/README.md +5 -5
  2. package/dist/agent/agdx.d.ts +55 -0
  3. package/dist/agent/agdx.d.ts.map +1 -0
  4. package/dist/agent/agdx.js +447 -0
  5. package/dist/agent/agdx.js.map +1 -0
  6. package/dist/agent/assembler.d.ts +29 -0
  7. package/dist/agent/assembler.d.ts.map +1 -0
  8. package/dist/agent/assembler.js +69 -0
  9. package/dist/agent/assembler.js.map +1 -0
  10. package/dist/agent/builder.d.ts +114 -0
  11. package/dist/agent/builder.d.ts.map +1 -0
  12. package/dist/agent/builder.js +334 -0
  13. package/dist/agent/builder.js.map +1 -0
  14. package/dist/agent/context.d.ts +68 -0
  15. package/dist/agent/context.d.ts.map +1 -0
  16. package/dist/agent/context.js +212 -0
  17. package/dist/agent/context.js.map +1 -0
  18. package/dist/agent/contract.d.ts +70 -0
  19. package/dist/agent/contract.d.ts.map +1 -0
  20. package/dist/agent/contract.js +275 -0
  21. package/dist/agent/contract.js.map +1 -0
  22. package/dist/agent/registry.d.ts +76 -0
  23. package/dist/agent/registry.d.ts.map +1 -0
  24. package/dist/agent/registry.js +286 -0
  25. package/dist/agent/registry.js.map +1 -0
  26. package/dist/agent/reliable-consumer.d.ts +126 -0
  27. package/dist/agent/reliable-consumer.d.ts.map +1 -0
  28. package/dist/agent/reliable-consumer.js +551 -0
  29. package/dist/agent/reliable-consumer.js.map +1 -0
  30. package/dist/agent/replies.d.ts +28 -0
  31. package/dist/agent/replies.d.ts.map +1 -0
  32. package/dist/agent/replies.js +175 -0
  33. package/dist/agent/replies.js.map +1 -0
  34. package/dist/agent/router.d.ts +72 -0
  35. package/dist/agent/router.d.ts.map +1 -0
  36. package/dist/agent/router.js +172 -0
  37. package/dist/agent/router.js.map +1 -0
  38. package/dist/agent/scope.d.ts +16 -0
  39. package/dist/agent/scope.d.ts.map +1 -0
  40. package/dist/agent/scope.js +34 -0
  41. package/dist/agent/scope.js.map +1 -0
  42. package/dist/agent/workflow.d.ts +85 -0
  43. package/dist/agent/workflow.d.ts.map +1 -0
  44. package/dist/agent/workflow.js +416 -0
  45. package/dist/agent/workflow.js.map +1 -0
  46. package/dist/blob.d.ts +12 -0
  47. package/dist/blob.d.ts.map +1 -0
  48. package/dist/blob.js +34 -0
  49. package/dist/blob.js.map +1 -0
  50. package/dist/bridges/a2a.d.ts +89 -0
  51. package/dist/bridges/a2a.d.ts.map +1 -0
  52. package/dist/bridges/a2a.js +244 -0
  53. package/dist/bridges/a2a.js.map +1 -0
  54. package/dist/bridges/agui.d.ts +66 -0
  55. package/dist/bridges/agui.d.ts.map +1 -0
  56. package/dist/bridges/agui.js +335 -0
  57. package/dist/bridges/agui.js.map +1 -0
  58. package/dist/bridges/edge-auth.d.ts +16 -0
  59. package/dist/bridges/edge-auth.d.ts.map +1 -0
  60. package/dist/bridges/edge-auth.js +19 -0
  61. package/dist/bridges/edge-auth.js.map +1 -0
  62. package/dist/bridges/hops.d.ts +9 -0
  63. package/dist/bridges/hops.d.ts.map +1 -0
  64. package/dist/bridges/hops.js +16 -0
  65. package/dist/bridges/hops.js.map +1 -0
  66. package/dist/bridges/mcp.d.ts +79 -0
  67. package/dist/bridges/mcp.d.ts.map +1 -0
  68. package/dist/bridges/mcp.js +248 -0
  69. package/dist/bridges/mcp.js.map +1 -0
  70. package/dist/client/bytes.d.ts +3 -0
  71. package/dist/client/bytes.d.ts.map +1 -0
  72. package/dist/client/bytes.js +9 -0
  73. package/dist/client/bytes.js.map +1 -0
  74. package/dist/client/capabilities.d.ts +36 -0
  75. package/dist/client/capabilities.d.ts.map +1 -0
  76. package/dist/client/capabilities.js +91 -0
  77. package/dist/client/capabilities.js.map +1 -0
  78. package/dist/client/errors.d.ts +178 -0
  79. package/dist/client/errors.d.ts.map +1 -0
  80. package/dist/client/errors.js +192 -0
  81. package/dist/client/errors.js.map +1 -0
  82. package/dist/client/internals.d.ts +5 -0
  83. package/dist/client/internals.d.ts.map +1 -0
  84. package/dist/client/internals.js +5 -0
  85. package/dist/client/internals.js.map +1 -0
  86. package/dist/client/laser.d.ts +238 -0
  87. package/dist/client/laser.d.ts.map +1 -0
  88. package/dist/client/laser.js +831 -0
  89. package/dist/client/laser.js.map +1 -0
  90. package/dist/client/laserdata-ca.d.ts +2 -0
  91. package/dist/client/laserdata-ca.d.ts.map +1 -0
  92. package/dist/client/laserdata-ca.js +35 -0
  93. package/dist/client/laserdata-ca.js.map +1 -0
  94. package/dist/client/managed.d.ts +6 -0
  95. package/dist/client/managed.d.ts.map +1 -0
  96. package/dist/client/managed.js +19 -0
  97. package/dist/client/managed.js.map +1 -0
  98. package/dist/context-scope.d.ts +40 -0
  99. package/dist/context-scope.d.ts.map +1 -0
  100. package/dist/context-scope.js +73 -0
  101. package/dist/context-scope.js.map +1 -0
  102. package/dist/context.d.ts +64 -0
  103. package/dist/context.d.ts.map +1 -0
  104. package/dist/context.js +149 -0
  105. package/dist/context.js.map +1 -0
  106. package/dist/conversation-state.d.ts +24 -0
  107. package/dist/conversation-state.d.ts.map +1 -0
  108. package/dist/conversation-state.js +29 -0
  109. package/dist/conversation-state.js.map +1 -0
  110. package/dist/crash-context.d.ts +11 -0
  111. package/dist/crash-context.d.ts.map +1 -0
  112. package/dist/crash-context.js +62 -0
  113. package/dist/crash-context.js.map +1 -0
  114. package/dist/full.d.ts +3 -0
  115. package/dist/full.d.ts.map +1 -0
  116. package/dist/full.js +3 -0
  117. package/dist/full.js.map +1 -0
  118. package/dist/govern.d.ts +133 -0
  119. package/dist/govern.d.ts.map +1 -0
  120. package/dist/govern.js +347 -0
  121. package/dist/govern.js.map +1 -0
  122. package/dist/iggy/apache-iggy.d.ts +173 -0
  123. package/dist/iggy/apache-iggy.d.ts.map +1 -0
  124. package/dist/iggy/apache-iggy.js +634 -0
  125. package/dist/iggy/apache-iggy.js.map +1 -0
  126. package/dist/index.d.ts +121 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +64 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/intent.d.ts +75 -0
  131. package/dist/intent.d.ts.map +1 -0
  132. package/dist/intent.js +195 -0
  133. package/dist/intent.js.map +1 -0
  134. package/dist/managed/batch.d.ts +5 -0
  135. package/dist/managed/batch.d.ts.map +1 -0
  136. package/dist/managed/batch.js +32 -0
  137. package/dist/managed/batch.js.map +1 -0
  138. package/dist/managed/forks.d.ts +72 -0
  139. package/dist/managed/forks.d.ts.map +1 -0
  140. package/dist/managed/forks.js +188 -0
  141. package/dist/managed/forks.js.map +1 -0
  142. package/dist/managed/graph.d.ts +58 -0
  143. package/dist/managed/graph.d.ts.map +1 -0
  144. package/dist/managed/graph.js +176 -0
  145. package/dist/managed/graph.js.map +1 -0
  146. package/dist/managed/kv.d.ts +144 -0
  147. package/dist/managed/kv.d.ts.map +1 -0
  148. package/dist/managed/kv.js +502 -0
  149. package/dist/managed/kv.js.map +1 -0
  150. package/dist/managed/projections.d.ts +61 -0
  151. package/dist/managed/projections.d.ts.map +1 -0
  152. package/dist/managed/projections.js +191 -0
  153. package/dist/managed/projections.js.map +1 -0
  154. package/dist/managed/query.d.ts +72 -0
  155. package/dist/managed/query.d.ts.map +1 -0
  156. package/dist/managed/query.js +287 -0
  157. package/dist/managed/query.js.map +1 -0
  158. package/dist/managed/rbac.d.ts +16 -0
  159. package/dist/managed/rbac.d.ts.map +1 -0
  160. package/dist/managed/rbac.js +82 -0
  161. package/dist/managed/rbac.js.map +1 -0
  162. package/dist/managed/runs.d.ts +40 -0
  163. package/dist/managed/runs.d.ts.map +1 -0
  164. package/dist/managed/runs.js +112 -0
  165. package/dist/managed/runs.js.map +1 -0
  166. package/dist/managed/watch.d.ts +21 -0
  167. package/dist/managed/watch.d.ts.map +1 -0
  168. package/dist/managed/watch.js +73 -0
  169. package/dist/managed/watch.js.map +1 -0
  170. package/dist/memory/handle.d.ts +77 -0
  171. package/dist/memory/handle.d.ts.map +1 -0
  172. package/dist/memory/handle.js +234 -0
  173. package/dist/memory/handle.js.map +1 -0
  174. package/dist/memory/log-memory.d.ts +38 -0
  175. package/dist/memory/log-memory.d.ts.map +1 -0
  176. package/dist/memory/log-memory.js +309 -0
  177. package/dist/memory/log-memory.js.map +1 -0
  178. package/dist/memory/topic.d.ts +22 -0
  179. package/dist/memory/topic.d.ts.map +1 -0
  180. package/dist/memory/topic.js +56 -0
  181. package/dist/memory/topic.js.map +1 -0
  182. package/dist/memory/types.d.ts +108 -0
  183. package/dist/memory/types.d.ts.map +1 -0
  184. package/dist/memory/types.js +127 -0
  185. package/dist/memory/types.js.map +1 -0
  186. package/dist/memory/vector-memory.d.ts +20 -0
  187. package/dist/memory/vector-memory.d.ts.map +1 -0
  188. package/dist/memory/vector-memory.js +193 -0
  189. package/dist/memory/vector-memory.js.map +1 -0
  190. package/dist/memory.d.ts +7 -0
  191. package/dist/memory.d.ts.map +1 -0
  192. package/dist/memory.js +6 -0
  193. package/dist/memory.js.map +1 -0
  194. package/dist/observe.d.ts +10 -0
  195. package/dist/observe.d.ts.map +1 -0
  196. package/dist/observe.js +5 -0
  197. package/dist/observe.js.map +1 -0
  198. package/dist/opentelemetry.d.ts +22 -0
  199. package/dist/opentelemetry.d.ts.map +1 -0
  200. package/dist/opentelemetry.js +38 -0
  201. package/dist/opentelemetry.js.map +1 -0
  202. package/dist/provenance/agent-topic.d.ts +14 -0
  203. package/dist/provenance/agent-topic.d.ts.map +1 -0
  204. package/dist/provenance/agent-topic.js +13 -0
  205. package/dist/provenance/agent-topic.js.map +1 -0
  206. package/dist/provenance/provenance.d.ts +24 -0
  207. package/dist/provenance/provenance.d.ts.map +1 -0
  208. package/dist/provenance/provenance.js +186 -0
  209. package/dist/provenance/provenance.js.map +1 -0
  210. package/dist/provenance/session-policy.d.ts +4 -0
  211. package/dist/provenance/session-policy.d.ts.map +1 -0
  212. package/dist/provenance/session-policy.js +5 -0
  213. package/dist/provenance/session-policy.js.map +1 -0
  214. package/dist/runtime/async-once.d.ts +6 -0
  215. package/dist/runtime/async-once.d.ts.map +1 -0
  216. package/dist/runtime/async-once.js +19 -0
  217. package/dist/runtime/async-once.js.map +1 -0
  218. package/dist/runtime/clock.d.ts +14 -0
  219. package/dist/runtime/clock.d.ts.map +1 -0
  220. package/dist/runtime/clock.js +21 -0
  221. package/dist/runtime/clock.js.map +1 -0
  222. package/dist/runtime/mutex.d.ts +5 -0
  223. package/dist/runtime/mutex.d.ts.map +1 -0
  224. package/dist/runtime/mutex.js +23 -0
  225. package/dist/runtime/mutex.js.map +1 -0
  226. package/dist/runtime/ulid.d.ts +7 -0
  227. package/dist/runtime/ulid.d.ts.map +1 -0
  228. package/dist/runtime/ulid.js +17 -0
  229. package/dist/runtime/ulid.js.map +1 -0
  230. package/dist/schema-codecs.d.ts +16 -0
  231. package/dist/schema-codecs.d.ts.map +1 -0
  232. package/dist/schema-codecs.js +174 -0
  233. package/dist/schema-codecs.js.map +1 -0
  234. package/dist/signing.d.ts +63 -0
  235. package/dist/signing.d.ts.map +1 -0
  236. package/dist/signing.js +288 -0
  237. package/dist/signing.js.map +1 -0
  238. package/dist/snapshot.d.ts +24 -0
  239. package/dist/snapshot.d.ts.map +1 -0
  240. package/dist/snapshot.js +80 -0
  241. package/dist/snapshot.js.map +1 -0
  242. package/dist/state-store.d.ts +20 -0
  243. package/dist/state-store.d.ts.map +1 -0
  244. package/dist/state-store.js +70 -0
  245. package/dist/state-store.js.map +1 -0
  246. package/dist/stream/codecs.d.ts +9 -0
  247. package/dist/stream/codecs.d.ts.map +1 -0
  248. package/dist/stream/codecs.js +83 -0
  249. package/dist/stream/codecs.js.map +1 -0
  250. package/dist/stream/consumer.d.ts +50 -0
  251. package/dist/stream/consumer.d.ts.map +1 -0
  252. package/dist/stream/consumer.js +145 -0
  253. package/dist/stream/consumer.js.map +1 -0
  254. package/dist/stream/cursor.d.ts +26 -0
  255. package/dist/stream/cursor.d.ts.map +1 -0
  256. package/dist/stream/cursor.js +83 -0
  257. package/dist/stream/cursor.js.map +1 -0
  258. package/dist/stream/header-value.d.ts +18 -0
  259. package/dist/stream/header-value.d.ts.map +1 -0
  260. package/dist/stream/header-value.js +70 -0
  261. package/dist/stream/header-value.js.map +1 -0
  262. package/dist/stream/polling-strategy.d.ts +14 -0
  263. package/dist/stream/polling-strategy.d.ts.map +1 -0
  264. package/dist/stream/polling-strategy.js +2 -0
  265. package/dist/stream/polling-strategy.js.map +1 -0
  266. package/dist/stream/producer.d.ts +44 -0
  267. package/dist/stream/producer.d.ts.map +1 -0
  268. package/dist/stream/producer.js +125 -0
  269. package/dist/stream/producer.js.map +1 -0
  270. package/dist/stream/publish.d.ts +83 -0
  271. package/dist/stream/publish.d.ts.map +1 -0
  272. package/dist/stream/publish.js +287 -0
  273. package/dist/stream/publish.js.map +1 -0
  274. package/dist/stream/record.d.ts +29 -0
  275. package/dist/stream/record.d.ts.map +1 -0
  276. package/dist/stream/record.js +152 -0
  277. package/dist/stream/record.js.map +1 -0
  278. package/dist/stream/routing.d.ts +10 -0
  279. package/dist/stream/routing.d.ts.map +1 -0
  280. package/dist/stream/routing.js +2 -0
  281. package/dist/stream/routing.js.map +1 -0
  282. package/dist/stream/stream.d.ts +14 -0
  283. package/dist/stream/stream.d.ts.map +1 -0
  284. package/dist/stream/stream.js +26 -0
  285. package/dist/stream/stream.js.map +1 -0
  286. package/dist/stream/topic.d.ts +52 -0
  287. package/dist/stream/topic.d.ts.map +1 -0
  288. package/dist/stream/topic.js +181 -0
  289. package/dist/stream/topic.js.map +1 -0
  290. package/dist/stream/typed-topic.d.ts +59 -0
  291. package/dist/stream/typed-topic.d.ts.map +1 -0
  292. package/dist/stream/typed-topic.js +119 -0
  293. package/dist/stream/typed-topic.js.map +1 -0
  294. package/dist/swarm.d.ts +16 -0
  295. package/dist/swarm.d.ts.map +1 -0
  296. package/dist/swarm.js +40 -0
  297. package/dist/swarm.js.map +1 -0
  298. package/dist/testing.d.ts +16 -0
  299. package/dist/testing.d.ts.map +1 -0
  300. package/dist/testing.js +19 -0
  301. package/dist/testing.js.map +1 -0
  302. package/dist/types/ids.d.ts +48 -0
  303. package/dist/types/ids.d.ts.map +1 -0
  304. package/dist/types/ids.js +161 -0
  305. package/dist/types/ids.js.map +1 -0
  306. package/dist/wire/agent-record.d.ts +24 -0
  307. package/dist/wire/agent-record.d.ts.map +1 -0
  308. package/dist/wire/agent-record.js +99 -0
  309. package/dist/wire/agent-record.js.map +1 -0
  310. package/dist/wire/agent-workflow.d.ts +118 -0
  311. package/dist/wire/agent-workflow.d.ts.map +1 -0
  312. package/dist/wire/agent-workflow.js +290 -0
  313. package/dist/wire/agent-workflow.js.map +1 -0
  314. package/dist/wire/agent.d.ts +255 -0
  315. package/dist/wire/agent.d.ts.map +1 -0
  316. package/dist/wire/agent.js +792 -0
  317. package/dist/wire/agent.js.map +1 -0
  318. package/dist/wire/authz.d.ts +186 -0
  319. package/dist/wire/authz.d.ts.map +1 -0
  320. package/dist/wire/authz.js +545 -0
  321. package/dist/wire/authz.js.map +1 -0
  322. package/dist/wire/batch.d.ts +17 -0
  323. package/dist/wire/batch.d.ts.map +1 -0
  324. package/dist/wire/batch.js +41 -0
  325. package/dist/wire/batch.js.map +1 -0
  326. package/dist/wire/browse.d.ts +96 -0
  327. package/dist/wire/browse.d.ts.map +1 -0
  328. package/dist/wire/browse.js +201 -0
  329. package/dist/wire/browse.js.map +1 -0
  330. package/dist/wire/cbor.d.ts +35 -0
  331. package/dist/wire/cbor.d.ts.map +1 -0
  332. package/dist/wire/cbor.js +231 -0
  333. package/dist/wire/cbor.js.map +1 -0
  334. package/dist/wire/change.d.ts +12 -0
  335. package/dist/wire/change.d.ts.map +1 -0
  336. package/dist/wire/change.js +22 -0
  337. package/dist/wire/change.js.map +1 -0
  338. package/dist/wire/clients.d.ts +27 -0
  339. package/dist/wire/clients.d.ts.map +1 -0
  340. package/dist/wire/clients.js +64 -0
  341. package/dist/wire/clients.js.map +1 -0
  342. package/dist/wire/codes.d.ts +67 -0
  343. package/dist/wire/codes.d.ts.map +1 -0
  344. package/dist/wire/codes.js +67 -0
  345. package/dist/wire/codes.js.map +1 -0
  346. package/dist/wire/commands.d.ts +68 -0
  347. package/dist/wire/commands.d.ts.map +1 -0
  348. package/dist/wire/commands.js +140 -0
  349. package/dist/wire/commands.js.map +1 -0
  350. package/dist/wire/content.d.ts +17 -0
  351. package/dist/wire/content.d.ts.map +1 -0
  352. package/dist/wire/content.js +47 -0
  353. package/dist/wire/content.js.map +1 -0
  354. package/dist/wire/control.d.ts +170 -0
  355. package/dist/wire/control.d.ts.map +1 -0
  356. package/dist/wire/control.js +453 -0
  357. package/dist/wire/control.js.map +1 -0
  358. package/dist/wire/fork.d.ts +112 -0
  359. package/dist/wire/fork.d.ts.map +1 -0
  360. package/dist/wire/fork.js +280 -0
  361. package/dist/wire/fork.js.map +1 -0
  362. package/dist/wire/forward.d.ts +23 -0
  363. package/dist/wire/forward.d.ts.map +1 -0
  364. package/dist/wire/forward.js +72 -0
  365. package/dist/wire/forward.js.map +1 -0
  366. package/dist/wire/graph.d.ts +181 -0
  367. package/dist/wire/graph.d.ts.map +1 -0
  368. package/dist/wire/graph.js +554 -0
  369. package/dist/wire/graph.js.map +1 -0
  370. package/dist/wire/hashing.d.ts +2 -0
  371. package/dist/wire/hashing.d.ts.map +1 -0
  372. package/dist/wire/hashing.js +21 -0
  373. package/dist/wire/hashing.js.map +1 -0
  374. package/dist/wire/headers.d.ts +32 -0
  375. package/dist/wire/headers.d.ts.map +1 -0
  376. package/dist/wire/headers.js +32 -0
  377. package/dist/wire/headers.js.map +1 -0
  378. package/dist/wire/hello.d.ts +50 -0
  379. package/dist/wire/hello.d.ts.map +1 -0
  380. package/dist/wire/hello.js +122 -0
  381. package/dist/wire/hello.js.map +1 -0
  382. package/dist/wire/http.d.ts +95 -0
  383. package/dist/wire/http.d.ts.map +1 -0
  384. package/dist/wire/http.js +282 -0
  385. package/dist/wire/http.js.map +1 -0
  386. package/dist/wire/ids.d.ts +50 -0
  387. package/dist/wire/ids.d.ts.map +1 -0
  388. package/dist/wire/ids.js +198 -0
  389. package/dist/wire/ids.js.map +1 -0
  390. package/dist/wire/index.d.ts +32 -0
  391. package/dist/wire/index.d.ts.map +1 -0
  392. package/dist/wire/index.js +32 -0
  393. package/dist/wire/index.js.map +1 -0
  394. package/dist/wire/kv.d.ts +260 -0
  395. package/dist/wire/kv.d.ts.map +1 -0
  396. package/dist/wire/kv.js +650 -0
  397. package/dist/wire/kv.js.map +1 -0
  398. package/dist/wire/limits.d.ts +36 -0
  399. package/dist/wire/limits.d.ts.map +1 -0
  400. package/dist/wire/limits.js +36 -0
  401. package/dist/wire/limits.js.map +1 -0
  402. package/dist/wire/memory.d.ts +17 -0
  403. package/dist/wire/memory.d.ts.map +1 -0
  404. package/dist/wire/memory.js +65 -0
  405. package/dist/wire/memory.js.map +1 -0
  406. package/dist/wire/mutation.d.ts +10 -0
  407. package/dist/wire/mutation.d.ts.map +1 -0
  408. package/dist/wire/mutation.js +18 -0
  409. package/dist/wire/mutation.js.map +1 -0
  410. package/dist/wire/query.d.ts +210 -0
  411. package/dist/wire/query.d.ts.map +1 -0
  412. package/dist/wire/query.js +594 -0
  413. package/dist/wire/query.js.map +1 -0
  414. package/dist/wire/result.d.ts +25 -0
  415. package/dist/wire/result.d.ts.map +1 -0
  416. package/dist/wire/result.js +52 -0
  417. package/dist/wire/result.js.map +1 -0
  418. package/dist/wire/snapshot.d.ts +11 -0
  419. package/dist/wire/snapshot.d.ts.map +1 -0
  420. package/dist/wire/snapshot.js +50 -0
  421. package/dist/wire/snapshot.js.map +1 -0
  422. package/dist/wire/topics.d.ts +5 -0
  423. package/dist/wire/topics.d.ts.map +1 -0
  424. package/dist/wire/topics.js +5 -0
  425. package/dist/wire/topics.js.map +1 -0
  426. package/dist/wire/topology.d.ts +24 -0
  427. package/dist/wire/topology.d.ts.map +1 -0
  428. package/dist/wire/topology.js +56 -0
  429. package/dist/wire/topology.js.map +1 -0
  430. package/dist/wire/value.d.ts +21 -0
  431. package/dist/wire/value.d.ts.map +1 -0
  432. package/dist/wire/value.js +40 -0
  433. package/dist/wire/value.js.map +1 -0
  434. package/package.json +8 -6
@@ -0,0 +1,50 @@
1
+ import type { ConsumerTarget, IggyHeaderValue, LaserTransport } from "../iggy/apache-iggy.js";
2
+ import type { PollingStrategy } from "./polling-strategy.js";
3
+ export interface ConsumedMessage {
4
+ readonly payload: Uint8Array;
5
+ readonly partitionId: number;
6
+ readonly offset: bigint;
7
+ readonly timestampMicros?: bigint;
8
+ readonly headers: ReadonlyMap<string, IggyHeaderValue>;
9
+ }
10
+ export interface ConsumerOptions {
11
+ readonly batchLength?: number;
12
+ readonly autoCommit?: boolean;
13
+ readonly startFrom?: PollingStrategy;
14
+ readonly pollIntervalMs?: number;
15
+ }
16
+ /** Polls one partition or consumer group until shutdown. */
17
+ export declare class Consumer implements AsyncIterable<ConsumedMessage>, AsyncDisposable {
18
+ private readonly transport;
19
+ private readonly streamName;
20
+ private readonly topicName;
21
+ private readonly target;
22
+ private readonly batchLength;
23
+ private readonly autoCommit;
24
+ private readonly startFrom;
25
+ private readonly pollIntervalMs;
26
+ private buffer;
27
+ private readonly consumedOffsets;
28
+ private started;
29
+ private shuttingDown;
30
+ constructor(transport: LaserTransport, streamName: string, topicName: string, target: ConsumerTarget, options?: ConsumerOptions);
31
+ nextWithin(timeoutMs: number, options?: {
32
+ readonly signal?: AbortSignal;
33
+ }): Promise<ConsumedMessage | null>;
34
+ [Symbol.asyncIterator](): AsyncIterator<ConsumedMessage>;
35
+ stream(options?: {
36
+ readonly signal?: AbortSignal;
37
+ }): AsyncIterable<ConsumedMessage>;
38
+ commit(message: ConsumedMessage): Promise<void>;
39
+ lastConsumedOffset(partitionId: number): bigint | undefined;
40
+ storedOffset(partitionId: number): Promise<{
41
+ readonly storedOffset: bigint;
42
+ readonly currentOffset: bigint;
43
+ } | undefined>;
44
+ /** Ends iteration and leaves the consumer group when present. */
45
+ shutdown(): Promise<void>;
46
+ /** Delegates async disposal to `shutdown()`. */
47
+ [Symbol.asyncDispose](): Promise<void>;
48
+ private fillBuffer;
49
+ }
50
+ //# sourceMappingURL=consumer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../src/stream/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,cAAc,EAEf,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CACvD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAA;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC;AAwBD,4DAA4D;AAC5D,qBAAa,QAAS,YAAW,aAAa,CAAC,eAAe,CAAC,EAAE,eAAe;IAW5E,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAbzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAC5D,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAQ;IAE5B,YACmB,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EACvC,OAAO,GAAE,eAAoB,EAwB9B;IAEK,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAC9C,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAiBjC;IAEM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,eAAe,CAAC,CAE9D;IAEM,MAAM,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,aAAa,CAAC,eAAe,CAAC,CAe7F;IAEK,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpD;IAED,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1D;IAEK,YAAY,CAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAmBxF;IAED,iEAAiE;IAC3D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9B;IAED,gDAAgD;IAChD,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAErC;YAEa,UAAU;CAiBzB"}
@@ -0,0 +1,145 @@
1
+ import { CancelledError, InvalidError, UnsupportedError } from "../client/errors.js";
2
+ const DEFAULT_BATCH_LENGTH = 100;
3
+ const DEFAULT_POLL_INTERVAL_MS = 250;
4
+ const DEFAULT_START_FROM = { kind: "next" };
5
+ function delay(ms, signal) {
6
+ return new Promise((resolve, reject) => {
7
+ if (signal?.aborted) {
8
+ reject(new CancelledError("wait aborted", { cause: signal.reason }));
9
+ return;
10
+ }
11
+ const onAbort = () => {
12
+ clearTimeout(timer);
13
+ reject(new CancelledError("wait aborted", { cause: signal?.reason }));
14
+ };
15
+ const timer = setTimeout(() => {
16
+ signal?.removeEventListener("abort", onAbort);
17
+ resolve();
18
+ }, ms);
19
+ signal?.addEventListener("abort", onAbort, { once: true });
20
+ });
21
+ }
22
+ /** Polls one partition or consumer group until shutdown. */
23
+ export class Consumer {
24
+ transport;
25
+ streamName;
26
+ topicName;
27
+ target;
28
+ batchLength;
29
+ autoCommit;
30
+ startFrom;
31
+ pollIntervalMs;
32
+ buffer = [];
33
+ consumedOffsets = new Map();
34
+ started = false;
35
+ shuttingDown = false;
36
+ constructor(transport, streamName, topicName, target, options = {}) {
37
+ this.transport = transport;
38
+ this.streamName = streamName;
39
+ this.topicName = topicName;
40
+ this.target = target;
41
+ this.batchLength = options.batchLength ?? DEFAULT_BATCH_LENGTH;
42
+ this.autoCommit = options.autoCommit ?? true;
43
+ this.startFrom = options.startFrom ?? DEFAULT_START_FROM;
44
+ this.pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
45
+ if (this.target.kind === "single" &&
46
+ (!Number.isSafeInteger(this.target.partitionId) || this.target.partitionId < 0)) {
47
+ throw new InvalidError("consumer partition must be a non-negative safe integer");
48
+ }
49
+ if (!Number.isSafeInteger(this.batchLength) || this.batchLength < 1) {
50
+ throw new InvalidError("consumer batchLength must be a positive safe integer");
51
+ }
52
+ if (!Number.isFinite(this.pollIntervalMs) || this.pollIntervalMs < 0) {
53
+ throw new InvalidError("consumer pollIntervalMs must be a non-negative finite number");
54
+ }
55
+ if ((this.startFrom.kind === "offset" || this.startFrom.kind === "timestamp") &&
56
+ this.startFrom.value < 0n) {
57
+ throw new InvalidError("consumer start value must be non-negative");
58
+ }
59
+ }
60
+ async nextWithin(timeoutMs, options = {}) {
61
+ if (!Number.isFinite(timeoutMs) || timeoutMs < 0) {
62
+ throw new InvalidError("nextWithin timeout must be a non-negative finite number");
63
+ }
64
+ const deadline = Date.now() + timeoutMs;
65
+ for (;;) {
66
+ if (options.signal?.aborted === true) {
67
+ throw new CancelledError("nextWithin aborted", { cause: options.signal.reason });
68
+ }
69
+ const message = this.buffer.shift();
70
+ if (message !== undefined)
71
+ return message;
72
+ await this.fillBuffer(options.signal);
73
+ if (this.buffer.length > 0)
74
+ continue;
75
+ const remaining = deadline - Date.now();
76
+ if (remaining <= 0)
77
+ return null;
78
+ await delay(Math.min(this.pollIntervalMs, remaining), options.signal);
79
+ }
80
+ }
81
+ async *[Symbol.asyncIterator]() {
82
+ yield* this.stream();
83
+ }
84
+ async *stream(options = {}) {
85
+ while (!this.shuttingDown) {
86
+ if (options.signal?.aborted === true) {
87
+ throw new CancelledError("consumer stream aborted", { cause: options.signal.reason });
88
+ }
89
+ const message = this.buffer.shift();
90
+ if (message !== undefined) {
91
+ yield message;
92
+ continue;
93
+ }
94
+ await this.fillBuffer(options.signal);
95
+ if (this.buffer.length === 0) {
96
+ await delay(this.pollIntervalMs, options.signal);
97
+ }
98
+ }
99
+ }
100
+ async commit(message) {
101
+ await this.transport.storeOffset(this.streamName, this.topicName, this.target, message.partitionId, message.offset);
102
+ }
103
+ lastConsumedOffset(partitionId) {
104
+ return this.consumedOffsets.get(partitionId);
105
+ }
106
+ async storedOffset(partitionId) {
107
+ if (this.transport.getConsumerOffset === undefined) {
108
+ throw new UnsupportedError("the Apache Iggy client does not expose consumer offsets");
109
+ }
110
+ const offsetTarget = this.target.kind === "group"
111
+ ? { kind: "group", name: this.target.name }
112
+ : this.target.name === undefined
113
+ ? undefined
114
+ : { kind: "consumer", name: this.target.name };
115
+ if (offsetTarget === undefined) {
116
+ throw new InvalidError("storedOffset() requires a named standalone consumer");
117
+ }
118
+ return this.transport.getConsumerOffset(this.streamName, this.topicName, offsetTarget, partitionId);
119
+ }
120
+ /** Ends iteration and leaves the consumer group when present. */
121
+ async shutdown() {
122
+ if (this.shuttingDown)
123
+ return;
124
+ this.shuttingDown = true;
125
+ if (this.target.kind === "group") {
126
+ await this.transport.leaveConsumerGroup(this.streamName, this.topicName, this.target.name);
127
+ }
128
+ }
129
+ /** Delegates async disposal to `shutdown()`. */
130
+ [Symbol.asyncDispose]() {
131
+ return this.shutdown();
132
+ }
133
+ async fillBuffer(signal) {
134
+ if (signal?.aborted === true) {
135
+ throw new CancelledError("consumer poll aborted", { cause: signal.reason });
136
+ }
137
+ const strategy = this.started ? { kind: "next" } : this.startFrom;
138
+ this.started = true;
139
+ const polled = await this.transport.pollMessages(this.streamName, this.topicName, this.target, strategy, this.batchLength, this.autoCommit);
140
+ for (const message of polled)
141
+ this.consumedOffsets.set(message.partitionId, message.offset);
142
+ this.buffer.push(...polled);
143
+ }
144
+ }
145
+ //# sourceMappingURL=consumer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../src/stream/consumer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { LaserTransport } from "../iggy/apache-iggy.js";
2
+ import type { ConsumedMessage } from "./consumer.js";
3
+ export interface CursorOptions {
4
+ readonly batchSize?: number;
5
+ readonly readerName?: string;
6
+ }
7
+ export declare class Cursor {
8
+ private readonly transport;
9
+ private readonly streamName;
10
+ private readonly topicName;
11
+ private batchSize;
12
+ private readonly partitionOffsets;
13
+ private readonly readerName;
14
+ constructor(transport: LaserTransport, streamName: string, topicName: string, partitionIds: readonly number[], options?: CursorOptions);
15
+ get offsets(): ReadonlyMap<number, bigint>;
16
+ fromOffsets(offsets: ReadonlyMap<number, bigint>): this;
17
+ batch(size: number): this;
18
+ poll(options?: {
19
+ readonly signal?: AbortSignal;
20
+ }): Promise<readonly ConsumedMessage[]>;
21
+ stream(options?: {
22
+ readonly signal?: AbortSignal;
23
+ readonly pollIntervalMs?: number;
24
+ }): AsyncIterable<ConsumedMessage>;
25
+ }
26
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/stream/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGpD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAuBD,qBAAa,MAAM;IAMf,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAE/C,YACmB,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EAClC,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,OAAO,GAAE,aAAkB,EAK5B;IAED,IAAI,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzC;IAED,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAOtD;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAGxB;IAEK,IAAI,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAyB/F;IAEM,MAAM,CACX,OAAO,GAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO,GAChF,aAAa,CAAC,eAAe,CAAC,CAUhC;CACF"}
@@ -0,0 +1,83 @@
1
+ import { CancelledError } from "../client/errors.js";
2
+ const DEFAULT_BATCH_SIZE = 100;
3
+ const DEFAULT_POLL_INTERVAL_MS = 250;
4
+ function delay(ms, signal) {
5
+ return new Promise((resolve, reject) => {
6
+ if (signal?.aborted) {
7
+ reject(new CancelledError("wait aborted", { cause: signal.reason }));
8
+ return;
9
+ }
10
+ const onAbort = () => {
11
+ clearTimeout(timer);
12
+ reject(new CancelledError("wait aborted", { cause: signal?.reason }));
13
+ };
14
+ const timer = setTimeout(() => {
15
+ signal?.removeEventListener("abort", onAbort);
16
+ resolve();
17
+ }, ms);
18
+ signal?.addEventListener("abort", onAbort, { once: true });
19
+ });
20
+ }
21
+ export class Cursor {
22
+ transport;
23
+ streamName;
24
+ topicName;
25
+ batchSize;
26
+ partitionOffsets;
27
+ readerName;
28
+ constructor(transport, streamName, topicName, partitionIds, options = {}) {
29
+ this.transport = transport;
30
+ this.streamName = streamName;
31
+ this.topicName = topicName;
32
+ this.batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE;
33
+ this.readerName = options.readerName;
34
+ this.partitionOffsets = new Map(partitionIds.map((id) => [id, 0n]));
35
+ }
36
+ get offsets() {
37
+ return new Map(this.partitionOffsets);
38
+ }
39
+ fromOffsets(offsets) {
40
+ for (const [partitionId, offset] of offsets) {
41
+ if (this.partitionOffsets.has(partitionId)) {
42
+ this.partitionOffsets.set(partitionId, offset);
43
+ }
44
+ }
45
+ return this;
46
+ }
47
+ batch(size) {
48
+ this.batchSize = size;
49
+ return this;
50
+ }
51
+ async poll(options = {}) {
52
+ if (options.signal?.aborted === true) {
53
+ throw new CancelledError("poll aborted", { cause: options.signal.reason });
54
+ }
55
+ const results = [];
56
+ for (const [partitionId, offset] of this.partitionOffsets) {
57
+ const strategy = { kind: "offset", value: offset };
58
+ const polled = await this.transport.pollMessages(this.streamName, this.topicName, {
59
+ kind: "single",
60
+ partitionId,
61
+ ...(this.readerName !== undefined ? { name: this.readerName } : {})
62
+ }, strategy, this.batchSize, false);
63
+ for (const message of polled) {
64
+ results.push(message);
65
+ this.partitionOffsets.set(partitionId, message.offset + 1n);
66
+ }
67
+ }
68
+ return results;
69
+ }
70
+ async *stream(options = {}) {
71
+ const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
72
+ for (;;) {
73
+ const batch = await this.poll(options.signal === undefined ? {} : { signal: options.signal });
74
+ if (batch.length === 0) {
75
+ await delay(pollIntervalMs, options.signal);
76
+ continue;
77
+ }
78
+ for (const message of batch)
79
+ yield message;
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/stream/cursor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { IggyHeaderValue } from "../iggy/apache-iggy.js";
2
+ export declare const HeaderValue: {
3
+ readonly string: (value: string) => IggyHeaderValue;
4
+ readonly bool: (value: boolean) => IggyHeaderValue;
5
+ readonly int8: (value: number) => IggyHeaderValue;
6
+ readonly int16: (value: number) => IggyHeaderValue;
7
+ readonly int32: (value: number) => IggyHeaderValue;
8
+ readonly int64: (value: bigint) => IggyHeaderValue;
9
+ readonly int128: (value: Uint8Array) => IggyHeaderValue;
10
+ readonly uint8: (value: number) => IggyHeaderValue;
11
+ readonly uint16: (value: number) => IggyHeaderValue;
12
+ readonly uint32: (value: number) => IggyHeaderValue;
13
+ readonly uint64: (value: bigint) => IggyHeaderValue;
14
+ readonly uint128: (value: Uint8Array) => IggyHeaderValue;
15
+ readonly float: (value: number) => IggyHeaderValue;
16
+ readonly double: (value: number) => IggyHeaderValue;
17
+ };
18
+ //# sourceMappingURL=header-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-value.d.ts","sourceRoot":"","sources":["../../src/stream/header-value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AA2B7D,eAAO,MAAM,WAAW;aACtB,MAAM,UAAU,MAAM,KAAG,eAAe;aACxC,IAAI,UAAU,OAAO,KAAG,eAAe;aACvC,IAAI,UAAU,MAAM,KAAG,eAAe;aAItC,KAAK,UAAU,MAAM,KAAG,eAAe;aAIvC,KAAK,UAAU,MAAM,KAAG,eAAe;aAIvC,KAAK,UAAU,MAAM,KAAG,eAAe;aAIvC,MAAM,UAAU,UAAU,KAAG,eAAe;aAI5C,KAAK,UAAU,MAAM,KAAG,eAAe;aAIvC,MAAM,UAAU,MAAM,KAAG,eAAe;aAIxC,MAAM,UAAU,MAAM,KAAG,eAAe;aAIxC,MAAM,UAAU,MAAM,KAAG,eAAe;aAIxC,OAAO,UAAU,UAAU,KAAG,eAAe;aAI7C,KAAK,UAAU,MAAM,KAAG,eAAe;aACvC,MAAM,UAAU,MAAM,KAAG,eAAe;CAChC,CAAA"}
@@ -0,0 +1,70 @@
1
+ import { InvalidError } from "../client/errors.js";
2
+ function integer(name, value, minimum, maximum) {
3
+ if (!Number.isSafeInteger(value) || value < minimum || value > maximum) {
4
+ throw new InvalidError(`${name} header value is outside ${String(minimum)}..${String(maximum)}`);
5
+ }
6
+ return value;
7
+ }
8
+ function bigint(name, value, minimum, maximum) {
9
+ if (value < minimum || value > maximum) {
10
+ throw new InvalidError(`${name} header value is outside its integer range`);
11
+ }
12
+ return value;
13
+ }
14
+ function integer128(name, value) {
15
+ if (value.byteLength !== 16)
16
+ throw new InvalidError(`${name} header value must be 16 bytes`);
17
+ return value.slice();
18
+ }
19
+ function floating(name, value) {
20
+ if (!Number.isFinite(value))
21
+ throw new InvalidError(`${name} header value must be finite`);
22
+ return value;
23
+ }
24
+ export const HeaderValue = {
25
+ string: (value) => ({ kind: "string", value }),
26
+ bool: (value) => ({ kind: "bool", value }),
27
+ int8: (value) => ({
28
+ kind: "int8",
29
+ value: integer("int8", value, -128, 127)
30
+ }),
31
+ int16: (value) => ({
32
+ kind: "int16",
33
+ value: integer("int16", value, -32_768, 32_767)
34
+ }),
35
+ int32: (value) => ({
36
+ kind: "int32",
37
+ value: integer("int32", value, -2_147_483_648, 2_147_483_647)
38
+ }),
39
+ int64: (value) => ({
40
+ kind: "int64",
41
+ value: bigint("int64", value, -(1n << 63n), (1n << 63n) - 1n)
42
+ }),
43
+ int128: (value) => ({
44
+ kind: "int128",
45
+ value: integer128("int128", value)
46
+ }),
47
+ uint8: (value) => ({
48
+ kind: "uint8",
49
+ value: integer("uint8", value, 0, 255)
50
+ }),
51
+ uint16: (value) => ({
52
+ kind: "uint16",
53
+ value: integer("uint16", value, 0, 65_535)
54
+ }),
55
+ uint32: (value) => ({
56
+ kind: "uint32",
57
+ value: integer("uint32", value, 0, 4_294_967_295)
58
+ }),
59
+ uint64: (value) => ({
60
+ kind: "uint64",
61
+ value: bigint("uint64", value, 0n, (1n << 64n) - 1n)
62
+ }),
63
+ uint128: (value) => ({
64
+ kind: "uint128",
65
+ value: integer128("uint128", value)
66
+ }),
67
+ float: (value) => ({ kind: "float", value: floating("float", value) }),
68
+ double: (value) => ({ kind: "double", value: floating("double", value) })
69
+ };
70
+ //# sourceMappingURL=header-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-value.js","sourceRoot":"","sources":["../../src/stream/header-value.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type PollingStrategy = {
2
+ readonly kind: "first";
3
+ } | {
4
+ readonly kind: "last";
5
+ } | {
6
+ readonly kind: "next";
7
+ } | {
8
+ readonly kind: "offset";
9
+ readonly value: bigint;
10
+ } | {
11
+ readonly kind: "timestamp";
12
+ readonly value: bigint;
13
+ };
14
+ //# sourceMappingURL=polling-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polling-strategy.d.ts","sourceRoot":"","sources":["../../src/stream/polling-strategy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=polling-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polling-strategy.js","sourceRoot":"","sources":["../../src/stream/polling-strategy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ import { type BytesLike } from "../client/bytes.js";
2
+ import type { IggyHeaderValue, LaserTransport } from "../iggy/apache-iggy.js";
3
+ import type { Routing } from "./routing.js";
4
+ export interface ProducerOptions {
5
+ readonly routing?: Routing;
6
+ readonly retries?: number;
7
+ readonly retryIntervalMs?: number;
8
+ }
9
+ export interface ProducerSendOptions {
10
+ readonly key?: Uint8Array;
11
+ readonly partition?: number;
12
+ readonly headers?: ReadonlyMap<string, IggyHeaderValue> | Readonly<Record<string, IggyHeaderValue>>;
13
+ }
14
+ export interface ProducerMessage {
15
+ readonly payload: BytesLike;
16
+ readonly headers?: ReadonlyMap<string, IggyHeaderValue> | Readonly<Record<string, IggyHeaderValue>>;
17
+ }
18
+ /** Publishes directly with bounded retries and explicit routing. */
19
+ export declare class Producer implements AsyncDisposable {
20
+ private readonly transport;
21
+ private readonly streamName;
22
+ private readonly topicName;
23
+ private readonly routing;
24
+ private readonly retries;
25
+ private readonly retryIntervalMs;
26
+ private closed;
27
+ constructor(transport: LaserTransport, streamName: string, topicName: string, options?: ProducerOptions);
28
+ send(payload: BytesLike, options?: ProducerSendOptions): Promise<void>;
29
+ sendMessage(message: ProducerMessage, routing?: Routing): Promise<void>;
30
+ sendWithRouting(message: ProducerMessage, routing: Routing): Promise<void>;
31
+ sendKeyed(message: ProducerMessage, key: BytesLike): Promise<void>;
32
+ sendToPartition(message: ProducerMessage, partition: number): Promise<void>;
33
+ sendBatch(messages: readonly (BytesLike | ProducerMessage)[], options?: ProducerSendOptions): Promise<number>;
34
+ sendBatchWithRouting(messages: readonly ProducerMessage[], routing?: Routing): Promise<number>;
35
+ private sendLoweredBatch;
36
+ flush(): Promise<void>;
37
+ /** Rejects future sends. Safe to call more than once. */
38
+ shutdown(): Promise<void>;
39
+ /** Delegates async disposal to `shutdown()`. */
40
+ [Symbol.asyncDispose](): Promise<void>;
41
+ private throwIfClosed;
42
+ private sendWithRetry;
43
+ }
44
+ //# sourceMappingURL=producer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producer.d.ts","sourceRoot":"","sources":["../../src/stream/producer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,oBAAoB,CAAA;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAsB,MAAM,wBAAwB,CAAA;AACjG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,OAAO,CAAC,EACf,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAA;CACnF;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;IAC3B,QAAQ,CAAC,OAAO,CAAC,EACf,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAA;CACnF;AA2BD,oEAAoE;AACpE,qBAAa,QAAS,YAAW,eAAe;IAO5C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,MAAM,CAAQ;IAEtB,YACmB,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EAClC,OAAO,GAAE,eAAoB,EAiB9B;IAEK,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/E;IAEK,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,GAAE,OAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1F;IAEK,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/E;IAEK,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvE;IAEK,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhF;IAEK,SAAS,CACb,QAAQ,EAAE,SAAS,CAAC,SAAS,GAAG,eAAe,CAAC,EAAE,EAClD,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC,CAOjB;IAEK,oBAAoB,CACxB,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,OAAO,GAAE,OAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAEjB;YAEa,gBAAgB;IAU9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAIrB;IAED,yDAAyD;IACzD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAGxB;IAED,gDAAgD;IAChD,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAErC;IAED,OAAO,CAAC,aAAa;YAIP,aAAa;CAwB5B"}
@@ -0,0 +1,125 @@
1
+ import { ownedBytes } from "../client/bytes.js";
2
+ import { InvalidError, TransportError } from "../client/errors.js";
3
+ const DEFAULT_RETRIES = 3;
4
+ const DEFAULT_RETRY_INTERVAL_MS = 1_000;
5
+ function headersMap(headers) {
6
+ if (headers === undefined)
7
+ return new Map();
8
+ return headers instanceof Map ? new Map(headers) : new Map(Object.entries(headers));
9
+ }
10
+ function optionRouting(options, fallback) {
11
+ if (options.key !== undefined && options.partition !== undefined) {
12
+ throw new InvalidError("send() accepts a routing key or an explicit partition, not both");
13
+ }
14
+ if (options.partition !== undefined)
15
+ return { kind: "partition", partition: options.partition };
16
+ if (options.key !== undefined)
17
+ return { kind: "key", key: options.key.slice() };
18
+ return fallback;
19
+ }
20
+ function lowerMessage(message) {
21
+ return { payload: ownedBytes(message.payload), headers: headersMap(message.headers) };
22
+ }
23
+ function isProducerMessage(value) {
24
+ return "payload" in value;
25
+ }
26
+ /** Publishes directly with bounded retries and explicit routing. */
27
+ export class Producer {
28
+ transport;
29
+ streamName;
30
+ topicName;
31
+ routing;
32
+ retries;
33
+ retryIntervalMs;
34
+ closed = false;
35
+ constructor(transport, streamName, topicName, options = {}) {
36
+ this.transport = transport;
37
+ this.streamName = streamName;
38
+ this.topicName = topicName;
39
+ this.routing =
40
+ options.routing?.kind === "key"
41
+ ? { kind: "key", key: options.routing.key.slice() }
42
+ : (options.routing ?? { kind: "balanced" });
43
+ this.retries = options.retries ?? DEFAULT_RETRIES;
44
+ this.retryIntervalMs = options.retryIntervalMs ?? DEFAULT_RETRY_INTERVAL_MS;
45
+ if (!Number.isSafeInteger(this.retries) || this.retries < 0) {
46
+ throw new InvalidError("producer retries must be a non-negative safe integer");
47
+ }
48
+ if (!Number.isFinite(this.retryIntervalMs) || this.retryIntervalMs < 0) {
49
+ throw new InvalidError("producer retryIntervalMs must be a non-negative finite number");
50
+ }
51
+ if (this.routing.kind === "partition" && this.routing.partition < 0) {
52
+ throw new InvalidError("producer partition must be non-negative");
53
+ }
54
+ }
55
+ async send(payload, options = {}) {
56
+ await this.sendMessage({ payload, ...(options.headers !== undefined ? { headers: options.headers } : {}) }, optionRouting(options, this.routing));
57
+ }
58
+ async sendMessage(message, routing = this.routing) {
59
+ this.throwIfClosed("sendMessage");
60
+ await this.sendWithRetry([lowerMessage(message)], routing);
61
+ }
62
+ async sendWithRouting(message, routing) {
63
+ await this.sendMessage(message, routing);
64
+ }
65
+ async sendKeyed(message, key) {
66
+ await this.sendMessage(message, { kind: "key", key: ownedBytes(key) });
67
+ }
68
+ async sendToPartition(message, partition) {
69
+ if (!Number.isSafeInteger(partition) || partition < 0) {
70
+ throw new InvalidError("partition must be a non-negative safe integer");
71
+ }
72
+ await this.sendMessage(message, { kind: "partition", partition });
73
+ }
74
+ async sendBatch(messages, options = {}) {
75
+ const lowered = messages.map((message) => isProducerMessage(message)
76
+ ? lowerMessage(message)
77
+ : { payload: ownedBytes(message), headers: headersMap(options.headers) });
78
+ return this.sendLoweredBatch(lowered, optionRouting(options, this.routing));
79
+ }
80
+ async sendBatchWithRouting(messages, routing = this.routing) {
81
+ return this.sendLoweredBatch(messages.map(lowerMessage), routing);
82
+ }
83
+ async sendLoweredBatch(messages, routing) {
84
+ this.throwIfClosed("sendBatch");
85
+ if (messages.length === 0)
86
+ return 0;
87
+ await this.sendWithRetry(messages, routing);
88
+ return messages.length;
89
+ }
90
+ flush() {
91
+ return this.closed
92
+ ? Promise.reject(new InvalidError("flush() called after shutdown()"))
93
+ : Promise.resolve();
94
+ }
95
+ /** Rejects future sends. Safe to call more than once. */
96
+ shutdown() {
97
+ this.closed = true;
98
+ return Promise.resolve();
99
+ }
100
+ /** Delegates async disposal to `shutdown()`. */
101
+ [Symbol.asyncDispose]() {
102
+ return this.shutdown();
103
+ }
104
+ throwIfClosed(operation) {
105
+ if (this.closed)
106
+ throw new InvalidError(`${operation}() called after shutdown()`);
107
+ }
108
+ async sendWithRetry(messages, routing) {
109
+ for (let attempt = 0;; attempt += 1) {
110
+ try {
111
+ await this.transport.sendMessagesWithHeaders(this.streamName, this.topicName, messages, routing.kind === "key" ? routing.key : undefined, routing.kind === "partition" ? routing.partition : undefined);
112
+ return;
113
+ }
114
+ catch (error) {
115
+ if (!(error instanceof TransportError) || !error.retryable || attempt >= this.retries) {
116
+ throw error;
117
+ }
118
+ if (this.retryIntervalMs > 0) {
119
+ await new Promise((resolve) => setTimeout(resolve, this.retryIntervalMs));
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+ //# sourceMappingURL=producer.js.map