@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,4 @@
|
|
|
1
|
+
import type { paths } from "@europeum-ebsi/api-contract/types";
|
|
2
|
+
export type ApiClient = ReturnType<typeof makeClient>;
|
|
3
|
+
export declare function makeClient(baseUrl: string, token?: string): import("openapi-fetch").Client<paths, `${string}/${string}`>;
|
|
4
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAI/D,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAUtD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,gEAWzD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import createClient from "openapi-fetch";
|
|
2
|
+
export function makeClient(baseUrl, token) {
|
|
3
|
+
const client = createClient({ baseUrl });
|
|
4
|
+
if (token) {
|
|
5
|
+
client.use({
|
|
6
|
+
onRequest({ request }) {
|
|
7
|
+
request.headers.set("Authorization", `Bearer ${token}`);
|
|
8
|
+
return request;
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
return client;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,eAAe,CAAC;AAYzC,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,KAAc;IACxD,MAAM,MAAM,GAAG,YAAY,CAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,CAAC;YACT,SAAS,CAAC,EAAE,OAAO,EAAE;gBACnB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;gBACxD,OAAO,OAAO,CAAC;YACjB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CliConfig } from "../config/config.ts";
|
|
2
|
+
export declare class ApiError extends Error {
|
|
3
|
+
readonly detail: unknown;
|
|
4
|
+
readonly status: number;
|
|
5
|
+
constructor(status: number, detail: unknown);
|
|
6
|
+
}
|
|
7
|
+
export declare function getClient(config: CliConfig): import("openapi-fetch").Client<import("@europeum-ebsi/api-contract/types").paths, `${string}/${string}`>;
|
|
8
|
+
export declare function unwrap<T>({ data, error, response, }: {
|
|
9
|
+
data?: T;
|
|
10
|
+
error?: unknown;
|
|
11
|
+
response: Response;
|
|
12
|
+
}): T;
|
|
13
|
+
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/api/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAYrD,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;CAU5C;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,4GAO1C;AAMD,wBAAgB,MAAM,CAAC,CAAC,EAAE,EACxB,IAAI,EACJ,KAAK,EACL,QAAQ,GACT,EAAE;IACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB,GAAG,CAAC,CAGJ"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { makeClient } from "./client.js";
|
|
2
|
+
const clients = new Map();
|
|
3
|
+
export class ApiError extends Error {
|
|
4
|
+
detail;
|
|
5
|
+
status;
|
|
6
|
+
constructor(status, detail) {
|
|
7
|
+
const message = typeof detail === "object" && detail !== null && "title" in detail
|
|
8
|
+
? String(detail["title"])
|
|
9
|
+
: `HTTP ${status}`;
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "ApiError";
|
|
12
|
+
this.status = status;
|
|
13
|
+
this.detail = detail;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function getClient(config) {
|
|
17
|
+
const cacheKey = `${config.baseUrl}\0${config.token ?? ""}`;
|
|
18
|
+
const existing = clients.get(cacheKey);
|
|
19
|
+
if (existing)
|
|
20
|
+
return existing;
|
|
21
|
+
const client = makeClient(config.baseUrl, config.token);
|
|
22
|
+
clients.set(cacheKey, client);
|
|
23
|
+
return client;
|
|
24
|
+
}
|
|
25
|
+
export function unwrap({ data, error, response, }) {
|
|
26
|
+
if (data !== undefined)
|
|
27
|
+
return data;
|
|
28
|
+
throw new ApiError(response.status, error);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/api/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyC,CAAC;AAKjE,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,MAAM,CAAU;IAChB,MAAM,CAAS;IAExB,YAAY,MAAc,EAAE,MAAe;QACzC,MAAM,OAAO,GACX,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,MAAM;YAChE,CAAC,CAAC,MAAM,CAAE,MAAkC,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAC,MAAiB;IACzC,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAMD,MAAM,UAAU,MAAM,CAAI,EACxB,IAAI,EACJ,KAAK,EACL,QAAQ,GAKT;IACC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/api/params.ts"],"names":[],"mappings":"AAQA,wBAAgB,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjD,GAAG,EAAE,CAAC,GACL;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAMxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/api/params.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,CAAC,CACf,GAAM;IAEN,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAgD,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { KeyMaterial } from "../crypto/wallet.ts";
|
|
2
|
+
export { dcqlCredentialQueryId } from "@europeum-ebsi/api-contract/scopes";
|
|
3
|
+
export declare function buildDcqlVpToken(credentialQueryId: string, vpJwt: string): string;
|
|
4
|
+
export declare function createSelfAttestationVcJwt(signingKey: KeyMaterial): string;
|
|
5
|
+
//# sourceMappingURL=dcql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dcql.d.ts","sourceRoot":"","sources":["../../src/auth/dcql.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAQ3E,wBAAgB,gBAAgB,CAC9B,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,MAAM,GACZ,MAAM,CAER;AAmBD,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,WAAW,GAAG,MAAM,CAwC1E"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { SELF_ATTESTATION_VC_TYPE } from "@europeum-ebsi/api-contract/scopes";
|
|
2
|
+
import { createJWT } from "@europeum-ebsi/did-jwt";
|
|
3
|
+
import { metadata as attestationMetadata } from "@europeum-ebsi/vcdm1.1-attestation-schema";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
export { dcqlCredentialQueryId } from "@europeum-ebsi/api-contract/scopes";
|
|
6
|
+
export function buildDcqlVpToken(credentialQueryId, vpJwt) {
|
|
7
|
+
return JSON.stringify({ [credentialQueryId]: [vpJwt] });
|
|
8
|
+
}
|
|
9
|
+
export function createSelfAttestationVcJwt(signingKey) {
|
|
10
|
+
const { alg, did, kid, signer } = signingKey.issuer;
|
|
11
|
+
const issuanceDate = new Date();
|
|
12
|
+
const issued = `${issuanceDate.toISOString().slice(0, -5)}Z`;
|
|
13
|
+
const iat = Math.floor(issuanceDate.getTime() / 1000);
|
|
14
|
+
const id = `urn:uuid:${randomUUID()}`;
|
|
15
|
+
return createJWT({
|
|
16
|
+
iat,
|
|
17
|
+
iss: did,
|
|
18
|
+
jti: id,
|
|
19
|
+
nbf: iat,
|
|
20
|
+
sub: did,
|
|
21
|
+
vc: {
|
|
22
|
+
"@context": ["https://www.w3.org/2018/credentials/v1"],
|
|
23
|
+
credentialSchema: {
|
|
24
|
+
id: `https://schemas-registry.example/schemas/${attestationMetadata.id.base16}`,
|
|
25
|
+
type: "FullJsonSchemaValidator2021",
|
|
26
|
+
},
|
|
27
|
+
credentialSubject: { id: did },
|
|
28
|
+
id,
|
|
29
|
+
issuanceDate: issued,
|
|
30
|
+
issued,
|
|
31
|
+
issuer: did,
|
|
32
|
+
type: [
|
|
33
|
+
"VerifiableCredential",
|
|
34
|
+
"VerifiableAttestation",
|
|
35
|
+
SELF_ATTESTATION_VC_TYPE,
|
|
36
|
+
],
|
|
37
|
+
validFrom: issued,
|
|
38
|
+
},
|
|
39
|
+
}, { signer }, { alg, kid, typ: "JWT" });
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=dcql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dcql.js","sourceRoot":"","sources":["../../src/auth/dcql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAQ3E,MAAM,UAAU,gBAAgB,CAC9B,iBAAyB,EACzB,KAAa;IAEb,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC;AAmBD,MAAM,UAAU,0BAA0B,CAAC,UAAuB;IAChE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,YAAY,UAAU,EAAE,EAAE,CAAC;IAEtC,OAAO,SAAS,CACd;QACE,GAAG;QACH,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,EAAE;QACP,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,EAAE,EAAE;YACF,UAAU,EAAE,CAAC,wCAAwC,CAAC;YACtD,gBAAgB,EAAE;gBAKhB,EAAE,EAAE,4CAA4C,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE;gBAC/E,IAAI,EAAE,6BAA6B;aACpC;YACD,iBAAiB,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;YAC9B,EAAE;YACF,YAAY,EAAE,MAAM;YACpB,MAAM;YACN,MAAM,EAAE,GAAG;YACX,IAAI,EAAE;gBACJ,sBAAsB;gBACtB,uBAAuB;gBACvB,wBAAwB;aACzB;YACD,SAAS,EAAE,MAAM;SAClB;KACF,EACD,EAAE,MAAM,EAAE,EACV,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare const COMBINABLE_SCOPES: Set<string>;
|
|
2
|
+
export declare const KNOWN_SCOPES: readonly ["did-registry:invite", "did-registry:write", "ledger:invoke", "issuers-registry:invite", "issuers-registry:write", "timestamp:write", "track-and-trace:authorise", "track-and-trace:create", "track-and-trace:write", "policies-registry:write", "schemas-registry:write"];
|
|
3
|
+
export interface ParsedScope {
|
|
4
|
+
family: string;
|
|
5
|
+
targetAddress?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PresentationSubmission {
|
|
8
|
+
definition_id: string;
|
|
9
|
+
descriptor_map: PresentationDescriptor[];
|
|
10
|
+
id: string;
|
|
11
|
+
}
|
|
12
|
+
interface PresentationDescriptor {
|
|
13
|
+
format: string;
|
|
14
|
+
id: string;
|
|
15
|
+
path: string;
|
|
16
|
+
path_nested: {
|
|
17
|
+
format: string;
|
|
18
|
+
id: string;
|
|
19
|
+
path: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export declare function buildPresentationSubmission(scope: string, submissionId: string): PresentationSubmission;
|
|
23
|
+
export declare function mergedDefinitionId(families: string[]): string;
|
|
24
|
+
export declare function parseScopes(scope: string): string[];
|
|
25
|
+
export declare function parseScopeToken(token: string): ParsedScope | undefined;
|
|
26
|
+
export declare function requiresVc(scope: string): boolean;
|
|
27
|
+
export declare function scopeFamilies(scope: string): string[];
|
|
28
|
+
export declare function validateScope(scope: string): void;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=presentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../../src/auth/presentation.ts"],"names":[],"mappings":"AAoDA,eAAO,MAAM,iBAAiB,aAA4C,CAAC;AAK3E,eAAO,MAAM,YAAY,sRAAgB,CAAC;AAK1C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,sBAAsB,EAAE,CAAC;IACzC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAWD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,sBAAsB,CA+BxB;AAYD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAI7D;AAUD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAGnD;AASD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAUtE;AAQD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOjD;AAQD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAYrD;AAaD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CA+BjD"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { CUSTOM_SCOPES, dcqlCredentialQueryId, mergedPresentationDefinitionId, parseScopeToken as parseSharedScopeToken, COMBINABLE_SCOPES as SHARED_COMBINABLE_SCOPES, } from "@europeum-ebsi/api-contract/scopes";
|
|
2
|
+
const VC_REQUIRED_SCOPES = new Set([
|
|
3
|
+
"did-registry:invite",
|
|
4
|
+
"issuers-registry:invite",
|
|
5
|
+
"ledger:invoke",
|
|
6
|
+
"track-and-trace:authorise",
|
|
7
|
+
]);
|
|
8
|
+
export const COMBINABLE_SCOPES = new Set(SHARED_COMBINABLE_SCOPES);
|
|
9
|
+
export const KNOWN_SCOPES = CUSTOM_SCOPES;
|
|
10
|
+
export function buildPresentationSubmission(scope, submissionId) {
|
|
11
|
+
const families = scopeFamilies(scope);
|
|
12
|
+
const definitionId = mergedDefinitionId(families);
|
|
13
|
+
if (families.length === 1 && requiresVc(scope)) {
|
|
14
|
+
const soleFamily = families[0];
|
|
15
|
+
const credentialId = dcqlCredentialQueryId(soleFamily);
|
|
16
|
+
return {
|
|
17
|
+
definition_id: definitionId,
|
|
18
|
+
descriptor_map: [
|
|
19
|
+
{
|
|
20
|
+
format: "jwt_vp",
|
|
21
|
+
id: credentialId,
|
|
22
|
+
path: "$",
|
|
23
|
+
path_nested: {
|
|
24
|
+
format: "jwt_vc",
|
|
25
|
+
id: credentialId,
|
|
26
|
+
path: "$.vp.verifiableCredential[0]",
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
id: submissionId,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
definition_id: definitionId,
|
|
35
|
+
descriptor_map: [],
|
|
36
|
+
id: submissionId,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function mergedDefinitionId(families) {
|
|
40
|
+
return mergedPresentationDefinitionId(families);
|
|
41
|
+
}
|
|
42
|
+
export function parseScopes(scope) {
|
|
43
|
+
const tokens = scope.trim().split(/\s+/).filter(Boolean);
|
|
44
|
+
return tokens[0] === "openid" ? tokens.slice(1) : tokens;
|
|
45
|
+
}
|
|
46
|
+
export function parseScopeToken(token) {
|
|
47
|
+
const parsed = parseSharedScopeToken(token);
|
|
48
|
+
if (!parsed) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
family: parsed.scope,
|
|
53
|
+
...(parsed.targetAddress && { targetAddress: parsed.targetAddress }),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function requiresVc(scope) {
|
|
57
|
+
const tokens = parseScopes(scope);
|
|
58
|
+
if (tokens.length !== 1) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
const parsed = parseScopeToken(tokens[0]);
|
|
62
|
+
return parsed !== undefined && VC_REQUIRED_SCOPES.has(parsed.family);
|
|
63
|
+
}
|
|
64
|
+
export function scopeFamilies(scope) {
|
|
65
|
+
return parseScopes(scope).map((token) => {
|
|
66
|
+
const parsed = parseScopeToken(token);
|
|
67
|
+
if (!parsed) {
|
|
68
|
+
throw new Error(`Invalid scope token "${token}". Expected "<registry>:<action>", optionally ` +
|
|
69
|
+
`suffixed with ":<0x-address>" to target a specific contract instance. ` +
|
|
70
|
+
`Known scopes: ${KNOWN_SCOPES.join(", ")}`);
|
|
71
|
+
}
|
|
72
|
+
return parsed.family;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
export function validateScope(scope) {
|
|
76
|
+
const tokens = parseScopes(scope);
|
|
77
|
+
if (tokens.length === 0) {
|
|
78
|
+
throw new Error(`Missing scope. Provide one of: ${KNOWN_SCOPES.join(", ")}`);
|
|
79
|
+
}
|
|
80
|
+
const families = scopeFamilies(scope);
|
|
81
|
+
const seen = new Set();
|
|
82
|
+
const duplicates = new Set();
|
|
83
|
+
for (const family of families) {
|
|
84
|
+
if (seen.has(family))
|
|
85
|
+
duplicates.add(family);
|
|
86
|
+
seen.add(family);
|
|
87
|
+
}
|
|
88
|
+
if (duplicates.size > 0) {
|
|
89
|
+
throw new Error(`Duplicate scope(s): ${[...duplicates].join(", ")}`);
|
|
90
|
+
}
|
|
91
|
+
if (families.length <= 1)
|
|
92
|
+
return;
|
|
93
|
+
const nonCombinable = families.filter((f) => !COMBINABLE_SCOPES.has(f));
|
|
94
|
+
if (nonCombinable.length > 0) {
|
|
95
|
+
throw new Error(`Scope(s) "${nonCombinable.join(", ")}" cannot be combined with other scopes. ` +
|
|
96
|
+
`Only these scopes may be combined in a single token: ${[...COMBINABLE_SCOPES].join(", ")}.`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=presentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation.js","sourceRoot":"","sources":["../../src/auth/presentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CliConfig } from "../config/config.ts";
|
|
2
|
+
import type { WalletDetails } from "../crypto/wallet.ts";
|
|
3
|
+
export interface GetAccessTokenOptions {
|
|
4
|
+
config: CliConfig;
|
|
5
|
+
scope: string;
|
|
6
|
+
spec?: "1.0" | "draft14";
|
|
7
|
+
vcJwt?: string;
|
|
8
|
+
wallet: WalletDetails;
|
|
9
|
+
}
|
|
10
|
+
export declare function getAccessToken(opts: GetAccessTokenOptions): Promise<string>;
|
|
11
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/auth/token.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgBzD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IAOd,IAAI,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;CACvB;AAcD,wBAAsB,cAAc,CAClC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA+HjB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { createVerifiablePresentationJwt } from "@europeum-ebsi/verifiable-presentation/vcdm11.js";
|
|
2
|
+
import { decodeJwt } from "jose";
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
|
+
import { buildEbsiEnvConfig } from "../config/ebsi-env.js";
|
|
5
|
+
import { buildDcqlVpToken, createSelfAttestationVcJwt, dcqlCredentialQueryId, } from "./dcql.js";
|
|
6
|
+
import { buildPresentationSubmission, requiresVc, scopeFamilies, } from "./presentation.js";
|
|
7
|
+
const DID_REGISTRY_INVITE_FAMILY = "did-registry:invite";
|
|
8
|
+
export async function getAccessToken(opts) {
|
|
9
|
+
const { config, scope, spec = "draft14", vcJwt, wallet } = opts;
|
|
10
|
+
if (!vcJwt && requiresVc(scope)) {
|
|
11
|
+
throw new Error(`Scope "${scope}" requires a Verifiable Credential. ` +
|
|
12
|
+
"Pass --vc <file> with a path to a VC JWT file.");
|
|
13
|
+
}
|
|
14
|
+
const signingKey = wallet.signingKey();
|
|
15
|
+
if (vcJwt && scopeFamilies(scope).includes(DID_REGISTRY_INVITE_FAMILY)) {
|
|
16
|
+
const { vc } = decodeJwt(vcJwt);
|
|
17
|
+
const jwkThumbprint = vc?.credentialSubject?.jwkThumbprint;
|
|
18
|
+
if (!jwkThumbprint) {
|
|
19
|
+
throw new Error("The Verifiable Credential passed via --vc is missing " +
|
|
20
|
+
"credentialSubject.jwkThumbprint, which the Authorisation service " +
|
|
21
|
+
`requires for the "did-registry:invite" scope. Ask the issuer for a VC that ` +
|
|
22
|
+
`authorises this key (thumbprint: ${signingKey.thumbprint}).`);
|
|
23
|
+
}
|
|
24
|
+
if (typeof jwkThumbprint !== "string") {
|
|
25
|
+
throw new TypeError("The Verifiable Credential passed via --vc has an invalid " +
|
|
26
|
+
"credentialSubject.jwkThumbprint property (not a string).");
|
|
27
|
+
}
|
|
28
|
+
if (jwkThumbprint !== signingKey.thumbprint) {
|
|
29
|
+
throw new Error("The Verifiable Credential passed via --vc authorises a different " +
|
|
30
|
+
`key (thumbprint: ${jwkThumbprint}) than the signing key ` +
|
|
31
|
+
`(thumbprint: ${signingKey.thumbprint}). Use the key the VC was ` +
|
|
32
|
+
"issued for, request a new VC for this key, or pass --sign-alg to " +
|
|
33
|
+
"select the intended key.");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const { issuer, tokenEndpoint } = await discoverAuthEndpoints(config.baseUrl);
|
|
37
|
+
const ebsiEnvConfig = buildEbsiEnvConfig(config);
|
|
38
|
+
const nonce = randomUUID();
|
|
39
|
+
const now = Math.floor(Date.now() / 1000);
|
|
40
|
+
const dcqlSelfAttestationVc = spec === "1.0" && !vcJwt
|
|
41
|
+
? createSelfAttestationVcJwt(signingKey)
|
|
42
|
+
: undefined;
|
|
43
|
+
const credential = vcJwt ?? dcqlSelfAttestationVc;
|
|
44
|
+
const vpPayload = {
|
|
45
|
+
"@context": ["https://www.w3.org/2018/credentials/v1"],
|
|
46
|
+
holder: signingKey.issuer.did,
|
|
47
|
+
type: ["VerifiablePresentation"],
|
|
48
|
+
verifiableCredential: credential ? [credential] : [],
|
|
49
|
+
};
|
|
50
|
+
const vpJwt = await createVerifiablePresentationJwt(vpPayload, signingKey.issuer, issuer, ebsiEnvConfig, {
|
|
51
|
+
exp: now + 100,
|
|
52
|
+
...(scopeFamilies(scope).includes(DID_REGISTRY_INVITE_FAMILY) && {
|
|
53
|
+
header: { jwk: signingKey.publicKeyJwk },
|
|
54
|
+
}),
|
|
55
|
+
nbf: now - 100,
|
|
56
|
+
nonce,
|
|
57
|
+
skipValidation: true,
|
|
58
|
+
});
|
|
59
|
+
if (spec === "1.0") {
|
|
60
|
+
const credentialQueryId = dcqlCredentialQueryId(scopeFamilies(scope)[0]);
|
|
61
|
+
const body = new URLSearchParams({
|
|
62
|
+
grant_type: "vp_token",
|
|
63
|
+
scope: `openid ${scope}`,
|
|
64
|
+
vp_token: buildDcqlVpToken(credentialQueryId, vpJwt),
|
|
65
|
+
});
|
|
66
|
+
return submitTokenRequest(tokenEndpoint, body);
|
|
67
|
+
}
|
|
68
|
+
const submissionId = randomUUID();
|
|
69
|
+
const presentationSubmission = buildPresentationSubmission(scope, submissionId);
|
|
70
|
+
const body = new URLSearchParams({
|
|
71
|
+
grant_type: "vp_token",
|
|
72
|
+
presentation_submission: JSON.stringify(presentationSubmission),
|
|
73
|
+
scope: `openid ${scope}`,
|
|
74
|
+
vp_token: vpJwt,
|
|
75
|
+
});
|
|
76
|
+
return submitTokenRequest(tokenEndpoint, body);
|
|
77
|
+
}
|
|
78
|
+
async function discoverAuthEndpoints(baseUrl) {
|
|
79
|
+
const discoveryUrl = `${baseUrl}/auth/.well-known/openid-configuration`;
|
|
80
|
+
const resp = await fetch(discoveryUrl, {
|
|
81
|
+
headers: { Accept: "application/json" },
|
|
82
|
+
});
|
|
83
|
+
if (!resp.ok) {
|
|
84
|
+
throw new Error(`Failed to fetch OpenID config from ${discoveryUrl}: HTTP ${resp.status.toString()}`);
|
|
85
|
+
}
|
|
86
|
+
const body = (await resp.json());
|
|
87
|
+
const { issuer, token_endpoint: tokenEndpoint } = body;
|
|
88
|
+
if (!issuer || !tokenEndpoint) {
|
|
89
|
+
throw new Error(`OpenID config at ${discoveryUrl} is missing 'issuer' or 'token_endpoint'`);
|
|
90
|
+
}
|
|
91
|
+
return { issuer, tokenEndpoint };
|
|
92
|
+
}
|
|
93
|
+
async function submitTokenRequest(tokenEndpoint, body) {
|
|
94
|
+
const resp = await fetch(tokenEndpoint, {
|
|
95
|
+
body: body.toString(),
|
|
96
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
97
|
+
method: "POST",
|
|
98
|
+
});
|
|
99
|
+
if (!resp.ok) {
|
|
100
|
+
let detail;
|
|
101
|
+
try {
|
|
102
|
+
const errBody = await resp.text();
|
|
103
|
+
detail = errBody;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
detail = `HTTP ${resp.status.toString()}`;
|
|
107
|
+
}
|
|
108
|
+
throw new Error(`Token request failed (HTTP ${resp.status.toString()}): ${detail}`);
|
|
109
|
+
}
|
|
110
|
+
const data = (await resp.json());
|
|
111
|
+
if (!data.access_token) {
|
|
112
|
+
throw new Error("Token response did not contain 'access_token'");
|
|
113
|
+
}
|
|
114
|
+
return data.access_token;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/auth/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,kDAAkD,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,2BAA2B,EAC3B,UAAU,EACV,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,MAAM,0BAA0B,GAAG,qBAAqB,CAAC;AA4BzD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAA2B;IAE3B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAEhE,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,UAAU,KAAK,sCAAsC;YACnD,gDAAgD,CACnD,CAAC;IACJ,CAAC;IAID,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAOvC,IAAI,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;QACvE,MAAM,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,CAE7B,CAAC;QACF,MAAM,aAAa,GAAG,EAAE,EAAE,iBAAiB,EAAE,aAAa,CAAC;QAE3D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,uDAAuD;gBACrD,mEAAmE;gBACnE,6EAA6E;gBAC7E,oCAAoC,UAAU,CAAC,UAAU,IAAI,CAChE,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,SAAS,CACjB,2DAA2D;gBACzD,0DAA0D,CAC7D,CAAC;QACJ,CAAC;QAED,IAAI,aAAa,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,mEAAmE;gBACjE,oBAAoB,aAAa,yBAAyB;gBAC1D,gBAAgB,UAAU,CAAC,UAAU,4BAA4B;gBACjE,mEAAmE;gBACnE,0BAA0B,CAC7B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAO1C,MAAM,qBAAqB,GACzB,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK;QACtB,CAAC,CAAC,0BAA0B,CAAC,UAAU,CAAC;QACxC,CAAC,CAAC,SAAS,CAAC;IAIhB,MAAM,UAAU,GAAG,KAAK,IAAI,qBAAqB,CAAC;IAElD,MAAM,SAAS,GAAG;QAChB,UAAU,EAAE,CAAC,wCAAwC,CAAC;QACtD,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG;QAC7B,IAAI,EAAE,CAAC,wBAAwB,CAAC;QAChC,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;KACrD,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,+BAA+B,CACjD,SAAS,EACT,UAAU,CAAC,MAAM,EACjB,MAAM,EACN,aAAa,EACb;QACE,GAAG,EAAE,GAAG,GAAG,GAAG;QAKd,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC,IAAI;YAC/D,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,YAAY,EAAE;SACzC,CAAC;QACF,GAAG,EAAE,GAAG,GAAG,GAAG;QACd,KAAK;QACL,cAAc,EAAE,IAAI;KACrB,CACF,CAAC;IAEF,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QAInB,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QAE1E,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;YAC/B,UAAU,EAAE,UAAU;YACtB,KAAK,EAAE,UAAU,KAAK,EAAE;YACxB,QAAQ,EAAE,gBAAgB,CAAC,iBAAiB,EAAE,KAAK,CAAC;SACrD,CAAC,CAAC;QAEH,OAAO,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;IAClC,MAAM,sBAAsB,GAAG,2BAA2B,CACxD,KAAK,EACL,YAAY,CACb,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;QAC/B,UAAU,EAAE,UAAU;QACtB,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC;QAC/D,KAAK,EAAE,UAAU,KAAK,EAAE;QACxB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,OAAO,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAQD,KAAK,UAAU,qBAAqB,CAClC,OAAe;IAEf,MAAM,YAAY,GAAG,GAAG,OAAO,wCAAwC,CAAC;IACxE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;QACrC,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;KACxC,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,sCAAsC,YAAY,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CACrF,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAG9B,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACvD,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,oBAAoB,YAAY,0CAA0C,CAC3E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AACnC,CAAC;AAQD,KAAK,UAAU,kBAAkB,CAC/B,aAAqB,EACrB,IAAqB;IAErB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE;QACtC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;QACrB,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC5C,CAAC;QACD,MAAM,IAAI,KAAK,CACb,8BAA8B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,MAAM,EAAE,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA8B,CAAC;IAC9D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,YAAY,IAAI,OAAO,CA8EtC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,11 +1,97 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { COMMANDS } from "./commands/registry.js";
|
|
3
|
+
import { resolveConfig } from "./config/config.js";
|
|
4
|
+
import { printError, printResult } from "./output/format.js";
|
|
5
|
+
export function buildProgram() {
|
|
6
|
+
const program = new Command();
|
|
7
|
+
program
|
|
8
|
+
.name("ebsi")
|
|
9
|
+
.description("EBSI Core CLI — interact with the EBSI Core API")
|
|
10
|
+
.version("1.0.0-rc.0")
|
|
11
|
+
.option("--env <env>", "EBSI environment (local, test, pilot, preprod, prod)")
|
|
12
|
+
.option("--base-url <url>", "Override the API base URL (incl. /v1 prefix)")
|
|
13
|
+
.option("--output <format>", "Output format: pretty (default), json, table")
|
|
14
|
+
.option("--token <jwt>", "Bearer access token for authenticated requests (e.g. POST /ledger write methods). " +
|
|
15
|
+
"Also read from EBSI_ACCESS_TOKEN env var or `ebsi config set token <jwt>`.")
|
|
16
|
+
.option("--es256k-key <hex>", "Secp256k1 private key (0x-prefixed hex). Mandatory for anything that signs: " +
|
|
17
|
+
"always signs Ethereum transactions, and signs VCs/VPs unless --sign-alg is ES256. " +
|
|
18
|
+
"Also read from EBSI_ES256K_PRIVATE_KEY env var or `ebsi config set es256kPrivateKey <hex>`. " +
|
|
19
|
+
"WARNING: passing keys on the command line may expose them in shell history.")
|
|
20
|
+
.option("--es256-key <hex>", "P-256 private key (hex), optional — for signing VCs/VPs only (e.g. an `auth token` " +
|
|
21
|
+
"request). Also read from EBSI_ES256_PRIVATE_KEY env var or " +
|
|
22
|
+
"`ebsi config set es256PrivateKey <hex>`.")
|
|
23
|
+
.option("--sign-alg <alg>", 'Which key signs VCs/VPs: "ES256" or "ES256K". Required when both keys are ' +
|
|
24
|
+
"configured. Also read from EBSI_SIGN_ALG env var or `ebsi config set signAlg <alg>`.")
|
|
25
|
+
.option("--did <did>", "EBSI DID (did:ebsi:...) to associate with the key(s). " +
|
|
26
|
+
"Also read from EBSI_DID env var or `ebsi config set did <did>`. " +
|
|
27
|
+
"If omitted when running `wallet create`, a new random DID is generated.");
|
|
28
|
+
const nodes = new Map();
|
|
29
|
+
const configured = new Set();
|
|
30
|
+
for (const descriptor of COMMANDS) {
|
|
31
|
+
let parent = program;
|
|
32
|
+
const path = [];
|
|
33
|
+
for (const [index, segment] of descriptor.segments.entries()) {
|
|
34
|
+
path.push(segment);
|
|
35
|
+
const key = path.join(".");
|
|
36
|
+
let node = nodes.get(key);
|
|
37
|
+
if (!node) {
|
|
38
|
+
node = new Command(segment).description(index === 0
|
|
39
|
+
? `Commands for the ${descriptor.group} API`
|
|
40
|
+
: `${descriptor.group} ${path.slice(1).join(" ")} commands`);
|
|
41
|
+
parent.addCommand(node);
|
|
42
|
+
nodes.set(key, node);
|
|
43
|
+
}
|
|
44
|
+
parent = node;
|
|
45
|
+
}
|
|
46
|
+
const leafKey = descriptor.segments.join(".");
|
|
47
|
+
if (configured.has(leafKey))
|
|
48
|
+
continue;
|
|
49
|
+
configured.add(leafKey);
|
|
50
|
+
configureLeaf(parent, descriptor);
|
|
51
|
+
}
|
|
52
|
+
return program;
|
|
53
|
+
}
|
|
54
|
+
function configureLeaf(cmd, descriptor) {
|
|
55
|
+
cmd.description(descriptor.summary);
|
|
56
|
+
for (const arg of descriptor.args) {
|
|
57
|
+
if (arg.required) {
|
|
58
|
+
cmd.argument(`<${arg.name}>`, arg.description);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
cmd.argument(`[${arg.name}]`, arg.description);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
for (const opt of descriptor.options) {
|
|
65
|
+
cmd.option(opt.flags, opt.description, opt.defaultValue);
|
|
66
|
+
}
|
|
67
|
+
cmd.action(async (...cmdArgs) => {
|
|
68
|
+
const commandInstance = cmdArgs.at(-1);
|
|
69
|
+
const positional = cmdArgs.slice(0, descriptor.args.length);
|
|
70
|
+
const argMap = {};
|
|
71
|
+
for (const [i, arg] of descriptor.args.entries()) {
|
|
72
|
+
argMap[arg.name] = positional[i] ?? "";
|
|
73
|
+
}
|
|
74
|
+
const mergedOpts = commandInstance.optsWithGlobals();
|
|
75
|
+
try {
|
|
76
|
+
const config = resolveConfig(Object.fromEntries(Object.entries({
|
|
77
|
+
baseUrl: mergedOpts["baseUrl"],
|
|
78
|
+
did: mergedOpts["did"],
|
|
79
|
+
env: mergedOpts["env"],
|
|
80
|
+
es256Key: mergedOpts["es256Key"],
|
|
81
|
+
es256kKey: mergedOpts["es256kKey"],
|
|
82
|
+
output: mergedOpts["output"],
|
|
83
|
+
signAlg: mergedOpts["signAlg"],
|
|
84
|
+
token: mergedOpts["token"],
|
|
85
|
+
}).filter(([, v]) => v !== undefined)), { allowLegacyPrivateKey: descriptor.segments[0] === "config" });
|
|
86
|
+
const data = await descriptor.handler(argMap, mergedOpts, config);
|
|
87
|
+
printResult(data, config.output);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
91
|
+
const detail = error instanceof Error ? error.cause : error;
|
|
92
|
+
printError(message, detail);
|
|
93
|
+
process.exitCode = 1;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
11
97
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAS7D,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,WAAW,CAAC,iDAAiD,CAAC;SAC9D,OAAO,CAAC,YAAY,CAAC;SAErB,MAAM,CACL,aAAa,EACb,sDAAsD,CACvD;SACA,MAAM,CAAC,kBAAkB,EAAE,8CAA8C,CAAC;SAC1E,MAAM,CAAC,mBAAmB,EAAE,8CAA8C,CAAC;SAC3E,MAAM,CACL,eAAe,EACf,oFAAoF;QAClF,4EAA4E,CAC/E;SACA,MAAM,CACL,oBAAoB,EACpB,8EAA8E;QAC5E,oFAAoF;QACpF,8FAA8F;QAC9F,6EAA6E,CAChF;SACA,MAAM,CACL,mBAAmB,EACnB,qFAAqF;QACnF,6DAA6D;QAC7D,0CAA0C,CAC7C;SACA,MAAM,CACL,kBAAkB,EAClB,4EAA4E;QAC1E,sFAAsF,CACzF;SACA,MAAM,CACL,aAAa,EACb,wDAAwD;QACtD,kEAAkE;QAClE,yEAAyE,CAC5E,CAAC;IAKJ,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,OAAO,CAAC;QACrB,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CACrC,KAAK,KAAK,CAAC;oBACT,CAAC,CAAC,oBAAoB,UAAU,CAAC,KAAK,MAAM;oBAC5C,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAC9D,CAAC;gBACF,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACxB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE9C,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxB,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAMD,SAAS,aAAa,CACpB,GAAY,EACZ,UAAqC;IAErC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAEpC,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACrC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,OAAkB,EAAE,EAAE;QAGzC,MAAM,eAAe,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAY,CAAC;QAGlD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAa,CAAC;QACxE,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,CAAC;QAGD,MAAM,UAAU,GACd,eAAe,CAAC,eAAe,EAA0B,CAAC;QAE5D,IAAI,CAAC;YAOH,MAAM,MAAM,GAAG,aAAa,CAC1B,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC;gBACb,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC;gBAC9B,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC;gBACtB,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC;gBACtB,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC;gBAChC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC;gBAClC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC;gBAC5B,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC;gBAC9B,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;aAC3B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CACtC,EACD,EAAE,qBAAqB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAC/D,CAAC;YAEF,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAClE,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACzE,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAC5D,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOvD,eAAO,MAAM,YAAY,EAAE,iBAAiB,EA6G3C,CAAC"}
|