@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,43 @@
1
+ import type { CliConfig } from "../config/config.ts";
2
+ import type { WalletDetails } from "../crypto/wallet.ts";
3
+ import type { RegistryEntry } from "./registries.ts";
4
+ export interface GasOverrides {
5
+ gasLimit?: bigint;
6
+ gasPrice?: bigint;
7
+ }
8
+ export interface SignWriteBatchOptions {
9
+ config: CliConfig;
10
+ entries: BatchWriteEntry[];
11
+ gas?: GasOverrides;
12
+ token: string;
13
+ wallet: WalletDetails;
14
+ }
15
+ export interface WriteOptions {
16
+ config: CliConfig;
17
+ contractAddress: string;
18
+ functionArgs: unknown[];
19
+ functionName: string;
20
+ gas?: GasOverrides;
21
+ registry: RegistryEntry;
22
+ token: string;
23
+ wallet: WalletDetails;
24
+ }
25
+ export interface WriteReceipt {
26
+ blockHash: string | undefined;
27
+ blockNumber: number | undefined;
28
+ contractAddress: string;
29
+ from: string;
30
+ hash: string;
31
+ status: number | undefined;
32
+ to: string;
33
+ }
34
+ interface BatchWriteEntry {
35
+ functionArgs: unknown[];
36
+ functionName: string;
37
+ registry: RegistryEntry;
38
+ to: string;
39
+ }
40
+ export declare function signWriteBatch(opts: SignWriteBatchOptions): Promise<string[]>;
41
+ export declare function writeToRegistry(opts: WriteOptions): Promise<WriteReceipt>;
42
+ export {};
43
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/ledger/write.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAWrD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA0BD,MAAM,WAAW,qBAAqB;IAIpC,MAAM,EAAE,SAAS,CAAC;IAIlB,OAAO,EAAE,eAAe,EAAE,CAAC;IAK3B,GAAG,CAAC,EAAE,YAAY,CAAC;IAInB,KAAK,EAAE,MAAM,CAAC;IAKd,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAI3B,MAAM,EAAE,SAAS,CAAC;IAIlB,eAAe,EAAE,MAAM,CAAC;IAIxB,YAAY,EAAE,OAAO,EAAE,CAAC;IAIxB,YAAY,EAAE,MAAM,CAAC;IAKrB,GAAG,CAAC,EAAE,YAAY,CAAC;IAInB,QAAQ,EAAE,aAAa,CAAC;IAIxB,KAAK,EAAE,MAAM,CAAC;IAKd,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,eAAe;IAIvB,YAAY,EAAE,OAAO,EAAE,CAAC;IAIxB,YAAY,EAAE,MAAM,CAAC;IAIrB,QAAQ,EAAE,aAAa,CAAC;IAIxB,EAAE,EAAE,MAAM,CAAC;CACZ;AAaD,wBAAsB,cAAc,CAClC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC,CAmEnB;AAWD,wBAAsB,eAAe,CACnC,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,YAAY,CAAC,CA6DvB"}
@@ -0,0 +1,119 @@
1
+ import { ethers, FetchRequest } from "ethers";
2
+ import { printWarning } from "../output/format.js";
3
+ const FALLBACK_GAS_LIMIT = 0x1000000n;
4
+ const GAS_LIMIT_BUFFER_PERCENT = 120n;
5
+ export async function signWriteBatch(opts) {
6
+ const { config, entries, gas, token, wallet: walletDetails } = opts;
7
+ const provider = makeLedgerProvider(config, token);
8
+ const connectedWallet = walletDetails.wallet.connect(provider);
9
+ const [baseNonce, feeFields] = await Promise.all([
10
+ connectedWallet.getNonce("pending"),
11
+ resolveFeeFields(provider, gas),
12
+ ]);
13
+ return Promise.all(entries.map(async ({ functionArgs, functionName, registry, to }, index) => {
14
+ const position = `Entry #${(index + 1).toString()}`;
15
+ let data;
16
+ try {
17
+ data = registry
18
+ .getInterface()
19
+ .encodeFunctionData(functionName, functionArgs);
20
+ }
21
+ catch (error) {
22
+ const message = error instanceof Error ? error.message : String(error);
23
+ throw new Error(`${position}: failed to encode function data for "${functionName}": ${message}. ` +
24
+ "Check the function name and argument types.", { cause: error });
25
+ }
26
+ let gasLimit;
27
+ try {
28
+ gasLimit = await resolveGasLimit(provider, { data, from: walletDetails.address, to }, gas, position);
29
+ }
30
+ catch (error) {
31
+ const message = error instanceof Error ? error.message : String(error);
32
+ printWarning(`${message}; falling back to the default gas limit ${FALLBACK_GAS_LIMIT.toString()}.`);
33
+ gasLimit = FALLBACK_GAS_LIMIT;
34
+ }
35
+ const populated = await connectedWallet.populateTransaction({
36
+ ...feeFields,
37
+ data,
38
+ gasLimit,
39
+ nonce: baseNonce + index,
40
+ to,
41
+ });
42
+ return connectedWallet.signTransaction(populated);
43
+ }));
44
+ }
45
+ export async function writeToRegistry(opts) {
46
+ const { config, contractAddress, functionArgs, functionName, gas, registry, token, wallet: walletDetails, } = opts;
47
+ const iface = registry.getInterface();
48
+ let data;
49
+ try {
50
+ data = iface.encodeFunctionData(functionName, functionArgs);
51
+ }
52
+ catch (error) {
53
+ const message = error instanceof Error ? error.message : String(error);
54
+ throw new Error(`Failed to encode function data for "${functionName}": ${message}. ` +
55
+ "Check the function name and argument types.", { cause: error });
56
+ }
57
+ const provider = makeLedgerProvider(config, token);
58
+ const [feeFields, gasLimit] = await Promise.all([
59
+ resolveFeeFields(provider, gas),
60
+ resolveGasLimit(provider, { data, from: walletDetails.address, to: contractAddress }, gas, "ledger write"),
61
+ ]);
62
+ const connectedWallet = walletDetails.wallet.connect(provider);
63
+ const tx = await connectedWallet.sendTransaction({
64
+ ...feeFields,
65
+ data,
66
+ gasLimit,
67
+ to: contractAddress,
68
+ });
69
+ const receipt = await tx.wait();
70
+ const status = receipt?.status;
71
+ return {
72
+ blockHash: receipt?.blockHash,
73
+ blockNumber: receipt?.blockNumber,
74
+ contractAddress,
75
+ from: walletDetails.address,
76
+ hash: tx.hash,
77
+ status: status === null ? undefined : status,
78
+ to: contractAddress,
79
+ };
80
+ }
81
+ function makeLedgerProvider(config, token) {
82
+ const ledgerUrl = `${config.baseUrl}/ledger`;
83
+ const fetchReq = new FetchRequest(ledgerUrl);
84
+ fetchReq.preflightFunc = (req) => {
85
+ req.setHeader("Authorization", `Bearer ${token}`);
86
+ return req;
87
+ };
88
+ return new ethers.JsonRpcProvider(fetchReq);
89
+ }
90
+ async function resolveFeeFields(provider, overrides) {
91
+ if (overrides?.gasPrice !== undefined) {
92
+ return { gasPrice: overrides.gasPrice, type: 0 };
93
+ }
94
+ const feeData = await provider.getFeeData();
95
+ if (feeData.maxFeePerGas !== null && feeData.maxPriorityFeePerGas !== null) {
96
+ return {
97
+ maxFeePerGas: feeData.maxFeePerGas,
98
+ maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,
99
+ };
100
+ }
101
+ if (feeData.gasPrice !== null) {
102
+ return { gasPrice: feeData.gasPrice };
103
+ }
104
+ return {};
105
+ }
106
+ async function resolveGasLimit(provider, tx, overrides, label) {
107
+ if (overrides?.gasLimit !== undefined) {
108
+ return overrides.gasLimit;
109
+ }
110
+ try {
111
+ const estimated = await provider.estimateGas(tx);
112
+ return (estimated * GAS_LIMIT_BUFFER_PERCENT) / 100n;
113
+ }
114
+ catch (error) {
115
+ const message = error instanceof Error ? error.message : String(error);
116
+ throw new Error(`${label}: gas estimation failed (${message}). Provide --gas-limit to override.`, { cause: error });
117
+ }
118
+ }
119
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/ledger/write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { EbsiIssuer } from "@europeum-ebsi/verifiable-credential";
2
+ import type { CliConfig } from "../config/config.ts";
3
+ export interface BuildOnboardingVcOptions {
4
+ config: CliConfig;
5
+ holderDid: string;
6
+ holderThumbprint: string;
7
+ rtaoAttributeId: string;
8
+ rtaoDid: string;
9
+ rtaoEs256kPrivateKey?: string;
10
+ rtaoEs256PrivateKey?: string;
11
+ }
12
+ export interface BuildOnboardingVcResult {
13
+ alg: EbsiIssuer["alg"];
14
+ rtaoKid: string;
15
+ vcJwt: string;
16
+ }
17
+ export declare function buildOnboardingVc(opts: BuildOnboardingVcOptions): Promise<BuildOnboardingVcResult>;
18
+ //# sourceMappingURL=vc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vc.d.ts","sourceRoot":"","sources":["../../src/onboarding/vc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAQvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAgBrD,MAAM,WAAW,wBAAwB;IAQvC,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IAOzB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAKhB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAQ9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IAEtC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAcD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CA2ElC"}
@@ -0,0 +1,72 @@
1
+ import { fromUrl } from "@europeum-ebsi/ebsi-uri";
2
+ import { metadata as attestationSchema } from "@europeum-ebsi/vcdm1.1-attestation-schema";
3
+ import { createVerifiableCredentialJwt } from "@europeum-ebsi/verifiable-credential/vcdm11.js";
4
+ import { randomUUID } from "node:crypto";
5
+ import { buildEbsiEnvConfig } from "../config/ebsi-env.js";
6
+ import { deriveEs256Issuer, deriveWallet } from "../crypto/wallet.js";
7
+ const EBSI_URI_SERVICES = [
8
+ "did-registry",
9
+ "issuers-registry",
10
+ "schemas-registry",
11
+ ];
12
+ export async function buildOnboardingVc(opts) {
13
+ const { config, holderDid, holderThumbprint, rtaoAttributeId, rtaoDid, rtaoEs256kPrivateKey, rtaoEs256PrivateKey, } = opts;
14
+ const issuer = await resolveIssuer(rtaoDid, rtaoEs256PrivateKey, rtaoEs256kPrivateKey);
15
+ const apiBaseUrl = config.baseUrl.replace(/\/+$/, "");
16
+ const ebsiEnvConfig = buildEbsiEnvConfig(config);
17
+ const { name: network } = ebsiEnvConfig.network;
18
+ const attributeId = rtaoAttributeId.replace(/^0[hx]/, "");
19
+ const issuanceDate = new Date(Date.now() - 5000);
20
+ const expirationDate = new Date(issuanceDate.getTime() + 2 * 60 * 60 * 1000);
21
+ const iso = (date) => `${date.toISOString().slice(0, -5)}Z`;
22
+ const vcPayload = {
23
+ "@context": ["https://www.w3.org/2018/credentials/v1"],
24
+ credentialSchema: {
25
+ id: toEbsiUri(`${apiBaseUrl}/schemas-registry/schemas/${attestationSchema.id.base16}`, network),
26
+ type: "FullJsonSchemaValidator2021",
27
+ },
28
+ credentialSubject: {
29
+ id: holderDid,
30
+ jwkThumbprint: holderThumbprint,
31
+ type: "same-device",
32
+ },
33
+ expirationDate: iso(expirationDate),
34
+ id: `urn:uuid:${randomUUID()}`,
35
+ issuanceDate: iso(issuanceDate),
36
+ issued: iso(issuanceDate),
37
+ issuer: rtaoDid,
38
+ termsOfUse: {
39
+ id: toEbsiUri(`${apiBaseUrl}/issuers-registry/issuers/${rtaoDid}/attributes/${attributeId}`, network),
40
+ type: "IssuanceCertificate",
41
+ },
42
+ type: [
43
+ "VerifiableCredential",
44
+ "VerifiableAttestation",
45
+ "VerifiableAuthorisationToOnboard",
46
+ ],
47
+ validFrom: iso(issuanceDate),
48
+ };
49
+ const vcJwt = await createVerifiableCredentialJwt(vcPayload, issuer, ebsiEnvConfig, { skipValidation: true });
50
+ return { alg: issuer.alg, rtaoKid: issuer.kid, vcJwt };
51
+ }
52
+ async function resolveIssuer(rtaoDid, rtaoEs256PrivateKey, rtaoES256kPrivateKey) {
53
+ if (rtaoEs256PrivateKey) {
54
+ return deriveEs256Issuer(rtaoEs256PrivateKey, rtaoDid);
55
+ }
56
+ if (!rtaoES256kPrivateKey) {
57
+ throw new Error("No RTAO signing key. Provide --rtao-es256-key <hex> (P-256, signs " +
58
+ "ES256) or --rtao-es256k-key <hex> (secp256k1, signs ES256K), or set " +
59
+ "EBSI_RTAO_ES256_PRIVATE_KEY / EBSI_RTAO_ES256K_PRIVATE_KEY.");
60
+ }
61
+ const wallet = await deriveWallet({ es256kPrivateKey: rtaoES256kPrivateKey }, rtaoDid);
62
+ return wallet.es256k.issuer;
63
+ }
64
+ function toEbsiUri(url, network) {
65
+ return fromUrl(url, {
66
+ hosts: [new URL(url).host],
67
+ network: { name: network },
68
+ scheme: "ebsi",
69
+ services: EBSI_URI_SERVICES,
70
+ });
71
+ }
72
+ //# sourceMappingURL=vc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vc.js","sourceRoot":"","sources":["../../src/onboarding/vc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { OutputFormat } from "../config/config.ts";
2
+ export declare function colouriseJson(json: string, isTTY?: boolean): string;
3
+ export declare function formatOutput(data: unknown, format: OutputFormat): string;
4
+ export declare function printError(message: string, detail?: unknown): void;
5
+ export declare function printResult(data: unknown, format: OutputFormat): void;
6
+ export declare function printWarning(message: string): void;
7
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/output/format.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOxD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,UAAuB,GAC3B,MAAM,CAqBR;AASD,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAYxE;AAKD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAQlE;AAKD,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAErE;AAKD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlD"}
@@ -0,0 +1,94 @@
1
+ import pc from "picocolors";
2
+ export function colouriseJson(json, isTTY = process.stdout.isTTY) {
3
+ if (!isTTY)
4
+ return json;
5
+ return json.replaceAll(/"(?:\\u[\dA-Fa-f]{4}|\\[^u]|[^"\\])*"(?:\s*:)?|\b(?:true|false|null)\b|-?\d+(?:\.\d*)?(?:[Ee][+-]?\d+)?/g, (match) => {
6
+ if (match.startsWith('"')) {
7
+ if (match.endsWith(":")) {
8
+ return pc.cyan(match);
9
+ }
10
+ return pc.green(match);
11
+ }
12
+ if (/true|false/.test(match))
13
+ return pc.magenta(match);
14
+ if (match.includes("null"))
15
+ return pc.dim(match);
16
+ return pc.yellow(match);
17
+ });
18
+ }
19
+ export function formatOutput(data, format) {
20
+ switch (format) {
21
+ case "json": {
22
+ return JSON.stringify(data);
23
+ }
24
+ case "table": {
25
+ return formatTable(data);
26
+ }
27
+ default: {
28
+ return formatPretty(data);
29
+ }
30
+ }
31
+ }
32
+ export function printError(message, detail) {
33
+ const prefix = pc.red("✖ Error:");
34
+ process.stderr.write(`${prefix} ${message}\n`);
35
+ if (detail === undefined)
36
+ return;
37
+ const detailStr = typeof detail === "string" ? detail : JSON.stringify(detail, undefined, 2);
38
+ process.stderr.write(pc.dim(detailStr) + "\n");
39
+ }
40
+ export function printResult(data, format) {
41
+ console.log(formatOutput(data, format));
42
+ }
43
+ export function printWarning(message) {
44
+ const prefix = pc.yellow("⚠ Warning:");
45
+ process.stderr.write(`${prefix} ${message}\n`);
46
+ }
47
+ function formatArrayTable(items) {
48
+ if (items.length === 0)
49
+ return pc.dim("(empty)");
50
+ const keys = [...new Set(items.flatMap((item) => Object.keys(item)))];
51
+ const colWidths = keys.map((k) => Math.max(k.length, ...items.map((item) => {
52
+ const val = item[k];
53
+ return ((typeof val === "object" ? JSON.stringify(val) : String(val ?? ""))
54
+ .length);
55
+ })));
56
+ const headerCells = keys.map((k, i) => {
57
+ return pc.bold(pc.cyan(k.padEnd(colWidths[i] ?? 0)));
58
+ });
59
+ const header = headerCells.join(" ");
60
+ const divider = colWidths.map((w) => "─".repeat(w)).join(" ");
61
+ const bodyRows = items.map((item) => keys
62
+ .map((k, i) => {
63
+ const val = item[k];
64
+ const str = typeof val === "object" ? JSON.stringify(val) : String(val ?? "");
65
+ return str.padEnd(colWidths[i] ?? 0);
66
+ })
67
+ .join(" "));
68
+ return [header, divider, ...bodyRows].join("\n");
69
+ }
70
+ function formatObjectTable(obj) {
71
+ const rows = Object.entries(obj).map(([key, val]) => {
72
+ const valStr = typeof val === "object" ? JSON.stringify(val) : String(val ?? "");
73
+ return [key, valStr];
74
+ });
75
+ const keyWidth = Math.max(...rows.map(([k]) => k.length), 3);
76
+ const header = pc.bold(pc.cyan("KEY".padEnd(keyWidth))) + " " + pc.bold(pc.cyan("VALUE"));
77
+ const divider = "─".repeat(keyWidth + 2 + 60);
78
+ const body = rows
79
+ .map(([k, v]) => pc.cyan(k.padEnd(keyWidth)) + " " + v)
80
+ .join("\n");
81
+ return [header, divider, body].join("\n");
82
+ }
83
+ function formatPretty(data) {
84
+ return colouriseJson(JSON.stringify(data, undefined, 2));
85
+ }
86
+ function formatTable(data) {
87
+ if (Array.isArray(data)) {
88
+ return formatArrayTable(data);
89
+ }
90
+ return data !== null && typeof data === "object"
91
+ ? formatObjectTable(data)
92
+ : String(data);
93
+ }
94
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/output/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ export declare function App(): React.ReactElement;
3
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAoEhF,wBAAgB,GAAG,IAAI,KAAK,CAAC,YAAY,CA8GxC"}
@@ -0,0 +1,99 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Static, Text } from "ink";
3
+ import React, { useCallback, useState as useLocalState, useState } from "react";
4
+ import { resolveConfig } from "../config/config.js";
5
+ import { colouriseJson } from "../output/format.js";
6
+ import { CommandPalette } from "./CommandPalette.js";
7
+ import TextInput from "ink-text-input";
8
+ export function App() {
9
+ const [phase, setPhase] = useState({ name: "palette" });
10
+ const [results, setResults] = useState([]);
11
+ let config;
12
+ let configError;
13
+ try {
14
+ config = resolveConfig({});
15
+ }
16
+ catch (error) {
17
+ configError = error instanceof Error ? error.message : "Unknown error";
18
+ config = { baseUrl: "", env: "test", output: "pretty" };
19
+ }
20
+ const runCommand = useCallback(async (cmd, args) => {
21
+ setPhase({ cmd, name: "running" });
22
+ try {
23
+ const data = await cmd.handler(args, {}, config);
24
+ setResults((prev) => [
25
+ ...prev,
26
+ { args, cmd, data, key: `${cmd.id}-${Date.now()}`, kind: "ok" },
27
+ ]);
28
+ }
29
+ catch (error) {
30
+ const message = error instanceof Error ? error.message : "Unknown error";
31
+ setResults((prev) => [
32
+ ...prev,
33
+ {
34
+ args,
35
+ cmd,
36
+ key: `${cmd.id}-${Date.now()}-err`,
37
+ kind: "error",
38
+ message,
39
+ },
40
+ ]);
41
+ }
42
+ setPhase({ name: "palette" });
43
+ }, [config]);
44
+ const handleSelect = useCallback((cmd, _input) => {
45
+ const requiredArgs = cmd.args.filter((a) => a.required);
46
+ if (requiredArgs.length === 0) {
47
+ void runCommand(cmd, {});
48
+ }
49
+ else {
50
+ setPhase({ argIndex: 0, argsCollected: {}, cmd, name: "args" });
51
+ }
52
+ }, [runCommand]);
53
+ if (configError) {
54
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: "red", children: "\u2716 Error resolving config" }), _jsx(Text, { children: configError }), _jsx(Text, { dimColor: true, children: "Fix this and restart the CLI." })] }));
55
+ }
56
+ return (_jsxs(_Fragment, { children: [_jsx(Static, { items: results, children: (result) => _jsx(ResultBox, { result: result }, result.key) }), phase.name === "palette" && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "EBSI CLI" }), _jsx(Text, { dimColor: true, children: ` ${config.env} · ${config.baseUrl}` })] }), _jsx(CommandPalette, { onSelect: handleSelect })] })), phase.name === "args" && (_jsx(ArgsPhase, { onNext: (next) => setPhase(next), onRun: runCommand, phase: phase })), phase.name === "running" && (_jsxs(Box, { paddingX: 1, children: [_jsx(Text, { color: "yellow", children: "⠋ " }), _jsx(Text, { children: `Running ${phase.cmd.segments.join(" ")}…` })] }))] }));
57
+ }
58
+ function ArgPrompt({ arg, onSubmit }) {
59
+ const [value, setValue] = useLocalState("");
60
+ return (_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: ` ${arg.name}: ` }), _jsx(TextInput, { onChange: setValue, onSubmit: (v) => {
61
+ if (v.trim())
62
+ onSubmit(v.trim());
63
+ }, placeholder: arg.example ?? `Enter ${arg.name}…`, value: value })] }));
64
+ }
65
+ function ArgsPhase({ onNext, onRun, phase, }) {
66
+ const { argIndex, argsCollected, cmd } = phase;
67
+ const requiredArgs = cmd.args.filter((a) => a.required);
68
+ const currentArg = requiredArgs[argIndex];
69
+ if (!currentArg) {
70
+ void onRun(cmd, argsCollected);
71
+ return (_jsx(Box, { paddingX: 1, children: _jsx(Text, { color: "cyan", children: "Running\u2026" }) }));
72
+ }
73
+ const handleArgSubmit = (value) => {
74
+ const next = { ...argsCollected, [currentArg.name]: value };
75
+ if (argIndex + 1 >= requiredArgs.length) {
76
+ void onRun(cmd, next);
77
+ }
78
+ else {
79
+ onNext({
80
+ argIndex: argIndex + 1,
81
+ argsCollected: next,
82
+ cmd,
83
+ name: "args",
84
+ });
85
+ }
86
+ };
87
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: `› ${cmd.segments.join(" ")}` }), Object.entries(argsCollected).map(([k, v]) => (_jsx(Text, { dimColor: true, children: ` ${k}: ${v}` }, k))), _jsx(ArgPrompt, { arg: currentArg, onSubmit: handleArgSubmit })] }));
88
+ }
89
+ function ResultBox({ result }) {
90
+ const { args, cmd } = result;
91
+ const argSuffix = cmd.args
92
+ .map((a) => args[a.name])
93
+ .filter(Boolean)
94
+ .join(" ");
95
+ const header = ` › ${cmd.segments.join(" ")}${argSuffix ? " " + argSuffix : ""} `;
96
+ const isOk = result.kind === "ok";
97
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { backgroundColor: isOk ? "green" : "red", bold: true, color: isOk ? "black" : "white", children: header }), _jsx(Box, { paddingLeft: 1, paddingTop: 1, children: isOk ? (_jsx(Text, { children: colouriseJson(JSON.stringify(result.data, undefined, 2)) })) : (_jsx(Text, { color: "red", children: "✖ " + result.message })) })] }));
98
+ }
99
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { CommandDescriptor } from "../commands/registry.ts";
3
+ interface CommandPaletteProps {
4
+ onSelect: (cmd: CommandDescriptor, input: string) => void;
5
+ }
6
+ export declare function CommandPalette({ onSelect, }: CommandPaletteProps): React.ReactElement;
7
+ export {};
8
+ //# sourceMappingURL=CommandPalette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../src/tui/CommandPalette.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAE7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAejE,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D;AAWD,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,GACT,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CA4L1C"}
@@ -0,0 +1,105 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from "ink";
3
+ import TextInput from "ink-text-input";
4
+ import React, { useCallback, useRef, useState } from "react";
5
+ import { commandPath, COMMANDS, matchesQuery, queryScore, } from "../commands/registry.js";
6
+ const MAX_VISIBLE = 8;
7
+ const HINT_COLOR = "gray";
8
+ const MATCH_COLOR = "cyan";
9
+ const TIP_COLOR = "yellow";
10
+ const SELECTED_BG = "blue";
11
+ export function CommandPalette({ onSelect, }) {
12
+ const [input, setInput] = useState("");
13
+ const [selectedIndex, setSelectedIndex] = useState(0);
14
+ const [scrollOffset, setScrollOffset] = useState(0);
15
+ const [inputKey, setInputKey] = useState(0);
16
+ const filtered = COMMANDS.filter((cmd) => matchesQuery(cmd, input)).toSorted((a, b) => queryScore(b, input) - queryScore(a, input));
17
+ const visible = filtered.slice(scrollOffset, scrollOffset + MAX_VISIBLE);
18
+ const inputOverride = useRef(null);
19
+ const handleChange = useCallback((value) => {
20
+ if (inputOverride.current !== null) {
21
+ const override = inputOverride.current;
22
+ inputOverride.current = null;
23
+ setInput(override);
24
+ setSelectedIndex(0);
25
+ setScrollOffset(0);
26
+ return;
27
+ }
28
+ setInput(value);
29
+ setSelectedIndex(0);
30
+ setScrollOffset(0);
31
+ }, []);
32
+ useInput((char, key) => {
33
+ if (char === "u" && key.ctrl) {
34
+ inputOverride.current = "";
35
+ setInput("");
36
+ setSelectedIndex(0);
37
+ setScrollOffset(0);
38
+ setInputKey((k) => k + 1);
39
+ return;
40
+ }
41
+ if ((char === "w" && key.ctrl) || (key.meta && key.delete)) {
42
+ if (input.length > 0) {
43
+ const newValue = input.replace(/\S+\s*$/, "");
44
+ inputOverride.current = newValue;
45
+ setInput(newValue);
46
+ setSelectedIndex(0);
47
+ setScrollOffset(0);
48
+ setInputKey((k) => k + 1);
49
+ }
50
+ return;
51
+ }
52
+ if (filtered.length === 0)
53
+ return;
54
+ if (key.upArrow) {
55
+ const next = Math.max(0, selectedIndex - 1);
56
+ setSelectedIndex(next);
57
+ setScrollOffset((off) => Math.min(off, next));
58
+ }
59
+ else if (key.downArrow) {
60
+ const next = Math.min(filtered.length - 1, selectedIndex + 1);
61
+ setSelectedIndex(next);
62
+ setScrollOffset((off) => Math.max(off, next - MAX_VISIBLE + 1));
63
+ }
64
+ else if (key.tab) {
65
+ const selected = filtered[selectedIndex];
66
+ if (selected) {
67
+ const trimmed = input.trim();
68
+ const words = selected.segments;
69
+ let targetCount = 1;
70
+ for (let i = 0; i < words.length; i++) {
71
+ const prefix = words.slice(0, i + 1).join(" ");
72
+ if (prefix.length > trimmed.length) {
73
+ targetCount = i + 1;
74
+ break;
75
+ }
76
+ if (trimmed === prefix) {
77
+ targetCount = Math.min(i + 2, words.length);
78
+ }
79
+ }
80
+ setInput(words.slice(0, targetCount).join(" ") + " ");
81
+ setSelectedIndex(0);
82
+ setScrollOffset(0);
83
+ setInputKey((k) => k + 1);
84
+ }
85
+ }
86
+ });
87
+ const handleSubmit = useCallback((value) => {
88
+ const selected = filtered[selectedIndex] ?? filtered[0];
89
+ if (selected) {
90
+ onSelect(selected, value);
91
+ }
92
+ }, [filtered, onSelect, selectedIndex]);
93
+ const aboveCount = scrollOffset;
94
+ const belowCount = Math.max(0, filtered.length - scrollOffset - MAX_VISIBLE);
95
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: MATCH_COLOR, children: "› " }), _jsx(TextInput, { onChange: handleChange, onSubmit: handleSubmit, placeholder: "type a command\u2026 (\u2191\u2193 to navigate, Tab to complete, Enter to run)", value: input }, inputKey)] }), filtered.length === 0 ? (_jsx(Text, { color: HINT_COLOR, dimColor: true, children: "No matching commands. Try \"health\", \"did-registry identifiers list\", \u2026" })) : (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: HINT_COLOR, dimColor: true, children: aboveCount > 0 ? ` ↑ ${aboveCount} more` : " " }), visible.map((cmd, i) => {
96
+ const absoluteIndex = scrollOffset + i;
97
+ const isSelected = absoluteIndex === selectedIndex;
98
+ const path = commandPath(cmd);
99
+ const argHints = cmd.args
100
+ .map((a) => (a.required ? `<${a.name}>` : `[${a.name}]`))
101
+ .join(" ");
102
+ return (_jsxs(Box, { paddingX: 1, children: [_jsxs(Text, { ...(isSelected && { backgroundColor: SELECTED_BG }), bold: isSelected, color: isSelected ? "white" : MATCH_COLOR, children: [(isSelected ? "● " : "○ ") + path, argHints ? " " : ""] }), argHints && (_jsx(Text, { color: HINT_COLOR, dimColor: true, children: argHints + " " })), _jsx(Text, { color: TIP_COLOR, dimColor: true, children: "— " + cmd.summary })] }, cmd.id));
103
+ }), _jsx(Text, { color: HINT_COLOR, dimColor: true, children: belowCount > 0 ? ` ↓ ${belowCount} more` : " " })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: HINT_COLOR, dimColor: true, children: "↑↓ navigate Tab complete Enter run ⌥⌫ del word ⌘⌫ clear ^C quit" }) })] }));
104
+ }
105
+ //# sourceMappingURL=CommandPalette.js.map