@europeum-ebsi/cli 0.0.0 → 1.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/LICENSE.txt +289 -289
  2. package/LICENSES.txt +538 -0
  3. package/README.md +1140 -98
  4. package/dist/api/client.d.ts +4 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +14 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/api/fetch.d.ts +13 -0
  9. package/dist/api/fetch.d.ts.map +1 -0
  10. package/dist/api/fetch.js +30 -0
  11. package/dist/api/fetch.js.map +1 -0
  12. package/dist/api/params.d.ts +4 -0
  13. package/dist/api/params.d.ts.map +1 -0
  14. package/dist/api/params.js +9 -0
  15. package/dist/api/params.js.map +1 -0
  16. package/dist/auth/dcql.d.ts +5 -0
  17. package/dist/auth/dcql.d.ts.map +1 -0
  18. package/dist/auth/dcql.js +41 -0
  19. package/dist/auth/dcql.js.map +1 -0
  20. package/dist/auth/presentation.d.ts +30 -0
  21. package/dist/auth/presentation.d.ts.map +1 -0
  22. package/dist/auth/presentation.js +99 -0
  23. package/dist/auth/presentation.js.map +1 -0
  24. package/dist/auth/token.d.ts +11 -0
  25. package/dist/auth/token.d.ts.map +1 -0
  26. package/dist/auth/token.js +116 -0
  27. package/dist/auth/token.js.map +1 -0
  28. package/dist/cli.d.ts +3 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +96 -10
  31. package/dist/cli.js.map +1 -1
  32. package/dist/commands/auth.d.ts +3 -0
  33. package/dist/commands/auth.d.ts.map +1 -0
  34. package/dist/commands/auth.js +99 -0
  35. package/dist/commands/auth.js.map +1 -0
  36. package/dist/commands/config-cmd.d.ts +3 -0
  37. package/dist/commands/config-cmd.d.ts.map +1 -0
  38. package/dist/commands/config-cmd.js +86 -0
  39. package/dist/commands/config-cmd.js.map +1 -0
  40. package/dist/commands/contracts-registry.d.ts +3 -0
  41. package/dist/commands/contracts-registry.d.ts.map +1 -0
  42. package/dist/commands/contracts-registry.js +132 -0
  43. package/dist/commands/contracts-registry.js.map +1 -0
  44. package/dist/commands/did-registry.d.ts +3 -0
  45. package/dist/commands/did-registry.d.ts.map +1 -0
  46. package/dist/commands/did-registry.js +110 -0
  47. package/dist/commands/did-registry.js.map +1 -0
  48. package/dist/commands/faucet.d.ts +3 -0
  49. package/dist/commands/faucet.d.ts.map +1 -0
  50. package/dist/commands/faucet.js +78 -0
  51. package/dist/commands/faucet.js.map +1 -0
  52. package/dist/commands/health.d.ts +3 -0
  53. package/dist/commands/health.d.ts.map +1 -0
  54. package/dist/commands/health.js +20 -0
  55. package/dist/commands/health.js.map +1 -0
  56. package/dist/commands/issuers-registry.d.ts +3 -0
  57. package/dist/commands/issuers-registry.d.ts.map +1 -0
  58. package/dist/commands/issuers-registry.js +340 -0
  59. package/dist/commands/issuers-registry.js.map +1 -0
  60. package/dist/commands/ledger.d.ts +3 -0
  61. package/dist/commands/ledger.d.ts.map +1 -0
  62. package/dist/commands/ledger.js +549 -372
  63. package/dist/commands/ledger.js.map +1 -1
  64. package/dist/commands/onboarding.d.ts +3 -0
  65. package/dist/commands/onboarding.d.ts.map +1 -0
  66. package/dist/commands/onboarding.js +301 -0
  67. package/dist/commands/onboarding.js.map +1 -0
  68. package/dist/commands/openapi.d.ts +3 -0
  69. package/dist/commands/openapi.d.ts.map +1 -0
  70. package/dist/commands/openapi.js +37 -0
  71. package/dist/commands/openapi.js.map +1 -0
  72. package/dist/commands/policies-registry.d.ts +3 -0
  73. package/dist/commands/policies-registry.d.ts.map +1 -0
  74. package/dist/commands/policies-registry.js +198 -0
  75. package/dist/commands/policies-registry.js.map +1 -0
  76. package/dist/commands/registry.d.ts +27 -0
  77. package/dist/commands/registry.d.ts.map +1 -0
  78. package/dist/commands/registry.js +62 -0
  79. package/dist/commands/registry.js.map +1 -0
  80. package/dist/commands/schemas-registry.d.ts +3 -0
  81. package/dist/commands/schemas-registry.d.ts.map +1 -0
  82. package/dist/commands/schemas-registry.js +231 -0
  83. package/dist/commands/schemas-registry.js.map +1 -0
  84. package/dist/commands/shared/args.d.ts +2 -0
  85. package/dist/commands/shared/args.d.ts.map +1 -0
  86. package/dist/commands/shared/args.js +4 -0
  87. package/dist/commands/shared/args.js.map +1 -0
  88. package/dist/commands/shared/wallet-opts.d.ts +9 -0
  89. package/dist/commands/shared/wallet-opts.d.ts.map +1 -0
  90. package/dist/commands/shared/wallet-opts.js +44 -0
  91. package/dist/commands/shared/wallet-opts.js.map +1 -0
  92. package/dist/commands/timestamp.d.ts +3 -0
  93. package/dist/commands/timestamp.d.ts.map +1 -0
  94. package/dist/commands/timestamp.js +250 -0
  95. package/dist/commands/timestamp.js.map +1 -0
  96. package/dist/commands/track-and-trace.d.ts +3 -0
  97. package/dist/commands/track-and-trace.d.ts.map +1 -0
  98. package/dist/commands/track-and-trace.js +235 -0
  99. package/dist/commands/track-and-trace.js.map +1 -0
  100. package/dist/commands/wallet.d.ts +3 -0
  101. package/dist/commands/wallet.d.ts.map +1 -0
  102. package/dist/commands/wallet.js +123 -0
  103. package/dist/commands/wallet.js.map +1 -0
  104. package/dist/config/config.d.ts +45 -0
  105. package/dist/config/config.d.ts.map +1 -0
  106. package/dist/config/config.js +111 -0
  107. package/dist/config/config.js.map +1 -0
  108. package/dist/config/ebsi-env.d.ts +4 -0
  109. package/dist/config/ebsi-env.d.ts.map +1 -0
  110. package/dist/config/ebsi-env.js +37 -0
  111. package/dist/config/ebsi-env.js.map +1 -0
  112. package/dist/crypto/wallet.d.ts +34 -0
  113. package/dist/crypto/wallet.d.ts.map +1 -0
  114. package/dist/crypto/wallet.js +100 -0
  115. package/dist/crypto/wallet.js.map +1 -0
  116. package/dist/index.d.ts +3 -0
  117. package/dist/index.d.ts.map +1 -0
  118. package/dist/index.js +15 -6
  119. package/dist/index.js.map +1 -1
  120. package/dist/ledger/read.d.ts +11 -0
  121. package/dist/ledger/read.d.ts.map +1 -0
  122. package/dist/ledger/read.js +24 -0
  123. package/dist/ledger/read.js.map +1 -0
  124. package/dist/ledger/registries.d.ts +25 -0
  125. package/dist/ledger/registries.d.ts.map +1 -0
  126. package/dist/ledger/registries.js +111 -0
  127. package/dist/ledger/registries.js.map +1 -0
  128. package/dist/ledger/write.d.ts +43 -0
  129. package/dist/ledger/write.d.ts.map +1 -0
  130. package/dist/ledger/write.js +119 -0
  131. package/dist/ledger/write.js.map +1 -0
  132. package/dist/onboarding/vc.d.ts +18 -0
  133. package/dist/onboarding/vc.d.ts.map +1 -0
  134. package/dist/onboarding/vc.js +72 -0
  135. package/dist/onboarding/vc.js.map +1 -0
  136. package/dist/output/format.d.ts +7 -0
  137. package/dist/output/format.d.ts.map +1 -0
  138. package/dist/output/format.js +94 -0
  139. package/dist/output/format.js.map +1 -0
  140. package/dist/tui/App.d.ts +3 -0
  141. package/dist/tui/App.d.ts.map +1 -0
  142. package/dist/tui/App.js +99 -0
  143. package/dist/tui/App.js.map +1 -0
  144. package/dist/tui/CommandPalette.d.ts +8 -0
  145. package/dist/tui/CommandPalette.d.ts.map +1 -0
  146. package/dist/tui/CommandPalette.js +105 -0
  147. package/dist/tui/CommandPalette.js.map +1 -0
  148. package/package.json +66 -108
  149. package/src/api/client.ts +26 -0
  150. package/src/api/fetch.ts +53 -0
  151. package/src/api/params.ts +17 -0
  152. package/src/auth/dcql.ts +84 -0
  153. package/src/auth/presentation.ts +255 -0
  154. package/src/auth/token.ts +244 -0
  155. package/src/cli.ts +164 -0
  156. package/src/commands/auth.ts +119 -0
  157. package/src/commands/config-cmd.ts +122 -0
  158. package/src/commands/contracts-registry.ts +156 -0
  159. package/src/commands/did-registry.ts +126 -0
  160. package/src/commands/faucet.ts +112 -0
  161. package/src/commands/health.ts +21 -0
  162. package/src/commands/issuers-registry.ts +385 -0
  163. package/src/commands/ledger.ts +777 -0
  164. package/src/commands/onboarding.ts +411 -0
  165. package/src/commands/openapi.ts +42 -0
  166. package/src/commands/policies-registry.ts +218 -0
  167. package/src/commands/registry.ts +152 -0
  168. package/src/commands/schemas-registry.ts +255 -0
  169. package/src/commands/shared/args.ts +14 -0
  170. package/src/commands/shared/wallet-opts.ts +85 -0
  171. package/src/commands/timestamp.ts +272 -0
  172. package/src/commands/track-and-trace.ts +263 -0
  173. package/src/commands/wallet.ts +175 -0
  174. package/src/config/config.ts +275 -0
  175. package/src/config/ebsi-env.ts +67 -0
  176. package/src/crypto/wallet.ts +291 -0
  177. package/src/index.ts +24 -0
  178. package/src/ledger/read.ts +70 -0
  179. package/src/ledger/registries.ts +285 -0
  180. package/src/ledger/write.ts +381 -0
  181. package/src/onboarding/vc.ts +205 -0
  182. package/src/output/format.ts +157 -0
  183. package/src/tui/App.tsx +282 -0
  184. package/src/tui/CommandPalette.tsx +223 -0
  185. package/bin/cli.js +0 -13
  186. package/dist/abi/pilot/DidRegistry.js +0 -568
  187. package/dist/abi/pilot/DidRegistry.js.map +0 -1
  188. package/dist/abi/pilot/Ptr.js +0 -666
  189. package/dist/abi/pilot/Ptr.js.map +0 -1
  190. package/dist/abi/pilot/SchemaSCRegistry.js +0 -264
  191. package/dist/abi/pilot/SchemaSCRegistry.js.map +0 -1
  192. package/dist/abi/pilot/Tcr.js +0 -715
  193. package/dist/abi/pilot/Tcr.js.map +0 -1
  194. package/dist/abi/pilot/Timestamp.js +0 -658
  195. package/dist/abi/pilot/Timestamp.js.map +0 -1
  196. package/dist/abi/pilot/Tir.js +0 -428
  197. package/dist/abi/pilot/Tir.js.map +0 -1
  198. package/dist/abi/pilot/TnT.js +0 -842
  199. package/dist/abi/pilot/TnT.js.map +0 -1
  200. package/dist/abi/pilot/Tpr.js +0 -492
  201. package/dist/abi/pilot/Tpr.js.map +0 -1
  202. package/dist/abi/test/DidRegistry.js +0 -568
  203. package/dist/abi/test/DidRegistry.js.map +0 -1
  204. package/dist/abi/test/Ptr.js +0 -666
  205. package/dist/abi/test/Ptr.js.map +0 -1
  206. package/dist/abi/test/SchemaSCRegistry.js +0 -300
  207. package/dist/abi/test/SchemaSCRegistry.js.map +0 -1
  208. package/dist/abi/test/Tcr.js +0 -715
  209. package/dist/abi/test/Tcr.js.map +0 -1
  210. package/dist/abi/test/Timestamp.js +0 -658
  211. package/dist/abi/test/Timestamp.js.map +0 -1
  212. package/dist/abi/test/Tir.js +0 -428
  213. package/dist/abi/test/Tir.js.map +0 -1
  214. package/dist/abi/test/TnT.js +0 -842
  215. package/dist/abi/test/TnT.js.map +0 -1
  216. package/dist/abi/test/Tpr.js +0 -492
  217. package/dist/abi/test/Tpr.js.map +0 -1
  218. package/dist/app.js +0 -659
  219. package/dist/app.js.map +0 -1
  220. package/dist/buildParam/didr.js +0 -374
  221. package/dist/buildParam/didr.js.map +0 -1
  222. package/dist/buildParam/index.js +0 -53
  223. package/dist/buildParam/index.js.map +0 -1
  224. package/dist/buildParam/ptr.js +0 -80
  225. package/dist/buildParam/ptr.js.map +0 -1
  226. package/dist/buildParam/tcr.js +0 -36
  227. package/dist/buildParam/tcr.js.map +0 -1
  228. package/dist/buildParam/timestamp.js +0 -350
  229. package/dist/buildParam/timestamp.js.map +0 -1
  230. package/dist/buildParam/tir.js +0 -110
  231. package/dist/buildParam/tir.js.map +0 -1
  232. package/dist/buildParam/tnt.js +0 -214
  233. package/dist/buildParam/tnt.js.map +0 -1
  234. package/dist/buildParam/tpr.js +0 -91
  235. package/dist/buildParam/tpr.js.map +0 -1
  236. package/dist/buildParam/tsr.js +0 -115
  237. package/dist/buildParam/tsr.js.map +0 -1
  238. package/dist/commands/authorisation.js +0 -144
  239. package/dist/commands/authorisation.js.map +0 -1
  240. package/dist/commands/compute.js +0 -680
  241. package/dist/commands/compute.js.map +0 -1
  242. package/dist/commands/conformance.js +0 -813
  243. package/dist/commands/conformance.js.map +0 -1
  244. package/dist/commands/hardwarewallet.js +0 -41
  245. package/dist/commands/hardwarewallet.js.map +0 -1
  246. package/dist/commands/index.js +0 -8
  247. package/dist/commands/index.js.map +0 -1
  248. package/dist/commands/ptr.js +0 -54
  249. package/dist/commands/ptr.js.map +0 -1
  250. package/dist/commands/tcr.js +0 -50
  251. package/dist/commands/tcr.js.map +0 -1
  252. package/dist/commands/tir.js +0 -64
  253. package/dist/commands/tir.js.map +0 -1
  254. package/dist/commands/tnl.js +0 -81
  255. package/dist/commands/tnl.js.map +0 -1
  256. package/dist/commands/tsr.js +0 -45
  257. package/dist/commands/tsr.js.map +0 -1
  258. package/dist/commands/view.js +0 -53
  259. package/dist/commands/view.js.map +0 -1
  260. package/dist/config.js +0 -497
  261. package/dist/config.js.map +0 -1
  262. package/dist/interfaces/context.js +0 -2
  263. package/dist/interfaces/context.js.map +0 -1
  264. package/dist/interfaces/contracts/ProxyFactory.js +0 -2
  265. package/dist/interfaces/contracts/ProxyFactory.js.map +0 -1
  266. package/dist/interfaces/contracts/ProxyTemplateRegistry.js +0 -2
  267. package/dist/interfaces/contracts/ProxyTemplateRegistry.js.map +0 -1
  268. package/dist/interfaces/contracts/SchemaSCRegistry.js +0 -2
  269. package/dist/interfaces/contracts/SchemaSCRegistry.js.map +0 -1
  270. package/dist/interfaces/contracts/common.js +0 -2
  271. package/dist/interfaces/contracts/common.js.map +0 -1
  272. package/dist/interfaces/index.js +0 -5
  273. package/dist/interfaces/index.js.map +0 -1
  274. package/dist/interfaces/jsonrpc.interface.js +0 -2
  275. package/dist/interfaces/jsonrpc.interface.js.map +0 -1
  276. package/dist/interfaces/paginated-list.interface.js +0 -2
  277. package/dist/interfaces/paginated-list.interface.js.map +0 -1
  278. package/dist/interfaces/unsigned-transaction.interface.js +0 -2
  279. package/dist/interfaces/unsigned-transaction.interface.js.map +0 -1
  280. package/dist/interfaces/utils.interface.js +0 -2
  281. package/dist/interfaces/utils.interface.js.map +0 -1
  282. package/dist/programs/migrateDid.js +0 -159
  283. package/dist/programs/migrateDid.js.map +0 -1
  284. package/dist/programs/migrateDids.js +0 -232
  285. package/dist/programs/migrateDids.js.map +0 -1
  286. package/dist/programs/migrateTsr.js +0 -201
  287. package/dist/programs/migrateTsr.js.map +0 -1
  288. package/dist/scripts/accreditAndAuthorize/conformance/step1 +0 -34
  289. package/dist/scripts/accreditAndAuthorize/conformance/step2 +0 -18
  290. package/dist/scripts/accreditAndAuthorize/conformance/step3 +0 -9
  291. package/dist/scripts/accreditAndAuthorize/conformance/step4 +0 -27
  292. package/dist/scripts/accreditAndAuthorize/conformance/step5 +0 -13
  293. package/dist/scripts/accreditAndAuthorize/conformance/step6 +0 -14
  294. package/dist/scripts/accreditAndAuthorize/conformance/step7 +0 -7
  295. package/dist/scripts/accreditAndAuthorize/test/step1 +0 -34
  296. package/dist/scripts/accreditAndAuthorize/test/step2 +0 -18
  297. package/dist/scripts/accreditAndAuthorize/test/step3 +0 -9
  298. package/dist/scripts/accreditAndAuthorize/test/step4 +0 -27
  299. package/dist/scripts/accreditAndAuthorize/test/step5 +0 -13
  300. package/dist/scripts/accreditAndAuthorize/test/step6 +0 -14
  301. package/dist/scripts/accreditAndAuthorize/test/step7 +0 -7
  302. package/dist/scripts/accreditTI +0 -21
  303. package/dist/scripts/assets/Nodes.json +0 -27
  304. package/dist/scripts/assets/vcdm1.1/CTRevocableCredential.json +0 -30
  305. package/dist/scripts/assets/vcdm1.1/CredentialToAttestVerifiableAuthorisationForTrustChain.json +0 -29
  306. package/dist/scripts/assets/vcdm1.1/Nodes.json +0 -27
  307. package/dist/scripts/assets/vcdm1.1/TrustedNodesList.json +0 -35
  308. package/dist/scripts/assets/vcdm1.1/VerifiableAccreditationToAccredit.json +0 -35
  309. package/dist/scripts/assets/vcdm1.1/VerifiableAccreditationToAttest.json +0 -33
  310. package/dist/scripts/assets/vcdm1.1/VerifiableAuthorisationForTrustChain.json +0 -22
  311. package/dist/scripts/assets/vcdm1.1/VerifiableAuthorisationToInvoke.json +0 -24
  312. package/dist/scripts/assets/vcdm1.1/VerifiableAuthorisationToOnboard.json +0 -24
  313. package/dist/scripts/assets/vcdm2.0/CredentialToAttestVerifiableAuthorisationForTrustChain.json +0 -29
  314. package/dist/scripts/assets/vcdm2.0/TrustedNodesList.json +0 -36
  315. package/dist/scripts/assets/vcdm2.0/VerifiableAccreditationToAccredit.json +0 -40
  316. package/dist/scripts/assets/vcdm2.0/VerifiableAccreditationToAttest.json +0 -38
  317. package/dist/scripts/assets/vcdm2.0/VerifiableAuthorisationForTrustChain.json +0 -30
  318. package/dist/scripts/assets/vcdm2.0/VerifiableAuthorisationToInvoke.json +0 -24
  319. package/dist/scripts/assets/vcdm2.0/VerifiableAuthorisationToOnboard.json +0 -23
  320. package/dist/scripts/bootstrap/0a-loadTPROperator +0 -5
  321. package/dist/scripts/bootstrap/0b-loadAdmin +0 -8
  322. package/dist/scripts/bootstrap/1-populateTPR +0 -92
  323. package/dist/scripts/bootstrap/2-populateDID +0 -6
  324. package/dist/scripts/bootstrap/3-populateTimestamp +0 -9
  325. package/dist/scripts/bootstrap/4-populateTIR +0 -8
  326. package/dist/scripts/bootstrap/5-populateTSR +0 -85
  327. package/dist/scripts/bootstrap/6-setupConformanceIssuer +0 -35
  328. package/dist/scripts/bootstrap/README.md +0 -218
  329. package/dist/scripts/issueVcInvoke +0 -10
  330. package/dist/scripts/issueVcOnboard +0 -9
  331. package/dist/scripts/issueVcRootTAO +0 -11
  332. package/dist/scripts/issueVcTAO +0 -12
  333. package/dist/scripts/issueVcTI +0 -12
  334. package/dist/scripts/issueVcTnl +0 -32
  335. package/dist/scripts/issue_CTRevocableCredential +0 -12
  336. package/dist/scripts/issue_SelfAttestationSupportOffice +0 -10
  337. package/dist/scripts/issue_VerifiableAccreditationToAccredit +0 -11
  338. package/dist/scripts/issue_VerifiableAccreditationToAttest +0 -11
  339. package/dist/scripts/issue_VerifiableAuthorisationForTrustChain +0 -10
  340. package/dist/scripts/issue_VerifiableAuthorisationToOnboard +0 -9
  341. package/dist/scripts/preregisterIssuer +0 -6
  342. package/dist/scripts/registerDidDocument +0 -15
  343. package/dist/scripts/registerIssuer +0 -6
  344. package/dist/scripts/updateVcRootTAO +0 -10
  345. package/dist/scripts/updateVcTAO +0 -11
  346. package/dist/scripts/updateVcTI +0 -11
  347. package/dist/scripts/vcdm2.0/issueSelfAttestationSupportOffice +0 -10
  348. package/dist/scripts/vcdm2.0/issueVcInvoke +0 -12
  349. package/dist/scripts/vcdm2.0/issueVcOnboard +0 -11
  350. package/dist/scripts/vcdm2.0/issueVcRootTAO +0 -14
  351. package/dist/scripts/vcdm2.0/issueVcTAO +0 -15
  352. package/dist/scripts/vcdm2.0/issueVcTI +0 -15
  353. package/dist/scripts/vcdm2.0/issueVcTnl +0 -34
  354. package/dist/scripts/vcdm2.0/registerDidDocument +0 -15
  355. package/dist/scripts/vcdm2.0/updateVcRootTAO +0 -13
  356. package/dist/scripts/vcdm2.0/updateVcTAO +0 -14
  357. package/dist/scripts/vcdm2.0/updateVcTI +0 -14
  358. package/dist/scripts/vcdm2.0/verifyVcTnl +0 -10
  359. package/dist/scripts/verifyVcTnl +0 -10
  360. package/dist/scripts/wct/accreditAndAuthorize +0 -133
  361. package/dist/scripts/wct/accreditAndAuthorize2 +0 -89
  362. package/dist/scripts/wct/holderWallet +0 -39
  363. package/dist/scripts/wct/holderWallet2 +0 -39
  364. package/dist/scripts/wct/issueToHolder +0 -38
  365. package/dist/scripts/wct/issueToHolder2 +0 -38
  366. package/dist/scripts/wct/pda1 +0 -3
  367. package/dist/scripts/wct/verifier +0 -8
  368. package/dist/scripts/wct/verifier2 +0 -7
  369. package/dist/utils/Client.js +0 -155
  370. package/dist/utils/Client.js.map +0 -1
  371. package/dist/utils/HardwareWallet.js +0 -326
  372. package/dist/utils/HardwareWallet.js.map +0 -1
  373. package/dist/utils/http.js +0 -132
  374. package/dist/utils/http.js.map +0 -1
  375. package/dist/utils/index.js +0 -8
  376. package/dist/utils/index.js.map +0 -1
  377. package/dist/utils/jsonrpc.js +0 -38
  378. package/dist/utils/jsonrpc.js.map +0 -1
  379. package/dist/utils/print.js +0 -56
  380. package/dist/utils/print.js.map +0 -1
  381. package/dist/utils/utils.js +0 -427
  382. package/dist/utils/utils.js.map +0 -1
  383. package/dist/utils/vcdm.js +0 -47
  384. package/dist/utils/vcdm.js.map +0 -1
@@ -1,680 +0,0 @@
1
- import { decodeJWT } from "@europeum-ebsi/did-jwt";
2
- import { util } from "@europeum-ebsi/ebsi-did-resolver";
3
- import { ValidationError } from "@europeum-ebsi/verifiable-credential";
4
- import * as vcdm11vc from "@europeum-ebsi/verifiable-credential/vcdm11.js";
5
- import * as vcdm20vc from "@europeum-ebsi/verifiable-credential/vcdm20.js";
6
- import * as vcdm11vp from "@europeum-ebsi/verifiable-presentation/vcdm11.js";
7
- import * as vcdm20vp from "@europeum-ebsi/verifiable-presentation/vcdm20.js";
8
- import { EbsiWallet } from "@europeum-ebsi/wallet-lib";
9
- import { ethers } from "ethers";
10
- import Joi from "joi";
11
- import { base64url, calculateJwkThumbprint } from "jose";
12
- import { sha256 as hasher } from "multiformats/hashes/sha2";
13
- import { createHash, randomBytes, randomUUID } from "node:crypto";
14
- import { computeSchemaId, encodePrivateKey, encodePublicKey, estimateVcdmVersion, formatEthersUnsignedTransaction, fromHexString, JoiHexadecimal, multibaseEncode, prefixWith0x, red, removePrefix0x, yellow, } from "../utils/index.js";
15
- import { ledgerGetTransaction, ledgerGetTransactionReceipt } from "./ledger.js";
16
- export async function compute(method, inputs, context) {
17
- const { client } = context;
18
- switch (method) {
19
- case "address": {
20
- const [hexOrJwk] = inputs;
21
- const publicKeyHex = typeof hexOrJwk === "string"
22
- ? hexOrJwk
23
- : encodePublicKey({
24
- format: "hex",
25
- key: hexOrJwk,
26
- });
27
- const address = ethers.computeAddress(publicKeyHex);
28
- yellow(address);
29
- return address;
30
- }
31
- case "checkStatusList2021CredentialSchema": {
32
- const [credential] = inputs;
33
- try {
34
- Joi.assert(credential, Joi.object({
35
- "@context": Joi.array()
36
- .ordered(Joi.string()
37
- .valid("https://www.w3.org/2018/credentials/v1")
38
- .required(), Joi.string()
39
- .valid("https://w3id.org/vc/status-list/2021/v1")
40
- .required())
41
- .items(Joi.string().uri())
42
- .required(),
43
- credentialSubject: Joi.object({
44
- encodedList: Joi.string().required(),
45
- id: Joi.string().uri().required(),
46
- statusPurpose: Joi.string()
47
- .valid("revocation", "suspension")
48
- .required(),
49
- type: Joi.string().valid("StatusList2021").required(),
50
- })
51
- .unknown(true)
52
- .required(),
53
- type: Joi.array()
54
- .ordered(
55
- // First item must be "VerifiableCredential"
56
- Joi.string().valid("VerifiableCredential").required())
57
- .items(
58
- // "StatusList2021Credential" must be present
59
- Joi.string().valid("StatusList2021Credential").required(), Joi.string())
60
- .required(),
61
- })
62
- // Allow additional properties
63
- .unknown(true));
64
- yellow("StatusList2021 Credential Schema correct");
65
- return true;
66
- }
67
- catch (error) {
68
- red(error);
69
- throw error;
70
- }
71
- }
72
- case "verifyVcJwt": {
73
- try {
74
- const result = await computeVerifyVcJwt(inputs, context);
75
- yellow(result);
76
- return result;
77
- }
78
- catch (error) {
79
- if (error instanceof ValidationError) {
80
- red(error.toJSON());
81
- }
82
- else {
83
- red(error);
84
- }
85
- throw error;
86
- }
87
- }
88
- case "verifyVpJwt": {
89
- try {
90
- const result = await computeVerifyVpJwt(inputs, context);
91
- yellow(result);
92
- return result;
93
- }
94
- catch (error) {
95
- if (error instanceof ValidationError) {
96
- red(error.toJSON());
97
- }
98
- else {
99
- red(error);
100
- }
101
- throw error;
102
- }
103
- }
104
- case "did2": {
105
- const [jwk] = inputs;
106
- const did = EbsiWallet.createDid("NATURAL_PERSON", jwk);
107
- yellow(did);
108
- return did;
109
- }
110
- case "createVcJwt": {
111
- const payloadVc = inputs[0];
112
- const payloadJwt = inputs[1];
113
- const alg = (inputs[2] ?? "ES256K");
114
- const vcdmVersionInput = (inputs[3] ?? "1.1");
115
- Joi.assert(alg, Joi.string().valid("ES256K", "ES256", "RS256", "EdDSA").required());
116
- let vcdmVersion;
117
- if (vcdmVersionInput === 1.1)
118
- vcdmVersion = "1.1";
119
- else if (vcdmVersionInput === 2)
120
- vcdmVersion = "2.0";
121
- else
122
- vcdmVersion = vcdmVersionInput;
123
- Joi.assert(vcdmVersion, Joi.string().valid("1.1", "2.0").required());
124
- const iat = Math.floor(Date.now() / 1000) - 10;
125
- const exp = iat + 5 * 365 * 24 * 3600;
126
- const issuanceDate = `${new Date(iat * 1000)
127
- .toISOString()
128
- .slice(0, -5)}Z`;
129
- const expirationDate = `${new Date(exp * 1000)
130
- .toISOString()
131
- .slice(0, -5)}Z`;
132
- const jti = payloadVc.id ?? `urn:uuid:${randomUUID()}`;
133
- const sub = payloadVc.credentialSubject?.id;
134
- const payload = vcdmVersion === "1.1"
135
- ? {
136
- exp,
137
- iat,
138
- iss: client.did,
139
- jti,
140
- nbf: iat,
141
- sub,
142
- vc: {
143
- "@context": ["https://www.w3.org/2018/credentials/v1"],
144
- expirationDate,
145
- id: jti,
146
- issuanceDate,
147
- issued: issuanceDate,
148
- issuer: client.did,
149
- type: ["VerifiableCredential"],
150
- validFrom: issuanceDate,
151
- ...payloadVc,
152
- },
153
- ...payloadJwt,
154
- }
155
- : {
156
- "@context": ["https://www.w3.org/ns/credentials/v2"],
157
- exp,
158
- iat,
159
- id: jti,
160
- issuer: client.did,
161
- type: ["VerifiableCredential"],
162
- validFrom: issuanceDate,
163
- validUntil: expirationDate,
164
- ...payloadVc,
165
- ...payloadJwt,
166
- };
167
- const vc = await client.signJWT(payload, { typ: vcdmVersion === "1.1" ? "JWT" : "vc+jwt" }, alg);
168
- yellow(vc);
169
- return vc;
170
- }
171
- case "createVpJwt": {
172
- const inputVerifiableCredential = inputs[0];
173
- const payloadVp = inputs[1];
174
- const payloadJwt = inputs[2];
175
- const alg = inputs[3] || "ES256K";
176
- const vcdmVersionInput = (inputs[4] ?? "1.1");
177
- let vcdmVersion;
178
- if (vcdmVersionInput === 1.1)
179
- vcdmVersion = "1.1";
180
- else if (vcdmVersionInput === 2)
181
- vcdmVersion = "2.0";
182
- else
183
- vcdmVersion = vcdmVersionInput;
184
- Joi.assert(vcdmVersion, Joi.string().valid("1.1", "2.0").required());
185
- // NOTE: We cannot use @europeum-ebsi/verifiable-presentation library
186
- // because it requires the private key and the CLI tool
187
- // now supports Hardware Wallets, which do not expose private keys.
188
- const now = Math.floor(Date.now() / 1000) - 10;
189
- const jti = `urn:did:${randomUUID()}`;
190
- const payload = vcdmVersion === "1.1"
191
- ? {
192
- aud: "any",
193
- exp: now + 120, // 2 minutes in the future
194
- iat: now,
195
- iss: client.did,
196
- jti,
197
- nbf: now,
198
- nonce: randomUUID(),
199
- sub: client.did,
200
- vp: {
201
- "@context": ["https://www.w3.org/2018/credentials/v1"],
202
- holder: client.did,
203
- id: jti,
204
- type: ["VerifiablePresentation"],
205
- verifiableCredential: typeof inputVerifiableCredential === "string"
206
- ? [inputVerifiableCredential]
207
- : inputVerifiableCredential,
208
- ...payloadVp,
209
- },
210
- ...payloadJwt,
211
- }
212
- : {
213
- "@context": ["https://www.w3.org/ns/credentials/v2"],
214
- aud: "any",
215
- exp: now + 120, // 2 minutes in the future
216
- holder: client.did,
217
- iat: now,
218
- id: jti,
219
- nonce: randomUUID(),
220
- type: ["VerifiablePresentation"],
221
- verifiableCredential: (typeof inputVerifiableCredential ===
222
- "string"
223
- ? [inputVerifiableCredential]
224
- : inputVerifiableCredential).map((vc) => ({
225
- "@context": "https://www.w3.org/ns/credentials/v2",
226
- id: `data:application/vc+jwt,${vc}`,
227
- type: "EnvelopedVerifiableCredential",
228
- })),
229
- ...payloadVp,
230
- ...payloadJwt,
231
- };
232
- const vp = await client.signJWT(payload, { typ: vcdmVersion === "1.1" ? "JWT" : "vp+jwt" }, alg);
233
- yellow(vp);
234
- return vp;
235
- }
236
- case "decodeBase64": {
237
- const enc = inputs[0];
238
- const type = inputs[1] || "utf8";
239
- Joi.assert(enc, Joi.string());
240
- const buffer = Buffer.from(enc, "base64");
241
- if (type === "buffer") {
242
- console.log(buffer);
243
- return buffer;
244
- }
245
- if (type === "json") {
246
- const decoded = JSON.parse(buffer.toString("utf8"));
247
- yellow(decoded);
248
- return decoded;
249
- }
250
- const decoded = buffer.toString("utf8");
251
- yellow(decoded);
252
- return decoded;
253
- }
254
- case "decodeBase64url": {
255
- const enc = inputs[0];
256
- Joi.assert(enc, Joi.string());
257
- const decoded = base64url.decode(enc);
258
- yellow(decoded);
259
- return decoded;
260
- }
261
- case "decodeContractData": {
262
- const [types, dataInput, hasFn] = inputs;
263
- Joi.assert(types, Joi.array().items(Joi.string()));
264
- Joi.assert(dataInput, JoiHexadecimal);
265
- Joi.assert(hasFn, Joi.string().valid("true", "false").optional());
266
- let fn;
267
- let data;
268
- if (hasFn === "true") {
269
- fn = `0x${removePrefix0x(dataInput).slice(0, 8)}`;
270
- data = `0x${removePrefix0x(dataInput).slice(8)}`;
271
- }
272
- else {
273
- data = dataInput;
274
- }
275
- const decoded = ethers.AbiCoder.defaultAbiCoder().decode(types, data);
276
- const result = {
277
- data: decoded,
278
- ...(hasFn === "true" && { functionSig: fn }),
279
- };
280
- yellow(result);
281
- return result;
282
- }
283
- case "decodeHex": {
284
- const enc = inputs[0];
285
- Joi.assert(enc, Joi.string());
286
- const decoded = Buffer.from(removePrefix0x(enc), "hex").toString("utf8");
287
- yellow(decoded);
288
- return decoded;
289
- }
290
- case "decodeJWT": {
291
- const jwt = inputs[0];
292
- Joi.assert(jwt, Joi.string());
293
- const decoded = decodeJWT(jwt);
294
- yellow(decoded);
295
- return decoded;
296
- }
297
- case "decodeLogs": {
298
- const logs = inputs[0];
299
- const logsDecoded = await decodeLogs(logs, context);
300
- yellow(logsDecoded);
301
- return logsDecoded;
302
- }
303
- case "decodeTransaction": {
304
- const tx = inputs[0];
305
- const txDecoded = await decodeTransaction(tx, context);
306
- yellow(txDecoded);
307
- return txDecoded;
308
- }
309
- case "encodeBase64": {
310
- const dec = inputs[0];
311
- Joi.assert(dec, Joi.string());
312
- const encoded = Buffer.from(removePrefix0x(dec), "hex").toString("base64");
313
- yellow(encoded);
314
- return encoded;
315
- }
316
- case "encodeBase64url": {
317
- const dec = inputs[0];
318
- Joi.assert(dec, Joi.string());
319
- const encoded = base64url.encode(Buffer.from(removePrefix0x(dec), "hex"));
320
- yellow(encoded);
321
- return encoded;
322
- }
323
- case "encodeContractData": {
324
- const [types, data, fn] = inputs;
325
- Joi.assert(data, Joi.array().items(Joi.string()));
326
- Joi.assert(types, Joi.array().items(Joi.string()));
327
- Joi.assert(fn, Joi.string().optional());
328
- const encoded = ethers.AbiCoder.defaultAbiCoder().encode(types, data);
329
- let result = encoded;
330
- if (fn) {
331
- // get the function hash
332
- const fnHash = /^(?:0x)?[0-9a-fA-F]+$/.test(fn)
333
- ? fn
334
- : ethers.keccak256(Buffer.from(fn)).slice(0, 10);
335
- // prefix the function hash with the encoded data
336
- result = `${prefixWith0x(fnHash)}${encoded.slice(2)}`;
337
- }
338
- yellow(result);
339
- return result;
340
- }
341
- case "encodePrivateKey": {
342
- const [key, options] = inputs;
343
- Joi.assert(options, Joi.object({
344
- alg: Joi.string()
345
- .valid("ES256K", "ES256", "RS256", "EdDSA")
346
- .optional(),
347
- format: Joi.string().valid("jwk", "hex", "pem"),
348
- type: Joi.string().valid("pkcs1", "pkcs8", "sec1", "spki").optional(),
349
- }));
350
- const result = encodePrivateKey({ key, ...options });
351
- yellow(result);
352
- return result;
353
- }
354
- case "encodePublicKey": {
355
- const [key, options] = inputs;
356
- Joi.assert(options, Joi.object({
357
- alg: Joi.string()
358
- .valid("ES256K", "ES256", "RS256", "EdDSA")
359
- .optional(),
360
- format: Joi.string().valid("jwk", "hex", "pem"),
361
- }));
362
- const result = encodePublicKey({ key, ...options });
363
- yellow(result);
364
- return result;
365
- }
366
- case "epochtime": {
367
- let result;
368
- if (!inputs[0])
369
- result = Math.round(Date.now() / 1000);
370
- else if (typeof inputs[0] === "string")
371
- result = Math.round(new Date(inputs[0]).getTime() / 1000);
372
- else
373
- result = new Date(inputs[0] * 1000).toISOString();
374
- yellow(result);
375
- return result;
376
- }
377
- case "length": {
378
- const [array] = inputs;
379
- Joi.assert(array, Joi.array());
380
- const len = array.length;
381
- yellow(len);
382
- return len;
383
- }
384
- case "randomID": {
385
- return randomBytes(32).toString("hex");
386
- }
387
- case "recordId": {
388
- const [address, blockNumber, hashValue] = inputs;
389
- Joi.assert(inputs, Joi.array().items(Joi.string()).length(3));
390
- const abiEncoded = ethers.AbiCoder.defaultAbiCoder().encode(["address", "uint256", "bytes"], [address, blockNumber, hashValue]);
391
- const bufferSha256 = Buffer.from(sha256(abiEncoded), "hex");
392
- const recordId = multibaseEncode("base64url", bufferSha256);
393
- yellow(recordId);
394
- return recordId;
395
- }
396
- case "schemaId": {
397
- const [schema, base] = inputs;
398
- const schemaId = await computeSchemaId(schema, base);
399
- yellow(schemaId);
400
- return schemaId;
401
- }
402
- case "sha256": {
403
- const [data] = inputs;
404
- if (typeof data === "object") {
405
- return sha256(JSON.stringify(data));
406
- }
407
- return sha256(data);
408
- }
409
- case "signJwt": {
410
- const [payload, alg, headers] = inputs;
411
- const jwt = await client.signJWT(payload, headers, alg);
412
- yellow(jwt);
413
- return jwt;
414
- }
415
- case "signTransaction": {
416
- const unsignedTransaction = inputs[0];
417
- const uTx = formatEthersUnsignedTransaction(
418
- // eslint-disable-next-line unicorn/prefer-structured-clone
419
- JSON.parse(JSON.stringify(unsignedTransaction)));
420
- const sgnTx = await client.ethWallet.signTransaction(uTx);
421
- yellow(sgnTx);
422
- return sgnTx;
423
- }
424
- case "statusListIndex": {
425
- const [did] = inputs;
426
- Joi.assert(did, Joi.string());
427
- const statusListIndex = (createHash("sha256")
428
- .update(did, "utf8")
429
- .digest()
430
- .slice(0, 6)
431
- .readUInt32BE() % 131_072).toString();
432
- yellow(statusListIndex);
433
- return statusListIndex;
434
- }
435
- case "subaccountDid": {
436
- const [did] = inputs;
437
- Joi.assert(did, Joi.string());
438
- const subaccountMsiBytes = createHash("sha256")
439
- .update(did, "utf8")
440
- .digest()
441
- .slice(0, 16);
442
- const subaccount = util.createDid(subaccountMsiBytes);
443
- yellow(subaccount);
444
- return subaccount;
445
- }
446
- case "thumbprint": {
447
- const [hexOrJwk, alg] = inputs;
448
- const publicKeyJwk = typeof hexOrJwk === "string"
449
- ? encodePublicKey({
450
- alg,
451
- format: "jwk",
452
- key: hexOrJwk,
453
- })
454
- : hexOrJwk;
455
- const thumbprint = await calculateJwkThumbprint(publicKeyJwk, "sha256");
456
- yellow(thumbprint);
457
- return thumbprint;
458
- }
459
- case "timestampId": {
460
- const hash = inputs[0];
461
- Joi.assert(hash, Joi.string());
462
- const multihash = await hasher.digest(fromHexString(hash));
463
- const timestampId = `u${base64url.encode(multihash.bytes)}`;
464
- yellow(timestampId);
465
- return timestampId;
466
- }
467
- case "userPin": {
468
- const [did] = inputs;
469
- const userPin = getUserPin(did);
470
- yellow(userPin);
471
- return userPin;
472
- }
473
- case "wait": {
474
- const [seconds] = inputs;
475
- const milliseconds = Math.round(Number(seconds) * 1000);
476
- console.log(`waiting ${milliseconds / 1000} seconds`);
477
- await new Promise((r) => {
478
- setTimeout(r, milliseconds);
479
- });
480
- return 0;
481
- }
482
- default: {
483
- throw new Error(`Invalid method '${method}'`);
484
- }
485
- }
486
- }
487
- export async function computeVerifyVcJwt(inputs, context) {
488
- const [vcJwt, options, expectedResult] = inputs;
489
- const vcdmVersion = estimateVcdmVersion(vcJwt);
490
- const ebsiEnvConfig = {
491
- hosts: [context.config.domain.replace(/^https?:\/\//, "")],
492
- network: {
493
- isOptional: false,
494
- name: context.config.env,
495
- },
496
- scheme: "ebsi",
497
- services: {
498
- "did-registry": context.config.api.did.version,
499
- "trusted-issuers-registry": context.config.api.tir.version,
500
- "trusted-policies-registry": context.config.api.tpr.version,
501
- "trusted-schemas-registry": context.config.api.tsr.version,
502
- },
503
- };
504
- try {
505
- await (vcdmVersion === "1.1" ? vcdm11vc : vcdm20vc).verifyCredentialJwt(vcJwt, ebsiEnvConfig, options);
506
- switch (expectedResult) {
507
- case "expectRevoked": {
508
- throw new Error("Credential is not revoked");
509
- }
510
- default: {
511
- return "Verifiable Credential is valid";
512
- }
513
- }
514
- }
515
- catch (error) {
516
- if (expectedResult === "expectRevoked") {
517
- if (error.message === "Credential is not revoked")
518
- throw error;
519
- if (error.message.includes("revoked")) {
520
- return "Verifiable Credential is revoked";
521
- }
522
- }
523
- throw error;
524
- }
525
- }
526
- export async function computeVerifyVpJwt(inputs, context) {
527
- const [vpJwt, audience, options] = inputs;
528
- const vcdmVersion = estimateVcdmVersion(vpJwt);
529
- const ebsiEnvConfig = {
530
- hosts: [context.config.domain.replace(/^https?:\/\//, "")],
531
- network: {
532
- isOptional: false,
533
- name: context.config.env,
534
- },
535
- scheme: "ebsi",
536
- services: {
537
- "did-registry": context.config.api.did.version,
538
- "trusted-issuers-registry": context.config.api.tir.version,
539
- "trusted-policies-registry": context.config.api.tpr.version,
540
- "trusted-schemas-registry": context.config.api.tsr.version,
541
- },
542
- };
543
- await (vcdmVersion === "1.1" ? vcdm11vp : vcdm20vp).verifyPresentationJwt(vpJwt, audience, ebsiEnvConfig, options);
544
- return "Verifiable Presentation is valid";
545
- }
546
- export function decodeLog(log, context) {
547
- const api = getApiByContractId(log.address, context);
548
- const logDecoded = api.contract.interface.parseLog(log);
549
- if (!logDecoded)
550
- throw new Error("Can't parse log");
551
- const { args: argsWithArray, fragment, name, signature, topic } = logDecoded;
552
- const args = getProperties(argsWithArray, fragment.inputs);
553
- return { args, name, signature, topic };
554
- }
555
- export async function decodeLogs(input, context) {
556
- if (!input)
557
- throw new Error("Invalid logs: no input provided");
558
- let receipt;
559
- if (typeof input === "string") {
560
- receipt = await ledgerGetTransactionReceipt([input], false, context);
561
- }
562
- else if (input.receipt) {
563
- receipt = input.receipt;
564
- }
565
- else if (input.logs) {
566
- receipt = input;
567
- }
568
- else {
569
- if (!Array.isArray(input)) {
570
- throw new TypeError("Invalid logs: The input must be a transaction hash, a transaction receipt, or an array of logs");
571
- }
572
- return input.map((log) => decodeLog(log, context));
573
- }
574
- if (!Array.isArray(receipt.logs)) {
575
- throw new TypeError("Invalid logs: The input must be a transaction hash, a transaction receipt, or an array of logs");
576
- }
577
- return receipt.logs.map((log) => decodeLog(log, context));
578
- }
579
- export async function decodeTransaction(tx, context) {
580
- let txData;
581
- if (typeof tx === "string") {
582
- txData =
583
- tx.length <= 66
584
- ? // it is a tx hash
585
- (await ledgerGetTransaction([tx], false, context))
586
- : // it is a signed transaction
587
- ethers.Transaction.from(tx);
588
- }
589
- else {
590
- txData = tx;
591
- }
592
- if (!txData["data"] && !txData["input"]) {
593
- throw new Error("Invalid transaction: There is no input or data");
594
- }
595
- const api = getApiByContractId(txData["to"], context);
596
- const parsedTx = api.contract.interface.parseTransaction({
597
- data: (txData["data"] ?? txData["input"]),
598
- });
599
- if (!parsedTx)
600
- throw new Error("Can't parse transaction");
601
- const { args, fragment } = parsedTx;
602
- return {
603
- dataDecoded: {
604
- args: getProperties(args, fragment.inputs),
605
- name: fragment.name,
606
- },
607
- tx: txData,
608
- };
609
- }
610
- export function getApiByContractId(contractId, context) {
611
- const apiName = Object.keys(context.config.api)
612
- .filter((a) => a !== "authorisation" && a !== "conformance" && a !== "ledger")
613
- .find((a) => {
614
- const api = context.config.api[a];
615
- const contractAddress = context.config.contractAddresses[a];
616
- return (api.contract &&
617
- contractId.toLowerCase() === contractAddress.toLowerCase());
618
- });
619
- if (!apiName)
620
- throw new Error(`cannot get API with address ${contractId}`);
621
- return context.config.api[apiName];
622
- }
623
- export function getProperties(input, fragmentInputs) {
624
- return fragmentInputs.reduce((obj, fragmentInput, index) => {
625
- const value = Array.isArray(input)
626
- ? input[index]
627
- : input[fragmentInput.name];
628
- obj[fragmentInput.name] = toPlainAbiValue(value, fragmentInput);
629
- return obj;
630
- }, {});
631
- }
632
- export function getUserPin(did) {
633
- return createHash("sha256")
634
- .update(did)
635
- .digest()
636
- .slice(-4)
637
- .map((byte) => byte % 10)
638
- .reduce((acc, digit) => `${acc}${digit}`, "");
639
- }
640
- export function sha256(data) {
641
- let hash = createHash("sha256");
642
- hash = data.startsWith("0x")
643
- ? hash.update(removePrefix0x(data), "hex")
644
- : hash.update(data, "utf8");
645
- return hash.digest().toString("hex");
646
- }
647
- /**
648
- * Turn ethers ABI-decoded values (including struct/tuple {@link Result} arrays)
649
- * into plain JSON-serializable objects.
650
- */
651
- export function toPlainAbiValue(value, param) {
652
- if (value == null) {
653
- return value;
654
- }
655
- if (param.isTuple()) {
656
- const components = param.components;
657
- if (!Array.isArray(value)) {
658
- throw new TypeError("tuple value must be array-like");
659
- }
660
- if (value.length !== components.length) {
661
- throw new TypeError(`tuple length ${String(value.length)} !== ${String(components.length)}`);
662
- }
663
- return components.reduce((obj, component, index) => {
664
- const key = component.name || `_${String(index)}`;
665
- obj[key] = toPlainAbiValue(value[index], component);
666
- return obj;
667
- }, {});
668
- }
669
- if (param.isArray()) {
670
- if (!Array.isArray(value)) {
671
- throw new TypeError("array value must be an array");
672
- }
673
- return value.map((v) => toPlainAbiValue(v, param.arrayChildren));
674
- }
675
- if (typeof value === "bigint") {
676
- return value.toString();
677
- }
678
- return value;
679
- }
680
- //# sourceMappingURL=compute.js.map