@eudiplo/cli 8.1.0-main.a6a67b3 → 8.1.0-main.af23b1d
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/README.md +1 -1
- package/dist/commands/completion/action.js +1 -1
- package/dist/commands/completion/action.js.map +1 -1
- package/dist/commands/completion/index.d.ts.map +1 -1
- package/dist/commands/completion/index.js +6 -1
- package/dist/commands/completion/index.js.map +1 -1
- package/dist/commands/config/action.d.ts.map +1 -1
- package/dist/commands/config/action.js.map +1 -1
- package/dist/commands/config/portability/migrations.spec.js +5 -3
- package/dist/commands/config/portability/migrations.spec.js.map +1 -1
- package/dist/commands/config/validate/schemas.js.map +1 -1
- package/dist/commands/config/validate/validator.js +7 -4
- package/dist/commands/config/validate/validator.js.map +1 -1
- package/dist/commands/instance/action.d.ts.map +1 -1
- package/dist/commands/instance/action.js.map +1 -1
- package/dist/index.js +2470 -272
- package/dist/runtime.js +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/services/cli-config.d.ts.map +1 -1
- package/dist/services/cli-config.js +5 -2
- package/dist/services/cli-config.js.map +1 -1
- package/dist/services/compose-project.d.ts.map +1 -1
- package/dist/services/compose-project.js +12 -7
- package/dist/services/compose-project.js.map +1 -1
- package/dist/services/compose-upgrade.js +1 -1
- package/dist/services/compose-upgrade.js.map +1 -1
- package/dist/services/diagnostics.d.ts.map +1 -1
- package/dist/services/diagnostics.js +14 -9
- package/dist/services/diagnostics.js.map +1 -1
- package/dist/services/kubectl.d.ts.map +1 -1
- package/dist/services/kubectl.js +1 -6
- package/dist/services/kubectl.js.map +1 -1
- package/package.json +5 -3
- package/templates/demo-config/trust-lists/trustlist-580831bc-ef11-43f4-a3be-a2b6bf1b29a3-config.json +1 -97
- package/templates/docker-compose.yml +2 -2
- package/templates/schemas/DCQL.schema.json +30 -4
- package/templates/schemas/IssuanceConfig.schema.json +13 -0
- package/templates/schemas/IssuanceConfigFile.schema.json +663 -1
- package/templates/schemas/PresentationConfigCreateDto.schema.json +33 -10
- package/templates/schemas/PresentationConfigFile.schema.json +1442 -1
package/dist/index.js
CHANGED
|
@@ -11388,12 +11388,7 @@ import { homedir } from "node:os";
|
|
|
11388
11388
|
|
|
11389
11389
|
// src/services/kubectl.ts
|
|
11390
11390
|
function scopeArgs(scope) {
|
|
11391
|
-
return [
|
|
11392
|
-
"--context",
|
|
11393
|
-
scope.context,
|
|
11394
|
-
"--namespace",
|
|
11395
|
-
scope.namespace
|
|
11396
|
-
];
|
|
11391
|
+
return ["--context", scope.context, "--namespace", scope.namespace];
|
|
11397
11392
|
}
|
|
11398
11393
|
function resolveScope(instance, instanceName) {
|
|
11399
11394
|
if (!instance.context) {
|
|
@@ -11922,7 +11917,12 @@ function powershellCompletion() {
|
|
|
11922
11917
|
}
|
|
11923
11918
|
|
|
11924
11919
|
// src/commands/completion/index.ts
|
|
11925
|
-
var supportedShells = [
|
|
11920
|
+
var supportedShells = [
|
|
11921
|
+
"bash",
|
|
11922
|
+
"zsh",
|
|
11923
|
+
"fish",
|
|
11924
|
+
"powershell"
|
|
11925
|
+
];
|
|
11926
11926
|
function createCompletionCommand(context, setExitCode) {
|
|
11927
11927
|
return new Command("completion").description("Generate shell completion scripts").addArgument(
|
|
11928
11928
|
new Argument("<shell>", "shell to generate completion for").choices(
|
|
@@ -11933,14 +11933,22 @@ function createCompletionCommand(context, setExitCode) {
|
|
|
11933
11933
|
});
|
|
11934
11934
|
}
|
|
11935
11935
|
function createCompletionCandidatesCommand(context, setExitCode) {
|
|
11936
|
-
return new Command("_complete").argument("[words...]").allowUnknownOption(true).action(
|
|
11937
|
-
|
|
11938
|
-
|
|
11936
|
+
return new Command("_complete").argument("[words...]").allowUnknownOption(true).action(
|
|
11937
|
+
async (words, _options, command) => {
|
|
11938
|
+
if (!command.parent) {
|
|
11939
|
+
throw new Error(
|
|
11940
|
+
"Completion command is not attached to the CLI root."
|
|
11941
|
+
);
|
|
11942
|
+
}
|
|
11943
|
+
setExitCode(
|
|
11944
|
+
await runCompletionCandidates(
|
|
11945
|
+
command.parent,
|
|
11946
|
+
words,
|
|
11947
|
+
context
|
|
11948
|
+
)
|
|
11949
|
+
);
|
|
11939
11950
|
}
|
|
11940
|
-
|
|
11941
|
-
await runCompletionCandidates(command.parent, words, context)
|
|
11942
|
-
);
|
|
11943
|
-
});
|
|
11951
|
+
);
|
|
11944
11952
|
}
|
|
11945
11953
|
|
|
11946
11954
|
// src/commands/commands/render.ts
|
|
@@ -12028,8 +12036,10 @@ function runConfigShow(configPath, config, json, context) {
|
|
|
12028
12036
|
}
|
|
12029
12037
|
context.stdout.write(`Config: ${configPath}
|
|
12030
12038
|
`);
|
|
12031
|
-
context.stdout.write(
|
|
12032
|
-
`
|
|
12039
|
+
context.stdout.write(
|
|
12040
|
+
`Default instance: ${config.defaultInstance ?? "none"}
|
|
12041
|
+
`
|
|
12042
|
+
);
|
|
12033
12043
|
const instances = Object.entries(config.instances).sort(
|
|
12034
12044
|
([left], [right]) => left.localeCompare(right)
|
|
12035
12045
|
);
|
|
@@ -14887,7 +14897,7 @@ var CONFIG_FORMATS = {
|
|
|
14887
14897
|
IssuanceConfig: {
|
|
14888
14898
|
slug: "issuance-config",
|
|
14889
14899
|
file: "IssuanceConfigFile",
|
|
14890
|
-
version:
|
|
14900
|
+
version: 2
|
|
14891
14901
|
},
|
|
14892
14902
|
CredentialConfig: {
|
|
14893
14903
|
slug: "credential-config",
|
|
@@ -14897,7 +14907,7 @@ var CONFIG_FORMATS = {
|
|
|
14897
14907
|
PresentationConfig: {
|
|
14898
14908
|
slug: "presentation-config",
|
|
14899
14909
|
file: "PresentationConfigFile",
|
|
14900
|
-
version:
|
|
14910
|
+
version: 3
|
|
14901
14911
|
},
|
|
14902
14912
|
AttributeProvider: {
|
|
14903
14913
|
slug: "attribute-provider",
|
|
@@ -14936,7 +14946,53 @@ function resourceId(input) {
|
|
|
14936
14946
|
throw new Error(`Configuration spec.${field} is required`);
|
|
14937
14947
|
return id;
|
|
14938
14948
|
}
|
|
14939
|
-
var
|
|
14949
|
+
var presentationConfigV1ToV2 = {
|
|
14950
|
+
id: "presentation-config-v2-provides-attestations",
|
|
14951
|
+
kind: "PresentationConfig",
|
|
14952
|
+
from: 1,
|
|
14953
|
+
to: 2,
|
|
14954
|
+
migrate(spec) {
|
|
14955
|
+
const registrationCert = spec.registration_cert;
|
|
14956
|
+
if (!object(registrationCert) || !object(registrationCert.body) || !("provided_attestations" in registrationCert.body)) {
|
|
14957
|
+
return { spec };
|
|
14958
|
+
}
|
|
14959
|
+
const { provided_attestations: _, ...body } = registrationCert.body;
|
|
14960
|
+
return {
|
|
14961
|
+
spec: { ...spec, registration_cert: { ...registrationCert, body } },
|
|
14962
|
+
issues: [
|
|
14963
|
+
{
|
|
14964
|
+
severity: "warning",
|
|
14965
|
+
code: "PROVIDED_ATTESTATIONS_REMOVED",
|
|
14966
|
+
path: "/spec/registration_cert/body/provided_attestations",
|
|
14967
|
+
message: "provided_attestations is not part of the registrar API and was removed. Set provides_attestations to the credential type identifiers (SD-JWT VC vct or mdoc doctype) the issuer provides."
|
|
14968
|
+
}
|
|
14969
|
+
]
|
|
14970
|
+
};
|
|
14971
|
+
}
|
|
14972
|
+
};
|
|
14973
|
+
var CONFIG_MIGRATIONS = [
|
|
14974
|
+
{
|
|
14975
|
+
id: "issuance-config-v2-offer-lifetime",
|
|
14976
|
+
kind: "IssuanceConfig",
|
|
14977
|
+
from: 1,
|
|
14978
|
+
to: 2,
|
|
14979
|
+
// v2 only adds the optional offerLifetimeSeconds: a v1 spec is a
|
|
14980
|
+
// valid v2 spec whose offers keep having no lifetime.
|
|
14981
|
+
migrate: (spec) => ({ spec })
|
|
14982
|
+
},
|
|
14983
|
+
presentationConfigV1ToV2,
|
|
14984
|
+
{
|
|
14985
|
+
id: "presentation-config-v3-typed-claim-values",
|
|
14986
|
+
kind: "PresentationConfig",
|
|
14987
|
+
from: 2,
|
|
14988
|
+
to: 3,
|
|
14989
|
+
// v3 accepts integer and boolean DCQL claim `values` besides strings
|
|
14990
|
+
// and requires them to be non-empty. A v2 spec with non-empty string
|
|
14991
|
+
// values is a valid v3 spec; an empty `values` array fails v3
|
|
14992
|
+
// validation, since it could never match a disclosed claim.
|
|
14993
|
+
migrate: (spec) => ({ spec })
|
|
14994
|
+
}
|
|
14995
|
+
];
|
|
14940
14996
|
function schemaUrl(kind, version = CONFIG_FORMATS[kind].version) {
|
|
14941
14997
|
if (!Number.isSafeInteger(version) || version < 1)
|
|
14942
14998
|
throw new Error("Invalid config version");
|
|
@@ -20001,231 +20057,2370 @@ var CONFIG_SCHEMAS = [
|
|
|
20001
20057
|
"title": "CreateWebhookEndpointDto"
|
|
20002
20058
|
}
|
|
20003
20059
|
}
|
|
20004
|
-
}
|
|
20005
|
-
|
|
20006
|
-
|
|
20007
|
-
|
|
20008
|
-
|
|
20009
|
-
|
|
20010
|
-
|
|
20011
|
-
|
|
20012
|
-
|
|
20013
|
-
|
|
20014
|
-
|
|
20015
|
-
|
|
20016
|
-
|
|
20017
|
-
|
|
20018
|
-
|
|
20019
|
-
|
|
20020
|
-
|
|
20021
|
-
|
|
20022
|
-
|
|
20023
|
-
|
|
20024
|
-
|
|
20025
|
-
|
|
20026
|
-
|
|
20027
|
-
|
|
20028
|
-
|
|
20029
|
-
|
|
20030
|
-
|
|
20031
|
-
|
|
20032
|
-
|
|
20033
|
-
|
|
20034
|
-
|
|
20035
|
-
|
|
20036
|
-
|
|
20037
|
-
|
|
20038
|
-
|
|
20039
|
-
|
|
20040
|
-
|
|
20041
|
-
|
|
20042
|
-
|
|
20043
|
-
|
|
20044
|
-
|
|
20045
|
-
|
|
20046
|
-
|
|
20047
|
-
|
|
20048
|
-
|
|
20049
|
-
|
|
20050
|
-
|
|
20051
|
-
|
|
20052
|
-
|
|
20053
|
-
|
|
20054
|
-
|
|
20055
|
-
|
|
20056
|
-
}
|
|
20057
|
-
|
|
20058
|
-
|
|
20059
|
-
|
|
20060
|
-
|
|
20061
|
-
|
|
20062
|
-
|
|
20063
|
-
|
|
20064
|
-
|
|
20065
|
-
|
|
20066
|
-
|
|
20067
|
-
|
|
20068
|
-
|
|
20069
|
-
|
|
20070
|
-
|
|
20071
|
-
|
|
20072
|
-
|
|
20073
|
-
|
|
20074
|
-
|
|
20075
|
-
|
|
20076
|
-
|
|
20077
|
-
|
|
20078
|
-
|
|
20079
|
-
|
|
20080
|
-
|
|
20081
|
-
|
|
20082
|
-
|
|
20083
|
-
|
|
20084
|
-
|
|
20085
|
-
|
|
20086
|
-
|
|
20087
|
-
|
|
20088
|
-
|
|
20089
|
-
|
|
20090
|
-
|
|
20091
|
-
|
|
20092
|
-
|
|
20093
|
-
|
|
20094
|
-
|
|
20095
|
-
|
|
20096
|
-
|
|
20097
|
-
|
|
20098
|
-
|
|
20099
|
-
|
|
20100
|
-
|
|
20101
|
-
|
|
20102
|
-
|
|
20103
|
-
|
|
20104
|
-
|
|
20105
|
-
|
|
20106
|
-
|
|
20107
|
-
|
|
20108
|
-
|
|
20109
|
-
|
|
20110
|
-
|
|
20111
|
-
|
|
20112
|
-
|
|
20113
|
-
|
|
20114
|
-
|
|
20115
|
-
|
|
20116
|
-
|
|
20117
|
-
|
|
20118
|
-
|
|
20119
|
-
|
|
20120
|
-
|
|
20121
|
-
|
|
20122
|
-
|
|
20123
|
-
|
|
20124
|
-
|
|
20125
|
-
|
|
20126
|
-
|
|
20127
|
-
|
|
20128
|
-
|
|
20129
|
-
|
|
20130
|
-
|
|
20131
|
-
|
|
20132
|
-
|
|
20133
|
-
|
|
20134
|
-
|
|
20135
|
-
|
|
20136
|
-
|
|
20137
|
-
|
|
20138
|
-
|
|
20139
|
-
|
|
20140
|
-
|
|
20141
|
-
|
|
20142
|
-
|
|
20143
|
-
|
|
20144
|
-
|
|
20145
|
-
|
|
20146
|
-
|
|
20147
|
-
|
|
20148
|
-
|
|
20149
|
-
|
|
20150
|
-
|
|
20151
|
-
|
|
20152
|
-
|
|
20153
|
-
|
|
20154
|
-
|
|
20155
|
-
|
|
20156
|
-
|
|
20157
|
-
|
|
20158
|
-
|
|
20159
|
-
|
|
20160
|
-
|
|
20161
|
-
|
|
20162
|
-
|
|
20163
|
-
|
|
20164
|
-
|
|
20165
|
-
|
|
20166
|
-
|
|
20167
|
-
|
|
20168
|
-
|
|
20169
|
-
|
|
20170
|
-
|
|
20171
|
-
|
|
20172
|
-
|
|
20173
|
-
|
|
20174
|
-
|
|
20175
|
-
|
|
20176
|
-
|
|
20177
|
-
|
|
20178
|
-
|
|
20179
|
-
|
|
20180
|
-
|
|
20181
|
-
|
|
20182
|
-
|
|
20183
|
-
|
|
20184
|
-
|
|
20185
|
-
|
|
20186
|
-
|
|
20187
|
-
|
|
20188
|
-
|
|
20189
|
-
|
|
20190
|
-
|
|
20191
|
-
|
|
20192
|
-
|
|
20193
|
-
|
|
20194
|
-
|
|
20195
|
-
|
|
20196
|
-
|
|
20197
|
-
|
|
20198
|
-
|
|
20199
|
-
|
|
20200
|
-
|
|
20201
|
-
|
|
20202
|
-
|
|
20203
|
-
|
|
20204
|
-
|
|
20205
|
-
|
|
20206
|
-
|
|
20207
|
-
|
|
20208
|
-
|
|
20209
|
-
|
|
20210
|
-
|
|
20211
|
-
|
|
20212
|
-
|
|
20213
|
-
|
|
20214
|
-
|
|
20215
|
-
|
|
20216
|
-
|
|
20217
|
-
|
|
20218
|
-
|
|
20219
|
-
|
|
20220
|
-
|
|
20221
|
-
|
|
20222
|
-
|
|
20223
|
-
|
|
20224
|
-
|
|
20225
|
-
|
|
20226
|
-
|
|
20227
|
-
|
|
20228
|
-
|
|
20060
|
+
},
|
|
20061
|
+
{
|
|
20062
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
20063
|
+
"$id": "https://eudiplo.dev/schemas/v2/IssuanceConfigFile.schema.json",
|
|
20064
|
+
"title": "IssuanceConfigFile",
|
|
20065
|
+
"type": "object",
|
|
20066
|
+
"properties": {
|
|
20067
|
+
"$schema": {
|
|
20068
|
+
"type": "string",
|
|
20069
|
+
"const": "https://eudiplo.dev/schemas/v2/IssuanceConfigFile.schema.json"
|
|
20070
|
+
},
|
|
20071
|
+
"metadata": {
|
|
20072
|
+
"type": "object",
|
|
20073
|
+
"properties": {
|
|
20074
|
+
"generation": {
|
|
20075
|
+
"type": "integer",
|
|
20076
|
+
"minimum": 1,
|
|
20077
|
+
"description": "Monotonically increasing configuration generation."
|
|
20078
|
+
},
|
|
20079
|
+
"ownership": {
|
|
20080
|
+
"type": "string",
|
|
20081
|
+
"enum": [
|
|
20082
|
+
"unmanaged",
|
|
20083
|
+
"file-managed"
|
|
20084
|
+
],
|
|
20085
|
+
"description": "Requested ownership recorded when the document is applied."
|
|
20086
|
+
}
|
|
20087
|
+
},
|
|
20088
|
+
"additionalProperties": false
|
|
20089
|
+
},
|
|
20090
|
+
"spec": {
|
|
20091
|
+
"$ref": "#/$defs/IssuanceConfig"
|
|
20092
|
+
}
|
|
20093
|
+
},
|
|
20094
|
+
"required": [
|
|
20095
|
+
"$schema",
|
|
20096
|
+
"spec"
|
|
20097
|
+
],
|
|
20098
|
+
"additionalProperties": false,
|
|
20099
|
+
"$defs": {
|
|
20100
|
+
"IssuanceConfig": {
|
|
20101
|
+
"type": "object",
|
|
20102
|
+
"properties": {
|
|
20103
|
+
"batchSize": {
|
|
20104
|
+
"description": "Optional issuance batch size.",
|
|
20105
|
+
"type": "integer",
|
|
20106
|
+
"minimum": 1,
|
|
20107
|
+
"maximum": 9007199254740991
|
|
20108
|
+
},
|
|
20109
|
+
"dPopRequired": {
|
|
20110
|
+
"description": "Require DPoP proofs for issuance endpoints.",
|
|
20111
|
+
"type": "boolean"
|
|
20112
|
+
},
|
|
20113
|
+
"walletAttestationRequired": {
|
|
20114
|
+
"description": "Default wallet attestation requirement for managed authorization servers.",
|
|
20115
|
+
"type": "boolean"
|
|
20116
|
+
},
|
|
20117
|
+
"walletProviderTrustLists": {
|
|
20118
|
+
"description": "Shared wallet provider trust lists for key attestations and default authorization server wallet authentication.",
|
|
20119
|
+
"type": "array",
|
|
20120
|
+
"items": {
|
|
20121
|
+
"type": "object",
|
|
20122
|
+
"properties": {
|
|
20123
|
+
"trustListId": {
|
|
20124
|
+
"type": "string",
|
|
20125
|
+
"minLength": 1
|
|
20126
|
+
},
|
|
20127
|
+
"url": {
|
|
20128
|
+
"description": "URL of the wallet provider trust list.",
|
|
20129
|
+
"type": "string",
|
|
20130
|
+
"format": "uri"
|
|
20131
|
+
},
|
|
20132
|
+
"verifierKey": {
|
|
20133
|
+
"description": "Optional verifier key material used for trust list verification.",
|
|
20134
|
+
"type": "object",
|
|
20135
|
+
"propertyNames": {
|
|
20136
|
+
"type": "string"
|
|
20137
|
+
},
|
|
20138
|
+
"additionalProperties": {}
|
|
20139
|
+
},
|
|
20140
|
+
"verifierX509Der": {
|
|
20141
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
20142
|
+
"type": "string"
|
|
20143
|
+
}
|
|
20144
|
+
},
|
|
20145
|
+
"additionalProperties": false
|
|
20146
|
+
}
|
|
20147
|
+
},
|
|
20148
|
+
"signingKeyId": {
|
|
20149
|
+
"description": "Default signing key chain id for credential issuance.",
|
|
20150
|
+
"type": "string",
|
|
20151
|
+
"minLength": 1
|
|
20152
|
+
},
|
|
20153
|
+
"authorizationServers": {
|
|
20154
|
+
"minItems": 1,
|
|
20155
|
+
"type": "array",
|
|
20156
|
+
"items": {
|
|
20157
|
+
"oneOf": [
|
|
20158
|
+
{
|
|
20159
|
+
"type": "object",
|
|
20160
|
+
"properties": {
|
|
20161
|
+
"type": {
|
|
20162
|
+
"type": "string",
|
|
20163
|
+
"const": "external",
|
|
20164
|
+
"description": "Use an externally managed authorization server."
|
|
20165
|
+
},
|
|
20166
|
+
"id": {
|
|
20167
|
+
"type": "string",
|
|
20168
|
+
"minLength": 1,
|
|
20169
|
+
"description": "Authorization server identifier."
|
|
20170
|
+
},
|
|
20171
|
+
"issuer": {
|
|
20172
|
+
"type": "string",
|
|
20173
|
+
"format": "uri",
|
|
20174
|
+
"description": "Issuer URL for the external authorization server."
|
|
20175
|
+
},
|
|
20176
|
+
"sessionBinding": {
|
|
20177
|
+
"description": "Explicit mapping from an external access-token claim to an existing issuance session.",
|
|
20178
|
+
"type": "object",
|
|
20179
|
+
"properties": {
|
|
20180
|
+
"method": {
|
|
20181
|
+
"type": "string",
|
|
20182
|
+
"const": "access_token_claim",
|
|
20183
|
+
"description": "Read the correlation value from a configured access-token claim."
|
|
20184
|
+
},
|
|
20185
|
+
"claim": {
|
|
20186
|
+
"type": "string",
|
|
20187
|
+
"minLength": 1,
|
|
20188
|
+
"description": "Claim name that contains the issuance-session correlation value."
|
|
20189
|
+
}
|
|
20190
|
+
},
|
|
20191
|
+
"required": [
|
|
20192
|
+
"method",
|
|
20193
|
+
"claim"
|
|
20194
|
+
],
|
|
20195
|
+
"additionalProperties": false
|
|
20196
|
+
},
|
|
20197
|
+
"label": {
|
|
20198
|
+
"description": "Optional display label for UI selection.",
|
|
20199
|
+
"type": "string"
|
|
20200
|
+
},
|
|
20201
|
+
"enabled": {
|
|
20202
|
+
"description": "Whether this authorization server entry is enabled.",
|
|
20203
|
+
"type": "boolean"
|
|
20204
|
+
}
|
|
20205
|
+
},
|
|
20206
|
+
"required": [
|
|
20207
|
+
"type",
|
|
20208
|
+
"id",
|
|
20209
|
+
"issuer"
|
|
20210
|
+
],
|
|
20211
|
+
"additionalProperties": false
|
|
20212
|
+
},
|
|
20213
|
+
{
|
|
20214
|
+
"type": "object",
|
|
20215
|
+
"properties": {
|
|
20216
|
+
"type": {
|
|
20217
|
+
"type": "string",
|
|
20218
|
+
"const": "oid4vp",
|
|
20219
|
+
"description": "Use OID4VP-based authorization server chaining."
|
|
20220
|
+
},
|
|
20221
|
+
"id": {
|
|
20222
|
+
"type": "string",
|
|
20223
|
+
"minLength": 1,
|
|
20224
|
+
"description": "Authorization server identifier."
|
|
20225
|
+
},
|
|
20226
|
+
"presentationConfigId": {
|
|
20227
|
+
"type": "string",
|
|
20228
|
+
"minLength": 1,
|
|
20229
|
+
"description": "Presentation configuration id used during authorization."
|
|
20230
|
+
},
|
|
20231
|
+
"immediateWalletRedirect": {
|
|
20232
|
+
"description": "Redirect wallets immediately after authorization response creation.",
|
|
20233
|
+
"type": "boolean"
|
|
20234
|
+
},
|
|
20235
|
+
"token": {
|
|
20236
|
+
"description": "Optional token issuance settings.",
|
|
20237
|
+
"type": "object",
|
|
20238
|
+
"properties": {
|
|
20239
|
+
"lifetimeSeconds": {
|
|
20240
|
+
"description": "Access token lifetime in seconds.",
|
|
20241
|
+
"type": "number",
|
|
20242
|
+
"minimum": 60
|
|
20243
|
+
},
|
|
20244
|
+
"signingKeyId": {
|
|
20245
|
+
"description": "Optional key chain id used to sign issued tokens.",
|
|
20246
|
+
"type": "string",
|
|
20247
|
+
"minLength": 1
|
|
20248
|
+
},
|
|
20249
|
+
"refreshTokenEnabled": {
|
|
20250
|
+
"description": "Enable issuing refresh tokens.",
|
|
20251
|
+
"type": "boolean"
|
|
20252
|
+
},
|
|
20253
|
+
"refreshTokenExpiresInSeconds": {
|
|
20254
|
+
"description": "Refresh token lifetime in seconds.",
|
|
20255
|
+
"type": "number",
|
|
20256
|
+
"minimum": 60
|
|
20257
|
+
}
|
|
20258
|
+
},
|
|
20259
|
+
"additionalProperties": false
|
|
20260
|
+
},
|
|
20261
|
+
"requireDPoP": {
|
|
20262
|
+
"description": "Require DPoP proofs for token/credential requests.",
|
|
20263
|
+
"type": "boolean"
|
|
20264
|
+
},
|
|
20265
|
+
"walletAttestationRequired": {
|
|
20266
|
+
"description": "Require wallet attestation for this authorization server.",
|
|
20267
|
+
"type": "boolean"
|
|
20268
|
+
},
|
|
20269
|
+
"walletProviderTrustLists": {
|
|
20270
|
+
"description": "Optional wallet provider trust list references for this authorization server.",
|
|
20271
|
+
"type": "array",
|
|
20272
|
+
"items": {
|
|
20273
|
+
"type": "object",
|
|
20274
|
+
"properties": {
|
|
20275
|
+
"trustListId": {
|
|
20276
|
+
"type": "string",
|
|
20277
|
+
"minLength": 1
|
|
20278
|
+
},
|
|
20279
|
+
"url": {
|
|
20280
|
+
"description": "URL of the wallet provider trust list.",
|
|
20281
|
+
"type": "string",
|
|
20282
|
+
"format": "uri"
|
|
20283
|
+
},
|
|
20284
|
+
"verifierKey": {
|
|
20285
|
+
"description": "Optional verifier key material used for trust list verification.",
|
|
20286
|
+
"type": "object",
|
|
20287
|
+
"propertyNames": {
|
|
20288
|
+
"type": "string"
|
|
20289
|
+
},
|
|
20290
|
+
"additionalProperties": {}
|
|
20291
|
+
},
|
|
20292
|
+
"verifierX509Der": {
|
|
20293
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
20294
|
+
"type": "string"
|
|
20295
|
+
}
|
|
20296
|
+
},
|
|
20297
|
+
"additionalProperties": false
|
|
20298
|
+
}
|
|
20299
|
+
},
|
|
20300
|
+
"label": {
|
|
20301
|
+
"description": "Optional display label for UI selection.",
|
|
20302
|
+
"type": "string"
|
|
20303
|
+
},
|
|
20304
|
+
"enabled": {
|
|
20305
|
+
"description": "Whether this authorization server entry is enabled.",
|
|
20306
|
+
"type": "boolean"
|
|
20307
|
+
}
|
|
20308
|
+
},
|
|
20309
|
+
"required": [
|
|
20310
|
+
"type",
|
|
20311
|
+
"id",
|
|
20312
|
+
"presentationConfigId"
|
|
20313
|
+
],
|
|
20314
|
+
"additionalProperties": false
|
|
20315
|
+
},
|
|
20316
|
+
{
|
|
20317
|
+
"type": "object",
|
|
20318
|
+
"properties": {
|
|
20319
|
+
"type": {
|
|
20320
|
+
"type": "string",
|
|
20321
|
+
"const": "chained",
|
|
20322
|
+
"description": "Use upstream OIDC as authorization source."
|
|
20323
|
+
},
|
|
20324
|
+
"id": {
|
|
20325
|
+
"type": "string",
|
|
20326
|
+
"minLength": 1,
|
|
20327
|
+
"description": "Authorization server identifier."
|
|
20328
|
+
},
|
|
20329
|
+
"upstream": {
|
|
20330
|
+
"type": "object",
|
|
20331
|
+
"properties": {
|
|
20332
|
+
"issuer": {
|
|
20333
|
+
"type": "string",
|
|
20334
|
+
"format": "uri",
|
|
20335
|
+
"description": "Upstream OIDC issuer URL."
|
|
20336
|
+
},
|
|
20337
|
+
"clientId": {
|
|
20338
|
+
"type": "string",
|
|
20339
|
+
"minLength": 1,
|
|
20340
|
+
"description": "Client id for upstream OIDC authentication."
|
|
20341
|
+
},
|
|
20342
|
+
"clientSecret": {
|
|
20343
|
+
"description": "Optional client secret for upstream OIDC authentication.",
|
|
20344
|
+
"type": "string",
|
|
20345
|
+
"minLength": 1
|
|
20346
|
+
},
|
|
20347
|
+
"scopes": {
|
|
20348
|
+
"description": "Optional scopes requested from the upstream issuer.",
|
|
20349
|
+
"type": "array",
|
|
20350
|
+
"items": {
|
|
20351
|
+
"type": "string",
|
|
20352
|
+
"minLength": 1
|
|
20353
|
+
}
|
|
20354
|
+
}
|
|
20355
|
+
},
|
|
20356
|
+
"required": [
|
|
20357
|
+
"issuer",
|
|
20358
|
+
"clientId"
|
|
20359
|
+
],
|
|
20360
|
+
"additionalProperties": false,
|
|
20361
|
+
"description": "Upstream OIDC connection settings."
|
|
20362
|
+
},
|
|
20363
|
+
"token": {
|
|
20364
|
+
"description": "Optional token issuance settings.",
|
|
20365
|
+
"type": "object",
|
|
20366
|
+
"properties": {
|
|
20367
|
+
"lifetimeSeconds": {
|
|
20368
|
+
"description": "Access token lifetime in seconds.",
|
|
20369
|
+
"type": "number",
|
|
20370
|
+
"minimum": 60
|
|
20371
|
+
},
|
|
20372
|
+
"signingKeyId": {
|
|
20373
|
+
"description": "Optional key chain id used to sign issued tokens.",
|
|
20374
|
+
"type": "string",
|
|
20375
|
+
"minLength": 1
|
|
20376
|
+
},
|
|
20377
|
+
"refreshTokenEnabled": {
|
|
20378
|
+
"description": "Enable issuing refresh tokens.",
|
|
20379
|
+
"type": "boolean"
|
|
20380
|
+
},
|
|
20381
|
+
"refreshTokenExpiresInSeconds": {
|
|
20382
|
+
"description": "Refresh token lifetime in seconds.",
|
|
20383
|
+
"type": "number",
|
|
20384
|
+
"minimum": 60
|
|
20385
|
+
}
|
|
20386
|
+
},
|
|
20387
|
+
"additionalProperties": false
|
|
20388
|
+
},
|
|
20389
|
+
"requireDPoP": {
|
|
20390
|
+
"description": "Require DPoP proofs for token/credential requests.",
|
|
20391
|
+
"type": "boolean"
|
|
20392
|
+
},
|
|
20393
|
+
"walletAttestationRequired": {
|
|
20394
|
+
"description": "Require wallet attestation for this authorization server.",
|
|
20395
|
+
"type": "boolean"
|
|
20396
|
+
},
|
|
20397
|
+
"walletProviderTrustLists": {
|
|
20398
|
+
"description": "Optional wallet provider trust list references for this authorization server.",
|
|
20399
|
+
"type": "array",
|
|
20400
|
+
"items": {
|
|
20401
|
+
"type": "object",
|
|
20402
|
+
"properties": {
|
|
20403
|
+
"trustListId": {
|
|
20404
|
+
"type": "string",
|
|
20405
|
+
"minLength": 1
|
|
20406
|
+
},
|
|
20407
|
+
"url": {
|
|
20408
|
+
"description": "URL of the wallet provider trust list.",
|
|
20409
|
+
"type": "string",
|
|
20410
|
+
"format": "uri"
|
|
20411
|
+
},
|
|
20412
|
+
"verifierKey": {
|
|
20413
|
+
"description": "Optional verifier key material used for trust list verification.",
|
|
20414
|
+
"type": "object",
|
|
20415
|
+
"propertyNames": {
|
|
20416
|
+
"type": "string"
|
|
20417
|
+
},
|
|
20418
|
+
"additionalProperties": {}
|
|
20419
|
+
},
|
|
20420
|
+
"verifierX509Der": {
|
|
20421
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
20422
|
+
"type": "string"
|
|
20423
|
+
}
|
|
20424
|
+
},
|
|
20425
|
+
"additionalProperties": false
|
|
20426
|
+
}
|
|
20427
|
+
},
|
|
20428
|
+
"label": {
|
|
20429
|
+
"description": "Optional display label for UI selection.",
|
|
20430
|
+
"type": "string"
|
|
20431
|
+
},
|
|
20432
|
+
"enabled": {
|
|
20433
|
+
"description": "Whether this authorization server entry is enabled.",
|
|
20434
|
+
"type": "boolean"
|
|
20435
|
+
}
|
|
20436
|
+
},
|
|
20437
|
+
"required": [
|
|
20438
|
+
"type",
|
|
20439
|
+
"id",
|
|
20440
|
+
"upstream"
|
|
20441
|
+
],
|
|
20442
|
+
"additionalProperties": false
|
|
20443
|
+
},
|
|
20444
|
+
{
|
|
20445
|
+
"type": "object",
|
|
20446
|
+
"properties": {
|
|
20447
|
+
"type": {
|
|
20448
|
+
"type": "string",
|
|
20449
|
+
"const": "built-in",
|
|
20450
|
+
"description": "Use EUDIPLO built-in authorization server."
|
|
20451
|
+
},
|
|
20452
|
+
"id": {
|
|
20453
|
+
"type": "string",
|
|
20454
|
+
"minLength": 1,
|
|
20455
|
+
"description": "Authorization server identifier."
|
|
20456
|
+
},
|
|
20457
|
+
"token": {
|
|
20458
|
+
"description": "Optional token issuance settings.",
|
|
20459
|
+
"type": "object",
|
|
20460
|
+
"properties": {
|
|
20461
|
+
"lifetimeSeconds": {
|
|
20462
|
+
"description": "Access token lifetime in seconds.",
|
|
20463
|
+
"type": "number",
|
|
20464
|
+
"minimum": 60
|
|
20465
|
+
},
|
|
20466
|
+
"signingKeyId": {
|
|
20467
|
+
"description": "Optional key chain id used to sign issued tokens.",
|
|
20468
|
+
"type": "string",
|
|
20469
|
+
"minLength": 1
|
|
20470
|
+
},
|
|
20471
|
+
"refreshTokenEnabled": {
|
|
20472
|
+
"description": "Enable issuing refresh tokens.",
|
|
20473
|
+
"type": "boolean"
|
|
20474
|
+
},
|
|
20475
|
+
"refreshTokenExpiresInSeconds": {
|
|
20476
|
+
"description": "Refresh token lifetime in seconds.",
|
|
20477
|
+
"type": "number",
|
|
20478
|
+
"minimum": 60
|
|
20479
|
+
}
|
|
20480
|
+
},
|
|
20481
|
+
"additionalProperties": false
|
|
20482
|
+
},
|
|
20483
|
+
"requireDPoP": {
|
|
20484
|
+
"description": "Require DPoP proofs for token/credential requests.",
|
|
20485
|
+
"type": "boolean"
|
|
20486
|
+
},
|
|
20487
|
+
"walletAttestationRequired": {
|
|
20488
|
+
"description": "Require wallet attestation for this authorization server.",
|
|
20489
|
+
"type": "boolean"
|
|
20490
|
+
},
|
|
20491
|
+
"walletProviderTrustLists": {
|
|
20492
|
+
"description": "Optional wallet provider trust list references for this authorization server.",
|
|
20493
|
+
"type": "array",
|
|
20494
|
+
"items": {
|
|
20495
|
+
"type": "object",
|
|
20496
|
+
"properties": {
|
|
20497
|
+
"trustListId": {
|
|
20498
|
+
"type": "string",
|
|
20499
|
+
"minLength": 1
|
|
20500
|
+
},
|
|
20501
|
+
"url": {
|
|
20502
|
+
"description": "URL of the wallet provider trust list.",
|
|
20503
|
+
"type": "string",
|
|
20504
|
+
"format": "uri"
|
|
20505
|
+
},
|
|
20506
|
+
"verifierKey": {
|
|
20507
|
+
"description": "Optional verifier key material used for trust list verification.",
|
|
20508
|
+
"type": "object",
|
|
20509
|
+
"propertyNames": {
|
|
20510
|
+
"type": "string"
|
|
20511
|
+
},
|
|
20512
|
+
"additionalProperties": {}
|
|
20513
|
+
},
|
|
20514
|
+
"verifierX509Der": {
|
|
20515
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
20516
|
+
"type": "string"
|
|
20517
|
+
}
|
|
20518
|
+
},
|
|
20519
|
+
"additionalProperties": false
|
|
20520
|
+
}
|
|
20521
|
+
},
|
|
20522
|
+
"label": {
|
|
20523
|
+
"description": "Optional display label for UI selection.",
|
|
20524
|
+
"type": "string"
|
|
20525
|
+
},
|
|
20526
|
+
"enabled": {
|
|
20527
|
+
"description": "Whether this authorization server entry is enabled.",
|
|
20528
|
+
"type": "boolean"
|
|
20529
|
+
}
|
|
20530
|
+
},
|
|
20531
|
+
"required": [
|
|
20532
|
+
"type",
|
|
20533
|
+
"id"
|
|
20534
|
+
],
|
|
20535
|
+
"additionalProperties": false
|
|
20536
|
+
}
|
|
20537
|
+
],
|
|
20538
|
+
"description": "Supported authorization server configurations."
|
|
20539
|
+
},
|
|
20540
|
+
"description": "Configured authorization server entries."
|
|
20541
|
+
},
|
|
20542
|
+
"federation": {
|
|
20543
|
+
"description": "Optional OpenID Federation settings.",
|
|
20544
|
+
"anyOf": [
|
|
20545
|
+
{
|
|
20546
|
+
"type": "object",
|
|
20547
|
+
"properties": {
|
|
20548
|
+
"role": {
|
|
20549
|
+
"description": "Federation role for this issuer.",
|
|
20550
|
+
"type": "string",
|
|
20551
|
+
"enum": [
|
|
20552
|
+
"trust_anchor",
|
|
20553
|
+
"intermediate",
|
|
20554
|
+
"leaf"
|
|
20555
|
+
]
|
|
20556
|
+
},
|
|
20557
|
+
"mode": {
|
|
20558
|
+
"description": "Federation operation mode.",
|
|
20559
|
+
"type": "string",
|
|
20560
|
+
"enum": [
|
|
20561
|
+
"federation-only",
|
|
20562
|
+
"hybrid"
|
|
20563
|
+
]
|
|
20564
|
+
},
|
|
20565
|
+
"entityId": {
|
|
20566
|
+
"description": "Optional local federation entity id.",
|
|
20567
|
+
"type": "string"
|
|
20568
|
+
},
|
|
20569
|
+
"enforceSigningPolicy": {
|
|
20570
|
+
"description": "Enforce strict signing policy checks.",
|
|
20571
|
+
"type": "boolean"
|
|
20572
|
+
},
|
|
20573
|
+
"cacheTtlSeconds": {
|
|
20574
|
+
"description": "Cache time-to-live for federation metadata in seconds.",
|
|
20575
|
+
"type": "integer",
|
|
20576
|
+
"minimum": 1,
|
|
20577
|
+
"maximum": 9007199254740991
|
|
20578
|
+
},
|
|
20579
|
+
"trustAnchors": {
|
|
20580
|
+
"type": "array",
|
|
20581
|
+
"items": {
|
|
20582
|
+
"type": "object",
|
|
20583
|
+
"properties": {
|
|
20584
|
+
"entityId": {
|
|
20585
|
+
"type": "string",
|
|
20586
|
+
"minLength": 1,
|
|
20587
|
+
"description": "Federation trust anchor entity id."
|
|
20588
|
+
},
|
|
20589
|
+
"entityConfigurationUri": {
|
|
20590
|
+
"type": "string",
|
|
20591
|
+
"format": "uri",
|
|
20592
|
+
"description": "Entity configuration URI for the trust anchor."
|
|
20593
|
+
}
|
|
20594
|
+
},
|
|
20595
|
+
"required": [
|
|
20596
|
+
"entityId",
|
|
20597
|
+
"entityConfigurationUri"
|
|
20598
|
+
],
|
|
20599
|
+
"additionalProperties": false
|
|
20600
|
+
},
|
|
20601
|
+
"description": "Federation trust anchors."
|
|
20602
|
+
}
|
|
20603
|
+
},
|
|
20604
|
+
"required": [
|
|
20605
|
+
"trustAnchors"
|
|
20606
|
+
],
|
|
20607
|
+
"additionalProperties": false
|
|
20608
|
+
},
|
|
20609
|
+
{
|
|
20610
|
+
"type": "null"
|
|
20611
|
+
}
|
|
20612
|
+
]
|
|
20613
|
+
},
|
|
20614
|
+
"registrationCertificate": {
|
|
20615
|
+
"description": "Optional registration certificate settings.",
|
|
20616
|
+
"anyOf": [
|
|
20617
|
+
{
|
|
20618
|
+
"type": "object",
|
|
20619
|
+
"properties": {
|
|
20620
|
+
"enabled": {
|
|
20621
|
+
"description": "Enable issuer registration certificate support.",
|
|
20622
|
+
"type": "boolean"
|
|
20623
|
+
},
|
|
20624
|
+
"mode": {
|
|
20625
|
+
"description": "How registration certificate data is provided.",
|
|
20626
|
+
"type": "string",
|
|
20627
|
+
"enum": [
|
|
20628
|
+
"import",
|
|
20629
|
+
"generate"
|
|
20630
|
+
]
|
|
20631
|
+
},
|
|
20632
|
+
"jwt": {
|
|
20633
|
+
"description": "Optional registration certificate JWT when using import mode.",
|
|
20634
|
+
"type": "string"
|
|
20635
|
+
},
|
|
20636
|
+
"privacyPolicy": {
|
|
20637
|
+
"description": "Optional privacy policy URI.",
|
|
20638
|
+
"type": "string"
|
|
20639
|
+
},
|
|
20640
|
+
"supportUri": {
|
|
20641
|
+
"description": "Optional support URI.",
|
|
20642
|
+
"type": "string"
|
|
20643
|
+
}
|
|
20644
|
+
},
|
|
20645
|
+
"additionalProperties": false
|
|
20646
|
+
},
|
|
20647
|
+
{
|
|
20648
|
+
"type": "null"
|
|
20649
|
+
}
|
|
20650
|
+
]
|
|
20651
|
+
},
|
|
20652
|
+
"display": {
|
|
20653
|
+
"description": "Localized issuer metadata shown to wallets.",
|
|
20654
|
+
"type": "array",
|
|
20655
|
+
"items": {
|
|
20656
|
+
"type": "object",
|
|
20657
|
+
"properties": {
|
|
20658
|
+
"name": {
|
|
20659
|
+
"description": "Issuer display name.",
|
|
20660
|
+
"type": "string"
|
|
20661
|
+
},
|
|
20662
|
+
"locale": {
|
|
20663
|
+
"description": "Locale tag for this display entry.",
|
|
20664
|
+
"type": "string"
|
|
20665
|
+
},
|
|
20666
|
+
"logo": {
|
|
20667
|
+
"description": "Optional issuer logo metadata.",
|
|
20668
|
+
"type": "object",
|
|
20669
|
+
"properties": {
|
|
20670
|
+
"uri": {
|
|
20671
|
+
"type": "string",
|
|
20672
|
+
"minLength": 1,
|
|
20673
|
+
"description": "Logo URI."
|
|
20674
|
+
},
|
|
20675
|
+
"alt_text": {
|
|
20676
|
+
"description": "Optional localized alternative text.",
|
|
20677
|
+
"type": "string"
|
|
20678
|
+
}
|
|
20679
|
+
},
|
|
20680
|
+
"required": [
|
|
20681
|
+
"uri"
|
|
20682
|
+
],
|
|
20683
|
+
"additionalProperties": {}
|
|
20684
|
+
}
|
|
20685
|
+
},
|
|
20686
|
+
"additionalProperties": {}
|
|
20687
|
+
}
|
|
20688
|
+
},
|
|
20689
|
+
"notificationEndpointEnabled": {
|
|
20690
|
+
"description": "Whether the OID4VCI notification endpoint is exposed for this issuance configuration.",
|
|
20691
|
+
"type": "boolean"
|
|
20692
|
+
},
|
|
20693
|
+
"credentialResponseEncryption": {
|
|
20694
|
+
"description": "Enable encrypted credential responses.",
|
|
20695
|
+
"type": "boolean"
|
|
20696
|
+
},
|
|
20697
|
+
"credentialRequestEncryption": {
|
|
20698
|
+
"description": "Require encrypted credential requests.",
|
|
20699
|
+
"type": "boolean"
|
|
20700
|
+
},
|
|
20701
|
+
"txCodeMaxAttempts": {
|
|
20702
|
+
"description": "Maximum verification attempts for transaction codes. Null resets to defaults.",
|
|
20703
|
+
"anyOf": [
|
|
20704
|
+
{
|
|
20705
|
+
"type": "integer",
|
|
20706
|
+
"minimum": 1,
|
|
20707
|
+
"maximum": 9007199254740991
|
|
20708
|
+
},
|
|
20709
|
+
{
|
|
20710
|
+
"type": "null"
|
|
20711
|
+
}
|
|
20712
|
+
]
|
|
20713
|
+
},
|
|
20714
|
+
"offerLifetimeSeconds": {
|
|
20715
|
+
"description": "Default lifetime of credential offers in seconds. Can be overridden per offer request. Null or unset: offers do not expire.",
|
|
20716
|
+
"anyOf": [
|
|
20717
|
+
{
|
|
20718
|
+
"type": "integer",
|
|
20719
|
+
"minimum": 1,
|
|
20720
|
+
"maximum": 9007199254740991
|
|
20721
|
+
},
|
|
20722
|
+
{
|
|
20723
|
+
"type": "null"
|
|
20724
|
+
}
|
|
20725
|
+
]
|
|
20726
|
+
}
|
|
20727
|
+
},
|
|
20728
|
+
"required": [
|
|
20729
|
+
"authorizationServers"
|
|
20730
|
+
],
|
|
20731
|
+
"additionalProperties": false,
|
|
20732
|
+
"title": "IssuanceConfig"
|
|
20733
|
+
}
|
|
20734
|
+
}
|
|
20735
|
+
},
|
|
20736
|
+
{
|
|
20737
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
20738
|
+
"$id": "https://eudiplo.dev/schemas/v2/PresentationConfigFile.schema.json",
|
|
20739
|
+
"title": "PresentationConfigFile",
|
|
20740
|
+
"type": "object",
|
|
20741
|
+
"properties": {
|
|
20742
|
+
"$schema": {
|
|
20743
|
+
"type": "string",
|
|
20744
|
+
"const": "https://eudiplo.dev/schemas/v2/PresentationConfigFile.schema.json"
|
|
20745
|
+
},
|
|
20746
|
+
"metadata": {
|
|
20747
|
+
"type": "object",
|
|
20748
|
+
"properties": {
|
|
20749
|
+
"generation": {
|
|
20750
|
+
"type": "integer",
|
|
20751
|
+
"minimum": 1,
|
|
20752
|
+
"description": "Monotonically increasing configuration generation."
|
|
20753
|
+
},
|
|
20754
|
+
"ownership": {
|
|
20755
|
+
"type": "string",
|
|
20756
|
+
"enum": [
|
|
20757
|
+
"unmanaged",
|
|
20758
|
+
"file-managed"
|
|
20759
|
+
],
|
|
20760
|
+
"description": "Requested ownership recorded when the document is applied."
|
|
20761
|
+
}
|
|
20762
|
+
},
|
|
20763
|
+
"additionalProperties": false
|
|
20764
|
+
},
|
|
20765
|
+
"spec": {
|
|
20766
|
+
"allOf": [
|
|
20767
|
+
{
|
|
20768
|
+
"$ref": "#/$defs/PresentationConfigCreateDto"
|
|
20769
|
+
},
|
|
20770
|
+
{
|
|
20771
|
+
"type": "object",
|
|
20772
|
+
"required": [
|
|
20773
|
+
"id"
|
|
20774
|
+
],
|
|
20775
|
+
"properties": {
|
|
20776
|
+
"id": {
|
|
20777
|
+
"type": "string",
|
|
20778
|
+
"minLength": 1
|
|
20779
|
+
}
|
|
20780
|
+
}
|
|
20781
|
+
}
|
|
20782
|
+
]
|
|
20783
|
+
}
|
|
20784
|
+
},
|
|
20785
|
+
"required": [
|
|
20786
|
+
"$schema",
|
|
20787
|
+
"spec"
|
|
20788
|
+
],
|
|
20789
|
+
"additionalProperties": false,
|
|
20790
|
+
"$defs": {
|
|
20791
|
+
"PresentationConfigCreateDto": {
|
|
20792
|
+
"type": "object",
|
|
20793
|
+
"properties": {
|
|
20794
|
+
"id": {
|
|
20795
|
+
"type": "string",
|
|
20796
|
+
"minLength": 1,
|
|
20797
|
+
"description": "Presentation configuration identifier."
|
|
20798
|
+
},
|
|
20799
|
+
"description": {
|
|
20800
|
+
"description": "Optional presentation configuration description.",
|
|
20801
|
+
"type": [
|
|
20802
|
+
"string",
|
|
20803
|
+
"null"
|
|
20804
|
+
]
|
|
20805
|
+
},
|
|
20806
|
+
"lifeTime": {
|
|
20807
|
+
"description": "Presentation request lifetime in seconds.",
|
|
20808
|
+
"type": "integer",
|
|
20809
|
+
"minimum": 1,
|
|
20810
|
+
"maximum": 9007199254740991
|
|
20811
|
+
},
|
|
20812
|
+
"skewSeconds": {
|
|
20813
|
+
"description": "Clock skew tolerance in seconds.",
|
|
20814
|
+
"type": "integer",
|
|
20815
|
+
"minimum": 0,
|
|
20816
|
+
"maximum": 9007199254740991
|
|
20817
|
+
},
|
|
20818
|
+
"statusCheckMode": {
|
|
20819
|
+
"description": "Revocation/status check mode.",
|
|
20820
|
+
"type": "string",
|
|
20821
|
+
"enum": [
|
|
20822
|
+
"strict",
|
|
20823
|
+
"best_effort",
|
|
20824
|
+
"disabled"
|
|
20825
|
+
]
|
|
20826
|
+
},
|
|
20827
|
+
"dcql_query": {
|
|
20828
|
+
"type": "object",
|
|
20829
|
+
"properties": {
|
|
20830
|
+
"credentials": {
|
|
20831
|
+
"minItems": 1,
|
|
20832
|
+
"type": "array",
|
|
20833
|
+
"items": {
|
|
20834
|
+
"oneOf": [
|
|
20835
|
+
{
|
|
20836
|
+
"type": "object",
|
|
20837
|
+
"properties": {
|
|
20838
|
+
"id": {
|
|
20839
|
+
"type": "string",
|
|
20840
|
+
"minLength": 1,
|
|
20841
|
+
"pattern": "^[A-Za-z0-9_-]+$",
|
|
20842
|
+
"description": "Credential query identifier."
|
|
20843
|
+
},
|
|
20844
|
+
"multiple": {
|
|
20845
|
+
"description": "Allow multiple matching credentials.",
|
|
20846
|
+
"type": "boolean"
|
|
20847
|
+
},
|
|
20848
|
+
"claim_sets": {
|
|
20849
|
+
"description": "Optional claim set constraints.",
|
|
20850
|
+
"type": "array",
|
|
20851
|
+
"items": {
|
|
20852
|
+
"type": "array",
|
|
20853
|
+
"items": {
|
|
20854
|
+
"type": "string"
|
|
20855
|
+
}
|
|
20856
|
+
}
|
|
20857
|
+
},
|
|
20858
|
+
"trusted_authorities": {
|
|
20859
|
+
"description": "Optional trusted authority constraints.",
|
|
20860
|
+
"type": "array",
|
|
20861
|
+
"items": {
|
|
20862
|
+
"oneOf": [
|
|
20863
|
+
{
|
|
20864
|
+
"type": "object",
|
|
20865
|
+
"properties": {
|
|
20866
|
+
"type": {
|
|
20867
|
+
"type": "string",
|
|
20868
|
+
"const": "etsi_tl",
|
|
20869
|
+
"description": "Trusted authority type discriminator for ETSI trust lists."
|
|
20870
|
+
},
|
|
20871
|
+
"values": {
|
|
20872
|
+
"type": "array",
|
|
20873
|
+
"items": {
|
|
20874
|
+
"type": "object",
|
|
20875
|
+
"properties": {
|
|
20876
|
+
"trustListId": {
|
|
20877
|
+
"description": "Optional trust list id reference.",
|
|
20878
|
+
"type": "string"
|
|
20879
|
+
},
|
|
20880
|
+
"url": {
|
|
20881
|
+
"description": "Optional trust list URL reference.",
|
|
20882
|
+
"anyOf": [
|
|
20883
|
+
{
|
|
20884
|
+
"type": "string",
|
|
20885
|
+
"format": "uri"
|
|
20886
|
+
},
|
|
20887
|
+
{
|
|
20888
|
+
"type": "string",
|
|
20889
|
+
"pattern": "^<TENANT_URL>(?:\\/.*)?$"
|
|
20890
|
+
}
|
|
20891
|
+
]
|
|
20892
|
+
},
|
|
20893
|
+
"verifierKey": {
|
|
20894
|
+
"description": "Optional verifier key material.",
|
|
20895
|
+
"type": "object",
|
|
20896
|
+
"propertyNames": {
|
|
20897
|
+
"type": "string"
|
|
20898
|
+
},
|
|
20899
|
+
"additionalProperties": {}
|
|
20900
|
+
},
|
|
20901
|
+
"verifierX509Der": {
|
|
20902
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
20903
|
+
"type": "string"
|
|
20904
|
+
}
|
|
20905
|
+
},
|
|
20906
|
+
"additionalProperties": false
|
|
20907
|
+
},
|
|
20908
|
+
"description": "Trust list references for ETSI TL verification."
|
|
20909
|
+
}
|
|
20910
|
+
},
|
|
20911
|
+
"required": [
|
|
20912
|
+
"type",
|
|
20913
|
+
"values"
|
|
20914
|
+
],
|
|
20915
|
+
"additionalProperties": false
|
|
20916
|
+
},
|
|
20917
|
+
{
|
|
20918
|
+
"type": "object",
|
|
20919
|
+
"properties": {
|
|
20920
|
+
"type": {
|
|
20921
|
+
"type": "string",
|
|
20922
|
+
"const": "openid_federation",
|
|
20923
|
+
"description": "Trusted authority type discriminator for OpenID Federation."
|
|
20924
|
+
},
|
|
20925
|
+
"values": {
|
|
20926
|
+
"type": "array",
|
|
20927
|
+
"items": {
|
|
20928
|
+
"type": "string"
|
|
20929
|
+
},
|
|
20930
|
+
"description": "OpenID Federation authority identifiers."
|
|
20931
|
+
}
|
|
20932
|
+
},
|
|
20933
|
+
"required": [
|
|
20934
|
+
"type",
|
|
20935
|
+
"values"
|
|
20936
|
+
],
|
|
20937
|
+
"additionalProperties": false
|
|
20938
|
+
}
|
|
20939
|
+
]
|
|
20940
|
+
}
|
|
20941
|
+
},
|
|
20942
|
+
"format": {
|
|
20943
|
+
"type": "string",
|
|
20944
|
+
"const": "dc+sd-jwt",
|
|
20945
|
+
"description": "Credential format discriminator."
|
|
20946
|
+
},
|
|
20947
|
+
"meta": {
|
|
20948
|
+
"type": "object",
|
|
20949
|
+
"properties": {
|
|
20950
|
+
"vct_values": {
|
|
20951
|
+
"minItems": 1,
|
|
20952
|
+
"type": "array",
|
|
20953
|
+
"items": {
|
|
20954
|
+
"type": "string"
|
|
20955
|
+
},
|
|
20956
|
+
"description": "Accepted VCT values."
|
|
20957
|
+
}
|
|
20958
|
+
},
|
|
20959
|
+
"required": [
|
|
20960
|
+
"vct_values"
|
|
20961
|
+
],
|
|
20962
|
+
"additionalProperties": false
|
|
20963
|
+
},
|
|
20964
|
+
"claims": {
|
|
20965
|
+
"description": "Optional claim-level constraints.",
|
|
20966
|
+
"type": "array",
|
|
20967
|
+
"items": {
|
|
20968
|
+
"type": "object",
|
|
20969
|
+
"properties": {
|
|
20970
|
+
"id": {
|
|
20971
|
+
"description": "Optional claim query id.",
|
|
20972
|
+
"type": "string"
|
|
20973
|
+
},
|
|
20974
|
+
"path": {
|
|
20975
|
+
"type": "array",
|
|
20976
|
+
"items": {
|
|
20977
|
+
"type": [
|
|
20978
|
+
"string",
|
|
20979
|
+
"number"
|
|
20980
|
+
]
|
|
20981
|
+
},
|
|
20982
|
+
"description": "Path to the claim value in presented credentials."
|
|
20983
|
+
},
|
|
20984
|
+
"values": {
|
|
20985
|
+
"description": "Optional allowed values for the claim.",
|
|
20986
|
+
"type": "array",
|
|
20987
|
+
"items": {
|
|
20988
|
+
"type": "string"
|
|
20989
|
+
}
|
|
20990
|
+
}
|
|
20991
|
+
},
|
|
20992
|
+
"required": [
|
|
20993
|
+
"path"
|
|
20994
|
+
],
|
|
20995
|
+
"additionalProperties": false
|
|
20996
|
+
}
|
|
20997
|
+
}
|
|
20998
|
+
},
|
|
20999
|
+
"required": [
|
|
21000
|
+
"id",
|
|
21001
|
+
"format",
|
|
21002
|
+
"meta"
|
|
21003
|
+
],
|
|
21004
|
+
"additionalProperties": false
|
|
21005
|
+
},
|
|
21006
|
+
{
|
|
21007
|
+
"type": "object",
|
|
21008
|
+
"properties": {
|
|
21009
|
+
"id": {
|
|
21010
|
+
"type": "string",
|
|
21011
|
+
"minLength": 1,
|
|
21012
|
+
"pattern": "^[A-Za-z0-9_-]+$",
|
|
21013
|
+
"description": "Credential query identifier."
|
|
21014
|
+
},
|
|
21015
|
+
"multiple": {
|
|
21016
|
+
"description": "Allow multiple matching credentials.",
|
|
21017
|
+
"type": "boolean"
|
|
21018
|
+
},
|
|
21019
|
+
"claim_sets": {
|
|
21020
|
+
"description": "Optional claim set constraints.",
|
|
21021
|
+
"type": "array",
|
|
21022
|
+
"items": {
|
|
21023
|
+
"type": "array",
|
|
21024
|
+
"items": {
|
|
21025
|
+
"type": "string"
|
|
21026
|
+
}
|
|
21027
|
+
}
|
|
21028
|
+
},
|
|
21029
|
+
"trusted_authorities": {
|
|
21030
|
+
"description": "Optional trusted authority constraints.",
|
|
21031
|
+
"type": "array",
|
|
21032
|
+
"items": {
|
|
21033
|
+
"oneOf": [
|
|
21034
|
+
{
|
|
21035
|
+
"type": "object",
|
|
21036
|
+
"properties": {
|
|
21037
|
+
"type": {
|
|
21038
|
+
"type": "string",
|
|
21039
|
+
"const": "etsi_tl",
|
|
21040
|
+
"description": "Trusted authority type discriminator for ETSI trust lists."
|
|
21041
|
+
},
|
|
21042
|
+
"values": {
|
|
21043
|
+
"type": "array",
|
|
21044
|
+
"items": {
|
|
21045
|
+
"type": "object",
|
|
21046
|
+
"properties": {
|
|
21047
|
+
"trustListId": {
|
|
21048
|
+
"description": "Optional trust list id reference.",
|
|
21049
|
+
"type": "string"
|
|
21050
|
+
},
|
|
21051
|
+
"url": {
|
|
21052
|
+
"description": "Optional trust list URL reference.",
|
|
21053
|
+
"anyOf": [
|
|
21054
|
+
{
|
|
21055
|
+
"type": "string",
|
|
21056
|
+
"format": "uri"
|
|
21057
|
+
},
|
|
21058
|
+
{
|
|
21059
|
+
"type": "string",
|
|
21060
|
+
"pattern": "^<TENANT_URL>(?:\\/.*)?$"
|
|
21061
|
+
}
|
|
21062
|
+
]
|
|
21063
|
+
},
|
|
21064
|
+
"verifierKey": {
|
|
21065
|
+
"description": "Optional verifier key material.",
|
|
21066
|
+
"type": "object",
|
|
21067
|
+
"propertyNames": {
|
|
21068
|
+
"type": "string"
|
|
21069
|
+
},
|
|
21070
|
+
"additionalProperties": {}
|
|
21071
|
+
},
|
|
21072
|
+
"verifierX509Der": {
|
|
21073
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
21074
|
+
"type": "string"
|
|
21075
|
+
}
|
|
21076
|
+
},
|
|
21077
|
+
"additionalProperties": false
|
|
21078
|
+
},
|
|
21079
|
+
"description": "Trust list references for ETSI TL verification."
|
|
21080
|
+
}
|
|
21081
|
+
},
|
|
21082
|
+
"required": [
|
|
21083
|
+
"type",
|
|
21084
|
+
"values"
|
|
21085
|
+
],
|
|
21086
|
+
"additionalProperties": false
|
|
21087
|
+
},
|
|
21088
|
+
{
|
|
21089
|
+
"type": "object",
|
|
21090
|
+
"properties": {
|
|
21091
|
+
"type": {
|
|
21092
|
+
"type": "string",
|
|
21093
|
+
"const": "openid_federation",
|
|
21094
|
+
"description": "Trusted authority type discriminator for OpenID Federation."
|
|
21095
|
+
},
|
|
21096
|
+
"values": {
|
|
21097
|
+
"type": "array",
|
|
21098
|
+
"items": {
|
|
21099
|
+
"type": "string"
|
|
21100
|
+
},
|
|
21101
|
+
"description": "OpenID Federation authority identifiers."
|
|
21102
|
+
}
|
|
21103
|
+
},
|
|
21104
|
+
"required": [
|
|
21105
|
+
"type",
|
|
21106
|
+
"values"
|
|
21107
|
+
],
|
|
21108
|
+
"additionalProperties": false
|
|
21109
|
+
}
|
|
21110
|
+
]
|
|
21111
|
+
}
|
|
21112
|
+
},
|
|
21113
|
+
"format": {
|
|
21114
|
+
"type": "string",
|
|
21115
|
+
"const": "mso_mdoc",
|
|
21116
|
+
"description": "Credential format discriminator."
|
|
21117
|
+
},
|
|
21118
|
+
"meta": {
|
|
21119
|
+
"type": "object",
|
|
21120
|
+
"properties": {
|
|
21121
|
+
"doctype_value": {
|
|
21122
|
+
"type": "string",
|
|
21123
|
+
"minLength": 1,
|
|
21124
|
+
"description": "Expected mDoc doctype value."
|
|
21125
|
+
}
|
|
21126
|
+
},
|
|
21127
|
+
"required": [
|
|
21128
|
+
"doctype_value"
|
|
21129
|
+
],
|
|
21130
|
+
"additionalProperties": false
|
|
21131
|
+
},
|
|
21132
|
+
"claims": {
|
|
21133
|
+
"description": "Optional mDoc claim-level constraints.",
|
|
21134
|
+
"type": "array",
|
|
21135
|
+
"items": {
|
|
21136
|
+
"type": "object",
|
|
21137
|
+
"properties": {
|
|
21138
|
+
"id": {
|
|
21139
|
+
"description": "Optional claim query id.",
|
|
21140
|
+
"type": "string"
|
|
21141
|
+
},
|
|
21142
|
+
"path": {
|
|
21143
|
+
"type": "array",
|
|
21144
|
+
"items": {
|
|
21145
|
+
"type": [
|
|
21146
|
+
"string",
|
|
21147
|
+
"number"
|
|
21148
|
+
]
|
|
21149
|
+
},
|
|
21150
|
+
"description": "Path to the claim value in presented credentials."
|
|
21151
|
+
},
|
|
21152
|
+
"values": {
|
|
21153
|
+
"description": "Optional allowed values for the claim.",
|
|
21154
|
+
"type": "array",
|
|
21155
|
+
"items": {
|
|
21156
|
+
"type": "string"
|
|
21157
|
+
}
|
|
21158
|
+
},
|
|
21159
|
+
"intent_to_retain": {
|
|
21160
|
+
"description": "Whether relying party intends to retain the claim.",
|
|
21161
|
+
"type": "boolean"
|
|
21162
|
+
}
|
|
21163
|
+
},
|
|
21164
|
+
"required": [
|
|
21165
|
+
"path"
|
|
21166
|
+
],
|
|
21167
|
+
"additionalProperties": false
|
|
21168
|
+
}
|
|
21169
|
+
}
|
|
21170
|
+
},
|
|
21171
|
+
"required": [
|
|
21172
|
+
"id",
|
|
21173
|
+
"format",
|
|
21174
|
+
"meta"
|
|
21175
|
+
],
|
|
21176
|
+
"additionalProperties": false
|
|
21177
|
+
}
|
|
21178
|
+
]
|
|
21179
|
+
},
|
|
21180
|
+
"description": "Credential queries requested by the verifier."
|
|
21181
|
+
},
|
|
21182
|
+
"credential_sets": {
|
|
21183
|
+
"description": "Optional higher-level credential set requirements.",
|
|
21184
|
+
"type": "array",
|
|
21185
|
+
"items": {
|
|
21186
|
+
"type": "object",
|
|
21187
|
+
"properties": {
|
|
21188
|
+
"options": {
|
|
21189
|
+
"minItems": 1,
|
|
21190
|
+
"type": "array",
|
|
21191
|
+
"items": {
|
|
21192
|
+
"minItems": 1,
|
|
21193
|
+
"type": "array",
|
|
21194
|
+
"items": {
|
|
21195
|
+
"type": "string"
|
|
21196
|
+
}
|
|
21197
|
+
},
|
|
21198
|
+
"description": "Alternative credential query id combinations."
|
|
21199
|
+
},
|
|
21200
|
+
"required": {
|
|
21201
|
+
"description": "Whether this credential set is mandatory.",
|
|
21202
|
+
"type": "boolean"
|
|
21203
|
+
}
|
|
21204
|
+
},
|
|
21205
|
+
"required": [
|
|
21206
|
+
"options"
|
|
21207
|
+
],
|
|
21208
|
+
"additionalProperties": false
|
|
21209
|
+
}
|
|
21210
|
+
}
|
|
21211
|
+
},
|
|
21212
|
+
"required": [
|
|
21213
|
+
"credentials"
|
|
21214
|
+
],
|
|
21215
|
+
"additionalProperties": false,
|
|
21216
|
+
"description": "DCQL query defining requested credentials and claims."
|
|
21217
|
+
},
|
|
21218
|
+
"transaction_data": {
|
|
21219
|
+
"description": "Optional transaction data descriptors.",
|
|
21220
|
+
"anyOf": [
|
|
21221
|
+
{
|
|
21222
|
+
"type": "array",
|
|
21223
|
+
"items": {
|
|
21224
|
+
"type": "object",
|
|
21225
|
+
"properties": {
|
|
21226
|
+
"type": {
|
|
21227
|
+
"type": "string",
|
|
21228
|
+
"description": "Transaction data type identifier."
|
|
21229
|
+
},
|
|
21230
|
+
"credential_ids": {
|
|
21231
|
+
"type": "array",
|
|
21232
|
+
"items": {
|
|
21233
|
+
"type": "string"
|
|
21234
|
+
},
|
|
21235
|
+
"description": "Credential query ids this transaction data applies to."
|
|
21236
|
+
},
|
|
21237
|
+
"payload": {
|
|
21238
|
+
"description": "Transaction details. Required for TS12 SCA transaction data."
|
|
21239
|
+
}
|
|
21240
|
+
},
|
|
21241
|
+
"required": [
|
|
21242
|
+
"type",
|
|
21243
|
+
"credential_ids"
|
|
21244
|
+
],
|
|
21245
|
+
"additionalProperties": {}
|
|
21246
|
+
}
|
|
21247
|
+
},
|
|
21248
|
+
{
|
|
21249
|
+
"type": "null"
|
|
21250
|
+
}
|
|
21251
|
+
]
|
|
21252
|
+
},
|
|
21253
|
+
"registration_cert": {
|
|
21254
|
+
"description": "Optional registration certificate request settings.",
|
|
21255
|
+
"anyOf": [
|
|
21256
|
+
{
|
|
21257
|
+
"type": "object",
|
|
21258
|
+
"properties": {
|
|
21259
|
+
"id": {
|
|
21260
|
+
"type": "string"
|
|
21261
|
+
},
|
|
21262
|
+
"body": {
|
|
21263
|
+
"type": "object",
|
|
21264
|
+
"properties": {
|
|
21265
|
+
"privacy_policy": {
|
|
21266
|
+
"type": "string"
|
|
21267
|
+
},
|
|
21268
|
+
"support_uri": {
|
|
21269
|
+
"type": "string"
|
|
21270
|
+
},
|
|
21271
|
+
"intermediary": {
|
|
21272
|
+
"type": "string"
|
|
21273
|
+
},
|
|
21274
|
+
"purpose": {
|
|
21275
|
+
"type": "array",
|
|
21276
|
+
"items": {
|
|
21277
|
+
"type": "object",
|
|
21278
|
+
"properties": {
|
|
21279
|
+
"lang": {
|
|
21280
|
+
"type": "string"
|
|
21281
|
+
},
|
|
21282
|
+
"content": {
|
|
21283
|
+
"type": "string"
|
|
21284
|
+
}
|
|
21285
|
+
},
|
|
21286
|
+
"required": [
|
|
21287
|
+
"lang",
|
|
21288
|
+
"content"
|
|
21289
|
+
],
|
|
21290
|
+
"additionalProperties": false
|
|
21291
|
+
}
|
|
21292
|
+
},
|
|
21293
|
+
"credentials": {
|
|
21294
|
+
"type": "array",
|
|
21295
|
+
"items": {
|
|
21296
|
+
"type": "object",
|
|
21297
|
+
"propertyNames": {
|
|
21298
|
+
"type": "string"
|
|
21299
|
+
},
|
|
21300
|
+
"additionalProperties": {}
|
|
21301
|
+
}
|
|
21302
|
+
},
|
|
21303
|
+
"provides_attestations": {
|
|
21304
|
+
"type": "array",
|
|
21305
|
+
"items": {
|
|
21306
|
+
"type": "string",
|
|
21307
|
+
"minLength": 1
|
|
21308
|
+
}
|
|
21309
|
+
}
|
|
21310
|
+
},
|
|
21311
|
+
"additionalProperties": false
|
|
21312
|
+
},
|
|
21313
|
+
"jwt": {
|
|
21314
|
+
"type": "string"
|
|
21315
|
+
}
|
|
21316
|
+
},
|
|
21317
|
+
"additionalProperties": false
|
|
21318
|
+
},
|
|
21319
|
+
{
|
|
21320
|
+
"type": "null"
|
|
21321
|
+
}
|
|
21322
|
+
]
|
|
21323
|
+
},
|
|
21324
|
+
"registrationCertImportJwt": {
|
|
21325
|
+
"description": "Optional imported registration certificate JWT.",
|
|
21326
|
+
"type": [
|
|
21327
|
+
"string",
|
|
21328
|
+
"null"
|
|
21329
|
+
]
|
|
21330
|
+
},
|
|
21331
|
+
"registrationCertImportId": {
|
|
21332
|
+
"description": "Optional registrar-side registration certificate id.",
|
|
21333
|
+
"type": [
|
|
21334
|
+
"string",
|
|
21335
|
+
"null"
|
|
21336
|
+
]
|
|
21337
|
+
},
|
|
21338
|
+
"registrationCertBodyPrivacyPolicy": {
|
|
21339
|
+
"description": "Optional registration certificate privacy policy URI.",
|
|
21340
|
+
"type": [
|
|
21341
|
+
"string",
|
|
21342
|
+
"null"
|
|
21343
|
+
]
|
|
21344
|
+
},
|
|
21345
|
+
"registrationCertBodySupportUri": {
|
|
21346
|
+
"description": "Optional registration certificate support URI.",
|
|
21347
|
+
"type": [
|
|
21348
|
+
"string",
|
|
21349
|
+
"null"
|
|
21350
|
+
]
|
|
21351
|
+
},
|
|
21352
|
+
"registrationCertBodyIntermediary": {
|
|
21353
|
+
"description": "Optional registration certificate intermediary.",
|
|
21354
|
+
"type": [
|
|
21355
|
+
"string",
|
|
21356
|
+
"null"
|
|
21357
|
+
]
|
|
21358
|
+
},
|
|
21359
|
+
"registrationCertBodyPurpose": {
|
|
21360
|
+
"description": "Optional registration certificate purpose entries.",
|
|
21361
|
+
"anyOf": [
|
|
21362
|
+
{
|
|
21363
|
+
"type": "array",
|
|
21364
|
+
"items": {
|
|
21365
|
+
"type": "object",
|
|
21366
|
+
"properties": {
|
|
21367
|
+
"lang": {
|
|
21368
|
+
"type": "string"
|
|
21369
|
+
},
|
|
21370
|
+
"content": {
|
|
21371
|
+
"type": "string"
|
|
21372
|
+
}
|
|
21373
|
+
},
|
|
21374
|
+
"additionalProperties": false
|
|
21375
|
+
}
|
|
21376
|
+
},
|
|
21377
|
+
{
|
|
21378
|
+
"type": "null"
|
|
21379
|
+
}
|
|
21380
|
+
]
|
|
21381
|
+
},
|
|
21382
|
+
"webhookEndpointId": {
|
|
21383
|
+
"description": "Optional webhook endpoint id for presentation callbacks.",
|
|
21384
|
+
"type": [
|
|
21385
|
+
"string",
|
|
21386
|
+
"null"
|
|
21387
|
+
]
|
|
21388
|
+
},
|
|
21389
|
+
"attached": {
|
|
21390
|
+
"description": "Optional attachments included with presentation requests.",
|
|
21391
|
+
"anyOf": [
|
|
21392
|
+
{
|
|
21393
|
+
"type": "array",
|
|
21394
|
+
"items": {
|
|
21395
|
+
"type": "object",
|
|
21396
|
+
"properties": {
|
|
21397
|
+
"format": {
|
|
21398
|
+
"type": "string",
|
|
21399
|
+
"description": "Attachment format identifier."
|
|
21400
|
+
},
|
|
21401
|
+
"data": {
|
|
21402
|
+
"description": "Attachment payload."
|
|
21403
|
+
},
|
|
21404
|
+
"credential_ids": {
|
|
21405
|
+
"description": "Optional credential query ids bound to this attachment.",
|
|
21406
|
+
"type": "array",
|
|
21407
|
+
"items": {
|
|
21408
|
+
"type": "string"
|
|
21409
|
+
}
|
|
21410
|
+
}
|
|
21411
|
+
},
|
|
21412
|
+
"required": [
|
|
21413
|
+
"format",
|
|
21414
|
+
"data"
|
|
21415
|
+
],
|
|
21416
|
+
"additionalProperties": false
|
|
21417
|
+
}
|
|
21418
|
+
},
|
|
21419
|
+
{
|
|
21420
|
+
"type": "null"
|
|
21421
|
+
}
|
|
21422
|
+
]
|
|
21423
|
+
},
|
|
21424
|
+
"redirectUri": {
|
|
21425
|
+
"description": "Optional redirect URI after presentation completion.",
|
|
21426
|
+
"type": [
|
|
21427
|
+
"string",
|
|
21428
|
+
"null"
|
|
21429
|
+
]
|
|
21430
|
+
},
|
|
21431
|
+
"accessKeyChainId": {
|
|
21432
|
+
"description": "Optional key chain id for access token/auth operations.",
|
|
21433
|
+
"type": [
|
|
21434
|
+
"string",
|
|
21435
|
+
"null"
|
|
21436
|
+
]
|
|
21437
|
+
},
|
|
21438
|
+
"readerAuth": {
|
|
21439
|
+
"description": "Whether reader authentication is required for mDoc requests.",
|
|
21440
|
+
"type": [
|
|
21441
|
+
"boolean",
|
|
21442
|
+
"null"
|
|
21443
|
+
]
|
|
21444
|
+
}
|
|
21445
|
+
},
|
|
21446
|
+
"required": [
|
|
21447
|
+
"id",
|
|
21448
|
+
"dcql_query"
|
|
21449
|
+
],
|
|
21450
|
+
"additionalProperties": false,
|
|
21451
|
+
"title": "PresentationConfigCreateDto"
|
|
21452
|
+
}
|
|
21453
|
+
}
|
|
21454
|
+
},
|
|
21455
|
+
{
|
|
21456
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
21457
|
+
"$id": "https://eudiplo.dev/schemas/v3/PresentationConfigFile.schema.json",
|
|
21458
|
+
"title": "PresentationConfigFile",
|
|
21459
|
+
"type": "object",
|
|
21460
|
+
"properties": {
|
|
21461
|
+
"$schema": {
|
|
21462
|
+
"type": "string",
|
|
21463
|
+
"const": "https://eudiplo.dev/schemas/v3/PresentationConfigFile.schema.json"
|
|
21464
|
+
},
|
|
21465
|
+
"metadata": {
|
|
21466
|
+
"type": "object",
|
|
21467
|
+
"properties": {
|
|
21468
|
+
"generation": {
|
|
21469
|
+
"type": "integer",
|
|
21470
|
+
"minimum": 1,
|
|
21471
|
+
"description": "Monotonically increasing configuration generation."
|
|
21472
|
+
},
|
|
21473
|
+
"ownership": {
|
|
21474
|
+
"type": "string",
|
|
21475
|
+
"enum": [
|
|
21476
|
+
"unmanaged",
|
|
21477
|
+
"file-managed"
|
|
21478
|
+
],
|
|
21479
|
+
"description": "Requested ownership recorded when the document is applied."
|
|
21480
|
+
}
|
|
21481
|
+
},
|
|
21482
|
+
"additionalProperties": false
|
|
21483
|
+
},
|
|
21484
|
+
"spec": {
|
|
21485
|
+
"allOf": [
|
|
21486
|
+
{
|
|
21487
|
+
"$ref": "#/$defs/PresentationConfigCreateDto"
|
|
21488
|
+
},
|
|
21489
|
+
{
|
|
21490
|
+
"type": "object",
|
|
21491
|
+
"required": [
|
|
21492
|
+
"id"
|
|
21493
|
+
],
|
|
21494
|
+
"properties": {
|
|
21495
|
+
"id": {
|
|
21496
|
+
"type": "string",
|
|
21497
|
+
"minLength": 1
|
|
21498
|
+
}
|
|
21499
|
+
}
|
|
21500
|
+
}
|
|
21501
|
+
]
|
|
21502
|
+
}
|
|
21503
|
+
},
|
|
21504
|
+
"required": [
|
|
21505
|
+
"$schema",
|
|
21506
|
+
"spec"
|
|
21507
|
+
],
|
|
21508
|
+
"additionalProperties": false,
|
|
21509
|
+
"$defs": {
|
|
21510
|
+
"PresentationConfigCreateDto": {
|
|
21511
|
+
"type": "object",
|
|
21512
|
+
"properties": {
|
|
21513
|
+
"id": {
|
|
21514
|
+
"type": "string",
|
|
21515
|
+
"minLength": 1,
|
|
21516
|
+
"description": "Presentation configuration identifier."
|
|
21517
|
+
},
|
|
21518
|
+
"description": {
|
|
21519
|
+
"description": "Optional presentation configuration description.",
|
|
21520
|
+
"type": [
|
|
21521
|
+
"string",
|
|
21522
|
+
"null"
|
|
21523
|
+
]
|
|
21524
|
+
},
|
|
21525
|
+
"lifeTime": {
|
|
21526
|
+
"description": "Presentation request lifetime in seconds.",
|
|
21527
|
+
"type": "integer",
|
|
21528
|
+
"minimum": 1,
|
|
21529
|
+
"maximum": 9007199254740991
|
|
21530
|
+
},
|
|
21531
|
+
"skewSeconds": {
|
|
21532
|
+
"description": "Clock skew tolerance in seconds.",
|
|
21533
|
+
"type": "integer",
|
|
21534
|
+
"minimum": 0,
|
|
21535
|
+
"maximum": 9007199254740991
|
|
21536
|
+
},
|
|
21537
|
+
"statusCheckMode": {
|
|
21538
|
+
"description": "Revocation/status check mode.",
|
|
21539
|
+
"type": "string",
|
|
21540
|
+
"enum": [
|
|
21541
|
+
"strict",
|
|
21542
|
+
"best_effort",
|
|
21543
|
+
"disabled"
|
|
21544
|
+
]
|
|
21545
|
+
},
|
|
21546
|
+
"dcql_query": {
|
|
21547
|
+
"type": "object",
|
|
21548
|
+
"properties": {
|
|
21549
|
+
"credentials": {
|
|
21550
|
+
"minItems": 1,
|
|
21551
|
+
"type": "array",
|
|
21552
|
+
"items": {
|
|
21553
|
+
"oneOf": [
|
|
21554
|
+
{
|
|
21555
|
+
"type": "object",
|
|
21556
|
+
"properties": {
|
|
21557
|
+
"id": {
|
|
21558
|
+
"type": "string",
|
|
21559
|
+
"minLength": 1,
|
|
21560
|
+
"pattern": "^[A-Za-z0-9_-]+$",
|
|
21561
|
+
"description": "Credential query identifier."
|
|
21562
|
+
},
|
|
21563
|
+
"multiple": {
|
|
21564
|
+
"description": "Allow multiple matching credentials.",
|
|
21565
|
+
"type": "boolean"
|
|
21566
|
+
},
|
|
21567
|
+
"claim_sets": {
|
|
21568
|
+
"description": "Optional claim set constraints.",
|
|
21569
|
+
"type": "array",
|
|
21570
|
+
"items": {
|
|
21571
|
+
"type": "array",
|
|
21572
|
+
"items": {
|
|
21573
|
+
"type": "string"
|
|
21574
|
+
}
|
|
21575
|
+
}
|
|
21576
|
+
},
|
|
21577
|
+
"trusted_authorities": {
|
|
21578
|
+
"description": "Optional trusted authority constraints.",
|
|
21579
|
+
"type": "array",
|
|
21580
|
+
"items": {
|
|
21581
|
+
"oneOf": [
|
|
21582
|
+
{
|
|
21583
|
+
"type": "object",
|
|
21584
|
+
"properties": {
|
|
21585
|
+
"type": {
|
|
21586
|
+
"type": "string",
|
|
21587
|
+
"const": "etsi_tl",
|
|
21588
|
+
"description": "Trusted authority type discriminator for ETSI trust lists."
|
|
21589
|
+
},
|
|
21590
|
+
"values": {
|
|
21591
|
+
"type": "array",
|
|
21592
|
+
"items": {
|
|
21593
|
+
"type": "object",
|
|
21594
|
+
"properties": {
|
|
21595
|
+
"trustListId": {
|
|
21596
|
+
"description": "Optional trust list id reference.",
|
|
21597
|
+
"type": "string"
|
|
21598
|
+
},
|
|
21599
|
+
"url": {
|
|
21600
|
+
"description": "Optional trust list URL reference.",
|
|
21601
|
+
"anyOf": [
|
|
21602
|
+
{
|
|
21603
|
+
"type": "string",
|
|
21604
|
+
"format": "uri"
|
|
21605
|
+
},
|
|
21606
|
+
{
|
|
21607
|
+
"type": "string",
|
|
21608
|
+
"pattern": "^<TENANT_URL>(?:\\/.*)?$"
|
|
21609
|
+
}
|
|
21610
|
+
]
|
|
21611
|
+
},
|
|
21612
|
+
"verifierKey": {
|
|
21613
|
+
"description": "Optional verifier key material.",
|
|
21614
|
+
"type": "object",
|
|
21615
|
+
"propertyNames": {
|
|
21616
|
+
"type": "string"
|
|
21617
|
+
},
|
|
21618
|
+
"additionalProperties": {}
|
|
21619
|
+
},
|
|
21620
|
+
"verifierX509Der": {
|
|
21621
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
21622
|
+
"type": "string"
|
|
21623
|
+
}
|
|
21624
|
+
},
|
|
21625
|
+
"additionalProperties": false
|
|
21626
|
+
},
|
|
21627
|
+
"description": "Trust list references for ETSI TL verification."
|
|
21628
|
+
}
|
|
21629
|
+
},
|
|
21630
|
+
"required": [
|
|
21631
|
+
"type",
|
|
21632
|
+
"values"
|
|
21633
|
+
],
|
|
21634
|
+
"additionalProperties": false
|
|
21635
|
+
},
|
|
21636
|
+
{
|
|
21637
|
+
"type": "object",
|
|
21638
|
+
"properties": {
|
|
21639
|
+
"type": {
|
|
21640
|
+
"type": "string",
|
|
21641
|
+
"const": "openid_federation",
|
|
21642
|
+
"description": "Trusted authority type discriminator for OpenID Federation."
|
|
21643
|
+
},
|
|
21644
|
+
"values": {
|
|
21645
|
+
"type": "array",
|
|
21646
|
+
"items": {
|
|
21647
|
+
"type": "string"
|
|
21648
|
+
},
|
|
21649
|
+
"description": "OpenID Federation authority identifiers."
|
|
21650
|
+
}
|
|
21651
|
+
},
|
|
21652
|
+
"required": [
|
|
21653
|
+
"type",
|
|
21654
|
+
"values"
|
|
21655
|
+
],
|
|
21656
|
+
"additionalProperties": false
|
|
21657
|
+
}
|
|
21658
|
+
]
|
|
21659
|
+
}
|
|
21660
|
+
},
|
|
21661
|
+
"format": {
|
|
21662
|
+
"type": "string",
|
|
21663
|
+
"const": "dc+sd-jwt",
|
|
21664
|
+
"description": "Credential format discriminator."
|
|
21665
|
+
},
|
|
21666
|
+
"meta": {
|
|
21667
|
+
"type": "object",
|
|
21668
|
+
"properties": {
|
|
21669
|
+
"vct_values": {
|
|
21670
|
+
"minItems": 1,
|
|
21671
|
+
"type": "array",
|
|
21672
|
+
"items": {
|
|
21673
|
+
"type": "string"
|
|
21674
|
+
},
|
|
21675
|
+
"description": "Accepted VCT values."
|
|
21676
|
+
}
|
|
21677
|
+
},
|
|
21678
|
+
"required": [
|
|
21679
|
+
"vct_values"
|
|
21680
|
+
],
|
|
21681
|
+
"additionalProperties": false
|
|
21682
|
+
},
|
|
21683
|
+
"claims": {
|
|
21684
|
+
"description": "Optional claim-level constraints.",
|
|
21685
|
+
"type": "array",
|
|
21686
|
+
"items": {
|
|
21687
|
+
"type": "object",
|
|
21688
|
+
"properties": {
|
|
21689
|
+
"id": {
|
|
21690
|
+
"description": "Optional claim query id.",
|
|
21691
|
+
"type": "string"
|
|
21692
|
+
},
|
|
21693
|
+
"path": {
|
|
21694
|
+
"type": "array",
|
|
21695
|
+
"items": {
|
|
21696
|
+
"type": [
|
|
21697
|
+
"string",
|
|
21698
|
+
"number"
|
|
21699
|
+
]
|
|
21700
|
+
},
|
|
21701
|
+
"description": "Path to the claim value in presented credentials."
|
|
21702
|
+
},
|
|
21703
|
+
"values": {
|
|
21704
|
+
"description": "Optional allowed values for the claim. A disclosed value must equal one of them in type and value.",
|
|
21705
|
+
"minItems": 1,
|
|
21706
|
+
"type": "array",
|
|
21707
|
+
"items": {
|
|
21708
|
+
"anyOf": [
|
|
21709
|
+
{
|
|
21710
|
+
"type": "string"
|
|
21711
|
+
},
|
|
21712
|
+
{
|
|
21713
|
+
"type": "integer",
|
|
21714
|
+
"minimum": -9007199254740991,
|
|
21715
|
+
"maximum": 9007199254740991
|
|
21716
|
+
},
|
|
21717
|
+
{
|
|
21718
|
+
"type": "boolean"
|
|
21719
|
+
}
|
|
21720
|
+
]
|
|
21721
|
+
}
|
|
21722
|
+
}
|
|
21723
|
+
},
|
|
21724
|
+
"required": [
|
|
21725
|
+
"path"
|
|
21726
|
+
],
|
|
21727
|
+
"additionalProperties": false
|
|
21728
|
+
}
|
|
21729
|
+
}
|
|
21730
|
+
},
|
|
21731
|
+
"required": [
|
|
21732
|
+
"id",
|
|
21733
|
+
"format",
|
|
21734
|
+
"meta"
|
|
21735
|
+
],
|
|
21736
|
+
"additionalProperties": false
|
|
21737
|
+
},
|
|
21738
|
+
{
|
|
21739
|
+
"type": "object",
|
|
21740
|
+
"properties": {
|
|
21741
|
+
"id": {
|
|
21742
|
+
"type": "string",
|
|
21743
|
+
"minLength": 1,
|
|
21744
|
+
"pattern": "^[A-Za-z0-9_-]+$",
|
|
21745
|
+
"description": "Credential query identifier."
|
|
21746
|
+
},
|
|
21747
|
+
"multiple": {
|
|
21748
|
+
"description": "Allow multiple matching credentials.",
|
|
21749
|
+
"type": "boolean"
|
|
21750
|
+
},
|
|
21751
|
+
"claim_sets": {
|
|
21752
|
+
"description": "Optional claim set constraints.",
|
|
21753
|
+
"type": "array",
|
|
21754
|
+
"items": {
|
|
21755
|
+
"type": "array",
|
|
21756
|
+
"items": {
|
|
21757
|
+
"type": "string"
|
|
21758
|
+
}
|
|
21759
|
+
}
|
|
21760
|
+
},
|
|
21761
|
+
"trusted_authorities": {
|
|
21762
|
+
"description": "Optional trusted authority constraints.",
|
|
21763
|
+
"type": "array",
|
|
21764
|
+
"items": {
|
|
21765
|
+
"oneOf": [
|
|
21766
|
+
{
|
|
21767
|
+
"type": "object",
|
|
21768
|
+
"properties": {
|
|
21769
|
+
"type": {
|
|
21770
|
+
"type": "string",
|
|
21771
|
+
"const": "etsi_tl",
|
|
21772
|
+
"description": "Trusted authority type discriminator for ETSI trust lists."
|
|
21773
|
+
},
|
|
21774
|
+
"values": {
|
|
21775
|
+
"type": "array",
|
|
21776
|
+
"items": {
|
|
21777
|
+
"type": "object",
|
|
21778
|
+
"properties": {
|
|
21779
|
+
"trustListId": {
|
|
21780
|
+
"description": "Optional trust list id reference.",
|
|
21781
|
+
"type": "string"
|
|
21782
|
+
},
|
|
21783
|
+
"url": {
|
|
21784
|
+
"description": "Optional trust list URL reference.",
|
|
21785
|
+
"anyOf": [
|
|
21786
|
+
{
|
|
21787
|
+
"type": "string",
|
|
21788
|
+
"format": "uri"
|
|
21789
|
+
},
|
|
21790
|
+
{
|
|
21791
|
+
"type": "string",
|
|
21792
|
+
"pattern": "^<TENANT_URL>(?:\\/.*)?$"
|
|
21793
|
+
}
|
|
21794
|
+
]
|
|
21795
|
+
},
|
|
21796
|
+
"verifierKey": {
|
|
21797
|
+
"description": "Optional verifier key material.",
|
|
21798
|
+
"type": "object",
|
|
21799
|
+
"propertyNames": {
|
|
21800
|
+
"type": "string"
|
|
21801
|
+
},
|
|
21802
|
+
"additionalProperties": {}
|
|
21803
|
+
},
|
|
21804
|
+
"verifierX509Der": {
|
|
21805
|
+
"description": "Optional verifier certificate in DER/base64 form.",
|
|
21806
|
+
"type": "string"
|
|
21807
|
+
}
|
|
21808
|
+
},
|
|
21809
|
+
"additionalProperties": false
|
|
21810
|
+
},
|
|
21811
|
+
"description": "Trust list references for ETSI TL verification."
|
|
21812
|
+
}
|
|
21813
|
+
},
|
|
21814
|
+
"required": [
|
|
21815
|
+
"type",
|
|
21816
|
+
"values"
|
|
21817
|
+
],
|
|
21818
|
+
"additionalProperties": false
|
|
21819
|
+
},
|
|
21820
|
+
{
|
|
21821
|
+
"type": "object",
|
|
21822
|
+
"properties": {
|
|
21823
|
+
"type": {
|
|
21824
|
+
"type": "string",
|
|
21825
|
+
"const": "openid_federation",
|
|
21826
|
+
"description": "Trusted authority type discriminator for OpenID Federation."
|
|
21827
|
+
},
|
|
21828
|
+
"values": {
|
|
21829
|
+
"type": "array",
|
|
21830
|
+
"items": {
|
|
21831
|
+
"type": "string"
|
|
21832
|
+
},
|
|
21833
|
+
"description": "OpenID Federation authority identifiers."
|
|
21834
|
+
}
|
|
21835
|
+
},
|
|
21836
|
+
"required": [
|
|
21837
|
+
"type",
|
|
21838
|
+
"values"
|
|
21839
|
+
],
|
|
21840
|
+
"additionalProperties": false
|
|
21841
|
+
}
|
|
21842
|
+
]
|
|
21843
|
+
}
|
|
21844
|
+
},
|
|
21845
|
+
"format": {
|
|
21846
|
+
"type": "string",
|
|
21847
|
+
"const": "mso_mdoc",
|
|
21848
|
+
"description": "Credential format discriminator."
|
|
21849
|
+
},
|
|
21850
|
+
"meta": {
|
|
21851
|
+
"type": "object",
|
|
21852
|
+
"properties": {
|
|
21853
|
+
"doctype_value": {
|
|
21854
|
+
"type": "string",
|
|
21855
|
+
"minLength": 1,
|
|
21856
|
+
"description": "Expected mDoc doctype value."
|
|
21857
|
+
}
|
|
21858
|
+
},
|
|
21859
|
+
"required": [
|
|
21860
|
+
"doctype_value"
|
|
21861
|
+
],
|
|
21862
|
+
"additionalProperties": false
|
|
21863
|
+
},
|
|
21864
|
+
"claims": {
|
|
21865
|
+
"description": "Optional mDoc claim-level constraints.",
|
|
21866
|
+
"type": "array",
|
|
21867
|
+
"items": {
|
|
21868
|
+
"type": "object",
|
|
21869
|
+
"properties": {
|
|
21870
|
+
"id": {
|
|
21871
|
+
"description": "Optional claim query id.",
|
|
21872
|
+
"type": "string"
|
|
21873
|
+
},
|
|
21874
|
+
"path": {
|
|
21875
|
+
"type": "array",
|
|
21876
|
+
"items": {
|
|
21877
|
+
"type": [
|
|
21878
|
+
"string",
|
|
21879
|
+
"number"
|
|
21880
|
+
]
|
|
21881
|
+
},
|
|
21882
|
+
"description": "Path to the claim value in presented credentials."
|
|
21883
|
+
},
|
|
21884
|
+
"values": {
|
|
21885
|
+
"description": "Optional allowed values for the claim. A disclosed value must equal one of them in type and value.",
|
|
21886
|
+
"minItems": 1,
|
|
21887
|
+
"type": "array",
|
|
21888
|
+
"items": {
|
|
21889
|
+
"anyOf": [
|
|
21890
|
+
{
|
|
21891
|
+
"type": "string"
|
|
21892
|
+
},
|
|
21893
|
+
{
|
|
21894
|
+
"type": "integer",
|
|
21895
|
+
"minimum": -9007199254740991,
|
|
21896
|
+
"maximum": 9007199254740991
|
|
21897
|
+
},
|
|
21898
|
+
{
|
|
21899
|
+
"type": "boolean"
|
|
21900
|
+
}
|
|
21901
|
+
]
|
|
21902
|
+
}
|
|
21903
|
+
},
|
|
21904
|
+
"intent_to_retain": {
|
|
21905
|
+
"description": "Whether relying party intends to retain the claim.",
|
|
21906
|
+
"type": "boolean"
|
|
21907
|
+
}
|
|
21908
|
+
},
|
|
21909
|
+
"required": [
|
|
21910
|
+
"path"
|
|
21911
|
+
],
|
|
21912
|
+
"additionalProperties": false
|
|
21913
|
+
}
|
|
21914
|
+
}
|
|
21915
|
+
},
|
|
21916
|
+
"required": [
|
|
21917
|
+
"id",
|
|
21918
|
+
"format",
|
|
21919
|
+
"meta"
|
|
21920
|
+
],
|
|
21921
|
+
"additionalProperties": false
|
|
21922
|
+
}
|
|
21923
|
+
]
|
|
21924
|
+
},
|
|
21925
|
+
"description": "Credential queries requested by the verifier."
|
|
21926
|
+
},
|
|
21927
|
+
"credential_sets": {
|
|
21928
|
+
"description": "Optional higher-level credential set requirements.",
|
|
21929
|
+
"type": "array",
|
|
21930
|
+
"items": {
|
|
21931
|
+
"type": "object",
|
|
21932
|
+
"properties": {
|
|
21933
|
+
"options": {
|
|
21934
|
+
"minItems": 1,
|
|
21935
|
+
"type": "array",
|
|
21936
|
+
"items": {
|
|
21937
|
+
"minItems": 1,
|
|
21938
|
+
"type": "array",
|
|
21939
|
+
"items": {
|
|
21940
|
+
"type": "string"
|
|
21941
|
+
}
|
|
21942
|
+
},
|
|
21943
|
+
"description": "Alternative credential query id combinations."
|
|
21944
|
+
},
|
|
21945
|
+
"required": {
|
|
21946
|
+
"description": "Whether this credential set is mandatory.",
|
|
21947
|
+
"type": "boolean"
|
|
21948
|
+
}
|
|
21949
|
+
},
|
|
21950
|
+
"required": [
|
|
21951
|
+
"options"
|
|
21952
|
+
],
|
|
21953
|
+
"additionalProperties": false
|
|
21954
|
+
}
|
|
21955
|
+
}
|
|
21956
|
+
},
|
|
21957
|
+
"required": [
|
|
21958
|
+
"credentials"
|
|
21959
|
+
],
|
|
21960
|
+
"additionalProperties": false,
|
|
21961
|
+
"description": "DCQL query defining requested credentials and claims."
|
|
21962
|
+
},
|
|
21963
|
+
"transaction_data": {
|
|
21964
|
+
"description": "Optional transaction data descriptors.",
|
|
21965
|
+
"anyOf": [
|
|
21966
|
+
{
|
|
21967
|
+
"type": "array",
|
|
21968
|
+
"items": {
|
|
21969
|
+
"type": "object",
|
|
21970
|
+
"properties": {
|
|
21971
|
+
"type": {
|
|
21972
|
+
"type": "string",
|
|
21973
|
+
"description": "Transaction data type identifier."
|
|
21974
|
+
},
|
|
21975
|
+
"credential_ids": {
|
|
21976
|
+
"type": "array",
|
|
21977
|
+
"items": {
|
|
21978
|
+
"type": "string"
|
|
21979
|
+
},
|
|
21980
|
+
"description": "Credential query ids this transaction data applies to."
|
|
21981
|
+
},
|
|
21982
|
+
"payload": {
|
|
21983
|
+
"description": "Transaction details. Required for TS12 SCA transaction data."
|
|
21984
|
+
}
|
|
21985
|
+
},
|
|
21986
|
+
"required": [
|
|
21987
|
+
"type",
|
|
21988
|
+
"credential_ids"
|
|
21989
|
+
],
|
|
21990
|
+
"additionalProperties": {}
|
|
21991
|
+
}
|
|
21992
|
+
},
|
|
21993
|
+
{
|
|
21994
|
+
"type": "null"
|
|
21995
|
+
}
|
|
21996
|
+
]
|
|
21997
|
+
},
|
|
21998
|
+
"registration_cert": {
|
|
21999
|
+
"description": "Optional registration certificate request settings.",
|
|
22000
|
+
"anyOf": [
|
|
22001
|
+
{
|
|
22002
|
+
"type": "object",
|
|
22003
|
+
"properties": {
|
|
22004
|
+
"id": {
|
|
22005
|
+
"type": "string"
|
|
22006
|
+
},
|
|
22007
|
+
"body": {
|
|
22008
|
+
"type": "object",
|
|
22009
|
+
"properties": {
|
|
22010
|
+
"privacy_policy": {
|
|
22011
|
+
"type": "string"
|
|
22012
|
+
},
|
|
22013
|
+
"support_uri": {
|
|
22014
|
+
"type": "string"
|
|
22015
|
+
},
|
|
22016
|
+
"intermediary": {
|
|
22017
|
+
"type": "string"
|
|
22018
|
+
},
|
|
22019
|
+
"purpose": {
|
|
22020
|
+
"type": "array",
|
|
22021
|
+
"items": {
|
|
22022
|
+
"type": "object",
|
|
22023
|
+
"properties": {
|
|
22024
|
+
"lang": {
|
|
22025
|
+
"type": "string"
|
|
22026
|
+
},
|
|
22027
|
+
"content": {
|
|
22028
|
+
"type": "string"
|
|
22029
|
+
}
|
|
22030
|
+
},
|
|
22031
|
+
"required": [
|
|
22032
|
+
"lang",
|
|
22033
|
+
"content"
|
|
22034
|
+
],
|
|
22035
|
+
"additionalProperties": false
|
|
22036
|
+
}
|
|
22037
|
+
},
|
|
22038
|
+
"credentials": {
|
|
22039
|
+
"type": "array",
|
|
22040
|
+
"items": {
|
|
22041
|
+
"type": "object",
|
|
22042
|
+
"propertyNames": {
|
|
22043
|
+
"type": "string"
|
|
22044
|
+
},
|
|
22045
|
+
"additionalProperties": {}
|
|
22046
|
+
}
|
|
22047
|
+
},
|
|
22048
|
+
"provides_attestations": {
|
|
22049
|
+
"type": "array",
|
|
22050
|
+
"items": {
|
|
22051
|
+
"type": "string",
|
|
22052
|
+
"minLength": 1
|
|
22053
|
+
}
|
|
22054
|
+
}
|
|
22055
|
+
},
|
|
22056
|
+
"additionalProperties": false
|
|
22057
|
+
},
|
|
22058
|
+
"jwt": {
|
|
22059
|
+
"type": "string"
|
|
22060
|
+
}
|
|
22061
|
+
},
|
|
22062
|
+
"additionalProperties": false
|
|
22063
|
+
},
|
|
22064
|
+
{
|
|
22065
|
+
"type": "null"
|
|
22066
|
+
}
|
|
22067
|
+
]
|
|
22068
|
+
},
|
|
22069
|
+
"registrationCertImportJwt": {
|
|
22070
|
+
"description": "Optional imported registration certificate JWT.",
|
|
22071
|
+
"type": [
|
|
22072
|
+
"string",
|
|
22073
|
+
"null"
|
|
22074
|
+
]
|
|
22075
|
+
},
|
|
22076
|
+
"registrationCertImportId": {
|
|
22077
|
+
"description": "Optional registrar-side registration certificate id.",
|
|
22078
|
+
"type": [
|
|
22079
|
+
"string",
|
|
22080
|
+
"null"
|
|
22081
|
+
]
|
|
22082
|
+
},
|
|
22083
|
+
"registrationCertBodyPrivacyPolicy": {
|
|
22084
|
+
"description": "Optional registration certificate privacy policy URI.",
|
|
22085
|
+
"type": [
|
|
22086
|
+
"string",
|
|
22087
|
+
"null"
|
|
22088
|
+
]
|
|
22089
|
+
},
|
|
22090
|
+
"registrationCertBodySupportUri": {
|
|
22091
|
+
"description": "Optional registration certificate support URI.",
|
|
22092
|
+
"type": [
|
|
22093
|
+
"string",
|
|
22094
|
+
"null"
|
|
22095
|
+
]
|
|
22096
|
+
},
|
|
22097
|
+
"registrationCertBodyIntermediary": {
|
|
22098
|
+
"description": "Optional registration certificate intermediary.",
|
|
22099
|
+
"type": [
|
|
22100
|
+
"string",
|
|
22101
|
+
"null"
|
|
22102
|
+
]
|
|
22103
|
+
},
|
|
22104
|
+
"registrationCertBodyPurpose": {
|
|
22105
|
+
"description": "Optional registration certificate purpose entries.",
|
|
22106
|
+
"anyOf": [
|
|
22107
|
+
{
|
|
22108
|
+
"type": "array",
|
|
22109
|
+
"items": {
|
|
22110
|
+
"type": "object",
|
|
22111
|
+
"properties": {
|
|
22112
|
+
"lang": {
|
|
22113
|
+
"type": "string"
|
|
22114
|
+
},
|
|
22115
|
+
"content": {
|
|
22116
|
+
"type": "string"
|
|
22117
|
+
}
|
|
22118
|
+
},
|
|
22119
|
+
"additionalProperties": false
|
|
22120
|
+
}
|
|
22121
|
+
},
|
|
22122
|
+
{
|
|
22123
|
+
"type": "null"
|
|
22124
|
+
}
|
|
22125
|
+
]
|
|
22126
|
+
},
|
|
22127
|
+
"webhookEndpointId": {
|
|
22128
|
+
"description": "Optional webhook endpoint id for presentation callbacks.",
|
|
22129
|
+
"type": [
|
|
22130
|
+
"string",
|
|
22131
|
+
"null"
|
|
22132
|
+
]
|
|
22133
|
+
},
|
|
22134
|
+
"attached": {
|
|
22135
|
+
"description": "Optional attachments included with presentation requests.",
|
|
22136
|
+
"anyOf": [
|
|
22137
|
+
{
|
|
22138
|
+
"type": "array",
|
|
22139
|
+
"items": {
|
|
22140
|
+
"type": "object",
|
|
22141
|
+
"properties": {
|
|
22142
|
+
"format": {
|
|
22143
|
+
"type": "string",
|
|
22144
|
+
"description": "Attachment format identifier."
|
|
22145
|
+
},
|
|
22146
|
+
"data": {
|
|
22147
|
+
"description": "Attachment payload."
|
|
22148
|
+
},
|
|
22149
|
+
"credential_ids": {
|
|
22150
|
+
"description": "Optional credential query ids bound to this attachment.",
|
|
22151
|
+
"type": "array",
|
|
22152
|
+
"items": {
|
|
22153
|
+
"type": "string"
|
|
22154
|
+
}
|
|
22155
|
+
}
|
|
22156
|
+
},
|
|
22157
|
+
"required": [
|
|
22158
|
+
"format",
|
|
22159
|
+
"data"
|
|
22160
|
+
],
|
|
22161
|
+
"additionalProperties": false
|
|
22162
|
+
}
|
|
22163
|
+
},
|
|
22164
|
+
{
|
|
22165
|
+
"type": "null"
|
|
22166
|
+
}
|
|
22167
|
+
]
|
|
22168
|
+
},
|
|
22169
|
+
"redirectUri": {
|
|
22170
|
+
"description": "Optional redirect URI after presentation completion.",
|
|
22171
|
+
"type": [
|
|
22172
|
+
"string",
|
|
22173
|
+
"null"
|
|
22174
|
+
]
|
|
22175
|
+
},
|
|
22176
|
+
"accessKeyChainId": {
|
|
22177
|
+
"description": "Optional key chain id for access token/auth operations.",
|
|
22178
|
+
"type": [
|
|
22179
|
+
"string",
|
|
22180
|
+
"null"
|
|
22181
|
+
]
|
|
22182
|
+
},
|
|
22183
|
+
"readerAuth": {
|
|
22184
|
+
"description": "Whether reader authentication is required for mDoc requests.",
|
|
22185
|
+
"type": [
|
|
22186
|
+
"boolean",
|
|
22187
|
+
"null"
|
|
22188
|
+
]
|
|
22189
|
+
}
|
|
22190
|
+
},
|
|
22191
|
+
"required": [
|
|
22192
|
+
"id",
|
|
22193
|
+
"dcql_query"
|
|
22194
|
+
],
|
|
22195
|
+
"additionalProperties": false,
|
|
22196
|
+
"title": "PresentationConfigCreateDto"
|
|
22197
|
+
}
|
|
22198
|
+
}
|
|
22199
|
+
}
|
|
22200
|
+
];
|
|
22201
|
+
|
|
22202
|
+
// ../../packages/eudiplo-config-format/dist/config-validator.js
|
|
22203
|
+
var ajv = new import__.Ajv2020({
|
|
22204
|
+
allErrors: true,
|
|
22205
|
+
strict: false,
|
|
22206
|
+
validateFormats: false
|
|
22207
|
+
});
|
|
22208
|
+
for (const schema of CONFIG_SCHEMAS)
|
|
22209
|
+
ajv.addSchema(schema);
|
|
22210
|
+
function validateConfigDocument(document) {
|
|
22211
|
+
const file = serializeDocument(document);
|
|
22212
|
+
const validate = ajv.getSchema(file.$schema);
|
|
22213
|
+
if (!validate)
|
|
22214
|
+
throw new Error(`No bundled validator for ${file.$schema}`);
|
|
22215
|
+
const issues = [];
|
|
22216
|
+
if (!validate(file)) {
|
|
22217
|
+
for (const issue of validate.errors ?? [])
|
|
22218
|
+
issues.push({
|
|
22219
|
+
severity: "error",
|
|
22220
|
+
code: "CONFIG_SCHEMA_VALIDATION_FAILED",
|
|
22221
|
+
path: issue.instancePath || "/",
|
|
22222
|
+
message: issue.keyword === "additionalProperties" ? `Unknown property: ${String(issue.params.additionalProperty)}` : issue.message ?? "Invalid configuration",
|
|
22223
|
+
resource: { kind: document.kind, id: resourceId(document) }
|
|
22224
|
+
});
|
|
22225
|
+
}
|
|
22226
|
+
const id = document.kind === "Client" ? document.spec.clientId : document.spec.id;
|
|
22227
|
+
if (id !== void 0 && id !== resourceId(document))
|
|
22228
|
+
issues.push({
|
|
22229
|
+
severity: "error",
|
|
22230
|
+
code: "RESOURCE_ID_MISMATCH",
|
|
22231
|
+
path: document.kind === "Client" ? "/spec/clientId" : "/spec/id",
|
|
22232
|
+
message: "Resource identifier does not match metadata.id"
|
|
22233
|
+
});
|
|
22234
|
+
return issues;
|
|
22235
|
+
}
|
|
22236
|
+
|
|
22237
|
+
// src/commands/config/portability/migrations.ts
|
|
22238
|
+
function upgradeDocument(input) {
|
|
22239
|
+
const result = migrateDocument(input, validateConfigDocument);
|
|
22240
|
+
return { ...result, document: serializeDocument(result.document) };
|
|
22241
|
+
}
|
|
22242
|
+
|
|
22243
|
+
// src/commands/config/portability/upgrade.ts
|
|
22244
|
+
var codec = new ConfigBundleCodec();
|
|
22245
|
+
function parse3(text, path2) {
|
|
22246
|
+
try {
|
|
22247
|
+
return JSON.parse(text);
|
|
22248
|
+
} catch {
|
|
22249
|
+
throw new Error(`Invalid JSON in ${path2}`);
|
|
22250
|
+
}
|
|
22251
|
+
}
|
|
22252
|
+
function upgradeJson(input, file, context) {
|
|
22253
|
+
const bundle = Array.isArray(input?.documents);
|
|
22254
|
+
if (bundle) assertConfigBundle(input);
|
|
22255
|
+
const results = (bundle ? input.documents : [input]).map(
|
|
22256
|
+
(document) => upgradeDocument(document)
|
|
22257
|
+
);
|
|
22258
|
+
let blocked = false;
|
|
22259
|
+
for (const result of results) {
|
|
22260
|
+
for (const issue of result.issues) {
|
|
22261
|
+
context.stderr.write(
|
|
22262
|
+
`${file}${issue.path}: ${issue.severity} ${issue.code}: ${issue.message}
|
|
22263
|
+
`
|
|
22264
|
+
);
|
|
22265
|
+
if (issue.severity !== "warning") blocked = true;
|
|
22266
|
+
}
|
|
22267
|
+
for (const migration of result.migrations)
|
|
22268
|
+
context.stdout.write(`${file}: migration ${migration}
|
|
22269
|
+
`);
|
|
22270
|
+
}
|
|
22271
|
+
if (blocked) throw new Error(`${file}: upgrade blocked; no output written`);
|
|
22272
|
+
if (!bundle) return results[0].document;
|
|
22273
|
+
const documents = results.map(
|
|
22274
|
+
(result) => result.document
|
|
22275
|
+
);
|
|
22276
|
+
const resources = input.manifest.resources.map(
|
|
22277
|
+
(resource) => {
|
|
22278
|
+
const index = input.documents.findIndex(
|
|
22279
|
+
(candidate) => normalizeDocument(candidate).kind === resource.kind && resourceId(candidate) === resource.id
|
|
22280
|
+
);
|
|
22281
|
+
const document = documents[index];
|
|
22282
|
+
return {
|
|
22283
|
+
...resource,
|
|
22284
|
+
id: resourceId(document),
|
|
22285
|
+
$schema: document.$schema,
|
|
22286
|
+
sha256: createHash2("sha256").update(JSON.stringify(document)).digest("hex")
|
|
22287
|
+
};
|
|
22288
|
+
}
|
|
22289
|
+
);
|
|
22290
|
+
const output = {
|
|
22291
|
+
...input,
|
|
22292
|
+
manifest: { ...input.manifest, formatVersion: 2, resources },
|
|
22293
|
+
documents
|
|
22294
|
+
};
|
|
22295
|
+
assertConfigBundle(output);
|
|
22296
|
+
return output;
|
|
22297
|
+
}
|
|
22298
|
+
function report(input, output, file, parsed, context) {
|
|
22299
|
+
const changed = stableConfigJson(input) !== stableConfigJson(output);
|
|
22300
|
+
context.stdout.write(
|
|
22301
|
+
`${file}: ${changed ? "upgrade required" : "current"}
|
|
22302
|
+
`
|
|
22303
|
+
);
|
|
22304
|
+
if (parsed.flags.diff === true)
|
|
22305
|
+
for (const change of configChanges(input, output)) {
|
|
22306
|
+
context.stdout.write(
|
|
22307
|
+
` ${change.path}: ${JSON.stringify(change.before) ?? "(absent)"} -> ${JSON.stringify(change.after) ?? "(absent)"}
|
|
22308
|
+
`
|
|
22309
|
+
);
|
|
22310
|
+
}
|
|
22311
|
+
return changed;
|
|
22312
|
+
}
|
|
22313
|
+
function inferredKind(path2) {
|
|
22314
|
+
const normalized = path2.split(sep2).join("/");
|
|
22315
|
+
const match = TENANT_RESOURCE_REGISTRY.find(
|
|
22316
|
+
(entry) => entry.kind === "file" ? normalized === entry.file || normalized.endsWith(`/${entry.file}`) : normalized.endsWith(`/${entry.subfolder}/${basename2(path2)}`) || normalized === `${entry.subfolder}/${basename2(path2)}`
|
|
22317
|
+
);
|
|
22318
|
+
return CONFIG_RESOURCE_KINDS.find(
|
|
22319
|
+
(kind) => `${CONFIG_FORMATS[kind].file}.schema.json` === match?.schemaFile
|
|
22320
|
+
);
|
|
22321
|
+
}
|
|
22322
|
+
function wrapBare(kind, input, path2) {
|
|
22323
|
+
if (!input || typeof input !== "object" || Array.isArray(input))
|
|
22324
|
+
throw new Error(`${path2}: configuration must be an object`);
|
|
22325
|
+
const singleton = {
|
|
22326
|
+
Tenant: "tenant",
|
|
22327
|
+
KmsConfig: "kms",
|
|
22328
|
+
RegistrarConfig: "registrar",
|
|
22329
|
+
IssuanceConfig: "issuance"
|
|
22330
|
+
};
|
|
22331
|
+
const spec = structuredClone(input);
|
|
22332
|
+
if (kind === "KeyChain" && spec.key && !spec.keySource) {
|
|
22333
|
+
spec.keySource = { type: "private-jwk", jwk: spec.key };
|
|
22334
|
+
delete spec.key;
|
|
22335
|
+
}
|
|
22336
|
+
const id = String(
|
|
22337
|
+
singleton[kind] ?? spec.id ?? spec.clientId ?? basename2(path2, ".json")
|
|
22338
|
+
);
|
|
22339
|
+
if (!singleton[kind]) spec[kind === "Client" ? "clientId" : "id"] = id;
|
|
22340
|
+
return { $schema: schemaUrl(kind, 1), metadata: { generation: 1 }, spec };
|
|
22341
|
+
}
|
|
22342
|
+
async function folderFiles(path2) {
|
|
22343
|
+
const files = [];
|
|
22344
|
+
for (const entry of await readdir(path2, { withFileTypes: true })) {
|
|
22345
|
+
if (entry.name.startsWith(".")) continue;
|
|
22346
|
+
const file = join4(path2, entry.name);
|
|
22347
|
+
if (entry.isSymbolicLink())
|
|
22348
|
+
throw new Error(`Config folder contains a symbolic link: ${file}`);
|
|
22349
|
+
if (entry.isDirectory()) files.push(...await folderFiles(file));
|
|
22350
|
+
else if (entry.isFile()) files.push(file);
|
|
22351
|
+
}
|
|
22352
|
+
return files.sort();
|
|
22353
|
+
}
|
|
22354
|
+
async function upgradeFolder(source, parsed, context) {
|
|
22355
|
+
const outputs = /* @__PURE__ */ new Map();
|
|
22356
|
+
let changed = 0;
|
|
22357
|
+
for (const file of await folderFiles(source)) {
|
|
22358
|
+
if (extname(file) !== ".json" || relative2(source, file).split(sep2).includes("images"))
|
|
22359
|
+
continue;
|
|
22360
|
+
const input = parse3(await readFile4(file, "utf8"), file);
|
|
22361
|
+
const kind = inferredKind(relative2(source, file));
|
|
22362
|
+
if (!kind && !isConfigDocument(input)) continue;
|
|
22363
|
+
const candidate = isConfigDocument(input) ? input : wrapBare(kind, input, file);
|
|
22364
|
+
const output = upgradeJson(candidate, file, context);
|
|
22365
|
+
if (kind && normalizeDocument(output).kind !== kind)
|
|
22366
|
+
throw new Error(`${file}: expected ${kind} configuration`);
|
|
22367
|
+
if (report(input, output, relative2(source, file), parsed, context))
|
|
22368
|
+
changed++;
|
|
22369
|
+
outputs.set(
|
|
22370
|
+
relative2(source, file),
|
|
22371
|
+
`${JSON.stringify(output, null, 2)}
|
|
22372
|
+
`
|
|
22373
|
+
);
|
|
22374
|
+
}
|
|
22375
|
+
if (!outputs.size)
|
|
22376
|
+
throw new Error(`No configuration documents found in ${source}`);
|
|
22377
|
+
context.stdout.write(
|
|
22378
|
+
`${outputs.size - changed} current, ${changed} require upgrading
|
|
22379
|
+
`
|
|
22380
|
+
);
|
|
22381
|
+
if (parsed.flags.check === true) return changed ? 1 : 0;
|
|
22382
|
+
if (parsed.flags["dry-run"] === true) return 0;
|
|
22383
|
+
const destination = resolve3(
|
|
22384
|
+
context.cwd,
|
|
22385
|
+
readStringFlag(parsed.flags, "output") ?? `${source}.upgraded`
|
|
22386
|
+
);
|
|
22387
|
+
const overlap = (parent, child) => {
|
|
22388
|
+
const path2 = relative2(parent, child);
|
|
22389
|
+
return path2 === "" || !path2.startsWith(`..${sep2}`) && path2 !== "..";
|
|
22390
|
+
};
|
|
22391
|
+
if (overlap(source, destination) || overlap(destination, source))
|
|
22392
|
+
throw new Error(
|
|
22393
|
+
"Folder output must be separate from the source directory"
|
|
22394
|
+
);
|
|
22395
|
+
await lstat(destination).then(
|
|
22396
|
+
() => {
|
|
22397
|
+
throw new Error(`Output already exists: ${destination}`);
|
|
22398
|
+
},
|
|
22399
|
+
(error) => {
|
|
22400
|
+
if (error.code !== "ENOENT") throw error;
|
|
22401
|
+
}
|
|
22402
|
+
);
|
|
22403
|
+
await mkdir3(dirname3(destination), { recursive: true });
|
|
22404
|
+
const staging = await mkdtemp(
|
|
22405
|
+
join4(dirname3(destination), ".eudiplo-upgrade-")
|
|
22406
|
+
);
|
|
22407
|
+
try {
|
|
22408
|
+
await cp(source, staging, {
|
|
22409
|
+
recursive: true,
|
|
22410
|
+
filter: (path2) => path2 === source || !relative2(source, path2).split(sep2).some((part) => part.startsWith("."))
|
|
22411
|
+
});
|
|
22412
|
+
for (const [path2, contents] of outputs)
|
|
22413
|
+
await atomicWriteFile(join4(staging, path2), contents);
|
|
22414
|
+
await rename2(staging, destination);
|
|
22415
|
+
context.stdout.write(
|
|
22416
|
+
`Wrote upgraded configuration folder to ${destination}
|
|
22417
|
+
`
|
|
22418
|
+
);
|
|
22419
|
+
} finally {
|
|
22420
|
+
await rm(staging, { recursive: true, force: true });
|
|
22421
|
+
}
|
|
22422
|
+
return 0;
|
|
22423
|
+
}
|
|
20229
22424
|
async function upgradeFile(parsed, context) {
|
|
20230
22425
|
const name = parsed.positionals[0];
|
|
20231
22426
|
if (!name)
|
|
@@ -20568,14 +22763,11 @@ function createComposeEnv(options) {
|
|
|
20568
22763
|
`AUTH_CLIENT_ID=${escapeEnvValue(authClientId)}`,
|
|
20569
22764
|
`AUTH_CLIENT_SECRET=${escapeEnvValue(authClientSecret)}`
|
|
20570
22765
|
];
|
|
20571
|
-
lines.push(
|
|
20572
|
-
|
|
20573
|
-
|
|
20574
|
-
"",
|
|
20575
|
-
|
|
20576
|
-
"",
|
|
20577
|
-
...kmsEnv(kms)
|
|
20578
|
-
);
|
|
22766
|
+
lines.push("", ...databaseEnv(database), "", ...storageEnv(storage));
|
|
22767
|
+
const kmsLines = kmsEnv(kms);
|
|
22768
|
+
if (kmsLines.length > 0) {
|
|
22769
|
+
lines.push("", ...kmsLines);
|
|
22770
|
+
}
|
|
20579
22771
|
return `${lines.join("\n")}
|
|
20580
22772
|
`;
|
|
20581
22773
|
}
|
|
@@ -20638,13 +22830,9 @@ function storageEnv(storage) {
|
|
|
20638
22830
|
}
|
|
20639
22831
|
function kmsEnv(kms) {
|
|
20640
22832
|
if (kms === "db") {
|
|
20641
|
-
return [
|
|
22833
|
+
return [];
|
|
20642
22834
|
}
|
|
20643
|
-
return [
|
|
20644
|
-
"KM_TYPE=vault",
|
|
20645
|
-
"VAULT_ADDR=http://vault:8200",
|
|
20646
|
-
"VAULT_TOKEN=root"
|
|
20647
|
-
];
|
|
22835
|
+
return ["VAULT_ADDR=http://vault:8200", "VAULT_TOKEN=root"];
|
|
20648
22836
|
}
|
|
20649
22837
|
function randomSecret() {
|
|
20650
22838
|
return randomBytes(24).toString("base64url");
|
|
@@ -21031,7 +23219,10 @@ async function validateResourceFile(filePath, relativeFile, schemaFile, getValid
|
|
|
21031
23219
|
delete spec.key;
|
|
21032
23220
|
}
|
|
21033
23221
|
if (!CONFIG_SINGLETON_IDS[kind])
|
|
21034
|
-
spec[kind === "Client" ? "clientId" : "id"] ??= basename4(
|
|
23222
|
+
spec[kind === "Client" ? "clientId" : "id"] ??= basename4(
|
|
23223
|
+
relativeFile,
|
|
23224
|
+
".json"
|
|
23225
|
+
);
|
|
21035
23226
|
resolved = {
|
|
21036
23227
|
$schema: schemaUrl(kind),
|
|
21037
23228
|
metadata: { generation: 1 },
|
|
@@ -22726,7 +24917,7 @@ function createDeploymentCommands(context, setExitCode) {
|
|
|
22726
24917
|
// package.json
|
|
22727
24918
|
var package_default = {
|
|
22728
24919
|
name: "@eudiplo/cli",
|
|
22729
|
-
version: "8.1.0-main.
|
|
24920
|
+
version: "8.1.0-main.af23b1d",
|
|
22730
24921
|
description: "Deployment-aware command line tools for EUDIPLO",
|
|
22731
24922
|
private: false,
|
|
22732
24923
|
type: "module",
|
|
@@ -22746,8 +24937,10 @@ var package_default = {
|
|
|
22746
24937
|
"build:sea:bundle": "pnpm assets:sync && pnpm assets:check && esbuild src/index.ts --bundle --platform=node --format=esm --target=node22.12 --alias:jsonc-parser=jsonc-parser/lib/esm/main.js --outfile=dist-sea/index.js",
|
|
22747
24938
|
"build:sea": "node scripts/build-cli-sea.mjs",
|
|
22748
24939
|
dev: "tsx src/index.ts",
|
|
22749
|
-
test: "vitest run --project cli",
|
|
24940
|
+
test: "vitest run --root ../.. --project cli",
|
|
22750
24941
|
lint: "biome lint .",
|
|
24942
|
+
format: "biome format --write .",
|
|
24943
|
+
"format:check": "biome format .",
|
|
22751
24944
|
prepublishOnly: "pnpm build:publish"
|
|
22752
24945
|
},
|
|
22753
24946
|
keywords: [
|
|
@@ -22789,7 +24982,7 @@ var package_default = {
|
|
|
22789
24982
|
esbuild: "^0.28.2",
|
|
22790
24983
|
tsx: "^4.23.13",
|
|
22791
24984
|
typescript: "^7.0.2",
|
|
22792
|
-
vitest: "
|
|
24985
|
+
vitest: "5.0.2"
|
|
22793
24986
|
}
|
|
22794
24987
|
};
|
|
22795
24988
|
|
|
@@ -23056,7 +25249,7 @@ var apiReachabilityCheck = {
|
|
|
23056
25249
|
run: ({ baseUrl, context }) => requireBaseUrl(
|
|
23057
25250
|
"API reachability",
|
|
23058
25251
|
baseUrl,
|
|
23059
|
-
(url) => checkEndpoint("API reachability", url, "
|
|
25252
|
+
(url) => checkEndpoint("API reachability", url, "api/docs", context)
|
|
23060
25253
|
)
|
|
23061
25254
|
};
|
|
23062
25255
|
var healthEndpointCheck = {
|
|
@@ -23064,7 +25257,7 @@ var healthEndpointCheck = {
|
|
|
23064
25257
|
run: ({ baseUrl, context }) => requireBaseUrl(
|
|
23065
25258
|
"health endpoint",
|
|
23066
25259
|
baseUrl,
|
|
23067
|
-
(url) => checkEndpoint("health endpoint", url, "
|
|
25260
|
+
(url) => checkEndpoint("health endpoint", url, "health", context)
|
|
23068
25261
|
)
|
|
23069
25262
|
};
|
|
23070
25263
|
var tlsCertificateCheck = {
|
|
@@ -23104,7 +25297,7 @@ var clientConnectivityCheck = {
|
|
|
23104
25297
|
message: `${instance.clientUrl} is not a valid absolute URL`
|
|
23105
25298
|
};
|
|
23106
25299
|
}
|
|
23107
|
-
return checkEndpoint("client connectivity", clientUrl, "
|
|
25300
|
+
return checkEndpoint("client connectivity", clientUrl, "", context);
|
|
23108
25301
|
}
|
|
23109
25302
|
};
|
|
23110
25303
|
var versionCompatibilityCheck = {
|
|
@@ -23115,7 +25308,7 @@ var versionCompatibilityCheck = {
|
|
|
23115
25308
|
return authUnavailable("version compatibility", token);
|
|
23116
25309
|
}
|
|
23117
25310
|
const response = await fetchAuthenticated(
|
|
23118
|
-
new URL("version", withTrailingSlash(url)),
|
|
25311
|
+
new URL("api/version", withTrailingSlash(url)),
|
|
23119
25312
|
token.accessToken,
|
|
23120
25313
|
context
|
|
23121
25314
|
);
|
|
@@ -23124,7 +25317,7 @@ var versionCompatibilityCheck = {
|
|
|
23124
25317
|
return {
|
|
23125
25318
|
name: "version compatibility",
|
|
23126
25319
|
status: "skip",
|
|
23127
|
-
message: "This backend does not expose /version, so compatibility cannot be checked."
|
|
25320
|
+
message: "This backend does not expose /api/version, so compatibility cannot be checked."
|
|
23128
25321
|
};
|
|
23129
25322
|
}
|
|
23130
25323
|
return {
|
|
@@ -23152,7 +25345,10 @@ var kmsHealthCheck = {
|
|
|
23152
25345
|
return authUnavailable("KMS providers", token);
|
|
23153
25346
|
}
|
|
23154
25347
|
const response = await fetchAuthenticated(
|
|
23155
|
-
new URL(
|
|
25348
|
+
new URL(
|
|
25349
|
+
"api/key-chain/providers/health",
|
|
25350
|
+
withTrailingSlash(url)
|
|
25351
|
+
),
|
|
23156
25352
|
token.accessToken,
|
|
23157
25353
|
context
|
|
23158
25354
|
);
|
|
@@ -23262,7 +25458,7 @@ async function requireBaseUrl(name, baseUrl, run) {
|
|
|
23262
25458
|
return run(baseUrl);
|
|
23263
25459
|
}
|
|
23264
25460
|
async function checkEndpoint(name, baseUrl, path2, context) {
|
|
23265
|
-
const url = new URL(path2, baseUrl);
|
|
25461
|
+
const url = new URL(path2, withTrailingSlash(baseUrl));
|
|
23266
25462
|
try {
|
|
23267
25463
|
const response = await context.fetch(url, { method: "GET" });
|
|
23268
25464
|
if (response.ok) {
|
|
@@ -23743,7 +25939,9 @@ function runInstanceList(config, context) {
|
|
|
23743
25939
|
function runInstanceShow(config, parsed, context) {
|
|
23744
25940
|
const name = parsed.positionals[0] ?? config.defaultInstance;
|
|
23745
25941
|
if (!name) {
|
|
23746
|
-
throw new Error(
|
|
25942
|
+
throw new Error(
|
|
25943
|
+
"No instance selected. Specify a name or add an instance first."
|
|
25944
|
+
);
|
|
23747
25945
|
}
|
|
23748
25946
|
const instance = config.instances[name];
|
|
23749
25947
|
if (!instance) {
|
|
@@ -24134,7 +26332,7 @@ function parseVersion(tag) {
|
|
|
24134
26332
|
function compareVersions2(a, b) {
|
|
24135
26333
|
return a.major - b.major || a.minor - b.minor || a.patch - b.patch;
|
|
24136
26334
|
}
|
|
24137
|
-
var migrationBaseUrl = "https://docs.eudiplo.dev/
|
|
26335
|
+
var migrationBaseUrl = "https://docs.eudiplo.dev/upgrade";
|
|
24138
26336
|
function migrationNotes(from, to) {
|
|
24139
26337
|
const fromVersion = parseVersion(from);
|
|
24140
26338
|
const toVersion = parseVersion(to);
|
|
@@ -24380,7 +26578,7 @@ function createProgram(context, setExitCode) {
|
|
|
24380
26578
|
"Print the installed CLI version"
|
|
24381
26579
|
).helpCommand(true).addHelpText(
|
|
24382
26580
|
"afterAll",
|
|
24383
|
-
"\nFor more information, see https://docs.eudiplo.dev/
|
|
26581
|
+
"\nFor more information, see https://docs.eudiplo.dev/cookbooks/foundation"
|
|
24384
26582
|
);
|
|
24385
26583
|
program2.addCommand(createDemoCommand(context, setExitCode));
|
|
24386
26584
|
program2.addCommand(createInitCommand(context, setExitCode));
|