@eudiplo/cli 9.0.0-main.1d44ec5 → 9.0.0-main.22d3602
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/dist/commands/config/portability/migrations.spec.js +3 -2
- package/dist/commands/config/portability/migrations.spec.js.map +1 -1
- package/dist/commands/config/validate/index.d.ts.map +1 -1
- package/dist/commands/config/validate/index.js +2 -2
- package/dist/commands/config/validate/index.js.map +1 -1
- package/dist/commands/deployment/index.d.ts.map +1 -1
- package/dist/commands/deployment/index.js +8 -3
- package/dist/commands/deployment/index.js.map +1 -1
- package/dist/commands/deployment/pass-through.d.ts +15 -0
- package/dist/commands/deployment/pass-through.d.ts.map +1 -0
- package/dist/commands/deployment/pass-through.js +52 -0
- package/dist/commands/deployment/pass-through.js.map +1 -0
- package/dist/commands/upgrade/action.d.ts.map +1 -1
- package/dist/commands/upgrade/action.js +5 -2
- package/dist/commands/upgrade/action.js.map +1 -1
- package/dist/index.js +868 -90
- package/dist/services/compose-args.d.ts +1 -1
- package/dist/services/compose-args.d.ts.map +1 -1
- package/dist/services/compose-args.js +4 -2
- package/dist/services/compose-args.js.map +1 -1
- package/dist/services/compose-upgrade.d.ts +2 -0
- package/dist/services/compose-upgrade.d.ts.map +1 -1
- package/dist/services/compose-upgrade.js +5 -0
- package/dist/services/compose-upgrade.js.map +1 -1
- package/dist/services/container-state.d.ts +4 -1
- package/dist/services/container-state.d.ts.map +1 -1
- package/dist/services/container-state.js +21 -8
- package/dist/services/container-state.js.map +1 -1
- package/dist/services/diagnostics.d.ts.map +1 -1
- package/dist/services/diagnostics.js +10 -0
- package/dist/services/diagnostics.js.map +1 -1
- package/package.json +1 -1
- package/templates/demo-config/presentation/pid.json +1 -2
- package/templates/demo-config.manifest.json +1 -3
- package/templates/docker-compose.yml +11 -6
- package/templates/schemas/IssuanceConfig.schema.json +20 -0
- package/templates/schemas/IssuanceConfigFile.schema.json +676 -1
- package/templates/demo-config/attribute-providers/claims-provider.json +0 -15
- package/templates/demo-config/webhook-endpoints/notification.json +0 -15
package/dist/index.js
CHANGED
|
@@ -14909,7 +14909,7 @@ var CONFIG_FORMATS = {
|
|
|
14909
14909
|
IssuanceConfig: {
|
|
14910
14910
|
slug: "issuance-config",
|
|
14911
14911
|
file: "IssuanceConfigFile",
|
|
14912
|
-
version:
|
|
14912
|
+
version: 3
|
|
14913
14913
|
},
|
|
14914
14914
|
CredentialConfig: {
|
|
14915
14915
|
slug: "credential-config",
|
|
@@ -14992,6 +14992,15 @@ var CONFIG_MIGRATIONS = [
|
|
|
14992
14992
|
// valid v2 spec whose offers keep having no lifetime.
|
|
14993
14993
|
migrate: (spec) => ({ spec })
|
|
14994
14994
|
},
|
|
14995
|
+
{
|
|
14996
|
+
id: "issuance-config-v3-trust-list-verifier-pem",
|
|
14997
|
+
kind: "IssuanceConfig",
|
|
14998
|
+
from: 2,
|
|
14999
|
+
to: 3,
|
|
15000
|
+
// v3 only adds the optional verifierKeyPem to wallet provider trust
|
|
15001
|
+
// list references: a v2 spec is a valid v3 spec.
|
|
15002
|
+
migrate: (spec) => ({ spec })
|
|
15003
|
+
},
|
|
14995
15004
|
presentationConfigV1ToV2,
|
|
14996
15005
|
{
|
|
14997
15006
|
id: "presentation-config-v3-typed-claim-values",
|
|
@@ -21466,13 +21475,13 @@ var CONFIG_SCHEMAS = [
|
|
|
21466
21475
|
},
|
|
21467
21476
|
{
|
|
21468
21477
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
21469
|
-
"$id": "https://eudiplo.dev/schemas/v3/
|
|
21470
|
-
"title": "
|
|
21478
|
+
"$id": "https://eudiplo.dev/schemas/v3/IssuanceConfigFile.schema.json",
|
|
21479
|
+
"title": "IssuanceConfigFile",
|
|
21471
21480
|
"type": "object",
|
|
21472
21481
|
"properties": {
|
|
21473
21482
|
"$schema": {
|
|
21474
21483
|
"type": "string",
|
|
21475
|
-
"const": "https://eudiplo.dev/schemas/v3/
|
|
21484
|
+
"const": "https://eudiplo.dev/schemas/v3/IssuanceConfigFile.schema.json"
|
|
21476
21485
|
},
|
|
21477
21486
|
"metadata": {
|
|
21478
21487
|
"type": "object",
|
|
@@ -21494,23 +21503,7 @@ var CONFIG_SCHEMAS = [
|
|
|
21494
21503
|
"additionalProperties": false
|
|
21495
21504
|
},
|
|
21496
21505
|
"spec": {
|
|
21497
|
-
"
|
|
21498
|
-
{
|
|
21499
|
-
"$ref": "#/$defs/PresentationConfigCreateDto"
|
|
21500
|
-
},
|
|
21501
|
-
{
|
|
21502
|
-
"type": "object",
|
|
21503
|
-
"required": [
|
|
21504
|
-
"id"
|
|
21505
|
-
],
|
|
21506
|
-
"properties": {
|
|
21507
|
-
"id": {
|
|
21508
|
-
"type": "string",
|
|
21509
|
-
"minLength": 1
|
|
21510
|
-
}
|
|
21511
|
-
}
|
|
21512
|
-
}
|
|
21513
|
-
]
|
|
21506
|
+
"$ref": "#/$defs/IssuanceConfig"
|
|
21514
21507
|
}
|
|
21515
21508
|
},
|
|
21516
21509
|
"required": [
|
|
@@ -21519,76 +21512,787 @@ var CONFIG_SCHEMAS = [
|
|
|
21519
21512
|
],
|
|
21520
21513
|
"additionalProperties": false,
|
|
21521
21514
|
"$defs": {
|
|
21522
|
-
"
|
|
21515
|
+
"IssuanceConfig": {
|
|
21523
21516
|
"type": "object",
|
|
21524
21517
|
"properties": {
|
|
21525
|
-
"
|
|
21526
|
-
"
|
|
21527
|
-
"minLength": 1,
|
|
21528
|
-
"description": "Presentation configuration identifier."
|
|
21529
|
-
},
|
|
21530
|
-
"description": {
|
|
21531
|
-
"description": "Optional presentation configuration description.",
|
|
21532
|
-
"type": [
|
|
21533
|
-
"string",
|
|
21534
|
-
"null"
|
|
21535
|
-
]
|
|
21536
|
-
},
|
|
21537
|
-
"lifeTime": {
|
|
21538
|
-
"description": "Presentation request lifetime in seconds.",
|
|
21518
|
+
"batchSize": {
|
|
21519
|
+
"description": "Optional issuance batch size.",
|
|
21539
21520
|
"type": "integer",
|
|
21540
21521
|
"minimum": 1,
|
|
21541
21522
|
"maximum": 9007199254740991
|
|
21542
21523
|
},
|
|
21543
|
-
"
|
|
21544
|
-
"description": "
|
|
21545
|
-
"type": "
|
|
21546
|
-
"minimum": 0,
|
|
21547
|
-
"maximum": 9007199254740991
|
|
21524
|
+
"dPopRequired": {
|
|
21525
|
+
"description": "Require DPoP proofs for issuance endpoints.",
|
|
21526
|
+
"type": "boolean"
|
|
21548
21527
|
},
|
|
21549
|
-
"
|
|
21550
|
-
"description": "
|
|
21528
|
+
"walletAttestationRequired": {
|
|
21529
|
+
"description": "Default wallet attestation requirement for managed authorization servers.",
|
|
21530
|
+
"type": "boolean"
|
|
21531
|
+
},
|
|
21532
|
+
"walletProviderTrustLists": {
|
|
21533
|
+
"description": "Shared wallet provider trust lists for key attestations and default authorization server wallet authentication.",
|
|
21534
|
+
"type": "array",
|
|
21535
|
+
"items": {
|
|
21536
|
+
"type": "object",
|
|
21537
|
+
"properties": {
|
|
21538
|
+
"trustListId": {
|
|
21539
|
+
"type": "string",
|
|
21540
|
+
"minLength": 1
|
|
21541
|
+
},
|
|
21542
|
+
"url": {
|
|
21543
|
+
"description": "URL of the wallet provider trust list.",
|
|
21544
|
+
"type": "string",
|
|
21545
|
+
"format": "uri"
|
|
21546
|
+
},
|
|
21547
|
+
"verifierKey": {
|
|
21548
|
+
"description": "Optional verifier key material used for trust list verification.",
|
|
21549
|
+
"type": "object",
|
|
21550
|
+
"propertyNames": {
|
|
21551
|
+
"type": "string"
|
|
21552
|
+
},
|
|
21553
|
+
"additionalProperties": {}
|
|
21554
|
+
},
|
|
21555
|
+
"verifierKeyPem": {
|
|
21556
|
+
"description": "Optional verifier public key in SPKI PEM form (-----BEGIN PUBLIC KEY-----).",
|
|
21557
|
+
"type": "string",
|
|
21558
|
+
"pattern": "^\\s*-----BEGIN PUBLIC KEY-----[A-Za-z0-9+/=\\s]+-----END PUBLIC KEY-----\\s*$"
|
|
21559
|
+
},
|
|
21560
|
+
"verifierX509Der": {
|
|
21561
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
21562
|
+
"type": "string"
|
|
21563
|
+
}
|
|
21564
|
+
},
|
|
21565
|
+
"additionalProperties": false
|
|
21566
|
+
}
|
|
21567
|
+
},
|
|
21568
|
+
"signingKeyId": {
|
|
21569
|
+
"description": "Default signing key chain id for credential issuance.",
|
|
21551
21570
|
"type": "string",
|
|
21552
|
-
"
|
|
21553
|
-
"strict",
|
|
21554
|
-
"best_effort",
|
|
21555
|
-
"disabled"
|
|
21556
|
-
]
|
|
21571
|
+
"minLength": 1
|
|
21557
21572
|
},
|
|
21558
|
-
"
|
|
21559
|
-
"
|
|
21560
|
-
"
|
|
21561
|
-
|
|
21562
|
-
|
|
21563
|
-
|
|
21564
|
-
|
|
21565
|
-
"
|
|
21566
|
-
{
|
|
21573
|
+
"authorizationServers": {
|
|
21574
|
+
"minItems": 1,
|
|
21575
|
+
"type": "array",
|
|
21576
|
+
"items": {
|
|
21577
|
+
"oneOf": [
|
|
21578
|
+
{
|
|
21579
|
+
"type": "object",
|
|
21580
|
+
"properties": {
|
|
21581
|
+
"type": {
|
|
21582
|
+
"type": "string",
|
|
21583
|
+
"const": "external",
|
|
21584
|
+
"description": "Use an externally managed authorization server."
|
|
21585
|
+
},
|
|
21586
|
+
"id": {
|
|
21587
|
+
"type": "string",
|
|
21588
|
+
"minLength": 1,
|
|
21589
|
+
"description": "Authorization server identifier."
|
|
21590
|
+
},
|
|
21591
|
+
"issuer": {
|
|
21592
|
+
"type": "string",
|
|
21593
|
+
"format": "uri",
|
|
21594
|
+
"description": "Issuer URL for the external authorization server."
|
|
21595
|
+
},
|
|
21596
|
+
"sessionBinding": {
|
|
21597
|
+
"description": "Explicit mapping from an external access-token claim to an existing issuance session.",
|
|
21567
21598
|
"type": "object",
|
|
21568
21599
|
"properties": {
|
|
21569
|
-
"
|
|
21600
|
+
"method": {
|
|
21601
|
+
"type": "string",
|
|
21602
|
+
"const": "access_token_claim",
|
|
21603
|
+
"description": "Read the correlation value from a configured access-token claim."
|
|
21604
|
+
},
|
|
21605
|
+
"claim": {
|
|
21570
21606
|
"type": "string",
|
|
21571
21607
|
"minLength": 1,
|
|
21572
|
-
"
|
|
21573
|
-
|
|
21608
|
+
"description": "Claim name that contains the issuance-session correlation value."
|
|
21609
|
+
}
|
|
21610
|
+
},
|
|
21611
|
+
"required": [
|
|
21612
|
+
"method",
|
|
21613
|
+
"claim"
|
|
21614
|
+
],
|
|
21615
|
+
"additionalProperties": false
|
|
21616
|
+
},
|
|
21617
|
+
"label": {
|
|
21618
|
+
"description": "Optional display label for UI selection.",
|
|
21619
|
+
"type": "string"
|
|
21620
|
+
},
|
|
21621
|
+
"enabled": {
|
|
21622
|
+
"description": "Whether this authorization server entry is enabled.",
|
|
21623
|
+
"type": "boolean"
|
|
21624
|
+
}
|
|
21625
|
+
},
|
|
21626
|
+
"required": [
|
|
21627
|
+
"type",
|
|
21628
|
+
"id",
|
|
21629
|
+
"issuer"
|
|
21630
|
+
],
|
|
21631
|
+
"additionalProperties": false
|
|
21632
|
+
},
|
|
21633
|
+
{
|
|
21634
|
+
"type": "object",
|
|
21635
|
+
"properties": {
|
|
21636
|
+
"type": {
|
|
21637
|
+
"type": "string",
|
|
21638
|
+
"const": "oid4vp",
|
|
21639
|
+
"description": "Use OID4VP-based authorization server chaining."
|
|
21640
|
+
},
|
|
21641
|
+
"id": {
|
|
21642
|
+
"type": "string",
|
|
21643
|
+
"minLength": 1,
|
|
21644
|
+
"description": "Authorization server identifier."
|
|
21645
|
+
},
|
|
21646
|
+
"presentationConfigId": {
|
|
21647
|
+
"type": "string",
|
|
21648
|
+
"minLength": 1,
|
|
21649
|
+
"description": "Presentation configuration id used during authorization."
|
|
21650
|
+
},
|
|
21651
|
+
"immediateWalletRedirect": {
|
|
21652
|
+
"description": "Redirect wallets immediately after authorization response creation.",
|
|
21653
|
+
"type": "boolean"
|
|
21654
|
+
},
|
|
21655
|
+
"token": {
|
|
21656
|
+
"description": "Optional token issuance settings.",
|
|
21657
|
+
"type": "object",
|
|
21658
|
+
"properties": {
|
|
21659
|
+
"lifetimeSeconds": {
|
|
21660
|
+
"description": "Access token lifetime in seconds.",
|
|
21661
|
+
"type": "number",
|
|
21662
|
+
"minimum": 60
|
|
21574
21663
|
},
|
|
21575
|
-
"
|
|
21576
|
-
"description": "
|
|
21664
|
+
"signingKeyId": {
|
|
21665
|
+
"description": "Optional key chain id used to sign issued tokens.",
|
|
21666
|
+
"type": "string",
|
|
21667
|
+
"minLength": 1
|
|
21668
|
+
},
|
|
21669
|
+
"refreshTokenEnabled": {
|
|
21670
|
+
"description": "Enable issuing refresh tokens.",
|
|
21577
21671
|
"type": "boolean"
|
|
21578
21672
|
},
|
|
21579
|
-
"
|
|
21580
|
-
"description": "
|
|
21581
|
-
"type": "
|
|
21582
|
-
"
|
|
21583
|
-
|
|
21584
|
-
|
|
21673
|
+
"refreshTokenExpiresInSeconds": {
|
|
21674
|
+
"description": "Refresh token lifetime in seconds.",
|
|
21675
|
+
"type": "number",
|
|
21676
|
+
"minimum": 60
|
|
21677
|
+
}
|
|
21678
|
+
},
|
|
21679
|
+
"additionalProperties": false
|
|
21680
|
+
},
|
|
21681
|
+
"requireDPoP": {
|
|
21682
|
+
"description": "Require DPoP proofs for token/credential requests.",
|
|
21683
|
+
"type": "boolean"
|
|
21684
|
+
},
|
|
21685
|
+
"walletAttestationRequired": {
|
|
21686
|
+
"description": "Require wallet attestation for this authorization server.",
|
|
21687
|
+
"type": "boolean"
|
|
21688
|
+
},
|
|
21689
|
+
"walletProviderTrustLists": {
|
|
21690
|
+
"description": "Optional wallet provider trust list references for this authorization server.",
|
|
21691
|
+
"type": "array",
|
|
21692
|
+
"items": {
|
|
21693
|
+
"type": "object",
|
|
21694
|
+
"properties": {
|
|
21695
|
+
"trustListId": {
|
|
21696
|
+
"type": "string",
|
|
21697
|
+
"minLength": 1
|
|
21698
|
+
},
|
|
21699
|
+
"url": {
|
|
21700
|
+
"description": "URL of the wallet provider trust list.",
|
|
21701
|
+
"type": "string",
|
|
21702
|
+
"format": "uri"
|
|
21703
|
+
},
|
|
21704
|
+
"verifierKey": {
|
|
21705
|
+
"description": "Optional verifier key material used for trust list verification.",
|
|
21706
|
+
"type": "object",
|
|
21707
|
+
"propertyNames": {
|
|
21585
21708
|
"type": "string"
|
|
21586
|
-
}
|
|
21587
|
-
|
|
21588
|
-
|
|
21589
|
-
|
|
21590
|
-
|
|
21591
|
-
|
|
21709
|
+
},
|
|
21710
|
+
"additionalProperties": {}
|
|
21711
|
+
},
|
|
21712
|
+
"verifierKeyPem": {
|
|
21713
|
+
"description": "Optional verifier public key in SPKI PEM form (-----BEGIN PUBLIC KEY-----).",
|
|
21714
|
+
"type": "string",
|
|
21715
|
+
"pattern": "^\\s*-----BEGIN PUBLIC KEY-----[A-Za-z0-9+/=\\s]+-----END PUBLIC KEY-----\\s*$"
|
|
21716
|
+
},
|
|
21717
|
+
"verifierX509Der": {
|
|
21718
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
21719
|
+
"type": "string"
|
|
21720
|
+
}
|
|
21721
|
+
},
|
|
21722
|
+
"additionalProperties": false
|
|
21723
|
+
}
|
|
21724
|
+
},
|
|
21725
|
+
"label": {
|
|
21726
|
+
"description": "Optional display label for UI selection.",
|
|
21727
|
+
"type": "string"
|
|
21728
|
+
},
|
|
21729
|
+
"enabled": {
|
|
21730
|
+
"description": "Whether this authorization server entry is enabled.",
|
|
21731
|
+
"type": "boolean"
|
|
21732
|
+
}
|
|
21733
|
+
},
|
|
21734
|
+
"required": [
|
|
21735
|
+
"type",
|
|
21736
|
+
"id",
|
|
21737
|
+
"presentationConfigId"
|
|
21738
|
+
],
|
|
21739
|
+
"additionalProperties": false
|
|
21740
|
+
},
|
|
21741
|
+
{
|
|
21742
|
+
"type": "object",
|
|
21743
|
+
"properties": {
|
|
21744
|
+
"type": {
|
|
21745
|
+
"type": "string",
|
|
21746
|
+
"const": "chained",
|
|
21747
|
+
"description": "Use upstream OIDC as authorization source."
|
|
21748
|
+
},
|
|
21749
|
+
"id": {
|
|
21750
|
+
"type": "string",
|
|
21751
|
+
"minLength": 1,
|
|
21752
|
+
"description": "Authorization server identifier."
|
|
21753
|
+
},
|
|
21754
|
+
"upstream": {
|
|
21755
|
+
"type": "object",
|
|
21756
|
+
"properties": {
|
|
21757
|
+
"issuer": {
|
|
21758
|
+
"type": "string",
|
|
21759
|
+
"format": "uri",
|
|
21760
|
+
"description": "Upstream OIDC issuer URL."
|
|
21761
|
+
},
|
|
21762
|
+
"clientId": {
|
|
21763
|
+
"type": "string",
|
|
21764
|
+
"minLength": 1,
|
|
21765
|
+
"description": "Client id for upstream OIDC authentication."
|
|
21766
|
+
},
|
|
21767
|
+
"clientSecret": {
|
|
21768
|
+
"description": "Optional client secret for upstream OIDC authentication.",
|
|
21769
|
+
"type": "string",
|
|
21770
|
+
"minLength": 1
|
|
21771
|
+
},
|
|
21772
|
+
"scopes": {
|
|
21773
|
+
"description": "Optional scopes requested from the upstream issuer.",
|
|
21774
|
+
"type": "array",
|
|
21775
|
+
"items": {
|
|
21776
|
+
"type": "string",
|
|
21777
|
+
"minLength": 1
|
|
21778
|
+
}
|
|
21779
|
+
}
|
|
21780
|
+
},
|
|
21781
|
+
"required": [
|
|
21782
|
+
"issuer",
|
|
21783
|
+
"clientId"
|
|
21784
|
+
],
|
|
21785
|
+
"additionalProperties": false,
|
|
21786
|
+
"description": "Upstream OIDC connection settings."
|
|
21787
|
+
},
|
|
21788
|
+
"token": {
|
|
21789
|
+
"description": "Optional token issuance settings.",
|
|
21790
|
+
"type": "object",
|
|
21791
|
+
"properties": {
|
|
21792
|
+
"lifetimeSeconds": {
|
|
21793
|
+
"description": "Access token lifetime in seconds.",
|
|
21794
|
+
"type": "number",
|
|
21795
|
+
"minimum": 60
|
|
21796
|
+
},
|
|
21797
|
+
"signingKeyId": {
|
|
21798
|
+
"description": "Optional key chain id used to sign issued tokens.",
|
|
21799
|
+
"type": "string",
|
|
21800
|
+
"minLength": 1
|
|
21801
|
+
},
|
|
21802
|
+
"refreshTokenEnabled": {
|
|
21803
|
+
"description": "Enable issuing refresh tokens.",
|
|
21804
|
+
"type": "boolean"
|
|
21805
|
+
},
|
|
21806
|
+
"refreshTokenExpiresInSeconds": {
|
|
21807
|
+
"description": "Refresh token lifetime in seconds.",
|
|
21808
|
+
"type": "number",
|
|
21809
|
+
"minimum": 60
|
|
21810
|
+
}
|
|
21811
|
+
},
|
|
21812
|
+
"additionalProperties": false
|
|
21813
|
+
},
|
|
21814
|
+
"requireDPoP": {
|
|
21815
|
+
"description": "Require DPoP proofs for token/credential requests.",
|
|
21816
|
+
"type": "boolean"
|
|
21817
|
+
},
|
|
21818
|
+
"walletAttestationRequired": {
|
|
21819
|
+
"description": "Require wallet attestation for this authorization server.",
|
|
21820
|
+
"type": "boolean"
|
|
21821
|
+
},
|
|
21822
|
+
"walletProviderTrustLists": {
|
|
21823
|
+
"description": "Optional wallet provider trust list references for this authorization server.",
|
|
21824
|
+
"type": "array",
|
|
21825
|
+
"items": {
|
|
21826
|
+
"type": "object",
|
|
21827
|
+
"properties": {
|
|
21828
|
+
"trustListId": {
|
|
21829
|
+
"type": "string",
|
|
21830
|
+
"minLength": 1
|
|
21831
|
+
},
|
|
21832
|
+
"url": {
|
|
21833
|
+
"description": "URL of the wallet provider trust list.",
|
|
21834
|
+
"type": "string",
|
|
21835
|
+
"format": "uri"
|
|
21836
|
+
},
|
|
21837
|
+
"verifierKey": {
|
|
21838
|
+
"description": "Optional verifier key material used for trust list verification.",
|
|
21839
|
+
"type": "object",
|
|
21840
|
+
"propertyNames": {
|
|
21841
|
+
"type": "string"
|
|
21842
|
+
},
|
|
21843
|
+
"additionalProperties": {}
|
|
21844
|
+
},
|
|
21845
|
+
"verifierKeyPem": {
|
|
21846
|
+
"description": "Optional verifier public key in SPKI PEM form (-----BEGIN PUBLIC KEY-----).",
|
|
21847
|
+
"type": "string",
|
|
21848
|
+
"pattern": "^\\s*-----BEGIN PUBLIC KEY-----[A-Za-z0-9+/=\\s]+-----END PUBLIC KEY-----\\s*$"
|
|
21849
|
+
},
|
|
21850
|
+
"verifierX509Der": {
|
|
21851
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
21852
|
+
"type": "string"
|
|
21853
|
+
}
|
|
21854
|
+
},
|
|
21855
|
+
"additionalProperties": false
|
|
21856
|
+
}
|
|
21857
|
+
},
|
|
21858
|
+
"label": {
|
|
21859
|
+
"description": "Optional display label for UI selection.",
|
|
21860
|
+
"type": "string"
|
|
21861
|
+
},
|
|
21862
|
+
"enabled": {
|
|
21863
|
+
"description": "Whether this authorization server entry is enabled.",
|
|
21864
|
+
"type": "boolean"
|
|
21865
|
+
}
|
|
21866
|
+
},
|
|
21867
|
+
"required": [
|
|
21868
|
+
"type",
|
|
21869
|
+
"id",
|
|
21870
|
+
"upstream"
|
|
21871
|
+
],
|
|
21872
|
+
"additionalProperties": false
|
|
21873
|
+
},
|
|
21874
|
+
{
|
|
21875
|
+
"type": "object",
|
|
21876
|
+
"properties": {
|
|
21877
|
+
"type": {
|
|
21878
|
+
"type": "string",
|
|
21879
|
+
"const": "built-in",
|
|
21880
|
+
"description": "Use EUDIPLO built-in authorization server."
|
|
21881
|
+
},
|
|
21882
|
+
"id": {
|
|
21883
|
+
"type": "string",
|
|
21884
|
+
"minLength": 1,
|
|
21885
|
+
"description": "Authorization server identifier."
|
|
21886
|
+
},
|
|
21887
|
+
"token": {
|
|
21888
|
+
"description": "Optional token issuance settings.",
|
|
21889
|
+
"type": "object",
|
|
21890
|
+
"properties": {
|
|
21891
|
+
"lifetimeSeconds": {
|
|
21892
|
+
"description": "Access token lifetime in seconds.",
|
|
21893
|
+
"type": "number",
|
|
21894
|
+
"minimum": 60
|
|
21895
|
+
},
|
|
21896
|
+
"signingKeyId": {
|
|
21897
|
+
"description": "Optional key chain id used to sign issued tokens.",
|
|
21898
|
+
"type": "string",
|
|
21899
|
+
"minLength": 1
|
|
21900
|
+
},
|
|
21901
|
+
"refreshTokenEnabled": {
|
|
21902
|
+
"description": "Enable issuing refresh tokens.",
|
|
21903
|
+
"type": "boolean"
|
|
21904
|
+
},
|
|
21905
|
+
"refreshTokenExpiresInSeconds": {
|
|
21906
|
+
"description": "Refresh token lifetime in seconds.",
|
|
21907
|
+
"type": "number",
|
|
21908
|
+
"minimum": 60
|
|
21909
|
+
}
|
|
21910
|
+
},
|
|
21911
|
+
"additionalProperties": false
|
|
21912
|
+
},
|
|
21913
|
+
"requireDPoP": {
|
|
21914
|
+
"description": "Require DPoP proofs for token/credential requests.",
|
|
21915
|
+
"type": "boolean"
|
|
21916
|
+
},
|
|
21917
|
+
"walletAttestationRequired": {
|
|
21918
|
+
"description": "Require wallet attestation for this authorization server.",
|
|
21919
|
+
"type": "boolean"
|
|
21920
|
+
},
|
|
21921
|
+
"walletProviderTrustLists": {
|
|
21922
|
+
"description": "Optional wallet provider trust list references for this authorization server.",
|
|
21923
|
+
"type": "array",
|
|
21924
|
+
"items": {
|
|
21925
|
+
"type": "object",
|
|
21926
|
+
"properties": {
|
|
21927
|
+
"trustListId": {
|
|
21928
|
+
"type": "string",
|
|
21929
|
+
"minLength": 1
|
|
21930
|
+
},
|
|
21931
|
+
"url": {
|
|
21932
|
+
"description": "URL of the wallet provider trust list.",
|
|
21933
|
+
"type": "string",
|
|
21934
|
+
"format": "uri"
|
|
21935
|
+
},
|
|
21936
|
+
"verifierKey": {
|
|
21937
|
+
"description": "Optional verifier key material used for trust list verification.",
|
|
21938
|
+
"type": "object",
|
|
21939
|
+
"propertyNames": {
|
|
21940
|
+
"type": "string"
|
|
21941
|
+
},
|
|
21942
|
+
"additionalProperties": {}
|
|
21943
|
+
},
|
|
21944
|
+
"verifierKeyPem": {
|
|
21945
|
+
"description": "Optional verifier public key in SPKI PEM form (-----BEGIN PUBLIC KEY-----).",
|
|
21946
|
+
"type": "string",
|
|
21947
|
+
"pattern": "^\\s*-----BEGIN PUBLIC KEY-----[A-Za-z0-9+/=\\s]+-----END PUBLIC KEY-----\\s*$"
|
|
21948
|
+
},
|
|
21949
|
+
"verifierX509Der": {
|
|
21950
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
21951
|
+
"type": "string"
|
|
21952
|
+
}
|
|
21953
|
+
},
|
|
21954
|
+
"additionalProperties": false
|
|
21955
|
+
}
|
|
21956
|
+
},
|
|
21957
|
+
"label": {
|
|
21958
|
+
"description": "Optional display label for UI selection.",
|
|
21959
|
+
"type": "string"
|
|
21960
|
+
},
|
|
21961
|
+
"enabled": {
|
|
21962
|
+
"description": "Whether this authorization server entry is enabled.",
|
|
21963
|
+
"type": "boolean"
|
|
21964
|
+
}
|
|
21965
|
+
},
|
|
21966
|
+
"required": [
|
|
21967
|
+
"type",
|
|
21968
|
+
"id"
|
|
21969
|
+
],
|
|
21970
|
+
"additionalProperties": false
|
|
21971
|
+
}
|
|
21972
|
+
],
|
|
21973
|
+
"description": "Supported authorization server configurations."
|
|
21974
|
+
},
|
|
21975
|
+
"description": "Configured authorization server entries."
|
|
21976
|
+
},
|
|
21977
|
+
"federation": {
|
|
21978
|
+
"description": "Optional OpenID Federation settings.",
|
|
21979
|
+
"anyOf": [
|
|
21980
|
+
{
|
|
21981
|
+
"type": "object",
|
|
21982
|
+
"properties": {
|
|
21983
|
+
"role": {
|
|
21984
|
+
"description": "Federation role for this issuer.",
|
|
21985
|
+
"type": "string",
|
|
21986
|
+
"enum": [
|
|
21987
|
+
"trust_anchor",
|
|
21988
|
+
"intermediate",
|
|
21989
|
+
"leaf"
|
|
21990
|
+
]
|
|
21991
|
+
},
|
|
21992
|
+
"mode": {
|
|
21993
|
+
"description": "Federation operation mode.",
|
|
21994
|
+
"type": "string",
|
|
21995
|
+
"enum": [
|
|
21996
|
+
"federation-only",
|
|
21997
|
+
"hybrid"
|
|
21998
|
+
]
|
|
21999
|
+
},
|
|
22000
|
+
"entityId": {
|
|
22001
|
+
"description": "Optional local federation entity id.",
|
|
22002
|
+
"type": "string"
|
|
22003
|
+
},
|
|
22004
|
+
"enforceSigningPolicy": {
|
|
22005
|
+
"description": "Enforce strict signing policy checks.",
|
|
22006
|
+
"type": "boolean"
|
|
22007
|
+
},
|
|
22008
|
+
"cacheTtlSeconds": {
|
|
22009
|
+
"description": "Cache time-to-live for federation metadata in seconds.",
|
|
22010
|
+
"type": "integer",
|
|
22011
|
+
"minimum": 1,
|
|
22012
|
+
"maximum": 9007199254740991
|
|
22013
|
+
},
|
|
22014
|
+
"trustAnchors": {
|
|
22015
|
+
"type": "array",
|
|
22016
|
+
"items": {
|
|
22017
|
+
"type": "object",
|
|
22018
|
+
"properties": {
|
|
22019
|
+
"entityId": {
|
|
22020
|
+
"type": "string",
|
|
22021
|
+
"minLength": 1,
|
|
22022
|
+
"description": "Federation trust anchor entity id."
|
|
22023
|
+
},
|
|
22024
|
+
"entityConfigurationUri": {
|
|
22025
|
+
"type": "string",
|
|
22026
|
+
"format": "uri",
|
|
22027
|
+
"description": "Entity configuration URI for the trust anchor."
|
|
22028
|
+
}
|
|
22029
|
+
},
|
|
22030
|
+
"required": [
|
|
22031
|
+
"entityId",
|
|
22032
|
+
"entityConfigurationUri"
|
|
22033
|
+
],
|
|
22034
|
+
"additionalProperties": false
|
|
22035
|
+
},
|
|
22036
|
+
"description": "Federation trust anchors."
|
|
22037
|
+
}
|
|
22038
|
+
},
|
|
22039
|
+
"required": [
|
|
22040
|
+
"trustAnchors"
|
|
22041
|
+
],
|
|
22042
|
+
"additionalProperties": false
|
|
22043
|
+
},
|
|
22044
|
+
{
|
|
22045
|
+
"type": "null"
|
|
22046
|
+
}
|
|
22047
|
+
]
|
|
22048
|
+
},
|
|
22049
|
+
"registrationCertificate": {
|
|
22050
|
+
"description": "Optional registration certificate settings.",
|
|
22051
|
+
"anyOf": [
|
|
22052
|
+
{
|
|
22053
|
+
"type": "object",
|
|
22054
|
+
"properties": {
|
|
22055
|
+
"enabled": {
|
|
22056
|
+
"description": "Enable issuer registration certificate support.",
|
|
22057
|
+
"type": "boolean"
|
|
22058
|
+
},
|
|
22059
|
+
"mode": {
|
|
22060
|
+
"description": "How registration certificate data is provided.",
|
|
22061
|
+
"type": "string",
|
|
22062
|
+
"enum": [
|
|
22063
|
+
"import",
|
|
22064
|
+
"generate"
|
|
22065
|
+
]
|
|
22066
|
+
},
|
|
22067
|
+
"jwt": {
|
|
22068
|
+
"description": "Optional registration certificate JWT when using import mode.",
|
|
22069
|
+
"type": "string"
|
|
22070
|
+
},
|
|
22071
|
+
"privacyPolicy": {
|
|
22072
|
+
"description": "Optional privacy policy URI.",
|
|
22073
|
+
"type": "string"
|
|
22074
|
+
},
|
|
22075
|
+
"supportUri": {
|
|
22076
|
+
"description": "Optional support URI.",
|
|
22077
|
+
"type": "string"
|
|
22078
|
+
}
|
|
22079
|
+
},
|
|
22080
|
+
"additionalProperties": false
|
|
22081
|
+
},
|
|
22082
|
+
{
|
|
22083
|
+
"type": "null"
|
|
22084
|
+
}
|
|
22085
|
+
]
|
|
22086
|
+
},
|
|
22087
|
+
"display": {
|
|
22088
|
+
"description": "Localized issuer metadata shown to wallets.",
|
|
22089
|
+
"type": "array",
|
|
22090
|
+
"items": {
|
|
22091
|
+
"type": "object",
|
|
22092
|
+
"properties": {
|
|
22093
|
+
"name": {
|
|
22094
|
+
"description": "Issuer display name.",
|
|
22095
|
+
"type": "string"
|
|
22096
|
+
},
|
|
22097
|
+
"locale": {
|
|
22098
|
+
"description": "Locale tag for this display entry.",
|
|
22099
|
+
"type": "string"
|
|
22100
|
+
},
|
|
22101
|
+
"logo": {
|
|
22102
|
+
"description": "Optional issuer logo metadata.",
|
|
22103
|
+
"type": "object",
|
|
22104
|
+
"properties": {
|
|
22105
|
+
"uri": {
|
|
22106
|
+
"type": "string",
|
|
22107
|
+
"minLength": 1,
|
|
22108
|
+
"description": "Logo URI."
|
|
22109
|
+
},
|
|
22110
|
+
"alt_text": {
|
|
22111
|
+
"description": "Optional localized alternative text.",
|
|
22112
|
+
"type": "string"
|
|
22113
|
+
}
|
|
22114
|
+
},
|
|
22115
|
+
"required": [
|
|
22116
|
+
"uri"
|
|
22117
|
+
],
|
|
22118
|
+
"additionalProperties": {}
|
|
22119
|
+
}
|
|
22120
|
+
},
|
|
22121
|
+
"additionalProperties": {}
|
|
22122
|
+
}
|
|
22123
|
+
},
|
|
22124
|
+
"notificationEndpointEnabled": {
|
|
22125
|
+
"description": "Whether the OID4VCI notification endpoint is exposed for this issuance configuration.",
|
|
22126
|
+
"type": "boolean"
|
|
22127
|
+
},
|
|
22128
|
+
"credentialResponseEncryption": {
|
|
22129
|
+
"description": "Enable encrypted credential responses.",
|
|
22130
|
+
"type": "boolean"
|
|
22131
|
+
},
|
|
22132
|
+
"credentialRequestEncryption": {
|
|
22133
|
+
"description": "Require encrypted credential requests.",
|
|
22134
|
+
"type": "boolean"
|
|
22135
|
+
},
|
|
22136
|
+
"txCodeMaxAttempts": {
|
|
22137
|
+
"description": "Maximum verification attempts for transaction codes. Null resets to defaults.",
|
|
22138
|
+
"anyOf": [
|
|
22139
|
+
{
|
|
22140
|
+
"type": "integer",
|
|
22141
|
+
"minimum": 1,
|
|
22142
|
+
"maximum": 9007199254740991
|
|
22143
|
+
},
|
|
22144
|
+
{
|
|
22145
|
+
"type": "null"
|
|
22146
|
+
}
|
|
22147
|
+
]
|
|
22148
|
+
},
|
|
22149
|
+
"offerLifetimeSeconds": {
|
|
22150
|
+
"description": "Default lifetime of credential offers in seconds. Can be overridden per offer request. Null or unset: offers do not expire.",
|
|
22151
|
+
"anyOf": [
|
|
22152
|
+
{
|
|
22153
|
+
"type": "integer",
|
|
22154
|
+
"minimum": 1,
|
|
22155
|
+
"maximum": 9007199254740991
|
|
22156
|
+
},
|
|
22157
|
+
{
|
|
22158
|
+
"type": "null"
|
|
22159
|
+
}
|
|
22160
|
+
]
|
|
22161
|
+
}
|
|
22162
|
+
},
|
|
22163
|
+
"required": [
|
|
22164
|
+
"authorizationServers"
|
|
22165
|
+
],
|
|
22166
|
+
"additionalProperties": false,
|
|
22167
|
+
"title": "IssuanceConfig"
|
|
22168
|
+
}
|
|
22169
|
+
}
|
|
22170
|
+
},
|
|
22171
|
+
{
|
|
22172
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
22173
|
+
"$id": "https://eudiplo.dev/schemas/v3/PresentationConfigFile.schema.json",
|
|
22174
|
+
"title": "PresentationConfigFile",
|
|
22175
|
+
"type": "object",
|
|
22176
|
+
"properties": {
|
|
22177
|
+
"$schema": {
|
|
22178
|
+
"type": "string",
|
|
22179
|
+
"const": "https://eudiplo.dev/schemas/v3/PresentationConfigFile.schema.json"
|
|
22180
|
+
},
|
|
22181
|
+
"metadata": {
|
|
22182
|
+
"type": "object",
|
|
22183
|
+
"properties": {
|
|
22184
|
+
"generation": {
|
|
22185
|
+
"type": "integer",
|
|
22186
|
+
"minimum": 1,
|
|
22187
|
+
"description": "Monotonically increasing configuration generation."
|
|
22188
|
+
},
|
|
22189
|
+
"ownership": {
|
|
22190
|
+
"type": "string",
|
|
22191
|
+
"enum": [
|
|
22192
|
+
"unmanaged",
|
|
22193
|
+
"file-managed"
|
|
22194
|
+
],
|
|
22195
|
+
"description": "Requested ownership recorded when the document is applied."
|
|
22196
|
+
}
|
|
22197
|
+
},
|
|
22198
|
+
"additionalProperties": false
|
|
22199
|
+
},
|
|
22200
|
+
"spec": {
|
|
22201
|
+
"allOf": [
|
|
22202
|
+
{
|
|
22203
|
+
"$ref": "#/$defs/PresentationConfigCreateDto"
|
|
22204
|
+
},
|
|
22205
|
+
{
|
|
22206
|
+
"type": "object",
|
|
22207
|
+
"required": [
|
|
22208
|
+
"id"
|
|
22209
|
+
],
|
|
22210
|
+
"properties": {
|
|
22211
|
+
"id": {
|
|
22212
|
+
"type": "string",
|
|
22213
|
+
"minLength": 1
|
|
22214
|
+
}
|
|
22215
|
+
}
|
|
22216
|
+
}
|
|
22217
|
+
]
|
|
22218
|
+
}
|
|
22219
|
+
},
|
|
22220
|
+
"required": [
|
|
22221
|
+
"$schema",
|
|
22222
|
+
"spec"
|
|
22223
|
+
],
|
|
22224
|
+
"additionalProperties": false,
|
|
22225
|
+
"$defs": {
|
|
22226
|
+
"PresentationConfigCreateDto": {
|
|
22227
|
+
"type": "object",
|
|
22228
|
+
"properties": {
|
|
22229
|
+
"id": {
|
|
22230
|
+
"type": "string",
|
|
22231
|
+
"minLength": 1,
|
|
22232
|
+
"description": "Presentation configuration identifier."
|
|
22233
|
+
},
|
|
22234
|
+
"description": {
|
|
22235
|
+
"description": "Optional presentation configuration description.",
|
|
22236
|
+
"type": [
|
|
22237
|
+
"string",
|
|
22238
|
+
"null"
|
|
22239
|
+
]
|
|
22240
|
+
},
|
|
22241
|
+
"lifeTime": {
|
|
22242
|
+
"description": "Presentation request lifetime in seconds.",
|
|
22243
|
+
"type": "integer",
|
|
22244
|
+
"minimum": 1,
|
|
22245
|
+
"maximum": 9007199254740991
|
|
22246
|
+
},
|
|
22247
|
+
"skewSeconds": {
|
|
22248
|
+
"description": "Clock skew tolerance in seconds.",
|
|
22249
|
+
"type": "integer",
|
|
22250
|
+
"minimum": 0,
|
|
22251
|
+
"maximum": 9007199254740991
|
|
22252
|
+
},
|
|
22253
|
+
"statusCheckMode": {
|
|
22254
|
+
"description": "Revocation/status check mode.",
|
|
22255
|
+
"type": "string",
|
|
22256
|
+
"enum": [
|
|
22257
|
+
"strict",
|
|
22258
|
+
"best_effort",
|
|
22259
|
+
"disabled"
|
|
22260
|
+
]
|
|
22261
|
+
},
|
|
22262
|
+
"dcql_query": {
|
|
22263
|
+
"type": "object",
|
|
22264
|
+
"properties": {
|
|
22265
|
+
"credentials": {
|
|
22266
|
+
"minItems": 1,
|
|
22267
|
+
"type": "array",
|
|
22268
|
+
"items": {
|
|
22269
|
+
"oneOf": [
|
|
22270
|
+
{
|
|
22271
|
+
"type": "object",
|
|
22272
|
+
"properties": {
|
|
22273
|
+
"id": {
|
|
22274
|
+
"type": "string",
|
|
22275
|
+
"minLength": 1,
|
|
22276
|
+
"pattern": "^[A-Za-z0-9_-]+$",
|
|
22277
|
+
"description": "Credential query identifier."
|
|
22278
|
+
},
|
|
22279
|
+
"multiple": {
|
|
22280
|
+
"description": "Allow multiple matching credentials.",
|
|
22281
|
+
"type": "boolean"
|
|
22282
|
+
},
|
|
22283
|
+
"claim_sets": {
|
|
22284
|
+
"description": "Optional claim set constraints.",
|
|
22285
|
+
"type": "array",
|
|
22286
|
+
"items": {
|
|
22287
|
+
"type": "array",
|
|
22288
|
+
"items": {
|
|
22289
|
+
"type": "string"
|
|
22290
|
+
}
|
|
22291
|
+
}
|
|
22292
|
+
},
|
|
22293
|
+
"trusted_authorities": {
|
|
22294
|
+
"description": "Optional trusted authority constraints.",
|
|
22295
|
+
"type": "array",
|
|
21592
22296
|
"items": {
|
|
21593
22297
|
"oneOf": [
|
|
21594
22298
|
{
|
|
@@ -23735,7 +24439,10 @@ function createTenantCommand(context, setExitCode) {
|
|
|
23735
24439
|
|
|
23736
24440
|
// src/commands/config/validate/index.ts
|
|
23737
24441
|
function createValidateCommand(context, setExitCode) {
|
|
23738
|
-
return new Command("validate").description("Validate CLI or tenant config-import files").argument(
|
|
24442
|
+
return new Command("validate").description("Validate CLI or tenant config-import files").argument(
|
|
24443
|
+
"[scope]",
|
|
24444
|
+
'"tenant" for one tenant folder or "tenants" for a folder of tenant folders; omit it to validate the CLI config file'
|
|
24445
|
+
).argument("[path]", "the folder to validate (required with a scope)").addOption(
|
|
23739
24446
|
new Option("--format <text|json>", "tenant report format").choices(["text", "json"]).default("text")
|
|
23740
24447
|
).action(async (scope, path2, options) => {
|
|
23741
24448
|
const state = await loadCliState(context);
|
|
@@ -23854,9 +24561,9 @@ function buildComposeLogsArgs(service, options = {}) {
|
|
|
23854
24561
|
}
|
|
23855
24562
|
return args;
|
|
23856
24563
|
}
|
|
23857
|
-
function buildComposePullArgs(
|
|
24564
|
+
function buildComposePullArgs(services) {
|
|
23858
24565
|
const args = ["pull"];
|
|
23859
|
-
|
|
24566
|
+
for (const service of typeof services === "string" ? [services] : services ?? []) {
|
|
23860
24567
|
assertServiceName(service);
|
|
23861
24568
|
args.push(service);
|
|
23862
24569
|
}
|
|
@@ -23894,23 +24601,28 @@ function parseContainerStates(stdout) {
|
|
|
23894
24601
|
return entries.map((entry) => {
|
|
23895
24602
|
const record = entry;
|
|
23896
24603
|
const names = record.Names;
|
|
24604
|
+
const status = String(record.Status ?? "");
|
|
24605
|
+
const exitCode2 = typeof record.ExitCode === "number" ? record.ExitCode : /^Exited \((\d+)\)/.exec(status)?.[1];
|
|
23897
24606
|
return {
|
|
23898
24607
|
name: Array.isArray(names) ? String(names[0] ?? "") : String(names ?? record.Name ?? ""),
|
|
23899
24608
|
state: String(record.State ?? ""),
|
|
23900
|
-
status
|
|
24609
|
+
status,
|
|
24610
|
+
exitCode: exitCode2 === void 0 ? void 0 : Number(exitCode2)
|
|
23901
24611
|
};
|
|
23902
24612
|
});
|
|
23903
24613
|
}
|
|
23904
24614
|
function summarizeContainerStates(containers, projectName) {
|
|
23905
24615
|
const name = "service containers";
|
|
23906
|
-
|
|
24616
|
+
const services = containers.filter((container) => !hasCompleted(container));
|
|
24617
|
+
const completed = containers.length - services.length;
|
|
24618
|
+
if (services.length === 0) {
|
|
23907
24619
|
return {
|
|
23908
24620
|
name,
|
|
23909
24621
|
status: "warn",
|
|
23910
24622
|
message: `No containers found for project ${projectName}. Start it with eudiplo up.`
|
|
23911
24623
|
};
|
|
23912
24624
|
}
|
|
23913
|
-
const unhealthy =
|
|
24625
|
+
const unhealthy = services.filter(
|
|
23914
24626
|
(container) => container.status.toLowerCase().includes("unhealthy")
|
|
23915
24627
|
);
|
|
23916
24628
|
if (unhealthy.length > 0) {
|
|
@@ -23920,25 +24632,28 @@ function summarizeContainerStates(containers, projectName) {
|
|
|
23920
24632
|
message: `Unhealthy: ${describe(unhealthy)}`
|
|
23921
24633
|
};
|
|
23922
24634
|
}
|
|
23923
|
-
const notRunning =
|
|
24635
|
+
const notRunning = services.filter(
|
|
23924
24636
|
(container) => container.state.toLowerCase() !== "running"
|
|
23925
24637
|
);
|
|
23926
24638
|
if (notRunning.length > 0) {
|
|
23927
24639
|
return {
|
|
23928
24640
|
name,
|
|
23929
24641
|
status: "warn",
|
|
23930
|
-
message: `${
|
|
24642
|
+
message: `${services.length - notRunning.length}/${services.length} running. Not running: ${describe(notRunning)}`
|
|
23931
24643
|
};
|
|
23932
24644
|
}
|
|
23933
|
-
const starting =
|
|
24645
|
+
const starting = services.filter(
|
|
23934
24646
|
(container) => container.status.toLowerCase().includes("starting")
|
|
23935
24647
|
).length;
|
|
23936
24648
|
return {
|
|
23937
24649
|
name,
|
|
23938
24650
|
status: "pass",
|
|
23939
|
-
message: `${
|
|
24651
|
+
message: `${services.length} container(s) running${starting > 0 ? `, ${starting} still starting` : ""}${completed > 0 ? `, ${completed} completed` : ""}.`
|
|
23940
24652
|
};
|
|
23941
24653
|
}
|
|
24654
|
+
function hasCompleted(container) {
|
|
24655
|
+
return container.state.toLowerCase() === "exited" && container.exitCode === 0;
|
|
24656
|
+
}
|
|
23942
24657
|
function asArray(value) {
|
|
23943
24658
|
return Array.isArray(value) ? value : [];
|
|
23944
24659
|
}
|
|
@@ -24872,11 +25587,57 @@ async function runDriverCommand(config, command, parsed, context) {
|
|
|
24872
25587
|
});
|
|
24873
25588
|
}
|
|
24874
25589
|
|
|
25590
|
+
// src/commands/deployment/pass-through.ts
|
|
25591
|
+
function runtimeArguments(command, args) {
|
|
25592
|
+
const options = command.options.flatMap((option) => option.long ?? []);
|
|
25593
|
+
for (const arg of args) {
|
|
25594
|
+
if (!arg.startsWith("--") || arg === "--") {
|
|
25595
|
+
continue;
|
|
25596
|
+
}
|
|
25597
|
+
const flag = arg.split("=", 1)[0];
|
|
25598
|
+
const similar = options.filter(
|
|
25599
|
+
(option) => option !== flag && editDistance2(flag, option) <= 2
|
|
25600
|
+
);
|
|
25601
|
+
if (similar.length > 0) {
|
|
25602
|
+
const suggestion = similar.length === 1 ? similar[0] : `one of ${similar.join(", ")}`;
|
|
25603
|
+
command.error(
|
|
25604
|
+
`error: unknown option '${arg}'
|
|
25605
|
+
(Did you mean ${suggestion}?)`,
|
|
25606
|
+
{ code: "commander.unknownOption" }
|
|
25607
|
+
);
|
|
25608
|
+
}
|
|
25609
|
+
}
|
|
25610
|
+
const separator = args.indexOf("--");
|
|
25611
|
+
return separator === -1 ? args : [...args.slice(0, separator), ...args.slice(separator + 1)];
|
|
25612
|
+
}
|
|
25613
|
+
function editDistance2(a, b) {
|
|
25614
|
+
const distances = Array.from(
|
|
25615
|
+
{ length: a.length + 1 },
|
|
25616
|
+
(_, i2) => Array.from({ length: b.length + 1 }, (_2, j) => Math.max(i2, j))
|
|
25617
|
+
);
|
|
25618
|
+
for (let i2 = 1; i2 <= a.length; i2++) {
|
|
25619
|
+
for (let j = 1; j <= b.length; j++) {
|
|
25620
|
+
distances[i2][j] = Math.min(
|
|
25621
|
+
distances[i2 - 1][j] + 1,
|
|
25622
|
+
distances[i2][j - 1] + 1,
|
|
25623
|
+
distances[i2 - 1][j - 1] + (a[i2 - 1] === b[j - 1] ? 0 : 1)
|
|
25624
|
+
);
|
|
25625
|
+
if (i2 > 1 && j > 1 && a[i2 - 1] === b[j - 2] && a[i2 - 2] === b[j - 1]) {
|
|
25626
|
+
distances[i2][j] = Math.min(
|
|
25627
|
+
distances[i2][j],
|
|
25628
|
+
distances[i2 - 2][j - 2] + 1
|
|
25629
|
+
);
|
|
25630
|
+
}
|
|
25631
|
+
}
|
|
25632
|
+
}
|
|
25633
|
+
return distances[a.length][b.length];
|
|
25634
|
+
}
|
|
25635
|
+
|
|
24875
25636
|
// src/commands/deployment/index.ts
|
|
24876
25637
|
var descriptions = {
|
|
24877
25638
|
up: "Start the selected Compose deployment",
|
|
24878
25639
|
down: "Stop the selected Compose deployment",
|
|
24879
|
-
logs: "
|
|
25640
|
+
logs: "Print the logs of the selected deployment, or stream them with --follow",
|
|
24880
25641
|
ps: "List the running containers or pods for the selected deployment",
|
|
24881
25642
|
restart: "Restart the workloads of the selected deployment",
|
|
24882
25643
|
pull: "Download the configured images without changing configuration"
|
|
@@ -24891,8 +25652,8 @@ function createDeploymentCommands(context, setExitCode) {
|
|
|
24891
25652
|
(name) => {
|
|
24892
25653
|
const command = new Command(name).description(descriptions[name]).argument(
|
|
24893
25654
|
"[args...]",
|
|
24894
|
-
"additional arguments passed to the deployment runtime"
|
|
24895
|
-
).option("--instance <name>", "select a configured instance");
|
|
25655
|
+
"additional arguments and options passed to the deployment runtime"
|
|
25656
|
+
).allowUnknownOption().option("--instance <name>", "select a configured instance");
|
|
24896
25657
|
if (serviceScoped.has(name)) {
|
|
24897
25658
|
command.option(
|
|
24898
25659
|
"--service <name>",
|
|
@@ -24912,12 +25673,13 @@ function createDeploymentCommands(context, setExitCode) {
|
|
|
24912
25673
|
);
|
|
24913
25674
|
}
|
|
24914
25675
|
return command.action(async (args, options) => {
|
|
25676
|
+
const runtimeArgs = runtimeArguments(command, args);
|
|
24915
25677
|
const { config } = await loadCliState(context);
|
|
24916
25678
|
setExitCode(
|
|
24917
25679
|
await runDriverCommand(
|
|
24918
25680
|
config,
|
|
24919
25681
|
name,
|
|
24920
|
-
parsedArgs(name, void 0,
|
|
25682
|
+
parsedArgs(name, void 0, runtimeArgs, options),
|
|
24921
25683
|
context
|
|
24922
25684
|
)
|
|
24923
25685
|
);
|
|
@@ -24929,7 +25691,7 @@ function createDeploymentCommands(context, setExitCode) {
|
|
|
24929
25691
|
// package.json
|
|
24930
25692
|
var package_default = {
|
|
24931
25693
|
name: "@eudiplo/cli",
|
|
24932
|
-
version: "9.0.0-main.
|
|
25694
|
+
version: "9.0.0-main.22d3602",
|
|
24933
25695
|
description: "Deployment-aware command line tools for EUDIPLO",
|
|
24934
25696
|
private: false,
|
|
24935
25697
|
type: "module",
|
|
@@ -25372,6 +26134,13 @@ var kmsHealthCheck = {
|
|
|
25372
26134
|
message: "This backend does not expose the KMS provider health endpoint."
|
|
25373
26135
|
};
|
|
25374
26136
|
}
|
|
26137
|
+
if (response.status === 401 || response.status === 403) {
|
|
26138
|
+
return {
|
|
26139
|
+
name: "KMS providers",
|
|
26140
|
+
status: "skip",
|
|
26141
|
+
message: `Needs a tenant client with issuance:manage or presentation:manage (${response.reason}).`
|
|
26142
|
+
};
|
|
26143
|
+
}
|
|
25375
26144
|
return {
|
|
25376
26145
|
name: "KMS providers",
|
|
25377
26146
|
status: "fail",
|
|
@@ -26282,6 +27051,10 @@ var managedImages = {
|
|
|
26282
27051
|
EUDIPLO_IMAGE: "ghcr.io/eudiplo/eudiplo",
|
|
26283
27052
|
EUDIPLO_CLIENT_IMAGE: "ghcr.io/eudiplo/eudiplo-client"
|
|
26284
27053
|
};
|
|
27054
|
+
var managedServices = {
|
|
27055
|
+
EUDIPLO_IMAGE: "eudiplo",
|
|
27056
|
+
EUDIPLO_CLIENT_IMAGE: "eudiplo-client"
|
|
27057
|
+
};
|
|
26285
27058
|
var legacyImages = {
|
|
26286
27059
|
EUDIPLO_IMAGE: "ghcr.io/openwallet-foundation/eudiplo",
|
|
26287
27060
|
EUDIPLO_CLIENT_IMAGE: "ghcr.io/openwallet-foundation/eudiplo-client"
|
|
@@ -26448,7 +27221,12 @@ async function runUpgradeCommand(config, parsed, context) {
|
|
|
26448
27221
|
return 0;
|
|
26449
27222
|
}
|
|
26450
27223
|
await writeFile6(envPath, plan.content, "utf8");
|
|
26451
|
-
const pulled = await runCompose(
|
|
27224
|
+
const pulled = await runCompose(
|
|
27225
|
+
buildComposePullArgs(
|
|
27226
|
+
plan.changes.map((change) => managedServices[change.key])
|
|
27227
|
+
),
|
|
27228
|
+
options
|
|
27229
|
+
);
|
|
26452
27230
|
if (pulled !== 0) {
|
|
26453
27231
|
await writeFile6(envPath, original, "utf8");
|
|
26454
27232
|
context.stderr.write(
|