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,383 @@
1
+ /**
2
+ * Factory for creating a party-scoped Ledger API client.
3
+ *
4
+ * The LedgerClient provides contract operations: create, exercise, query.
5
+ * Each client is scoped to a party via its JWT token.
6
+ *
7
+ * Request/response shapes match the Canton JSON Ledger API V2 OpenAPI spec (3.4+).
8
+ */
9
+
10
+ import type { Transport, TransportRequest } from '../transport/types.js'
11
+ import type { Party } from '../types/party.js'
12
+ import type {
13
+ CreatedEvent,
14
+ TaggedEvent,
15
+ ActiveContract,
16
+ ContractEntry,
17
+ } from '../types/contract.js'
18
+ import type { JsTransaction } from '../types/transaction.js'
19
+ import type { Reassignment, ReassignmentCommand } from '../types/reassignment.js'
20
+ import type {
21
+ PrepareSubmissionResponse,
22
+ PartySignatures,
23
+ } from '../types/interactive.js'
24
+ import type { LedgerOffset, EventFormat, TransactionFormat } from '../types/command.js'
25
+
26
+ export type LedgerClientConfig = {
27
+ /** Transport to communicate with the Canton node. */
28
+ readonly transport: Transport
29
+ /** The party this client acts as. */
30
+ readonly actAs: Party
31
+ /** Additional parties this client can read as. */
32
+ readonly readAs?: readonly Party[]
33
+ }
34
+
35
+ export type LedgerClient = {
36
+ /** The party this client acts as. */
37
+ readonly actAs: Party
38
+ /** Additional parties this client can read as. */
39
+ readonly readAs: readonly Party[]
40
+
41
+ /** Create a new contract on the ledger. */
42
+ createContract: (
43
+ templateId: string,
44
+ createArguments: Record<string, unknown>,
45
+ options?: CommandOptions,
46
+ ) => Promise<CreatedEvent>
47
+
48
+ /** Exercise a choice on an existing contract. */
49
+ exerciseChoice: (
50
+ templateId: string,
51
+ contractId: string,
52
+ choice: string,
53
+ choiceArgument: Record<string, unknown>,
54
+ options?: CommandOptions,
55
+ ) => Promise<JsTransaction>
56
+
57
+ /** Query active contracts matching a template. */
58
+ queryContracts: (
59
+ templateId: string,
60
+ options?: QueryOptions,
61
+ ) => Promise<readonly ActiveContract[]>
62
+
63
+ /** Get a transaction by its update ID. */
64
+ getTransactionById: (updateId: string) => Promise<JsTransaction>
65
+
66
+ /** Get the current ledger end offset. */
67
+ getLedgerEnd: () => Promise<LedgerOffset>
68
+
69
+ /** Get events for a specific contract. */
70
+ getEventsByContractId: (contractId: string) => Promise<unknown>
71
+
72
+ /** Get connected synchronizer IDs. */
73
+ getConnectedSynchronizers: () => Promise<readonly ConnectedSynchronizer[]>
74
+
75
+ /** Get the latest pruned offsets. */
76
+ getLatestPrunedOffsets: () => Promise<PrunedOffsets>
77
+
78
+ /** Submit a reassignment command and wait for completion. */
79
+ submitReassignment: (
80
+ command: ReassignmentCommand,
81
+ options?: CommandOptions,
82
+ ) => Promise<Reassignment>
83
+
84
+ /**
85
+ * Prepare a transaction for external signing.
86
+ * Returns the prepared transaction and hash to sign.
87
+ */
88
+ prepareSubmission: (
89
+ templateId: string,
90
+ createArguments: Record<string, unknown>,
91
+ options?: CommandOptions,
92
+ ) => Promise<PrepareSubmissionResponse>
93
+
94
+ /**
95
+ * Execute a previously prepared and externally signed transaction.
96
+ */
97
+ executeSubmission: (
98
+ preparedTransaction: string,
99
+ partySignatures: readonly PartySignatures[],
100
+ options?: { readonly submissionId?: string; readonly signal?: AbortSignal },
101
+ ) => Promise<JsTransaction>
102
+ }
103
+
104
+ /** A connected synchronizer (domain). */
105
+ export type ConnectedSynchronizer = {
106
+ readonly synchronizerId: string
107
+ readonly permission: 'SUBMISSION' | 'OBSERVATION' | 'UNSPECIFIED'
108
+ }
109
+
110
+ /** Pruned offset information. */
111
+ export type PrunedOffsets = {
112
+ readonly participantPrunedUpToInclusive?: number
113
+ readonly allDivulgedContractsPrunedUpToInclusive?: number
114
+ }
115
+
116
+ export type CommandOptions = {
117
+ readonly commandId?: string
118
+ readonly workflowId?: string
119
+ readonly signal?: AbortSignal
120
+ }
121
+
122
+ export type QueryOptions = {
123
+ readonly signal?: AbortSignal
124
+ /** Event format for filtering. Defaults to verbose wildcard filter for actAs party. */
125
+ readonly eventFormat?: EventFormat
126
+ /** Offset to snapshot at. 0 = empty ledger. Defaults to 0. */
127
+ readonly activeAtOffset?: LedgerOffset
128
+ }
129
+
130
+ /** Generate a random UUID, compatible with Node.js 18+ and browsers. */
131
+ function generateUUID(): string {
132
+ if (typeof globalThis.crypto?.randomUUID === 'function') {
133
+ return globalThis.crypto.randomUUID()
134
+ }
135
+ // Fallback for Node.js 18 where globalThis.crypto.randomUUID may not exist
136
+ const bytes = new Uint8Array(16)
137
+ if (typeof globalThis.crypto?.getRandomValues === 'function') {
138
+ globalThis.crypto.getRandomValues(bytes)
139
+ } else {
140
+ for (let i = 0; i < 16; i++) bytes[i] = Math.floor(Math.random() * 256)
141
+ }
142
+ bytes[6] = (bytes[6]! & 0x0f) | 0x40
143
+ bytes[8] = (bytes[8]! & 0x3f) | 0x80
144
+ const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('')
145
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`
146
+ }
147
+
148
+ export function createLedgerClient(config: LedgerClientConfig): LedgerClient {
149
+ const { transport, actAs, readAs = [] } = config
150
+
151
+ function defaultEventFormat(): EventFormat {
152
+ return {
153
+ filtersByParty: {
154
+ [actAs]: {
155
+ cumulative: [
156
+ {
157
+ identifierFilter: {
158
+ WildcardFilter: { value: { includeCreatedEventBlob: false } },
159
+ },
160
+ },
161
+ ],
162
+ },
163
+ },
164
+ verbose: true,
165
+ }
166
+ }
167
+
168
+ function templateEventFormat(templateId: string): EventFormat {
169
+ return {
170
+ filtersByParty: {
171
+ [actAs]: {
172
+ cumulative: [
173
+ {
174
+ identifierFilter: {
175
+ TemplateFilter: {
176
+ value: { templateId, includeCreatedEventBlob: false },
177
+ },
178
+ },
179
+ },
180
+ ],
181
+ },
182
+ },
183
+ verbose: true,
184
+ }
185
+ }
186
+
187
+ function defaultTransactionFormat(): TransactionFormat {
188
+ return {
189
+ transactionShape: 'TRANSACTION_SHAPE_ACS_DELTA',
190
+ eventFormat: defaultEventFormat(),
191
+ }
192
+ }
193
+
194
+ return {
195
+ actAs,
196
+ readAs,
197
+
198
+ async createContract(templateId, createArguments, options) {
199
+ const request: TransportRequest = {
200
+ method: 'POST',
201
+ path: '/v2/commands/submit-and-wait-for-transaction',
202
+ body: {
203
+ commands: {
204
+ commands: [{ CreateCommand: { templateId, createArguments } }],
205
+ commandId: options?.commandId ?? generateUUID(),
206
+ actAs: [actAs],
207
+ readAs: readAs.length > 0 ? readAs : undefined,
208
+ workflowId: options?.workflowId,
209
+ },
210
+ transactionFormat: defaultTransactionFormat(),
211
+ },
212
+ }
213
+ if (options?.signal) request.signal = options.signal
214
+
215
+ const response = await transport.request<{
216
+ transaction: JsTransaction
217
+ }>(request)
218
+
219
+ const created = extractCreatedEvent(response.transaction.events)
220
+ if (created === undefined) {
221
+ throw new Error('No created event in transaction response')
222
+ }
223
+ return created
224
+ },
225
+
226
+ async exerciseChoice(templateId, contractId, choice, choiceArgument, options) {
227
+ const request: TransportRequest = {
228
+ method: 'POST',
229
+ path: '/v2/commands/submit-and-wait-for-transaction',
230
+ body: {
231
+ commands: {
232
+ commands: [
233
+ { ExerciseCommand: { templateId, contractId, choice, choiceArgument } },
234
+ ],
235
+ commandId: options?.commandId ?? generateUUID(),
236
+ actAs: [actAs],
237
+ readAs: readAs.length > 0 ? readAs : undefined,
238
+ workflowId: options?.workflowId,
239
+ },
240
+ transactionFormat: defaultTransactionFormat(),
241
+ },
242
+ }
243
+ if (options?.signal) request.signal = options.signal
244
+
245
+ const response = await transport.request<{
246
+ transaction: JsTransaction
247
+ }>(request)
248
+
249
+ return response.transaction
250
+ },
251
+
252
+ async queryContracts(templateId, options) {
253
+ const request: TransportRequest = {
254
+ method: 'POST',
255
+ path: '/v2/state/active-contracts',
256
+ body: {
257
+ activeAtOffset: options?.activeAtOffset ?? 0,
258
+ eventFormat: options?.eventFormat ?? templateEventFormat(templateId),
259
+ },
260
+ }
261
+ if (options?.signal) request.signal = options.signal
262
+
263
+ const response = await transport.request<
264
+ readonly { contractEntry: ContractEntry }[]
265
+ >(request)
266
+
267
+ return response
268
+ .map((entry) => {
269
+ if ('JsActiveContract' in entry.contractEntry) {
270
+ return entry.contractEntry.JsActiveContract
271
+ }
272
+ return undefined
273
+ })
274
+ .filter((c): c is ActiveContract => c !== undefined)
275
+ },
276
+
277
+ async getTransactionById(updateId) {
278
+ const response = await transport.request<{ transaction: JsTransaction }>({
279
+ method: 'POST',
280
+ path: '/v2/updates/transaction-by-id',
281
+ body: {
282
+ updateId,
283
+ requestingParties: [actAs, ...readAs],
284
+ },
285
+ })
286
+ return response.transaction
287
+ },
288
+
289
+ async getLedgerEnd() {
290
+ const response = await transport.request<{ offset: number }>({
291
+ method: 'GET',
292
+ path: '/v2/state/ledger-end',
293
+ })
294
+ return response.offset
295
+ },
296
+
297
+ async getEventsByContractId(contractId) {
298
+ return transport.request({
299
+ method: 'POST',
300
+ path: '/v2/events/events-by-contract-id',
301
+ body: { contractId, requestingParties: [actAs, ...readAs] },
302
+ })
303
+ },
304
+
305
+ async getConnectedSynchronizers() {
306
+ const response = await transport.request<{
307
+ connectedSynchronizers: readonly ConnectedSynchronizer[]
308
+ }>({
309
+ method: 'GET',
310
+ path: '/v2/state/connected-synchronizers',
311
+ })
312
+ return response.connectedSynchronizers ?? []
313
+ },
314
+
315
+ async getLatestPrunedOffsets() {
316
+ const response = await transport.request<PrunedOffsets>({
317
+ method: 'GET',
318
+ path: '/v2/state/latest-pruned-offsets',
319
+ })
320
+ return response
321
+ },
322
+
323
+ async submitReassignment(command, options) {
324
+ const request: TransportRequest = {
325
+ method: 'POST',
326
+ path: '/v2/commands/submit-and-wait-for-reassignment',
327
+ body: {
328
+ reassignmentCommand: command,
329
+ commandId: options?.commandId ?? generateUUID(),
330
+ submitter: actAs,
331
+ workflowId: options?.workflowId,
332
+ },
333
+ }
334
+ if (options?.signal) request.signal = options.signal
335
+
336
+ const response = await transport.request<{ reassignment: Reassignment }>(request)
337
+ return response.reassignment
338
+ },
339
+
340
+ async prepareSubmission(templateId, createArguments, options) {
341
+ const request: TransportRequest = {
342
+ method: 'POST',
343
+ path: '/v2/interactive-submission/prepare',
344
+ body: {
345
+ commands: [{ CreateCommand: { templateId, createArguments } }],
346
+ commandId: options?.commandId ?? generateUUID(),
347
+ actAs: [actAs],
348
+ readAs: readAs.length > 0 ? readAs : undefined,
349
+ workflowId: options?.workflowId,
350
+ },
351
+ }
352
+ if (options?.signal) request.signal = options.signal
353
+
354
+ return transport.request<PrepareSubmissionResponse>(request)
355
+ },
356
+
357
+ async executeSubmission(preparedTransaction, partySignatures, options) {
358
+ const request: TransportRequest = {
359
+ method: 'POST',
360
+ path: '/v2/interactive-submission/execute',
361
+ body: {
362
+ preparedTransaction,
363
+ partySignatures,
364
+ submissionId: options?.submissionId,
365
+ },
366
+ }
367
+ if (options?.signal) request.signal = options.signal
368
+
369
+ const response = await transport.request<{ transaction: JsTransaction }>(request)
370
+ return response.transaction
371
+ },
372
+ }
373
+ }
374
+
375
+ /** Extract the first CreatedEvent from a list of tagged events. */
376
+ function extractCreatedEvent(events: readonly TaggedEvent[]): CreatedEvent | undefined {
377
+ for (const event of events) {
378
+ if ('CreatedEvent' in event) {
379
+ return event.CreatedEvent
380
+ }
381
+ }
382
+ return undefined
383
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Factory for creating a test client for Canton sandbox.
3
+ *
4
+ * The TestClient provides sandbox lifecycle management, party allocation,
5
+ * and time manipulation for testing. Extends LedgerClient + AdminClient.
6
+ */
7
+
8
+ import type { Transport } from '../transport/types.js'
9
+ import type { Party, PartyDetails } from '../types/party.js'
10
+ import { createLedgerClient, type LedgerClient } from './createLedgerClient.js'
11
+ import { createAdminClient, type AdminClient } from './createAdminClient.js'
12
+
13
+ export type TestClientConfig = {
14
+ readonly transport: Transport
15
+ /** Default party for ledger operations. If not provided, one will be allocated. */
16
+ readonly party?: Party
17
+ }
18
+
19
+ export type TestClient = LedgerClient &
20
+ AdminClient & {
21
+ /** Get the current ledger time (static-time sandbox only). */
22
+ getTime: () => Promise<Date>
23
+
24
+ /** Set the ledger time (static-time sandbox only). */
25
+ setTime: (currentTime: Date, newTime: Date) => Promise<void>
26
+
27
+ /** Advance ledger time by a duration in seconds (static-time sandbox only). */
28
+ advanceTime: (seconds: number) => Promise<void>
29
+
30
+ /** Allocate multiple parties at once. */
31
+ allocateParties: (hints: readonly string[]) => Promise<readonly PartyDetails[]>
32
+ }
33
+
34
+ export function createTestClient(config: TestClientConfig): TestClient {
35
+ const { transport, party = 'test-party' as Party } = config
36
+
37
+ const ledger = createLedgerClient({ transport, actAs: party })
38
+ const admin = createAdminClient({ transport })
39
+
40
+ return {
41
+ ...ledger,
42
+ ...admin,
43
+
44
+ async getTime() {
45
+ const response = await transport.request<{ currentTime: string }>({
46
+ method: 'GET',
47
+ path: '/v2/time',
48
+ })
49
+ return new Date(response.currentTime)
50
+ },
51
+
52
+ async setTime(currentTime, newTime) {
53
+ await transport.request({
54
+ method: 'POST',
55
+ path: '/v2/time',
56
+ body: {
57
+ currentTime: currentTime.toISOString(),
58
+ newTime: newTime.toISOString(),
59
+ },
60
+ })
61
+ },
62
+
63
+ async advanceTime(seconds) {
64
+ const current = await this.getTime()
65
+ const newTime = new Date(current.getTime() + seconds * 1000)
66
+ await this.setTime(current, newTime)
67
+ },
68
+
69
+ async allocateParties(hints) {
70
+ return Promise.all(
71
+ hints.map((hint) =>
72
+ admin.allocateParty({ partyIdHint: hint }),
73
+ ),
74
+ )
75
+ },
76
+ }
77
+ }
@@ -0,0 +1,19 @@
1
+ export {
2
+ createLedgerClient,
3
+ type LedgerClient,
4
+ type LedgerClientConfig,
5
+ type CommandOptions,
6
+ type QueryOptions,
7
+ } from './createLedgerClient.js'
8
+
9
+ export {
10
+ createAdminClient,
11
+ type AdminClient,
12
+ type AdminClientConfig,
13
+ } from './createAdminClient.js'
14
+
15
+ export {
16
+ createTestClient,
17
+ type TestClient,
18
+ type TestClientConfig,
19
+ } from './createTestClient.js'
@@ -0,0 +1,6 @@
1
+ export type {
2
+ ChoiceDescriptor,
3
+ TemplateDescriptor,
4
+ InferPayload,
5
+ InferChoiceArgs,
6
+ } from './types.js'
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Runtime types for cantonjs codegen output.
3
+ *
4
+ * Generated code imports these types to describe templates and choices.
5
+ * The core library uses them for type-safe contract operations.
6
+ */
7
+
8
+ /** Describes a choice on a template. */
9
+ export type ChoiceDescriptor<
10
+ TArgs extends Record<string, unknown> = Record<string, unknown>,
11
+ _TResult = unknown,
12
+ > = {
13
+ readonly name: string
14
+ readonly _args?: TArgs
15
+ }
16
+
17
+ /** Describes a template with its payload type and available choices. */
18
+ export type TemplateDescriptor<
19
+ TPayload extends Record<string, unknown> = Record<string, unknown>,
20
+ TChoices extends Record<string, ChoiceDescriptor> = Record<string, ChoiceDescriptor>,
21
+ > = {
22
+ readonly templateId: string
23
+ readonly choices: TChoices
24
+ readonly _payload?: TPayload
25
+ }
26
+
27
+ /**
28
+ * Extract the payload type from a TemplateDescriptor.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * type AssetPayload = InferPayload<typeof Asset>
33
+ * // { readonly owner: string; readonly value: string }
34
+ * ```
35
+ */
36
+ export type InferPayload<T extends TemplateDescriptor> =
37
+ T extends TemplateDescriptor<infer P, Record<string, ChoiceDescriptor>> ? P : never
38
+
39
+ /**
40
+ * Extract the choice argument type for a specific choice.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * type TransferArgs = InferChoiceArgs<typeof Asset, 'Transfer'>
45
+ * // { readonly newOwner: string }
46
+ * ```
47
+ */
48
+ export type InferChoiceArgs<
49
+ T extends TemplateDescriptor,
50
+ C extends keyof T['choices'],
51
+ > = T['choices'][C] extends ChoiceDescriptor<infer A> ? A : never
@@ -0,0 +1,33 @@
1
+ import { CantonjsError, type ErrorCode } from './base.js'
2
+
3
+ /** JWT token has expired. */
4
+ export class TokenExpiredError extends CantonjsError {
5
+ readonly expiredAt: Date
6
+
7
+ constructor(expiredAt: Date) {
8
+ super('JWT token has expired', {
9
+ code: 'CJ2001' as ErrorCode,
10
+ metaMessages: [
11
+ `Token expired at: ${expiredAt.toISOString()}`,
12
+ 'Generate a new token using cantonctl auth or your identity provider.',
13
+ ],
14
+ })
15
+ this.name = 'TokenExpiredError'
16
+ this.expiredAt = expiredAt
17
+ }
18
+ }
19
+
20
+ /** JWT token is invalid or malformed. */
21
+ export class InvalidTokenError extends CantonjsError {
22
+ constructor(reason: string, options?: { cause?: Error }) {
23
+ super(`Invalid JWT token: ${reason}`, {
24
+ code: 'CJ2002' as ErrorCode,
25
+ cause: options?.cause,
26
+ metaMessages: [
27
+ 'Ensure the token is a valid JWT with the required Canton claims.',
28
+ 'Required scope: daml_ledger_api',
29
+ ],
30
+ })
31
+ this.name = 'InvalidTokenError'
32
+ }
33
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Structured error hierarchy for cantonjs.
3
+ *
4
+ * Follows viem's BaseError pattern with walk(), docsPath, and metaMessages.
5
+ * Error code ranges are complementary to cantonctl's E1xxx-E8xxx system.
6
+ *
7
+ * cantonjs error ranges:
8
+ * CJ1xxx — Transport errors (connection, HTTP, gRPC)
9
+ * CJ2xxx — Authentication errors (JWT, token lifecycle)
10
+ * CJ3xxx — Ledger errors (command rejection, contract not found)
11
+ * CJ4xxx — Admin errors (party, user, package management)
12
+ * CJ5xxx — Streaming errors (subscription, reconnection)
13
+ * CJ6xxx — Codegen errors (type mismatch, generation failures)
14
+ */
15
+
16
+ export type ErrorCode = `CJ${number}`
17
+
18
+ export class CantonjsError extends Error {
19
+ readonly code: ErrorCode
20
+ readonly shortMessage: string
21
+ readonly docsPath?: string
22
+ readonly metaMessages?: readonly string[]
23
+ override readonly cause?: Error
24
+
25
+ constructor(shortMessage: string, options: CantonjsErrorOptions) {
26
+ const message = buildMessage(shortMessage, options)
27
+ super(message)
28
+ this.name = 'CantonjsError'
29
+ this.code = options.code
30
+ this.shortMessage = shortMessage
31
+ this.docsPath = options.docsPath
32
+ this.metaMessages = options.metaMessages
33
+ this.cause = options.cause
34
+ }
35
+
36
+ /**
37
+ * Walk the error cause chain, returning the first error matching the predicate.
38
+ * Useful for finding specific error types in nested cause chains.
39
+ */
40
+ walk(fn?: (error: Error) => boolean): Error | undefined {
41
+ if (fn === undefined) {
42
+ return this.cause
43
+ }
44
+ if (fn(this)) {
45
+ return this
46
+ }
47
+ if (this.cause instanceof CantonjsError) {
48
+ return this.cause.walk(fn)
49
+ }
50
+ if (this.cause !== undefined && fn(this.cause)) {
51
+ return this.cause
52
+ }
53
+ return undefined
54
+ }
55
+ }
56
+
57
+ export type CantonjsErrorOptions = {
58
+ readonly code: ErrorCode
59
+ readonly cause?: Error
60
+ readonly docsPath?: string
61
+ readonly metaMessages?: readonly string[]
62
+ }
63
+
64
+ function buildMessage(shortMessage: string, options: CantonjsErrorOptions): string {
65
+ const parts: string[] = [shortMessage]
66
+
67
+ if (options.metaMessages !== undefined && options.metaMessages.length > 0) {
68
+ parts.push('')
69
+ for (const meta of options.metaMessages) {
70
+ parts.push(` ${meta}`)
71
+ }
72
+ }
73
+
74
+ if (options.docsPath !== undefined) {
75
+ parts.push('')
76
+ parts.push(` Docs: ${options.docsPath}`)
77
+ }
78
+
79
+ parts.push('')
80
+ parts.push(` Error code: ${options.code}`)
81
+
82
+ return parts.join('\n')
83
+ }
@@ -0,0 +1,5 @@
1
+ export { CantonjsError, type ErrorCode, type CantonjsErrorOptions } from './base.js'
2
+ export { ConnectionError, HttpError, GrpcError, TimeoutError } from './transport.js'
3
+ export { CommandRejectedError, ContractNotFoundError, AuthorizationError } from './ledger.js'
4
+ export { TokenExpiredError, InvalidTokenError } from './auth.js'
5
+ export { WebSocketError, StreamClosedError, ReconnectFailedError } from './streaming.js'