cantonjs 0.0.1

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 (374) hide show
  1. package/LICENSE +201 -0
  2. package/dist/cjs/admin/index.d.ts +5 -0
  3. package/dist/cjs/admin/index.d.ts.map +1 -0
  4. package/dist/cjs/admin/index.js +6 -0
  5. package/dist/cjs/admin/index.js.map +1 -0
  6. package/dist/cjs/chains/definitions.d.ts +20 -0
  7. package/dist/cjs/chains/definitions.d.ts.map +1 -0
  8. package/dist/cjs/chains/definitions.js +33 -0
  9. package/dist/cjs/chains/definitions.js.map +1 -0
  10. package/dist/cjs/chains/index.d.ts +2 -0
  11. package/dist/cjs/chains/index.d.ts.map +1 -0
  12. package/dist/cjs/chains/index.js +9 -0
  13. package/dist/cjs/chains/index.js.map +1 -0
  14. package/dist/cjs/clients/createAdminClient.d.ts +73 -0
  15. package/dist/cjs/clients/createAdminClient.d.ts.map +1 -0
  16. package/dist/cjs/clients/createAdminClient.js +205 -0
  17. package/dist/cjs/clients/createAdminClient.js.map +1 -0
  18. package/dist/cjs/clients/createLedgerClient.d.ts +83 -0
  19. package/dist/cjs/clients/createLedgerClient.d.ts.map +1 -0
  20. package/dist/cjs/clients/createLedgerClient.js +240 -0
  21. package/dist/cjs/clients/createLedgerClient.js.map +1 -0
  22. package/dist/cjs/clients/createTestClient.d.ts +27 -0
  23. package/dist/cjs/clients/createTestClient.d.ts.map +1 -0
  24. package/dist/cjs/clients/createTestClient.js +46 -0
  25. package/dist/cjs/clients/createTestClient.js.map +1 -0
  26. package/dist/cjs/clients/index.d.ts +4 -0
  27. package/dist/cjs/clients/index.d.ts.map +1 -0
  28. package/dist/cjs/clients/index.js +10 -0
  29. package/dist/cjs/clients/index.js.map +1 -0
  30. package/dist/cjs/codegen/index.d.ts +2 -0
  31. package/dist/cjs/codegen/index.d.ts.map +1 -0
  32. package/dist/cjs/codegen/index.js +3 -0
  33. package/dist/cjs/codegen/index.js.map +1 -0
  34. package/dist/cjs/codegen/types.d.ts +38 -0
  35. package/dist/cjs/codegen/types.d.ts.map +1 -0
  36. package/dist/cjs/codegen/types.js +9 -0
  37. package/dist/cjs/codegen/types.js.map +1 -0
  38. package/dist/cjs/errors/auth.d.ts +13 -0
  39. package/dist/cjs/errors/auth.d.ts.map +1 -0
  40. package/dist/cjs/errors/auth.js +36 -0
  41. package/dist/cjs/errors/auth.js.map +1 -0
  42. package/dist/cjs/errors/base.d.ts +35 -0
  43. package/dist/cjs/errors/base.d.ts.map +1 -0
  44. package/dist/cjs/errors/base.js +71 -0
  45. package/dist/cjs/errors/base.js.map +1 -0
  46. package/dist/cjs/errors/index.d.ts +6 -0
  47. package/dist/cjs/errors/index.d.ts.map +1 -0
  48. package/dist/cjs/errors/index.js +22 -0
  49. package/dist/cjs/errors/index.js.map +1 -0
  50. package/dist/cjs/errors/ledger.d.ts +22 -0
  51. package/dist/cjs/errors/ledger.d.ts.map +1 -0
  52. package/dist/cjs/errors/ledger.js +55 -0
  53. package/dist/cjs/errors/ledger.js.map +1 -0
  54. package/dist/cjs/errors/streaming.d.ts +20 -0
  55. package/dist/cjs/errors/streaming.d.ts.map +1 -0
  56. package/dist/cjs/errors/streaming.js +54 -0
  57. package/dist/cjs/errors/streaming.js.map +1 -0
  58. package/dist/cjs/errors/transport.d.ts +31 -0
  59. package/dist/cjs/errors/transport.d.ts.map +1 -0
  60. package/dist/cjs/errors/transport.js +63 -0
  61. package/dist/cjs/errors/transport.js.map +1 -0
  62. package/dist/cjs/index.d.ts +25 -0
  63. package/dist/cjs/index.d.ts.map +1 -0
  64. package/dist/cjs/index.js +48 -0
  65. package/dist/cjs/index.js.map +1 -0
  66. package/dist/cjs/ledger/index.d.ts +5 -0
  67. package/dist/cjs/ledger/index.d.ts.map +1 -0
  68. package/dist/cjs/ledger/index.js +6 -0
  69. package/dist/cjs/ledger/index.js.map +1 -0
  70. package/dist/cjs/package.json +1 -0
  71. package/dist/cjs/streaming/createStream.d.ts +55 -0
  72. package/dist/cjs/streaming/createStream.d.ts.map +1 -0
  73. package/dist/cjs/streaming/createStream.js +270 -0
  74. package/dist/cjs/streaming/createStream.js.map +1 -0
  75. package/dist/cjs/streaming/index.d.ts +8 -0
  76. package/dist/cjs/streaming/index.d.ts.map +1 -0
  77. package/dist/cjs/streaming/index.js +16 -0
  78. package/dist/cjs/streaming/index.js.map +1 -0
  79. package/dist/cjs/streaming/streamCompletions.d.ts +25 -0
  80. package/dist/cjs/streaming/streamCompletions.d.ts.map +1 -0
  81. package/dist/cjs/streaming/streamCompletions.js +47 -0
  82. package/dist/cjs/streaming/streamCompletions.js.map +1 -0
  83. package/dist/cjs/streaming/streamContracts.d.ts +42 -0
  84. package/dist/cjs/streaming/streamContracts.d.ts.map +1 -0
  85. package/dist/cjs/streaming/streamContracts.js +56 -0
  86. package/dist/cjs/streaming/streamContracts.js.map +1 -0
  87. package/dist/cjs/streaming/streamUpdates.d.ts +38 -0
  88. package/dist/cjs/streaming/streamUpdates.d.ts.map +1 -0
  89. package/dist/cjs/streaming/streamUpdates.js +66 -0
  90. package/dist/cjs/streaming/streamUpdates.js.map +1 -0
  91. package/dist/cjs/streaming/types.d.ts +111 -0
  92. package/dist/cjs/streaming/types.d.ts.map +1 -0
  93. package/dist/cjs/streaming/types.js +20 -0
  94. package/dist/cjs/streaming/types.js.map +1 -0
  95. package/dist/cjs/testing/index.d.ts +4 -0
  96. package/dist/cjs/testing/index.d.ts.map +1 -0
  97. package/dist/cjs/testing/index.js +11 -0
  98. package/dist/cjs/testing/index.js.map +1 -0
  99. package/dist/cjs/testing/mockTransport.d.ts +80 -0
  100. package/dist/cjs/testing/mockTransport.d.ts.map +1 -0
  101. package/dist/cjs/testing/mockTransport.js +97 -0
  102. package/dist/cjs/testing/mockTransport.js.map +1 -0
  103. package/dist/cjs/testing/setupSandbox.d.ts +62 -0
  104. package/dist/cjs/testing/setupSandbox.d.ts.map +1 -0
  105. package/dist/cjs/testing/setupSandbox.js +109 -0
  106. package/dist/cjs/testing/setupSandbox.js.map +1 -0
  107. package/dist/cjs/transport/fallback.d.ts +21 -0
  108. package/dist/cjs/transport/fallback.d.ts.map +1 -0
  109. package/dist/cjs/transport/fallback.js +48 -0
  110. package/dist/cjs/transport/fallback.js.map +1 -0
  111. package/dist/cjs/transport/grpc.d.ts +51 -0
  112. package/dist/cjs/transport/grpc.d.ts.map +1 -0
  113. package/dist/cjs/transport/grpc.js +90 -0
  114. package/dist/cjs/transport/grpc.js.map +1 -0
  115. package/dist/cjs/transport/index.d.ts +3 -0
  116. package/dist/cjs/transport/index.d.ts.map +1 -0
  117. package/dist/cjs/transport/index.js +6 -0
  118. package/dist/cjs/transport/index.js.map +1 -0
  119. package/dist/cjs/transport/json-api.d.ts +9 -0
  120. package/dist/cjs/transport/json-api.d.ts.map +1 -0
  121. package/dist/cjs/transport/json-api.js +69 -0
  122. package/dist/cjs/transport/json-api.js.map +1 -0
  123. package/dist/cjs/transport/types.d.ts +36 -0
  124. package/dist/cjs/transport/types.d.ts.map +1 -0
  125. package/dist/cjs/transport/types.js +10 -0
  126. package/dist/cjs/transport/types.js.map +1 -0
  127. package/dist/cjs/types/command.d.ts +127 -0
  128. package/dist/cjs/types/command.d.ts.map +1 -0
  129. package/dist/cjs/types/command.js +12 -0
  130. package/dist/cjs/types/command.js.map +1 -0
  131. package/dist/cjs/types/contract.d.ts +104 -0
  132. package/dist/cjs/types/contract.d.ts.map +1 -0
  133. package/dist/cjs/types/contract.js +12 -0
  134. package/dist/cjs/types/contract.js.map +1 -0
  135. package/dist/cjs/types/idp.d.ts +28 -0
  136. package/dist/cjs/types/idp.d.ts.map +1 -0
  137. package/dist/cjs/types/idp.js +9 -0
  138. package/dist/cjs/types/idp.js.map +1 -0
  139. package/dist/cjs/types/index.d.ts +10 -0
  140. package/dist/cjs/types/index.d.ts.map +1 -0
  141. package/dist/cjs/types/index.js +3 -0
  142. package/dist/cjs/types/index.js.map +1 -0
  143. package/dist/cjs/types/interactive.d.ts +47 -0
  144. package/dist/cjs/types/interactive.d.ts.map +1 -0
  145. package/dist/cjs/types/interactive.js +13 -0
  146. package/dist/cjs/types/interactive.js.map +1 -0
  147. package/dist/cjs/types/package.d.ts +15 -0
  148. package/dist/cjs/types/package.d.ts.map +1 -0
  149. package/dist/cjs/types/package.js +8 -0
  150. package/dist/cjs/types/package.js.map +1 -0
  151. package/dist/cjs/types/party.d.ts +32 -0
  152. package/dist/cjs/types/party.d.ts.map +1 -0
  153. package/dist/cjs/types/party.js +10 -0
  154. package/dist/cjs/types/party.js.map +1 -0
  155. package/dist/cjs/types/reassignment.d.ts +65 -0
  156. package/dist/cjs/types/reassignment.d.ts.map +1 -0
  157. package/dist/cjs/types/reassignment.js +10 -0
  158. package/dist/cjs/types/reassignment.js.map +1 -0
  159. package/dist/cjs/types/transaction.d.ts +59 -0
  160. package/dist/cjs/types/transaction.d.ts.map +1 -0
  161. package/dist/cjs/types/transaction.js +13 -0
  162. package/dist/cjs/types/transaction.js.map +1 -0
  163. package/dist/cjs/types/user.d.ts +64 -0
  164. package/dist/cjs/types/user.d.ts.map +1 -0
  165. package/dist/cjs/types/user.js +12 -0
  166. package/dist/cjs/types/user.js.map +1 -0
  167. package/dist/esm/admin/index.d.ts +5 -0
  168. package/dist/esm/admin/index.d.ts.map +1 -0
  169. package/dist/esm/admin/index.js +2 -0
  170. package/dist/esm/admin/index.js.map +1 -0
  171. package/dist/esm/chains/definitions.d.ts +20 -0
  172. package/dist/esm/chains/definitions.d.ts.map +1 -0
  173. package/dist/esm/chains/definitions.js +30 -0
  174. package/dist/esm/chains/definitions.js.map +1 -0
  175. package/dist/esm/chains/index.d.ts +2 -0
  176. package/dist/esm/chains/index.d.ts.map +1 -0
  177. package/dist/esm/chains/index.js +2 -0
  178. package/dist/esm/chains/index.js.map +1 -0
  179. package/dist/esm/clients/createAdminClient.d.ts +73 -0
  180. package/dist/esm/clients/createAdminClient.d.ts.map +1 -0
  181. package/dist/esm/clients/createAdminClient.js +202 -0
  182. package/dist/esm/clients/createAdminClient.js.map +1 -0
  183. package/dist/esm/clients/createLedgerClient.d.ts +83 -0
  184. package/dist/esm/clients/createLedgerClient.d.ts.map +1 -0
  185. package/dist/esm/clients/createLedgerClient.js +237 -0
  186. package/dist/esm/clients/createLedgerClient.js.map +1 -0
  187. package/dist/esm/clients/createTestClient.d.ts +27 -0
  188. package/dist/esm/clients/createTestClient.d.ts.map +1 -0
  189. package/dist/esm/clients/createTestClient.js +43 -0
  190. package/dist/esm/clients/createTestClient.js.map +1 -0
  191. package/dist/esm/clients/index.d.ts +4 -0
  192. package/dist/esm/clients/index.d.ts.map +1 -0
  193. package/dist/esm/clients/index.js +4 -0
  194. package/dist/esm/clients/index.js.map +1 -0
  195. package/dist/esm/codegen/index.d.ts +2 -0
  196. package/dist/esm/codegen/index.d.ts.map +1 -0
  197. package/dist/esm/codegen/index.js +2 -0
  198. package/dist/esm/codegen/index.js.map +1 -0
  199. package/dist/esm/codegen/types.d.ts +38 -0
  200. package/dist/esm/codegen/types.d.ts.map +1 -0
  201. package/dist/esm/codegen/types.js +8 -0
  202. package/dist/esm/codegen/types.js.map +1 -0
  203. package/dist/esm/errors/auth.d.ts +13 -0
  204. package/dist/esm/errors/auth.d.ts.map +1 -0
  205. package/dist/esm/errors/auth.js +31 -0
  206. package/dist/esm/errors/auth.js.map +1 -0
  207. package/dist/esm/errors/base.d.ts +35 -0
  208. package/dist/esm/errors/base.d.ts.map +1 -0
  209. package/dist/esm/errors/base.js +67 -0
  210. package/dist/esm/errors/base.js.map +1 -0
  211. package/dist/esm/errors/index.d.ts +6 -0
  212. package/dist/esm/errors/index.d.ts.map +1 -0
  213. package/dist/esm/errors/index.js +6 -0
  214. package/dist/esm/errors/index.js.map +1 -0
  215. package/dist/esm/errors/ledger.d.ts +22 -0
  216. package/dist/esm/errors/ledger.d.ts.map +1 -0
  217. package/dist/esm/errors/ledger.js +49 -0
  218. package/dist/esm/errors/ledger.js.map +1 -0
  219. package/dist/esm/errors/streaming.d.ts +20 -0
  220. package/dist/esm/errors/streaming.d.ts.map +1 -0
  221. package/dist/esm/errors/streaming.js +48 -0
  222. package/dist/esm/errors/streaming.js.map +1 -0
  223. package/dist/esm/errors/transport.d.ts +31 -0
  224. package/dist/esm/errors/transport.d.ts.map +1 -0
  225. package/dist/esm/errors/transport.js +56 -0
  226. package/dist/esm/errors/transport.js.map +1 -0
  227. package/dist/esm/index.d.ts +25 -0
  228. package/dist/esm/index.d.ts.map +1 -0
  229. package/dist/esm/index.js +18 -0
  230. package/dist/esm/index.js.map +1 -0
  231. package/dist/esm/ledger/index.d.ts +5 -0
  232. package/dist/esm/ledger/index.d.ts.map +1 -0
  233. package/dist/esm/ledger/index.js +2 -0
  234. package/dist/esm/ledger/index.js.map +1 -0
  235. package/dist/esm/streaming/createStream.d.ts +55 -0
  236. package/dist/esm/streaming/createStream.d.ts.map +1 -0
  237. package/dist/esm/streaming/createStream.js +265 -0
  238. package/dist/esm/streaming/createStream.js.map +1 -0
  239. package/dist/esm/streaming/index.d.ts +8 -0
  240. package/dist/esm/streaming/index.d.ts.map +1 -0
  241. package/dist/esm/streaming/index.js +6 -0
  242. package/dist/esm/streaming/index.js.map +1 -0
  243. package/dist/esm/streaming/streamCompletions.d.ts +25 -0
  244. package/dist/esm/streaming/streamCompletions.d.ts.map +1 -0
  245. package/dist/esm/streaming/streamCompletions.js +44 -0
  246. package/dist/esm/streaming/streamCompletions.js.map +1 -0
  247. package/dist/esm/streaming/streamContracts.d.ts +42 -0
  248. package/dist/esm/streaming/streamContracts.d.ts.map +1 -0
  249. package/dist/esm/streaming/streamContracts.js +53 -0
  250. package/dist/esm/streaming/streamContracts.js.map +1 -0
  251. package/dist/esm/streaming/streamUpdates.d.ts +38 -0
  252. package/dist/esm/streaming/streamUpdates.d.ts.map +1 -0
  253. package/dist/esm/streaming/streamUpdates.js +63 -0
  254. package/dist/esm/streaming/streamUpdates.js.map +1 -0
  255. package/dist/esm/streaming/types.d.ts +111 -0
  256. package/dist/esm/streaming/types.d.ts.map +1 -0
  257. package/dist/esm/streaming/types.js +17 -0
  258. package/dist/esm/streaming/types.js.map +1 -0
  259. package/dist/esm/testing/index.d.ts +4 -0
  260. package/dist/esm/testing/index.d.ts.map +1 -0
  261. package/dist/esm/testing/index.js +4 -0
  262. package/dist/esm/testing/index.js.map +1 -0
  263. package/dist/esm/testing/mockTransport.d.ts +80 -0
  264. package/dist/esm/testing/mockTransport.d.ts.map +1 -0
  265. package/dist/esm/testing/mockTransport.js +93 -0
  266. package/dist/esm/testing/mockTransport.js.map +1 -0
  267. package/dist/esm/testing/setupSandbox.d.ts +62 -0
  268. package/dist/esm/testing/setupSandbox.d.ts.map +1 -0
  269. package/dist/esm/testing/setupSandbox.js +106 -0
  270. package/dist/esm/testing/setupSandbox.js.map +1 -0
  271. package/dist/esm/transport/fallback.d.ts +21 -0
  272. package/dist/esm/transport/fallback.d.ts.map +1 -0
  273. package/dist/esm/transport/fallback.js +45 -0
  274. package/dist/esm/transport/fallback.js.map +1 -0
  275. package/dist/esm/transport/grpc.d.ts +51 -0
  276. package/dist/esm/transport/grpc.d.ts.map +1 -0
  277. package/dist/esm/transport/grpc.js +87 -0
  278. package/dist/esm/transport/grpc.js.map +1 -0
  279. package/dist/esm/transport/index.d.ts +3 -0
  280. package/dist/esm/transport/index.d.ts.map +1 -0
  281. package/dist/esm/transport/index.js +2 -0
  282. package/dist/esm/transport/index.js.map +1 -0
  283. package/dist/esm/transport/json-api.d.ts +9 -0
  284. package/dist/esm/transport/json-api.d.ts.map +1 -0
  285. package/dist/esm/transport/json-api.js +66 -0
  286. package/dist/esm/transport/json-api.js.map +1 -0
  287. package/dist/esm/transport/types.d.ts +36 -0
  288. package/dist/esm/transport/types.d.ts.map +1 -0
  289. package/dist/esm/transport/types.js +9 -0
  290. package/dist/esm/transport/types.js.map +1 -0
  291. package/dist/esm/types/command.d.ts +127 -0
  292. package/dist/esm/types/command.d.ts.map +1 -0
  293. package/dist/esm/types/command.js +11 -0
  294. package/dist/esm/types/command.js.map +1 -0
  295. package/dist/esm/types/contract.d.ts +104 -0
  296. package/dist/esm/types/contract.d.ts.map +1 -0
  297. package/dist/esm/types/contract.js +11 -0
  298. package/dist/esm/types/contract.js.map +1 -0
  299. package/dist/esm/types/idp.d.ts +28 -0
  300. package/dist/esm/types/idp.d.ts.map +1 -0
  301. package/dist/esm/types/idp.js +8 -0
  302. package/dist/esm/types/idp.js.map +1 -0
  303. package/dist/esm/types/index.d.ts +10 -0
  304. package/dist/esm/types/index.d.ts.map +1 -0
  305. package/dist/esm/types/index.js +2 -0
  306. package/dist/esm/types/index.js.map +1 -0
  307. package/dist/esm/types/interactive.d.ts +47 -0
  308. package/dist/esm/types/interactive.d.ts.map +1 -0
  309. package/dist/esm/types/interactive.js +12 -0
  310. package/dist/esm/types/interactive.js.map +1 -0
  311. package/dist/esm/types/package.d.ts +15 -0
  312. package/dist/esm/types/package.d.ts.map +1 -0
  313. package/dist/esm/types/package.js +7 -0
  314. package/dist/esm/types/package.js.map +1 -0
  315. package/dist/esm/types/party.d.ts +32 -0
  316. package/dist/esm/types/party.d.ts.map +1 -0
  317. package/dist/esm/types/party.js +9 -0
  318. package/dist/esm/types/party.js.map +1 -0
  319. package/dist/esm/types/reassignment.d.ts +65 -0
  320. package/dist/esm/types/reassignment.d.ts.map +1 -0
  321. package/dist/esm/types/reassignment.js +9 -0
  322. package/dist/esm/types/reassignment.js.map +1 -0
  323. package/dist/esm/types/transaction.d.ts +59 -0
  324. package/dist/esm/types/transaction.d.ts.map +1 -0
  325. package/dist/esm/types/transaction.js +12 -0
  326. package/dist/esm/types/transaction.js.map +1 -0
  327. package/dist/esm/types/user.d.ts +64 -0
  328. package/dist/esm/types/user.d.ts.map +1 -0
  329. package/dist/esm/types/user.js +11 -0
  330. package/dist/esm/types/user.js.map +1 -0
  331. package/dist/tsconfig.build.tsbuildinfo +1 -0
  332. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  333. package/package.json +140 -0
  334. package/src/admin/index.ts +9 -0
  335. package/src/chains/definitions.ts +43 -0
  336. package/src/chains/index.ts +1 -0
  337. package/src/clients/createAdminClient.ts +336 -0
  338. package/src/clients/createLedgerClient.ts +383 -0
  339. package/src/clients/createTestClient.ts +77 -0
  340. package/src/clients/index.ts +19 -0
  341. package/src/codegen/index.ts +6 -0
  342. package/src/codegen/types.ts +51 -0
  343. package/src/errors/auth.ts +33 -0
  344. package/src/errors/base.ts +83 -0
  345. package/src/errors/index.ts +5 -0
  346. package/src/errors/ledger.ts +53 -0
  347. package/src/errors/streaming.ts +51 -0
  348. package/src/errors/transport.ts +65 -0
  349. package/src/index.ts +122 -0
  350. package/src/ledger/index.ts +33 -0
  351. package/src/streaming/createStream.ts +321 -0
  352. package/src/streaming/index.ts +19 -0
  353. package/src/streaming/streamCompletions.ts +49 -0
  354. package/src/streaming/streamContracts.ts +64 -0
  355. package/src/streaming/streamUpdates.ts +67 -0
  356. package/src/streaming/types.ts +117 -0
  357. package/src/testing/index.ts +18 -0
  358. package/src/testing/mockTransport.ts +132 -0
  359. package/src/testing/setupSandbox.ts +163 -0
  360. package/src/transport/fallback.ts +57 -0
  361. package/src/transport/grpc.ts +130 -0
  362. package/src/transport/index.ts +2 -0
  363. package/src/transport/json-api.ts +83 -0
  364. package/src/transport/types.ts +39 -0
  365. package/src/types/command.ts +123 -0
  366. package/src/types/contract.ts +101 -0
  367. package/src/types/idp.ts +31 -0
  368. package/src/types/index.ts +66 -0
  369. package/src/types/interactive.ts +53 -0
  370. package/src/types/package.ts +16 -0
  371. package/src/types/party.ts +33 -0
  372. package/src/types/reassignment.ts +68 -0
  373. package/src/types/transaction.ts +57 -0
  374. package/src/types/user.ts +41 -0
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ /**
3
+ * Core AsyncIterable stream factory for Canton WebSocket connections.
4
+ *
5
+ * Creates a stream that:
6
+ * - Opens a WebSocket connection with Canton subprotocol auth
7
+ * - Sends a subscription request on connection open
8
+ * - Yields parsed JSON messages as an AsyncIterable
9
+ * - Auto-reconnects with exponential backoff on disconnect
10
+ * - Tracks offsets for gap-free resumption
11
+ * - Supports AbortSignal cancellation
12
+ *
13
+ * @see ADR 0005 — Streaming Architecture
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.toWebSocketUrl = toWebSocketUrl;
17
+ exports.calculateDelay = calculateDelay;
18
+ exports.createStream = createStream;
19
+ const streaming_js_1 = require("../errors/streaming.js");
20
+ const DEFAULT_RECONNECT = {
21
+ initialDelay: 1000,
22
+ maxDelay: 30000,
23
+ factor: 2,
24
+ jitter: 0.25,
25
+ maxAttempts: Infinity,
26
+ };
27
+ /**
28
+ * Convert an HTTP(S) URL to a WebSocket URL.
29
+ * http://host → ws://host, https://host → wss://host
30
+ * If already ws/wss, return as-is.
31
+ */
32
+ function toWebSocketUrl(baseUrl, path) {
33
+ const url = new URL(path, baseUrl);
34
+ if (url.protocol === 'https:') {
35
+ url.protocol = 'wss:';
36
+ }
37
+ else if (url.protocol === 'http:') {
38
+ url.protocol = 'ws:';
39
+ }
40
+ return url.toString();
41
+ }
42
+ /**
43
+ * Calculate reconnect delay with exponential backoff and jitter.
44
+ */
45
+ function calculateDelay(attempt, config) {
46
+ const baseDelay = Math.min(config.initialDelay * Math.pow(config.factor, attempt), config.maxDelay);
47
+ const jitterRange = baseDelay * config.jitter;
48
+ const jitter = (Math.random() * 2 - 1) * jitterRange;
49
+ return Math.max(0, baseDelay + jitter);
50
+ }
51
+ /**
52
+ * Create a Canton WebSocket stream as an AsyncIterable.
53
+ *
54
+ * Each iteration yields a parsed JSON message from the WebSocket.
55
+ * The stream auto-reconnects on disconnect unless:
56
+ * - The AbortSignal is aborted
57
+ * - reconnect is set to false
58
+ * - The stream is bounded and the server closed normally (code 1000)
59
+ * - Max reconnect attempts are exhausted
60
+ */
61
+ function createStream(config) {
62
+ return {
63
+ [Symbol.asyncIterator]() {
64
+ return new StreamIterator(config);
65
+ },
66
+ };
67
+ }
68
+ /**
69
+ * Internal AsyncIterator implementation.
70
+ *
71
+ * Uses a message queue with promise-based signaling to bridge the
72
+ * event-driven WebSocket API to the pull-based AsyncIterator protocol.
73
+ */
74
+ class StreamIterator {
75
+ config;
76
+ reconnectConfig;
77
+ ws = null;
78
+ lastOffset = undefined;
79
+ reconnectAttempts = 0;
80
+ done = false;
81
+ abortHandler = null;
82
+ // Message queue for buffering received messages
83
+ queue = [];
84
+ // Error stored when fail() is called before next()
85
+ storedError = null;
86
+ // Pending resolve/reject for when consumer is waiting
87
+ pendingResolve = null;
88
+ pendingReject = null;
89
+ constructor(config) {
90
+ this.config = config;
91
+ if (config.reconnect === false) {
92
+ this.reconnectConfig = false;
93
+ }
94
+ else {
95
+ this.reconnectConfig = { ...DEFAULT_RECONNECT, ...config.reconnect };
96
+ }
97
+ if (config.signal?.aborted) {
98
+ this.done = true;
99
+ }
100
+ else {
101
+ this.setupAbortHandler();
102
+ this.connect();
103
+ }
104
+ }
105
+ async next() {
106
+ // If an error was stored before next() was called, throw it now
107
+ if (this.storedError) {
108
+ const error = this.storedError;
109
+ this.storedError = null;
110
+ throw error;
111
+ }
112
+ if (this.done && this.queue.length === 0) {
113
+ return { done: true, value: undefined };
114
+ }
115
+ // If there are queued messages, return immediately
116
+ if (this.queue.length > 0) {
117
+ return { done: false, value: this.queue.shift() };
118
+ }
119
+ // Wait for the next message, error, or close
120
+ return new Promise((resolve, reject) => {
121
+ this.pendingResolve = resolve;
122
+ this.pendingReject = reject;
123
+ });
124
+ }
125
+ async return() {
126
+ this.cleanup();
127
+ return { done: true, value: undefined };
128
+ }
129
+ async throw(error) {
130
+ this.cleanup();
131
+ throw error;
132
+ }
133
+ setupAbortHandler() {
134
+ if (!this.config.signal)
135
+ return;
136
+ this.abortHandler = () => {
137
+ this.cleanup();
138
+ if (this.pendingResolve) {
139
+ this.pendingResolve({ done: true, value: undefined });
140
+ this.pendingResolve = null;
141
+ this.pendingReject = null;
142
+ }
143
+ };
144
+ this.config.signal.addEventListener('abort', this.abortHandler);
145
+ }
146
+ connect() {
147
+ if (this.done)
148
+ return;
149
+ const WS = this.config.WebSocket ?? globalThis.WebSocket;
150
+ if (!WS) {
151
+ const error = new streaming_js_1.WebSocketError(this.config.url, {
152
+ cause: new Error('No WebSocket implementation available. Provide a WebSocket constructor.'),
153
+ });
154
+ this.fail(error);
155
+ return;
156
+ }
157
+ const protocols = this.config.token
158
+ ? ['daml.ws.auth', `jwt.token.${this.config.token}`]
159
+ : undefined;
160
+ let ws;
161
+ try {
162
+ ws = new WS(this.config.url, protocols);
163
+ }
164
+ catch (err) {
165
+ const error = new streaming_js_1.WebSocketError(this.config.url, {
166
+ cause: err instanceof Error ? err : new Error(String(err)),
167
+ });
168
+ this.fail(error);
169
+ return;
170
+ }
171
+ this.ws = ws;
172
+ ws.onopen = () => {
173
+ this.reconnectAttempts = 0;
174
+ const request = this.config.buildRequest(this.lastOffset);
175
+ ws.send(JSON.stringify(request));
176
+ };
177
+ ws.onmessage = (event) => {
178
+ let message;
179
+ try {
180
+ message = JSON.parse(String(event.data));
181
+ }
182
+ catch {
183
+ return; // Skip non-JSON messages
184
+ }
185
+ // Track offset for resumption
186
+ const offset = this.config.extractOffset(message);
187
+ if (offset !== undefined) {
188
+ this.lastOffset = offset;
189
+ }
190
+ this.enqueue(message);
191
+ };
192
+ ws.onerror = () => {
193
+ // onerror is always followed by onclose, so we handle reconnection there
194
+ };
195
+ ws.onclose = (event) => {
196
+ this.ws = null;
197
+ // Normal close on bounded stream = stream complete
198
+ if (this.config.bounded && event.code === 1000) {
199
+ this.cleanup();
200
+ if (this.pendingResolve) {
201
+ this.pendingResolve({ done: true, value: undefined });
202
+ this.pendingResolve = null;
203
+ this.pendingReject = null;
204
+ }
205
+ return;
206
+ }
207
+ // If already done (abort, return), don't reconnect
208
+ if (this.done)
209
+ return;
210
+ // Try to reconnect
211
+ if (this.reconnectConfig === false) {
212
+ const error = new streaming_js_1.StreamClosedError(event.code, event.reason);
213
+ this.fail(error);
214
+ return;
215
+ }
216
+ if (this.reconnectAttempts >= this.reconnectConfig.maxAttempts) {
217
+ const error = new streaming_js_1.ReconnectFailedError(this.reconnectAttempts);
218
+ this.fail(error);
219
+ return;
220
+ }
221
+ const delay = calculateDelay(this.reconnectAttempts, this.reconnectConfig);
222
+ this.reconnectAttempts++;
223
+ setTimeout(() => {
224
+ if (!this.done) {
225
+ this.connect();
226
+ }
227
+ }, delay);
228
+ };
229
+ }
230
+ enqueue(message) {
231
+ if (this.pendingResolve) {
232
+ const resolve = this.pendingResolve;
233
+ this.pendingResolve = null;
234
+ this.pendingReject = null;
235
+ resolve({ done: false, value: message });
236
+ }
237
+ else {
238
+ this.queue.push(message);
239
+ }
240
+ }
241
+ fail(error) {
242
+ this.done = true;
243
+ if (this.pendingReject) {
244
+ const reject = this.pendingReject;
245
+ this.pendingResolve = null;
246
+ this.pendingReject = null;
247
+ reject(error);
248
+ }
249
+ else {
250
+ this.storedError = error;
251
+ }
252
+ }
253
+ cleanup() {
254
+ this.done = true;
255
+ if (this.config.signal && this.abortHandler) {
256
+ this.config.signal.removeEventListener('abort', this.abortHandler);
257
+ this.abortHandler = null;
258
+ }
259
+ if (this.ws) {
260
+ // Clear handlers before closing to prevent reconnect
261
+ this.ws.onopen = null;
262
+ this.ws.onmessage = null;
263
+ this.ws.onerror = null;
264
+ this.ws.onclose = null;
265
+ this.ws.close();
266
+ this.ws = null;
267
+ }
268
+ }
269
+ }
270
+ //# sourceMappingURL=createStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createStream.js","sourceRoot":"","sources":["../../../src/streaming/createStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { createStream, toWebSocketUrl, calculateDelay } from './createStream.js';
2
+ export type { CreateStreamConfig } from './createStream.js';
3
+ export { streamUpdates } from './streamUpdates.js';
4
+ export { streamContracts, type ActiveContractsResponse } from './streamContracts.js';
5
+ export { streamCompletions } from './streamCompletions.js';
6
+ export type { WebSocketConstructor, WebSocketLike, ReconnectConfig, StreamOptions, StreamUpdatesOptions, StreamContractsOptions, StreamCompletionsOptions, CompletionEvent, } from './types.js';
7
+ export { WS_READY_STATE } from './types.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/streaming/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAChF,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,eAAe,GAChB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WS_READY_STATE = exports.streamCompletions = exports.streamContracts = exports.streamUpdates = exports.calculateDelay = exports.toWebSocketUrl = exports.createStream = void 0;
4
+ var createStream_js_1 = require("./createStream.js");
5
+ Object.defineProperty(exports, "createStream", { enumerable: true, get: function () { return createStream_js_1.createStream; } });
6
+ Object.defineProperty(exports, "toWebSocketUrl", { enumerable: true, get: function () { return createStream_js_1.toWebSocketUrl; } });
7
+ Object.defineProperty(exports, "calculateDelay", { enumerable: true, get: function () { return createStream_js_1.calculateDelay; } });
8
+ var streamUpdates_js_1 = require("./streamUpdates.js");
9
+ Object.defineProperty(exports, "streamUpdates", { enumerable: true, get: function () { return streamUpdates_js_1.streamUpdates; } });
10
+ var streamContracts_js_1 = require("./streamContracts.js");
11
+ Object.defineProperty(exports, "streamContracts", { enumerable: true, get: function () { return streamContracts_js_1.streamContracts; } });
12
+ var streamCompletions_js_1 = require("./streamCompletions.js");
13
+ Object.defineProperty(exports, "streamCompletions", { enumerable: true, get: function () { return streamCompletions_js_1.streamCompletions; } });
14
+ var types_js_1 = require("./types.js");
15
+ Object.defineProperty(exports, "WS_READY_STATE", { enumerable: true, get: function () { return types_js_1.WS_READY_STATE; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/streaming/index.ts"],"names":[],"mappings":";;;AAAA,qDAAgF;AAAvE,+GAAA,YAAY,OAAA;AAAE,iHAAA,cAAc,OAAA;AAAE,iHAAA,cAAc,OAAA;AAGrD,uDAAkD;AAAzC,iHAAA,aAAa,OAAA;AACtB,2DAAoF;AAA3E,qHAAA,eAAe,OAAA;AACxB,+DAA0D;AAAjD,yHAAA,iBAAiB,OAAA;AAa1B,uCAA2C;AAAlC,0GAAA,cAAc,OAAA"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Stream command completions from Canton's /v2/commands/completions WebSocket endpoint.
3
+ *
4
+ * Yields completion events as an AsyncIterable with auto-reconnect.
5
+ */
6
+ import type { CompletionEvent, StreamCompletionsOptions } from './types.js';
7
+ /**
8
+ * Stream command completions from a Canton node.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const completions = streamCompletions({
13
+ * url: 'http://localhost:7575',
14
+ * token: jwt,
15
+ * parties: ['Alice::1220'],
16
+ * beginExclusive: 0,
17
+ * })
18
+ *
19
+ * for await (const event of completions) {
20
+ * console.log('Completion:', event.completion.commandId, event.completion.status)
21
+ * }
22
+ * ```
23
+ */
24
+ export declare function streamCompletions(options: StreamCompletionsOptions): AsyncIterable<CompletionEvent>;
25
+ //# sourceMappingURL=streamCompletions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamCompletions.d.ts","sourceRoot":"","sources":["../../../src/streaming/streamCompletions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAG3E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,aAAa,CAAC,eAAe,CAAC,CAoBhC"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ /**
3
+ * Stream command completions from Canton's /v2/commands/completions WebSocket endpoint.
4
+ *
5
+ * Yields completion events as an AsyncIterable with auto-reconnect.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.streamCompletions = streamCompletions;
9
+ const createStream_js_1 = require("./createStream.js");
10
+ /**
11
+ * Stream command completions from a Canton node.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const completions = streamCompletions({
16
+ * url: 'http://localhost:7575',
17
+ * token: jwt,
18
+ * parties: ['Alice::1220'],
19
+ * beginExclusive: 0,
20
+ * })
21
+ *
22
+ * for await (const event of completions) {
23
+ * console.log('Completion:', event.completion.commandId, event.completion.status)
24
+ * }
25
+ * ```
26
+ */
27
+ function streamCompletions(options) {
28
+ const wsUrl = (0, createStream_js_1.toWebSocketUrl)(options.url, '/v2/commands/completions');
29
+ return (0, createStream_js_1.createStream)({
30
+ url: wsUrl,
31
+ token: options.token,
32
+ WebSocket: options.WebSocket,
33
+ signal: options.signal,
34
+ reconnect: options.reconnect,
35
+ bounded: false,
36
+ buildRequest: (lastOffset) => ({
37
+ beginExclusive: lastOffset ?? options.beginExclusive ?? 0,
38
+ parties: options.parties,
39
+ ...(options.applicationId && { applicationId: options.applicationId }),
40
+ }),
41
+ extractOffset: (message) => {
42
+ const msg = message;
43
+ return msg.completion?.offset;
44
+ },
45
+ });
46
+ }
47
+ //# sourceMappingURL=streamCompletions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamCompletions.js","sourceRoot":"","sources":["../../../src/streaming/streamCompletions.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAsBH,8CAsBC;AAzCD,uDAAgE;AAEhE;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,iBAAiB,CAC/B,OAAiC;IAEjC,MAAM,KAAK,GAAG,IAAA,gCAAc,EAAC,OAAO,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAA;IAErE,OAAO,IAAA,8BAAY,EAAkB;QACnC,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC7B,cAAc,EAAE,UAAU,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC;YACzD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;SACvE,CAAC;QACF,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,OAA0B,CAAA;YACtC,OAAO,GAAG,CAAC,UAAU,EAAE,MAAM,CAAA;QAC/B,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Stream active contracts from Canton's /v2/state/active-contracts WebSocket endpoint.
3
+ *
4
+ * This is a bounded stream: the server sends all matching active contracts
5
+ * and then closes the connection. No auto-reconnect is used.
6
+ */
7
+ import type { StreamContractsOptions } from './types.js';
8
+ /** Response message from the active contracts stream. */
9
+ export type ActiveContractsResponse = {
10
+ readonly contractEntry?: {
11
+ readonly [key: string]: unknown;
12
+ };
13
+ readonly offset?: number;
14
+ };
15
+ /**
16
+ * Stream active contracts from a Canton node.
17
+ *
18
+ * The stream yields contract entries matching the provided filters.
19
+ * It is bounded: the server closes the connection when all contracts
20
+ * have been sent.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const contracts = streamContracts({
25
+ * url: 'http://localhost:7575',
26
+ * token: jwt,
27
+ * eventFormat: {
28
+ * filtersByParty: {
29
+ * [party]: { cumulative: [{ identifierFilter: { WildcardFilter: { value: {} } } }] }
30
+ * }
31
+ * }
32
+ * })
33
+ *
34
+ * for await (const entry of contracts) {
35
+ * if (entry.contractEntry && 'JsActiveContract' in entry.contractEntry) {
36
+ * console.log('Contract:', entry.contractEntry.JsActiveContract)
37
+ * }
38
+ * }
39
+ * ```
40
+ */
41
+ export declare function streamContracts(options: StreamContractsOptions): AsyncIterable<ActiveContractsResponse>;
42
+ //# sourceMappingURL=streamContracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamContracts.d.ts","sourceRoot":"","sources":["../../../src/streaming/streamContracts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAGxD,yDAAyD;AACzD,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE;QAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,sBAAsB,GAC9B,aAAa,CAAC,uBAAuB,CAAC,CAmBxC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * Stream active contracts from Canton's /v2/state/active-contracts WebSocket endpoint.
4
+ *
5
+ * This is a bounded stream: the server sends all matching active contracts
6
+ * and then closes the connection. No auto-reconnect is used.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.streamContracts = streamContracts;
10
+ const createStream_js_1 = require("./createStream.js");
11
+ /**
12
+ * Stream active contracts from a Canton node.
13
+ *
14
+ * The stream yields contract entries matching the provided filters.
15
+ * It is bounded: the server closes the connection when all contracts
16
+ * have been sent.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const contracts = streamContracts({
21
+ * url: 'http://localhost:7575',
22
+ * token: jwt,
23
+ * eventFormat: {
24
+ * filtersByParty: {
25
+ * [party]: { cumulative: [{ identifierFilter: { WildcardFilter: { value: {} } } }] }
26
+ * }
27
+ * }
28
+ * })
29
+ *
30
+ * for await (const entry of contracts) {
31
+ * if (entry.contractEntry && 'JsActiveContract' in entry.contractEntry) {
32
+ * console.log('Contract:', entry.contractEntry.JsActiveContract)
33
+ * }
34
+ * }
35
+ * ```
36
+ */
37
+ function streamContracts(options) {
38
+ const wsUrl = (0, createStream_js_1.toWebSocketUrl)(options.url, '/v2/state/active-contracts');
39
+ return (0, createStream_js_1.createStream)({
40
+ url: wsUrl,
41
+ token: options.token,
42
+ WebSocket: options.WebSocket,
43
+ signal: options.signal,
44
+ reconnect: false, // Bounded stream — no reconnect
45
+ bounded: true,
46
+ buildRequest: () => ({
47
+ eventFormat: options.eventFormat,
48
+ ...(options.activeAtOffset !== undefined && { activeAtOffset: options.activeAtOffset }),
49
+ }),
50
+ extractOffset: (message) => {
51
+ const msg = message;
52
+ return msg.offset;
53
+ },
54
+ });
55
+ }
56
+ //# sourceMappingURL=streamContracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamContracts.js","sourceRoot":"","sources":["../../../src/streaming/streamContracts.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAqCH,0CAqBC;AAvDD,uDAAgE;AAQhE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,eAAe,CAC7B,OAA+B;IAE/B,MAAM,KAAK,GAAG,IAAA,gCAAc,EAAC,OAAO,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAA;IAEvE,OAAO,IAAA,8BAAY,EAA0B;QAC3C,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK,EAAE,gCAAgC;QAClD,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;YACnB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;SACxF,CAAC;QACF,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,OAAkC,CAAA;YAC9C,OAAO,GAAG,CAAC,MAAM,CAAA;QACnB,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Stream updates from Canton's /v2/updates WebSocket endpoint.
3
+ *
4
+ * Yields TaggedUpdate messages (Transaction, Reassignment, OffsetCheckpoint,
5
+ * TopologyTransaction) as an AsyncIterable with auto-reconnect.
6
+ */
7
+ import type { TaggedUpdate } from '../types/transaction.js';
8
+ import type { StreamUpdatesOptions } from './types.js';
9
+ /**
10
+ * Stream ledger updates from a Canton node.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const updates = streamUpdates({
15
+ * url: 'http://localhost:7575',
16
+ * token: jwt,
17
+ * beginExclusive: 0,
18
+ * updateFormat: {
19
+ * includeTransactions: {
20
+ * transactionShape: 'TRANSACTION_SHAPE_ACS_DELTA',
21
+ * eventFormat: {
22
+ * filtersByParty: {
23
+ * [party]: { cumulative: [{ identifierFilter: { WildcardFilter: { value: {} } } }] }
24
+ * }
25
+ * }
26
+ * }
27
+ * }
28
+ * })
29
+ *
30
+ * for await (const update of updates) {
31
+ * if ('Transaction' in update) {
32
+ * console.log('Transaction:', update.Transaction.value.updateId)
33
+ * }
34
+ * }
35
+ * ```
36
+ */
37
+ export declare function streamUpdates(options: StreamUpdatesOptions): AsyncIterable<TaggedUpdate>;
38
+ //# sourceMappingURL=streamUpdates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamUpdates.d.ts","sourceRoot":"","sources":["../../../src/streaming/streamUpdates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAAC,YAAY,CAAC,CA2BxF"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ /**
3
+ * Stream updates from Canton's /v2/updates WebSocket endpoint.
4
+ *
5
+ * Yields TaggedUpdate messages (Transaction, Reassignment, OffsetCheckpoint,
6
+ * TopologyTransaction) as an AsyncIterable with auto-reconnect.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.streamUpdates = streamUpdates;
10
+ const createStream_js_1 = require("./createStream.js");
11
+ /**
12
+ * Stream ledger updates from a Canton node.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const updates = streamUpdates({
17
+ * url: 'http://localhost:7575',
18
+ * token: jwt,
19
+ * beginExclusive: 0,
20
+ * updateFormat: {
21
+ * includeTransactions: {
22
+ * transactionShape: 'TRANSACTION_SHAPE_ACS_DELTA',
23
+ * eventFormat: {
24
+ * filtersByParty: {
25
+ * [party]: { cumulative: [{ identifierFilter: { WildcardFilter: { value: {} } } }] }
26
+ * }
27
+ * }
28
+ * }
29
+ * }
30
+ * })
31
+ *
32
+ * for await (const update of updates) {
33
+ * if ('Transaction' in update) {
34
+ * console.log('Transaction:', update.Transaction.value.updateId)
35
+ * }
36
+ * }
37
+ * ```
38
+ */
39
+ function streamUpdates(options) {
40
+ const wsUrl = (0, createStream_js_1.toWebSocketUrl)(options.url, '/v2/updates');
41
+ const isOpen = options.endInclusive === undefined;
42
+ return (0, createStream_js_1.createStream)({
43
+ url: wsUrl,
44
+ token: options.token,
45
+ WebSocket: options.WebSocket,
46
+ signal: options.signal,
47
+ reconnect: isOpen ? options.reconnect : false,
48
+ bounded: !isOpen,
49
+ buildRequest: (lastOffset) => ({
50
+ beginExclusive: lastOffset ?? options.beginExclusive ?? 0,
51
+ ...(options.endInclusive !== undefined && { endInclusive: options.endInclusive }),
52
+ ...(options.updateFormat && { updateFormat: options.updateFormat }),
53
+ }),
54
+ extractOffset: (message) => {
55
+ const msg = message;
56
+ if ('Transaction' in msg) {
57
+ return msg.Transaction.value.offset;
58
+ }
59
+ if ('OffsetCheckpoint' in msg) {
60
+ return msg.OffsetCheckpoint.value.offset;
61
+ }
62
+ return undefined;
63
+ },
64
+ });
65
+ }
66
+ //# sourceMappingURL=streamUpdates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamUpdates.js","sourceRoot":"","sources":["../../../src/streaming/streamUpdates.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAkCH,sCA2BC;AAzDD,uDAAgE;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,SAAgB,aAAa,CAAC,OAA6B;IACzD,MAAM,KAAK,GAAG,IAAA,gCAAc,EAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS,CAAA;IAEjD,OAAO,IAAA,8BAAY,EAAe;QAChC,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;QAC7C,OAAO,EAAE,CAAC,MAAM;QAChB,YAAY,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC7B,cAAc,EAAE,UAAU,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC;YACzD,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;YACjF,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;SACpE,CAAC;QACF,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,OAAuB,CAAA;YACnC,IAAI,aAAa,IAAI,GAAG,EAAE,CAAC;gBACzB,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAA;YACrC,CAAC;YACD,IAAI,kBAAkB,IAAI,GAAG,EAAE,CAAC;gBAC9B,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAA;YAC1C,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}