@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.
- package/LICENSE.txt +289 -289
- package/LICENSES.txt +538 -0
- package/README.md +1140 -98
- package/dist/api/client.d.ts +4 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +14 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/fetch.d.ts +13 -0
- package/dist/api/fetch.d.ts.map +1 -0
- package/dist/api/fetch.js +30 -0
- package/dist/api/fetch.js.map +1 -0
- package/dist/api/params.d.ts +4 -0
- package/dist/api/params.d.ts.map +1 -0
- package/dist/api/params.js +9 -0
- package/dist/api/params.js.map +1 -0
- package/dist/auth/dcql.d.ts +5 -0
- package/dist/auth/dcql.d.ts.map +1 -0
- package/dist/auth/dcql.js +41 -0
- package/dist/auth/dcql.js.map +1 -0
- package/dist/auth/presentation.d.ts +30 -0
- package/dist/auth/presentation.d.ts.map +1 -0
- package/dist/auth/presentation.js +99 -0
- package/dist/auth/presentation.js.map +1 -0
- package/dist/auth/token.d.ts +11 -0
- package/dist/auth/token.d.ts.map +1 -0
- package/dist/auth/token.js +116 -0
- package/dist/auth/token.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +96 -10
- package/dist/cli.js.map +1 -1
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +99 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config-cmd.d.ts +3 -0
- package/dist/commands/config-cmd.d.ts.map +1 -0
- package/dist/commands/config-cmd.js +86 -0
- package/dist/commands/config-cmd.js.map +1 -0
- package/dist/commands/contracts-registry.d.ts +3 -0
- package/dist/commands/contracts-registry.d.ts.map +1 -0
- package/dist/commands/contracts-registry.js +132 -0
- package/dist/commands/contracts-registry.js.map +1 -0
- package/dist/commands/did-registry.d.ts +3 -0
- package/dist/commands/did-registry.d.ts.map +1 -0
- package/dist/commands/did-registry.js +110 -0
- package/dist/commands/did-registry.js.map +1 -0
- package/dist/commands/faucet.d.ts +3 -0
- package/dist/commands/faucet.d.ts.map +1 -0
- package/dist/commands/faucet.js +78 -0
- package/dist/commands/faucet.js.map +1 -0
- package/dist/commands/health.d.ts +3 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +20 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/issuers-registry.d.ts +3 -0
- package/dist/commands/issuers-registry.d.ts.map +1 -0
- package/dist/commands/issuers-registry.js +340 -0
- package/dist/commands/issuers-registry.js.map +1 -0
- package/dist/commands/ledger.d.ts +3 -0
- package/dist/commands/ledger.d.ts.map +1 -0
- package/dist/commands/ledger.js +549 -372
- package/dist/commands/ledger.js.map +1 -1
- package/dist/commands/onboarding.d.ts +3 -0
- package/dist/commands/onboarding.d.ts.map +1 -0
- package/dist/commands/onboarding.js +301 -0
- package/dist/commands/onboarding.js.map +1 -0
- package/dist/commands/openapi.d.ts +3 -0
- package/dist/commands/openapi.d.ts.map +1 -0
- package/dist/commands/openapi.js +37 -0
- package/dist/commands/openapi.js.map +1 -0
- package/dist/commands/policies-registry.d.ts +3 -0
- package/dist/commands/policies-registry.d.ts.map +1 -0
- package/dist/commands/policies-registry.js +198 -0
- package/dist/commands/policies-registry.js.map +1 -0
- package/dist/commands/registry.d.ts +27 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +62 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/commands/schemas-registry.d.ts +3 -0
- package/dist/commands/schemas-registry.d.ts.map +1 -0
- package/dist/commands/schemas-registry.js +231 -0
- package/dist/commands/schemas-registry.js.map +1 -0
- package/dist/commands/shared/args.d.ts +2 -0
- package/dist/commands/shared/args.d.ts.map +1 -0
- package/dist/commands/shared/args.js +4 -0
- package/dist/commands/shared/args.js.map +1 -0
- package/dist/commands/shared/wallet-opts.d.ts +9 -0
- package/dist/commands/shared/wallet-opts.d.ts.map +1 -0
- package/dist/commands/shared/wallet-opts.js +44 -0
- package/dist/commands/shared/wallet-opts.js.map +1 -0
- package/dist/commands/timestamp.d.ts +3 -0
- package/dist/commands/timestamp.d.ts.map +1 -0
- package/dist/commands/timestamp.js +250 -0
- package/dist/commands/timestamp.js.map +1 -0
- package/dist/commands/track-and-trace.d.ts +3 -0
- package/dist/commands/track-and-trace.d.ts.map +1 -0
- package/dist/commands/track-and-trace.js +235 -0
- package/dist/commands/track-and-trace.js.map +1 -0
- package/dist/commands/wallet.d.ts +3 -0
- package/dist/commands/wallet.d.ts.map +1 -0
- package/dist/commands/wallet.js +123 -0
- package/dist/commands/wallet.js.map +1 -0
- package/dist/config/config.d.ts +45 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +111 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/ebsi-env.d.ts +4 -0
- package/dist/config/ebsi-env.d.ts.map +1 -0
- package/dist/config/ebsi-env.js +37 -0
- package/dist/config/ebsi-env.js.map +1 -0
- package/dist/crypto/wallet.d.ts +34 -0
- package/dist/crypto/wallet.d.ts.map +1 -0
- package/dist/crypto/wallet.js +100 -0
- package/dist/crypto/wallet.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -6
- package/dist/index.js.map +1 -1
- package/dist/ledger/read.d.ts +11 -0
- package/dist/ledger/read.d.ts.map +1 -0
- package/dist/ledger/read.js +24 -0
- package/dist/ledger/read.js.map +1 -0
- package/dist/ledger/registries.d.ts +25 -0
- package/dist/ledger/registries.d.ts.map +1 -0
- package/dist/ledger/registries.js +111 -0
- package/dist/ledger/registries.js.map +1 -0
- package/dist/ledger/write.d.ts +43 -0
- package/dist/ledger/write.d.ts.map +1 -0
- package/dist/ledger/write.js +119 -0
- package/dist/ledger/write.js.map +1 -0
- package/dist/onboarding/vc.d.ts +18 -0
- package/dist/onboarding/vc.d.ts.map +1 -0
- package/dist/onboarding/vc.js +72 -0
- package/dist/onboarding/vc.js.map +1 -0
- package/dist/output/format.d.ts +7 -0
- package/dist/output/format.d.ts.map +1 -0
- package/dist/output/format.js +94 -0
- package/dist/output/format.js.map +1 -0
- package/dist/tui/App.d.ts +3 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +99 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/CommandPalette.d.ts +8 -0
- package/dist/tui/CommandPalette.d.ts.map +1 -0
- package/dist/tui/CommandPalette.js +105 -0
- package/dist/tui/CommandPalette.js.map +1 -0
- package/package.json +66 -108
- package/src/api/client.ts +26 -0
- package/src/api/fetch.ts +53 -0
- package/src/api/params.ts +17 -0
- package/src/auth/dcql.ts +84 -0
- package/src/auth/presentation.ts +255 -0
- package/src/auth/token.ts +244 -0
- package/src/cli.ts +164 -0
- package/src/commands/auth.ts +119 -0
- package/src/commands/config-cmd.ts +122 -0
- package/src/commands/contracts-registry.ts +156 -0
- package/src/commands/did-registry.ts +126 -0
- package/src/commands/faucet.ts +112 -0
- package/src/commands/health.ts +21 -0
- package/src/commands/issuers-registry.ts +385 -0
- package/src/commands/ledger.ts +777 -0
- package/src/commands/onboarding.ts +411 -0
- package/src/commands/openapi.ts +42 -0
- package/src/commands/policies-registry.ts +218 -0
- package/src/commands/registry.ts +152 -0
- package/src/commands/schemas-registry.ts +255 -0
- package/src/commands/shared/args.ts +14 -0
- package/src/commands/shared/wallet-opts.ts +85 -0
- package/src/commands/timestamp.ts +272 -0
- package/src/commands/track-and-trace.ts +263 -0
- package/src/commands/wallet.ts +175 -0
- package/src/config/config.ts +275 -0
- package/src/config/ebsi-env.ts +67 -0
- package/src/crypto/wallet.ts +291 -0
- package/src/index.ts +24 -0
- package/src/ledger/read.ts +70 -0
- package/src/ledger/registries.ts +285 -0
- package/src/ledger/write.ts +381 -0
- package/src/onboarding/vc.ts +205 -0
- package/src/output/format.ts +157 -0
- package/src/tui/App.tsx +282 -0
- package/src/tui/CommandPalette.tsx +223 -0
- package/bin/cli.js +0 -13
- package/dist/abi/pilot/DidRegistry.js +0 -568
- package/dist/abi/pilot/DidRegistry.js.map +0 -1
- package/dist/abi/pilot/Ptr.js +0 -666
- package/dist/abi/pilot/Ptr.js.map +0 -1
- package/dist/abi/pilot/SchemaSCRegistry.js +0 -264
- package/dist/abi/pilot/SchemaSCRegistry.js.map +0 -1
- package/dist/abi/pilot/Tcr.js +0 -715
- package/dist/abi/pilot/Tcr.js.map +0 -1
- package/dist/abi/pilot/Timestamp.js +0 -658
- package/dist/abi/pilot/Timestamp.js.map +0 -1
- package/dist/abi/pilot/Tir.js +0 -428
- package/dist/abi/pilot/Tir.js.map +0 -1
- package/dist/abi/pilot/TnT.js +0 -842
- package/dist/abi/pilot/TnT.js.map +0 -1
- package/dist/abi/pilot/Tpr.js +0 -492
- package/dist/abi/pilot/Tpr.js.map +0 -1
- package/dist/abi/test/DidRegistry.js +0 -568
- package/dist/abi/test/DidRegistry.js.map +0 -1
- package/dist/abi/test/Ptr.js +0 -666
- package/dist/abi/test/Ptr.js.map +0 -1
- package/dist/abi/test/SchemaSCRegistry.js +0 -300
- package/dist/abi/test/SchemaSCRegistry.js.map +0 -1
- package/dist/abi/test/Tcr.js +0 -715
- package/dist/abi/test/Tcr.js.map +0 -1
- package/dist/abi/test/Timestamp.js +0 -658
- package/dist/abi/test/Timestamp.js.map +0 -1
- package/dist/abi/test/Tir.js +0 -428
- package/dist/abi/test/Tir.js.map +0 -1
- package/dist/abi/test/TnT.js +0 -842
- package/dist/abi/test/TnT.js.map +0 -1
- package/dist/abi/test/Tpr.js +0 -492
- package/dist/abi/test/Tpr.js.map +0 -1
- package/dist/app.js +0 -659
- package/dist/app.js.map +0 -1
- package/dist/buildParam/didr.js +0 -374
- package/dist/buildParam/didr.js.map +0 -1
- package/dist/buildParam/index.js +0 -53
- package/dist/buildParam/index.js.map +0 -1
- package/dist/buildParam/ptr.js +0 -80
- package/dist/buildParam/ptr.js.map +0 -1
- package/dist/buildParam/tcr.js +0 -36
- package/dist/buildParam/tcr.js.map +0 -1
- package/dist/buildParam/timestamp.js +0 -350
- package/dist/buildParam/timestamp.js.map +0 -1
- package/dist/buildParam/tir.js +0 -110
- package/dist/buildParam/tir.js.map +0 -1
- package/dist/buildParam/tnt.js +0 -214
- package/dist/buildParam/tnt.js.map +0 -1
- package/dist/buildParam/tpr.js +0 -91
- package/dist/buildParam/tpr.js.map +0 -1
- package/dist/buildParam/tsr.js +0 -115
- package/dist/buildParam/tsr.js.map +0 -1
- package/dist/commands/authorisation.js +0 -144
- package/dist/commands/authorisation.js.map +0 -1
- package/dist/commands/compute.js +0 -680
- package/dist/commands/compute.js.map +0 -1
- package/dist/commands/conformance.js +0 -813
- package/dist/commands/conformance.js.map +0 -1
- package/dist/commands/hardwarewallet.js +0 -41
- package/dist/commands/hardwarewallet.js.map +0 -1
- package/dist/commands/index.js +0 -8
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/ptr.js +0 -54
- package/dist/commands/ptr.js.map +0 -1
- package/dist/commands/tcr.js +0 -50
- package/dist/commands/tcr.js.map +0 -1
- package/dist/commands/tir.js +0 -64
- package/dist/commands/tir.js.map +0 -1
- package/dist/commands/tnl.js +0 -81
- package/dist/commands/tnl.js.map +0 -1
- package/dist/commands/tsr.js +0 -45
- package/dist/commands/tsr.js.map +0 -1
- package/dist/commands/view.js +0 -53
- package/dist/commands/view.js.map +0 -1
- package/dist/config.js +0 -497
- package/dist/config.js.map +0 -1
- package/dist/interfaces/context.js +0 -2
- package/dist/interfaces/context.js.map +0 -1
- package/dist/interfaces/contracts/ProxyFactory.js +0 -2
- package/dist/interfaces/contracts/ProxyFactory.js.map +0 -1
- package/dist/interfaces/contracts/ProxyTemplateRegistry.js +0 -2
- package/dist/interfaces/contracts/ProxyTemplateRegistry.js.map +0 -1
- package/dist/interfaces/contracts/SchemaSCRegistry.js +0 -2
- package/dist/interfaces/contracts/SchemaSCRegistry.js.map +0 -1
- package/dist/interfaces/contracts/common.js +0 -2
- package/dist/interfaces/contracts/common.js.map +0 -1
- package/dist/interfaces/index.js +0 -5
- package/dist/interfaces/index.js.map +0 -1
- package/dist/interfaces/jsonrpc.interface.js +0 -2
- package/dist/interfaces/jsonrpc.interface.js.map +0 -1
- package/dist/interfaces/paginated-list.interface.js +0 -2
- package/dist/interfaces/paginated-list.interface.js.map +0 -1
- package/dist/interfaces/unsigned-transaction.interface.js +0 -2
- package/dist/interfaces/unsigned-transaction.interface.js.map +0 -1
- package/dist/interfaces/utils.interface.js +0 -2
- package/dist/interfaces/utils.interface.js.map +0 -1
- package/dist/programs/migrateDid.js +0 -159
- package/dist/programs/migrateDid.js.map +0 -1
- package/dist/programs/migrateDids.js +0 -232
- package/dist/programs/migrateDids.js.map +0 -1
- package/dist/programs/migrateTsr.js +0 -201
- package/dist/programs/migrateTsr.js.map +0 -1
- package/dist/scripts/accreditAndAuthorize/conformance/step1 +0 -34
- package/dist/scripts/accreditAndAuthorize/conformance/step2 +0 -18
- package/dist/scripts/accreditAndAuthorize/conformance/step3 +0 -9
- package/dist/scripts/accreditAndAuthorize/conformance/step4 +0 -27
- package/dist/scripts/accreditAndAuthorize/conformance/step5 +0 -13
- package/dist/scripts/accreditAndAuthorize/conformance/step6 +0 -14
- package/dist/scripts/accreditAndAuthorize/conformance/step7 +0 -7
- package/dist/scripts/accreditAndAuthorize/test/step1 +0 -34
- package/dist/scripts/accreditAndAuthorize/test/step2 +0 -18
- package/dist/scripts/accreditAndAuthorize/test/step3 +0 -9
- package/dist/scripts/accreditAndAuthorize/test/step4 +0 -27
- package/dist/scripts/accreditAndAuthorize/test/step5 +0 -13
- package/dist/scripts/accreditAndAuthorize/test/step6 +0 -14
- package/dist/scripts/accreditAndAuthorize/test/step7 +0 -7
- package/dist/scripts/accreditTI +0 -21
- package/dist/scripts/assets/Nodes.json +0 -27
- package/dist/scripts/assets/vcdm1.1/CTRevocableCredential.json +0 -30
- package/dist/scripts/assets/vcdm1.1/CredentialToAttestVerifiableAuthorisationForTrustChain.json +0 -29
- package/dist/scripts/assets/vcdm1.1/Nodes.json +0 -27
- package/dist/scripts/assets/vcdm1.1/TrustedNodesList.json +0 -35
- package/dist/scripts/assets/vcdm1.1/VerifiableAccreditationToAccredit.json +0 -35
- package/dist/scripts/assets/vcdm1.1/VerifiableAccreditationToAttest.json +0 -33
- package/dist/scripts/assets/vcdm1.1/VerifiableAuthorisationForTrustChain.json +0 -22
- package/dist/scripts/assets/vcdm1.1/VerifiableAuthorisationToInvoke.json +0 -24
- package/dist/scripts/assets/vcdm1.1/VerifiableAuthorisationToOnboard.json +0 -24
- package/dist/scripts/assets/vcdm2.0/CredentialToAttestVerifiableAuthorisationForTrustChain.json +0 -29
- package/dist/scripts/assets/vcdm2.0/TrustedNodesList.json +0 -36
- package/dist/scripts/assets/vcdm2.0/VerifiableAccreditationToAccredit.json +0 -40
- package/dist/scripts/assets/vcdm2.0/VerifiableAccreditationToAttest.json +0 -38
- package/dist/scripts/assets/vcdm2.0/VerifiableAuthorisationForTrustChain.json +0 -30
- package/dist/scripts/assets/vcdm2.0/VerifiableAuthorisationToInvoke.json +0 -24
- package/dist/scripts/assets/vcdm2.0/VerifiableAuthorisationToOnboard.json +0 -23
- package/dist/scripts/bootstrap/0a-loadTPROperator +0 -5
- package/dist/scripts/bootstrap/0b-loadAdmin +0 -8
- package/dist/scripts/bootstrap/1-populateTPR +0 -92
- package/dist/scripts/bootstrap/2-populateDID +0 -6
- package/dist/scripts/bootstrap/3-populateTimestamp +0 -9
- package/dist/scripts/bootstrap/4-populateTIR +0 -8
- package/dist/scripts/bootstrap/5-populateTSR +0 -85
- package/dist/scripts/bootstrap/6-setupConformanceIssuer +0 -35
- package/dist/scripts/bootstrap/README.md +0 -218
- package/dist/scripts/issueVcInvoke +0 -10
- package/dist/scripts/issueVcOnboard +0 -9
- package/dist/scripts/issueVcRootTAO +0 -11
- package/dist/scripts/issueVcTAO +0 -12
- package/dist/scripts/issueVcTI +0 -12
- package/dist/scripts/issueVcTnl +0 -32
- package/dist/scripts/issue_CTRevocableCredential +0 -12
- package/dist/scripts/issue_SelfAttestationSupportOffice +0 -10
- package/dist/scripts/issue_VerifiableAccreditationToAccredit +0 -11
- package/dist/scripts/issue_VerifiableAccreditationToAttest +0 -11
- package/dist/scripts/issue_VerifiableAuthorisationForTrustChain +0 -10
- package/dist/scripts/issue_VerifiableAuthorisationToOnboard +0 -9
- package/dist/scripts/preregisterIssuer +0 -6
- package/dist/scripts/registerDidDocument +0 -15
- package/dist/scripts/registerIssuer +0 -6
- package/dist/scripts/updateVcRootTAO +0 -10
- package/dist/scripts/updateVcTAO +0 -11
- package/dist/scripts/updateVcTI +0 -11
- package/dist/scripts/vcdm2.0/issueSelfAttestationSupportOffice +0 -10
- package/dist/scripts/vcdm2.0/issueVcInvoke +0 -12
- package/dist/scripts/vcdm2.0/issueVcOnboard +0 -11
- package/dist/scripts/vcdm2.0/issueVcRootTAO +0 -14
- package/dist/scripts/vcdm2.0/issueVcTAO +0 -15
- package/dist/scripts/vcdm2.0/issueVcTI +0 -15
- package/dist/scripts/vcdm2.0/issueVcTnl +0 -34
- package/dist/scripts/vcdm2.0/registerDidDocument +0 -15
- package/dist/scripts/vcdm2.0/updateVcRootTAO +0 -13
- package/dist/scripts/vcdm2.0/updateVcTAO +0 -14
- package/dist/scripts/vcdm2.0/updateVcTI +0 -14
- package/dist/scripts/vcdm2.0/verifyVcTnl +0 -10
- package/dist/scripts/verifyVcTnl +0 -10
- package/dist/scripts/wct/accreditAndAuthorize +0 -133
- package/dist/scripts/wct/accreditAndAuthorize2 +0 -89
- package/dist/scripts/wct/holderWallet +0 -39
- package/dist/scripts/wct/holderWallet2 +0 -39
- package/dist/scripts/wct/issueToHolder +0 -38
- package/dist/scripts/wct/issueToHolder2 +0 -38
- package/dist/scripts/wct/pda1 +0 -3
- package/dist/scripts/wct/verifier +0 -8
- package/dist/scripts/wct/verifier2 +0 -7
- package/dist/utils/Client.js +0 -155
- package/dist/utils/Client.js.map +0 -1
- package/dist/utils/HardwareWallet.js +0 -326
- package/dist/utils/HardwareWallet.js.map +0 -1
- package/dist/utils/http.js +0 -132
- package/dist/utils/http.js.map +0 -1
- package/dist/utils/index.js +0 -8
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/jsonrpc.js +0 -38
- package/dist/utils/jsonrpc.js.map +0 -1
- package/dist/utils/print.js +0 -56
- package/dist/utils/print.js.map +0 -1
- package/dist/utils/utils.js +0 -427
- package/dist/utils/utils.js.map +0 -1
- package/dist/utils/vcdm.js +0 -47
- 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 @@
|
|
|
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"}
|
package/dist/tui/App.js
ADDED
|
@@ -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
|