@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
@@ -0,0 +1,4 @@
1
+ import type { paths } from "@europeum-ebsi/api-contract/types";
2
+ export type ApiClient = ReturnType<typeof makeClient>;
3
+ export declare function makeClient(baseUrl: string, token?: string): import("openapi-fetch").Client<paths, `${string}/${string}`>;
4
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAI/D,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAUtD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,gEAWzD"}
@@ -0,0 +1,14 @@
1
+ import createClient from "openapi-fetch";
2
+ export function makeClient(baseUrl, token) {
3
+ const client = createClient({ baseUrl });
4
+ if (token) {
5
+ client.use({
6
+ onRequest({ request }) {
7
+ request.headers.set("Authorization", `Bearer ${token}`);
8
+ return request;
9
+ },
10
+ });
11
+ }
12
+ return client;
13
+ }
14
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,eAAe,CAAC;AAYzC,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,KAAc;IACxD,MAAM,MAAM,GAAG,YAAY,CAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,CAAC;YACT,SAAS,CAAC,EAAE,OAAO,EAAE;gBACnB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;gBACxD,OAAO,OAAO,CAAC;YACjB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { CliConfig } from "../config/config.ts";
2
+ export declare class ApiError extends Error {
3
+ readonly detail: unknown;
4
+ readonly status: number;
5
+ constructor(status: number, detail: unknown);
6
+ }
7
+ export declare function getClient(config: CliConfig): import("openapi-fetch").Client<import("@europeum-ebsi/api-contract/types").paths, `${string}/${string}`>;
8
+ export declare function unwrap<T>({ data, error, response, }: {
9
+ data?: T;
10
+ error?: unknown;
11
+ response: Response;
12
+ }): T;
13
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/api/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAYrD,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;CAU5C;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,4GAO1C;AAMD,wBAAgB,MAAM,CAAC,CAAC,EAAE,EACxB,IAAI,EACJ,KAAK,EACL,QAAQ,GACT,EAAE;IACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB,GAAG,CAAC,CAGJ"}
@@ -0,0 +1,30 @@
1
+ import { makeClient } from "./client.js";
2
+ const clients = new Map();
3
+ export class ApiError extends Error {
4
+ detail;
5
+ status;
6
+ constructor(status, detail) {
7
+ const message = typeof detail === "object" && detail !== null && "title" in detail
8
+ ? String(detail["title"])
9
+ : `HTTP ${status}`;
10
+ super(message);
11
+ this.name = "ApiError";
12
+ this.status = status;
13
+ this.detail = detail;
14
+ }
15
+ }
16
+ export function getClient(config) {
17
+ const cacheKey = `${config.baseUrl}\0${config.token ?? ""}`;
18
+ const existing = clients.get(cacheKey);
19
+ if (existing)
20
+ return existing;
21
+ const client = makeClient(config.baseUrl, config.token);
22
+ clients.set(cacheKey, client);
23
+ return client;
24
+ }
25
+ export function unwrap({ data, error, response, }) {
26
+ if (data !== undefined)
27
+ return data;
28
+ throw new ApiError(response.status, error);
29
+ }
30
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/api/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyC,CAAC;AAKjE,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,MAAM,CAAU;IAChB,MAAM,CAAS;IAExB,YAAY,MAAc,EAAE,MAAe;QACzC,MAAM,OAAO,GACX,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,MAAM;YAChE,CAAC,CAAC,MAAM,CAAE,MAAkC,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAC,MAAiB;IACzC,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAMD,MAAM,UAAU,MAAM,CAAI,EACxB,IAAI,EACJ,KAAK,EACL,QAAQ,GAKT;IACC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function q<T extends Record<string, unknown>>(obj: T): {
2
+ [K in keyof T]?: NonNullable<T[K]>;
3
+ };
4
+ //# sourceMappingURL=params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/api/params.ts"],"names":[],"mappings":"AAQA,wBAAgB,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjD,GAAG,EAAE,CAAC,GACL;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAMxC"}
@@ -0,0 +1,9 @@
1
+ export function q(obj) {
2
+ const result = {};
3
+ for (const [k, v] of Object.entries(obj)) {
4
+ if (v !== undefined && v !== "")
5
+ result[k] = v;
6
+ }
7
+ return result;
8
+ }
9
+ //# sourceMappingURL=params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/api/params.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,CAAC,CACf,GAAM;IAEN,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAgD,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { KeyMaterial } from "../crypto/wallet.ts";
2
+ export { dcqlCredentialQueryId } from "@europeum-ebsi/api-contract/scopes";
3
+ export declare function buildDcqlVpToken(credentialQueryId: string, vpJwt: string): string;
4
+ export declare function createSelfAttestationVcJwt(signingKey: KeyMaterial): string;
5
+ //# sourceMappingURL=dcql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dcql.d.ts","sourceRoot":"","sources":["../../src/auth/dcql.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAQ3E,wBAAgB,gBAAgB,CAC9B,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,MAAM,GACZ,MAAM,CAER;AAmBD,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,WAAW,GAAG,MAAM,CAwC1E"}
@@ -0,0 +1,41 @@
1
+ import { SELF_ATTESTATION_VC_TYPE } from "@europeum-ebsi/api-contract/scopes";
2
+ import { createJWT } from "@europeum-ebsi/did-jwt";
3
+ import { metadata as attestationMetadata } from "@europeum-ebsi/vcdm1.1-attestation-schema";
4
+ import { randomUUID } from "node:crypto";
5
+ export { dcqlCredentialQueryId } from "@europeum-ebsi/api-contract/scopes";
6
+ export function buildDcqlVpToken(credentialQueryId, vpJwt) {
7
+ return JSON.stringify({ [credentialQueryId]: [vpJwt] });
8
+ }
9
+ export function createSelfAttestationVcJwt(signingKey) {
10
+ const { alg, did, kid, signer } = signingKey.issuer;
11
+ const issuanceDate = new Date();
12
+ const issued = `${issuanceDate.toISOString().slice(0, -5)}Z`;
13
+ const iat = Math.floor(issuanceDate.getTime() / 1000);
14
+ const id = `urn:uuid:${randomUUID()}`;
15
+ return createJWT({
16
+ iat,
17
+ iss: did,
18
+ jti: id,
19
+ nbf: iat,
20
+ sub: did,
21
+ vc: {
22
+ "@context": ["https://www.w3.org/2018/credentials/v1"],
23
+ credentialSchema: {
24
+ id: `https://schemas-registry.example/schemas/${attestationMetadata.id.base16}`,
25
+ type: "FullJsonSchemaValidator2021",
26
+ },
27
+ credentialSubject: { id: did },
28
+ id,
29
+ issuanceDate: issued,
30
+ issued,
31
+ issuer: did,
32
+ type: [
33
+ "VerifiableCredential",
34
+ "VerifiableAttestation",
35
+ SELF_ATTESTATION_VC_TYPE,
36
+ ],
37
+ validFrom: issued,
38
+ },
39
+ }, { signer }, { alg, kid, typ: "JWT" });
40
+ }
41
+ //# sourceMappingURL=dcql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dcql.js","sourceRoot":"","sources":["../../src/auth/dcql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAQ3E,MAAM,UAAU,gBAAgB,CAC9B,iBAAyB,EACzB,KAAa;IAEb,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC;AAmBD,MAAM,UAAU,0BAA0B,CAAC,UAAuB;IAChE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,YAAY,UAAU,EAAE,EAAE,CAAC;IAEtC,OAAO,SAAS,CACd;QACE,GAAG;QACH,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,EAAE;QACP,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,EAAE,EAAE;YACF,UAAU,EAAE,CAAC,wCAAwC,CAAC;YACtD,gBAAgB,EAAE;gBAKhB,EAAE,EAAE,4CAA4C,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE;gBAC/E,IAAI,EAAE,6BAA6B;aACpC;YACD,iBAAiB,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;YAC9B,EAAE;YACF,YAAY,EAAE,MAAM;YACpB,MAAM;YACN,MAAM,EAAE,GAAG;YACX,IAAI,EAAE;gBACJ,sBAAsB;gBACtB,uBAAuB;gBACvB,wBAAwB;aACzB;YACD,SAAS,EAAE,MAAM;SAClB;KACF,EACD,EAAE,MAAM,EAAE,EACV,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ export declare const COMBINABLE_SCOPES: Set<string>;
2
+ export declare const KNOWN_SCOPES: readonly ["did-registry:invite", "did-registry:write", "ledger:invoke", "issuers-registry:invite", "issuers-registry:write", "timestamp:write", "track-and-trace:authorise", "track-and-trace:create", "track-and-trace:write", "policies-registry:write", "schemas-registry:write"];
3
+ export interface ParsedScope {
4
+ family: string;
5
+ targetAddress?: string;
6
+ }
7
+ export interface PresentationSubmission {
8
+ definition_id: string;
9
+ descriptor_map: PresentationDescriptor[];
10
+ id: string;
11
+ }
12
+ interface PresentationDescriptor {
13
+ format: string;
14
+ id: string;
15
+ path: string;
16
+ path_nested: {
17
+ format: string;
18
+ id: string;
19
+ path: string;
20
+ };
21
+ }
22
+ export declare function buildPresentationSubmission(scope: string, submissionId: string): PresentationSubmission;
23
+ export declare function mergedDefinitionId(families: string[]): string;
24
+ export declare function parseScopes(scope: string): string[];
25
+ export declare function parseScopeToken(token: string): ParsedScope | undefined;
26
+ export declare function requiresVc(scope: string): boolean;
27
+ export declare function scopeFamilies(scope: string): string[];
28
+ export declare function validateScope(scope: string): void;
29
+ export {};
30
+ //# sourceMappingURL=presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../src/auth/presentation.ts"],"names":[],"mappings":"AAoDA,eAAO,MAAM,iBAAiB,aAA4C,CAAC;AAK3E,eAAO,MAAM,YAAY,sRAAgB,CAAC;AAK1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,sBAAsB,EAAE,CAAC;IACzC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAWD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,sBAAsB,CA+BxB;AAYD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAI7D;AAUD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAGnD;AASD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAUtE;AAQD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOjD;AAQD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAYrD;AAaD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CA+BjD"}
@@ -0,0 +1,99 @@
1
+ import { CUSTOM_SCOPES, dcqlCredentialQueryId, mergedPresentationDefinitionId, parseScopeToken as parseSharedScopeToken, COMBINABLE_SCOPES as SHARED_COMBINABLE_SCOPES, } from "@europeum-ebsi/api-contract/scopes";
2
+ const VC_REQUIRED_SCOPES = new Set([
3
+ "did-registry:invite",
4
+ "issuers-registry:invite",
5
+ "ledger:invoke",
6
+ "track-and-trace:authorise",
7
+ ]);
8
+ export const COMBINABLE_SCOPES = new Set(SHARED_COMBINABLE_SCOPES);
9
+ export const KNOWN_SCOPES = CUSTOM_SCOPES;
10
+ export function buildPresentationSubmission(scope, submissionId) {
11
+ const families = scopeFamilies(scope);
12
+ const definitionId = mergedDefinitionId(families);
13
+ if (families.length === 1 && requiresVc(scope)) {
14
+ const soleFamily = families[0];
15
+ const credentialId = dcqlCredentialQueryId(soleFamily);
16
+ return {
17
+ definition_id: definitionId,
18
+ descriptor_map: [
19
+ {
20
+ format: "jwt_vp",
21
+ id: credentialId,
22
+ path: "$",
23
+ path_nested: {
24
+ format: "jwt_vc",
25
+ id: credentialId,
26
+ path: "$.vp.verifiableCredential[0]",
27
+ },
28
+ },
29
+ ],
30
+ id: submissionId,
31
+ };
32
+ }
33
+ return {
34
+ definition_id: definitionId,
35
+ descriptor_map: [],
36
+ id: submissionId,
37
+ };
38
+ }
39
+ export function mergedDefinitionId(families) {
40
+ return mergedPresentationDefinitionId(families);
41
+ }
42
+ export function parseScopes(scope) {
43
+ const tokens = scope.trim().split(/\s+/).filter(Boolean);
44
+ return tokens[0] === "openid" ? tokens.slice(1) : tokens;
45
+ }
46
+ export function parseScopeToken(token) {
47
+ const parsed = parseSharedScopeToken(token);
48
+ if (!parsed) {
49
+ return undefined;
50
+ }
51
+ return {
52
+ family: parsed.scope,
53
+ ...(parsed.targetAddress && { targetAddress: parsed.targetAddress }),
54
+ };
55
+ }
56
+ export function requiresVc(scope) {
57
+ const tokens = parseScopes(scope);
58
+ if (tokens.length !== 1) {
59
+ return false;
60
+ }
61
+ const parsed = parseScopeToken(tokens[0]);
62
+ return parsed !== undefined && VC_REQUIRED_SCOPES.has(parsed.family);
63
+ }
64
+ export function scopeFamilies(scope) {
65
+ return parseScopes(scope).map((token) => {
66
+ const parsed = parseScopeToken(token);
67
+ if (!parsed) {
68
+ throw new Error(`Invalid scope token "${token}". Expected "<registry>:<action>", optionally ` +
69
+ `suffixed with ":<0x-address>" to target a specific contract instance. ` +
70
+ `Known scopes: ${KNOWN_SCOPES.join(", ")}`);
71
+ }
72
+ return parsed.family;
73
+ });
74
+ }
75
+ export function validateScope(scope) {
76
+ const tokens = parseScopes(scope);
77
+ if (tokens.length === 0) {
78
+ throw new Error(`Missing scope. Provide one of: ${KNOWN_SCOPES.join(", ")}`);
79
+ }
80
+ const families = scopeFamilies(scope);
81
+ const seen = new Set();
82
+ const duplicates = new Set();
83
+ for (const family of families) {
84
+ if (seen.has(family))
85
+ duplicates.add(family);
86
+ seen.add(family);
87
+ }
88
+ if (duplicates.size > 0) {
89
+ throw new Error(`Duplicate scope(s): ${[...duplicates].join(", ")}`);
90
+ }
91
+ if (families.length <= 1)
92
+ return;
93
+ const nonCombinable = families.filter((f) => !COMBINABLE_SCOPES.has(f));
94
+ if (nonCombinable.length > 0) {
95
+ throw new Error(`Scope(s) "${nonCombinable.join(", ")}" cannot be combined with other scopes. ` +
96
+ `Only these scopes may be combined in a single token: ${[...COMBINABLE_SCOPES].join(", ")}.`);
97
+ }
98
+ }
99
+ //# sourceMappingURL=presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../src/auth/presentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { CliConfig } from "../config/config.ts";
2
+ import type { WalletDetails } from "../crypto/wallet.ts";
3
+ export interface GetAccessTokenOptions {
4
+ config: CliConfig;
5
+ scope: string;
6
+ spec?: "1.0" | "draft14";
7
+ vcJwt?: string;
8
+ wallet: WalletDetails;
9
+ }
10
+ export declare function getAccessToken(opts: GetAccessTokenOptions): Promise<string>;
11
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/auth/token.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgBzD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IAOd,IAAI,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;CACvB;AAcD,wBAAsB,cAAc,CAClC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA+HjB"}
@@ -0,0 +1,116 @@
1
+ import { createVerifiablePresentationJwt } from "@europeum-ebsi/verifiable-presentation/vcdm11.js";
2
+ import { decodeJwt } from "jose";
3
+ import { randomUUID } from "node:crypto";
4
+ import { buildEbsiEnvConfig } from "../config/ebsi-env.js";
5
+ import { buildDcqlVpToken, createSelfAttestationVcJwt, dcqlCredentialQueryId, } from "./dcql.js";
6
+ import { buildPresentationSubmission, requiresVc, scopeFamilies, } from "./presentation.js";
7
+ const DID_REGISTRY_INVITE_FAMILY = "did-registry:invite";
8
+ export async function getAccessToken(opts) {
9
+ const { config, scope, spec = "draft14", vcJwt, wallet } = opts;
10
+ if (!vcJwt && requiresVc(scope)) {
11
+ throw new Error(`Scope "${scope}" requires a Verifiable Credential. ` +
12
+ "Pass --vc <file> with a path to a VC JWT file.");
13
+ }
14
+ const signingKey = wallet.signingKey();
15
+ if (vcJwt && scopeFamilies(scope).includes(DID_REGISTRY_INVITE_FAMILY)) {
16
+ const { vc } = decodeJwt(vcJwt);
17
+ const jwkThumbprint = vc?.credentialSubject?.jwkThumbprint;
18
+ if (!jwkThumbprint) {
19
+ throw new Error("The Verifiable Credential passed via --vc is missing " +
20
+ "credentialSubject.jwkThumbprint, which the Authorisation service " +
21
+ `requires for the "did-registry:invite" scope. Ask the issuer for a VC that ` +
22
+ `authorises this key (thumbprint: ${signingKey.thumbprint}).`);
23
+ }
24
+ if (typeof jwkThumbprint !== "string") {
25
+ throw new TypeError("The Verifiable Credential passed via --vc has an invalid " +
26
+ "credentialSubject.jwkThumbprint property (not a string).");
27
+ }
28
+ if (jwkThumbprint !== signingKey.thumbprint) {
29
+ throw new Error("The Verifiable Credential passed via --vc authorises a different " +
30
+ `key (thumbprint: ${jwkThumbprint}) than the signing key ` +
31
+ `(thumbprint: ${signingKey.thumbprint}). Use the key the VC was ` +
32
+ "issued for, request a new VC for this key, or pass --sign-alg to " +
33
+ "select the intended key.");
34
+ }
35
+ }
36
+ const { issuer, tokenEndpoint } = await discoverAuthEndpoints(config.baseUrl);
37
+ const ebsiEnvConfig = buildEbsiEnvConfig(config);
38
+ const nonce = randomUUID();
39
+ const now = Math.floor(Date.now() / 1000);
40
+ const dcqlSelfAttestationVc = spec === "1.0" && !vcJwt
41
+ ? createSelfAttestationVcJwt(signingKey)
42
+ : undefined;
43
+ const credential = vcJwt ?? dcqlSelfAttestationVc;
44
+ const vpPayload = {
45
+ "@context": ["https://www.w3.org/2018/credentials/v1"],
46
+ holder: signingKey.issuer.did,
47
+ type: ["VerifiablePresentation"],
48
+ verifiableCredential: credential ? [credential] : [],
49
+ };
50
+ const vpJwt = await createVerifiablePresentationJwt(vpPayload, signingKey.issuer, issuer, ebsiEnvConfig, {
51
+ exp: now + 100,
52
+ ...(scopeFamilies(scope).includes(DID_REGISTRY_INVITE_FAMILY) && {
53
+ header: { jwk: signingKey.publicKeyJwk },
54
+ }),
55
+ nbf: now - 100,
56
+ nonce,
57
+ skipValidation: true,
58
+ });
59
+ if (spec === "1.0") {
60
+ const credentialQueryId = dcqlCredentialQueryId(scopeFamilies(scope)[0]);
61
+ const body = new URLSearchParams({
62
+ grant_type: "vp_token",
63
+ scope: `openid ${scope}`,
64
+ vp_token: buildDcqlVpToken(credentialQueryId, vpJwt),
65
+ });
66
+ return submitTokenRequest(tokenEndpoint, body);
67
+ }
68
+ const submissionId = randomUUID();
69
+ const presentationSubmission = buildPresentationSubmission(scope, submissionId);
70
+ const body = new URLSearchParams({
71
+ grant_type: "vp_token",
72
+ presentation_submission: JSON.stringify(presentationSubmission),
73
+ scope: `openid ${scope}`,
74
+ vp_token: vpJwt,
75
+ });
76
+ return submitTokenRequest(tokenEndpoint, body);
77
+ }
78
+ async function discoverAuthEndpoints(baseUrl) {
79
+ const discoveryUrl = `${baseUrl}/auth/.well-known/openid-configuration`;
80
+ const resp = await fetch(discoveryUrl, {
81
+ headers: { Accept: "application/json" },
82
+ });
83
+ if (!resp.ok) {
84
+ throw new Error(`Failed to fetch OpenID config from ${discoveryUrl}: HTTP ${resp.status.toString()}`);
85
+ }
86
+ const body = (await resp.json());
87
+ const { issuer, token_endpoint: tokenEndpoint } = body;
88
+ if (!issuer || !tokenEndpoint) {
89
+ throw new Error(`OpenID config at ${discoveryUrl} is missing 'issuer' or 'token_endpoint'`);
90
+ }
91
+ return { issuer, tokenEndpoint };
92
+ }
93
+ async function submitTokenRequest(tokenEndpoint, body) {
94
+ const resp = await fetch(tokenEndpoint, {
95
+ body: body.toString(),
96
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
97
+ method: "POST",
98
+ });
99
+ if (!resp.ok) {
100
+ let detail;
101
+ try {
102
+ const errBody = await resp.text();
103
+ detail = errBody;
104
+ }
105
+ catch {
106
+ detail = `HTTP ${resp.status.toString()}`;
107
+ }
108
+ throw new Error(`Token request failed (HTTP ${resp.status.toString()}): ${detail}`);
109
+ }
110
+ const data = (await resp.json());
111
+ if (!data.access_token) {
112
+ throw new Error("Token response did not contain 'access_token'");
113
+ }
114
+ return data.access_token;
115
+ }
116
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/auth/token.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function buildProgram(): Command;
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,YAAY,IAAI,OAAO,CA8EtC"}
package/dist/cli.js CHANGED
@@ -1,11 +1,97 @@
1
- import { main } from "./app.js";
2
- main()
3
- .then(() => {
4
- process.exit(0);
5
- })
6
- // eslint-disable-next-line unicorn/prefer-top-level-await
7
- .catch((error) => {
8
- console.log(error);
9
- process.exit(1);
10
- });
1
+ import { Command } from "commander";
2
+ import { COMMANDS } from "./commands/registry.js";
3
+ import { resolveConfig } from "./config/config.js";
4
+ import { printError, printResult } from "./output/format.js";
5
+ export function buildProgram() {
6
+ const program = new Command();
7
+ program
8
+ .name("ebsi")
9
+ .description("EBSI Core CLI — interact with the EBSI Core API")
10
+ .version("1.0.0-rc.0")
11
+ .option("--env <env>", "EBSI environment (local, test, pilot, preprod, prod)")
12
+ .option("--base-url <url>", "Override the API base URL (incl. /v1 prefix)")
13
+ .option("--output <format>", "Output format: pretty (default), json, table")
14
+ .option("--token <jwt>", "Bearer access token for authenticated requests (e.g. POST /ledger write methods). " +
15
+ "Also read from EBSI_ACCESS_TOKEN env var or `ebsi config set token <jwt>`.")
16
+ .option("--es256k-key <hex>", "Secp256k1 private key (0x-prefixed hex). Mandatory for anything that signs: " +
17
+ "always signs Ethereum transactions, and signs VCs/VPs unless --sign-alg is ES256. " +
18
+ "Also read from EBSI_ES256K_PRIVATE_KEY env var or `ebsi config set es256kPrivateKey <hex>`. " +
19
+ "WARNING: passing keys on the command line may expose them in shell history.")
20
+ .option("--es256-key <hex>", "P-256 private key (hex), optional — for signing VCs/VPs only (e.g. an `auth token` " +
21
+ "request). Also read from EBSI_ES256_PRIVATE_KEY env var or " +
22
+ "`ebsi config set es256PrivateKey <hex>`.")
23
+ .option("--sign-alg <alg>", 'Which key signs VCs/VPs: "ES256" or "ES256K". Required when both keys are ' +
24
+ "configured. Also read from EBSI_SIGN_ALG env var or `ebsi config set signAlg <alg>`.")
25
+ .option("--did <did>", "EBSI DID (did:ebsi:...) to associate with the key(s). " +
26
+ "Also read from EBSI_DID env var or `ebsi config set did <did>`. " +
27
+ "If omitted when running `wallet create`, a new random DID is generated.");
28
+ const nodes = new Map();
29
+ const configured = new Set();
30
+ for (const descriptor of COMMANDS) {
31
+ let parent = program;
32
+ const path = [];
33
+ for (const [index, segment] of descriptor.segments.entries()) {
34
+ path.push(segment);
35
+ const key = path.join(".");
36
+ let node = nodes.get(key);
37
+ if (!node) {
38
+ node = new Command(segment).description(index === 0
39
+ ? `Commands for the ${descriptor.group} API`
40
+ : `${descriptor.group} ${path.slice(1).join(" ")} commands`);
41
+ parent.addCommand(node);
42
+ nodes.set(key, node);
43
+ }
44
+ parent = node;
45
+ }
46
+ const leafKey = descriptor.segments.join(".");
47
+ if (configured.has(leafKey))
48
+ continue;
49
+ configured.add(leafKey);
50
+ configureLeaf(parent, descriptor);
51
+ }
52
+ return program;
53
+ }
54
+ function configureLeaf(cmd, descriptor) {
55
+ cmd.description(descriptor.summary);
56
+ for (const arg of descriptor.args) {
57
+ if (arg.required) {
58
+ cmd.argument(`<${arg.name}>`, arg.description);
59
+ }
60
+ else {
61
+ cmd.argument(`[${arg.name}]`, arg.description);
62
+ }
63
+ }
64
+ for (const opt of descriptor.options) {
65
+ cmd.option(opt.flags, opt.description, opt.defaultValue);
66
+ }
67
+ cmd.action(async (...cmdArgs) => {
68
+ const commandInstance = cmdArgs.at(-1);
69
+ const positional = cmdArgs.slice(0, descriptor.args.length);
70
+ const argMap = {};
71
+ for (const [i, arg] of descriptor.args.entries()) {
72
+ argMap[arg.name] = positional[i] ?? "";
73
+ }
74
+ const mergedOpts = commandInstance.optsWithGlobals();
75
+ try {
76
+ const config = resolveConfig(Object.fromEntries(Object.entries({
77
+ baseUrl: mergedOpts["baseUrl"],
78
+ did: mergedOpts["did"],
79
+ env: mergedOpts["env"],
80
+ es256Key: mergedOpts["es256Key"],
81
+ es256kKey: mergedOpts["es256kKey"],
82
+ output: mergedOpts["output"],
83
+ signAlg: mergedOpts["signAlg"],
84
+ token: mergedOpts["token"],
85
+ }).filter(([, v]) => v !== undefined)), { allowLegacyPrivateKey: descriptor.segments[0] === "config" });
86
+ const data = await descriptor.handler(argMap, mergedOpts, config);
87
+ printResult(data, config.output);
88
+ }
89
+ catch (error) {
90
+ const message = error instanceof Error ? error.message : "Unknown error";
91
+ const detail = error instanceof Error ? error.cause : error;
92
+ printError(message, detail);
93
+ process.exitCode = 1;
94
+ }
95
+ });
96
+ }
11
97
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,IAAI,EAAE;KACH,IAAI,CAAC,GAAG,EAAE;IACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;IACF,0DAA0D;KACzD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CommandDescriptor } from "./registry.ts";
2
+ export declare const authCommands: CommandDescriptor[];
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOvD,eAAO,MAAM,YAAY,EAAE,iBAAiB,EA6G3C,CAAC"}