@eudiplo/cli 9.1.0-main.e4e29b5 → 9.1.0-main.ea0dcd8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/commands/completion/action.js +3 -1
  2. package/dist/commands/completion/action.js.map +1 -1
  3. package/dist/commands/config/portability/migrations.spec.js +4 -2
  4. package/dist/commands/config/portability/migrations.spec.js.map +1 -1
  5. package/dist/commands/config/portability/upgrade.d.ts.map +1 -1
  6. package/dist/commands/config/portability/upgrade.js +6 -2
  7. package/dist/commands/config/portability/upgrade.js.map +1 -1
  8. package/dist/commands/config/validate/action.d.ts.map +1 -1
  9. package/dist/commands/config/validate/action.js +2 -1
  10. package/dist/commands/config/validate/action.js.map +1 -1
  11. package/dist/commands/config/validate/registry.json +10 -0
  12. package/dist/commands/init/action.d.ts.map +1 -1
  13. package/dist/commands/init/action.js +1 -11
  14. package/dist/commands/init/action.js.map +1 -1
  15. package/dist/commands/instance/action.d.ts +2 -0
  16. package/dist/commands/instance/action.d.ts.map +1 -1
  17. package/dist/commands/instance/action.js +68 -12
  18. package/dist/commands/instance/action.js.map +1 -1
  19. package/dist/commands/instance/index.d.ts.map +1 -1
  20. package/dist/commands/instance/index.js +21 -3
  21. package/dist/commands/instance/index.js.map +1 -1
  22. package/dist/commands/open/action.d.ts.map +1 -1
  23. package/dist/commands/open/action.js +13 -2
  24. package/dist/commands/open/action.js.map +1 -1
  25. package/dist/commands/status/action.d.ts.map +1 -1
  26. package/dist/commands/status/action.js +2 -1
  27. package/dist/commands/status/action.js.map +1 -1
  28. package/dist/index.js +5291 -988
  29. package/dist/services/api-auth.d.ts.map +1 -1
  30. package/dist/services/api-auth.js +3 -2
  31. package/dist/services/api-auth.js.map +1 -1
  32. package/dist/services/browser.d.ts.map +1 -1
  33. package/dist/services/browser.js +3 -2
  34. package/dist/services/browser.js.map +1 -1
  35. package/dist/services/cli-config.d.ts +41 -1
  36. package/dist/services/cli-config.d.ts.map +1 -1
  37. package/dist/services/cli-config.js +217 -29
  38. package/dist/services/cli-config.js.map +1 -1
  39. package/dist/services/diagnostics.d.ts.map +1 -1
  40. package/dist/services/diagnostics.js +9 -8
  41. package/dist/services/diagnostics.js.map +1 -1
  42. package/dist/services/instance-selection.d.ts.map +1 -1
  43. package/dist/services/instance-selection.js +2 -5
  44. package/dist/services/instance-selection.js.map +1 -1
  45. package/dist/services/url.d.ts +21 -0
  46. package/dist/services/url.d.ts.map +1 -0
  47. package/dist/services/url.js +61 -0
  48. package/dist/services/url.js.map +1 -0
  49. package/package.json +4 -3
  50. package/templates/demo-config/clients/presentation-test.json +1 -1
  51. package/templates/demo-config/clients/test.json +6 -2
  52. package/templates/demo-config/key-chains/attestation.json +2 -1
  53. package/templates/demo-config/key-chains/status-list.json +2 -1
  54. package/templates/docker-compose.yml +2 -2
  55. package/templates/schemas/ClientConfigFile.schema.json +134 -1
  56. package/templates/schemas/CreateClientDto.schema.json +5 -1
  57. package/templates/schemas/CreateFederationTrustAnchorDto.schema.json +82 -0
  58. package/templates/schemas/CreateRegistrarConfigDto.schema.json +29 -0
  59. package/templates/schemas/CreateTenantDto.schema.json +5 -1
  60. package/templates/schemas/FederationTrustAnchorConfigFile.schema.json +60 -0
  61. package/templates/schemas/IssuanceConfig.schema.json +120 -2
  62. package/templates/schemas/IssuanceConfigFile.schema.json +1434 -1
  63. package/templates/schemas/KeyChainConfigFile.schema.json +505 -119
  64. package/templates/schemas/KeyChainCreateDto.schema.json +11 -1
  65. package/templates/schemas/KeyChainImportDto.schema.json +9 -0
  66. package/templates/schemas/KmsConfigDto.schema.json +186 -0
  67. package/templates/schemas/KmsConfigFile.schema.json +1026 -1
  68. package/templates/schemas/RegistrarConfigFile.schema.json +101 -1
  69. package/templates/schemas/RotationPolicyCreateDto.schema.json +1 -1
  70. package/templates/schemas/TenantConfigFile.schema.json +4 -129
  71. package/templates/schemas/UpdateClientDto.schema.json +5 -1
  72. package/templates/schemas/UpdateFederationTrustAnchorDto.schema.json +70 -0
  73. package/templates/schemas/UpdateStatusListConfigDto.schema.json +5 -5
  74. package/templates/schemas.manifest.json +3 -0
@@ -9,7 +9,7 @@
9
9
  "properties": {
10
10
  "$schema": {
11
11
  "type": "string",
12
- "const": "https://eudiplo.dev/schemas/v1/KmsConfigFile.schema.json"
12
+ "const": "https://eudiplo.dev/schemas/v2/KmsConfigFile.schema.json"
13
13
  },
14
14
  "metadata": {
15
15
  "type": "object",
@@ -39,6 +39,1031 @@
39
39
  "spec"
40
40
  ],
41
41
  "additionalProperties": false
42
+ },
43
+ {
44
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
45
+ "$id": "https://eudiplo.dev/schemas/v1/KmsConfigFile.schema.json",
46
+ "title": "KmsConfigFile",
47
+ "type": "object",
48
+ "properties": {
49
+ "$schema": {
50
+ "type": "string",
51
+ "const": "https://eudiplo.dev/schemas/v1/KmsConfigFile.schema.json"
52
+ },
53
+ "metadata": {
54
+ "type": "object",
55
+ "properties": {
56
+ "generation": {
57
+ "type": "integer",
58
+ "minimum": 1,
59
+ "description": "Monotonically increasing configuration generation."
60
+ },
61
+ "ownership": {
62
+ "type": "string",
63
+ "enum": [
64
+ "unmanaged",
65
+ "file-managed"
66
+ ],
67
+ "description": "Requested ownership recorded when the document is applied."
68
+ }
69
+ },
70
+ "additionalProperties": false
71
+ },
72
+ "spec": {
73
+ "$ref": "#/$defs/KmsConfigDto"
74
+ }
75
+ },
76
+ "required": [
77
+ "$schema",
78
+ "spec"
79
+ ],
80
+ "additionalProperties": false,
81
+ "$defs": {
82
+ "KmsConfigDto": {
83
+ "type": "object",
84
+ "properties": {
85
+ "defaultProvider": {
86
+ "description": "ID of the default KMS provider. Defaults to \"db\" if not set.",
87
+ "examples": [
88
+ "main-vault"
89
+ ],
90
+ "anyOf": [
91
+ {
92
+ "type": "string",
93
+ "minLength": 1
94
+ },
95
+ {
96
+ "type": "string",
97
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
98
+ }
99
+ ]
100
+ },
101
+ "providers": {
102
+ "type": "array",
103
+ "items": {
104
+ "oneOf": [
105
+ {
106
+ "type": "object",
107
+ "properties": {
108
+ "id": {
109
+ "anyOf": [
110
+ {
111
+ "type": "string",
112
+ "minLength": 1
113
+ },
114
+ {
115
+ "type": "string",
116
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
117
+ }
118
+ ],
119
+ "description": "Unique identifier for this provider instance. Used when generating keys to specify which provider to use.",
120
+ "examples": [
121
+ "main-vault"
122
+ ]
123
+ },
124
+ "type": {
125
+ "type": "string",
126
+ "const": "db",
127
+ "description": "Type of the KMS provider.",
128
+ "examples": [
129
+ "db"
130
+ ]
131
+ },
132
+ "description": {
133
+ "description": "Human-readable description of this provider instance.",
134
+ "examples": [
135
+ "Production HashiCorp Vault for signing keys"
136
+ ],
137
+ "anyOf": [
138
+ {
139
+ "type": "string",
140
+ "minLength": 1
141
+ },
142
+ {
143
+ "type": "string",
144
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
145
+ }
146
+ ]
147
+ }
148
+ },
149
+ "required": [
150
+ "id",
151
+ "type"
152
+ ],
153
+ "additionalProperties": false
154
+ },
155
+ {
156
+ "type": "object",
157
+ "properties": {
158
+ "id": {
159
+ "anyOf": [
160
+ {
161
+ "type": "string",
162
+ "minLength": 1
163
+ },
164
+ {
165
+ "type": "string",
166
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
167
+ }
168
+ ],
169
+ "description": "Unique identifier for this provider instance. Used when generating keys to specify which provider to use.",
170
+ "examples": [
171
+ "main-vault"
172
+ ]
173
+ },
174
+ "type": {
175
+ "type": "string",
176
+ "const": "vault",
177
+ "description": "Type of the KMS provider.",
178
+ "examples": [
179
+ "vault"
180
+ ]
181
+ },
182
+ "description": {
183
+ "description": "Human-readable description of this provider instance.",
184
+ "examples": [
185
+ "Production HashiCorp Vault for signing keys"
186
+ ],
187
+ "anyOf": [
188
+ {
189
+ "type": "string",
190
+ "minLength": 1
191
+ },
192
+ {
193
+ "type": "string",
194
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
195
+ }
196
+ ]
197
+ },
198
+ "vaultUrl": {
199
+ "anyOf": [
200
+ {
201
+ "type": "string",
202
+ "format": "uri"
203
+ },
204
+ {
205
+ "type": "string",
206
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
207
+ }
208
+ ],
209
+ "description": "URL of the HashiCorp Vault instance. Supports ${ENV_VAR} placeholders.",
210
+ "examples": [
211
+ "${VAULT_URL}"
212
+ ]
213
+ },
214
+ "vaultToken": {
215
+ "anyOf": [
216
+ {
217
+ "type": "string",
218
+ "minLength": 1
219
+ },
220
+ {
221
+ "type": "string",
222
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
223
+ }
224
+ ],
225
+ "description": "Authentication token for HashiCorp Vault. Supports ${ENV_VAR} placeholders.",
226
+ "examples": [
227
+ "${VAULT_TOKEN}"
228
+ ]
229
+ }
230
+ },
231
+ "required": [
232
+ "id",
233
+ "type",
234
+ "vaultUrl",
235
+ "vaultToken"
236
+ ],
237
+ "additionalProperties": false
238
+ },
239
+ {
240
+ "type": "object",
241
+ "properties": {
242
+ "id": {
243
+ "anyOf": [
244
+ {
245
+ "type": "string",
246
+ "minLength": 1
247
+ },
248
+ {
249
+ "type": "string",
250
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
251
+ }
252
+ ],
253
+ "description": "Unique identifier for this provider instance. Used when generating keys to specify which provider to use.",
254
+ "examples": [
255
+ "main-vault"
256
+ ]
257
+ },
258
+ "type": {
259
+ "type": "string",
260
+ "const": "aws-kms",
261
+ "description": "Type of the KMS provider.",
262
+ "examples": [
263
+ "aws-kms"
264
+ ]
265
+ },
266
+ "description": {
267
+ "description": "Human-readable description of this provider instance.",
268
+ "examples": [
269
+ "Production HashiCorp Vault for signing keys"
270
+ ],
271
+ "anyOf": [
272
+ {
273
+ "type": "string",
274
+ "minLength": 1
275
+ },
276
+ {
277
+ "type": "string",
278
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
279
+ }
280
+ ]
281
+ },
282
+ "region": {
283
+ "anyOf": [
284
+ {
285
+ "type": "string",
286
+ "minLength": 1
287
+ },
288
+ {
289
+ "type": "string",
290
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
291
+ }
292
+ ],
293
+ "description": "AWS region for KMS. Supports ${ENV_VAR} placeholders.",
294
+ "examples": [
295
+ "${AWS_REGION}"
296
+ ]
297
+ },
298
+ "accessKeyId": {
299
+ "description": "AWS access key ID. Optional — uses SDK credential chain if not provided. Supports ${ENV_VAR} placeholders.",
300
+ "examples": [
301
+ "${AWS_ACCESS_KEY_ID}"
302
+ ],
303
+ "anyOf": [
304
+ {
305
+ "type": "string",
306
+ "minLength": 1
307
+ },
308
+ {
309
+ "type": "string",
310
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
311
+ }
312
+ ]
313
+ },
314
+ "secretAccessKey": {
315
+ "description": "AWS secret access key. Optional — uses SDK credential chain if not provided. Supports ${ENV_VAR} placeholders.",
316
+ "examples": [
317
+ "${AWS_SECRET_ACCESS_KEY}"
318
+ ],
319
+ "anyOf": [
320
+ {
321
+ "type": "string",
322
+ "minLength": 1
323
+ },
324
+ {
325
+ "type": "string",
326
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
327
+ }
328
+ ]
329
+ }
330
+ },
331
+ "required": [
332
+ "id",
333
+ "type",
334
+ "region"
335
+ ],
336
+ "additionalProperties": false
337
+ },
338
+ {
339
+ "type": "object",
340
+ "properties": {
341
+ "id": {
342
+ "anyOf": [
343
+ {
344
+ "type": "string",
345
+ "minLength": 1
346
+ },
347
+ {
348
+ "type": "string",
349
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
350
+ }
351
+ ],
352
+ "description": "Unique identifier for this provider instance. Used when generating keys to specify which provider to use.",
353
+ "examples": [
354
+ "main-vault"
355
+ ]
356
+ },
357
+ "type": {
358
+ "type": "string",
359
+ "const": "pkcs11",
360
+ "description": "Type of the KMS provider.",
361
+ "examples": [
362
+ "pkcs11"
363
+ ]
364
+ },
365
+ "description": {
366
+ "description": "Human-readable description of this provider instance.",
367
+ "examples": [
368
+ "Production HashiCorp Vault for signing keys"
369
+ ],
370
+ "anyOf": [
371
+ {
372
+ "type": "string",
373
+ "minLength": 1
374
+ },
375
+ {
376
+ "type": "string",
377
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
378
+ }
379
+ ]
380
+ },
381
+ "library": {
382
+ "anyOf": [
383
+ {
384
+ "type": "string",
385
+ "minLength": 1
386
+ },
387
+ {
388
+ "type": "string",
389
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
390
+ }
391
+ ],
392
+ "description": "Absolute path to the PKCS#11 module library (.so/.dll/.dylib). Supports ${ENV_VAR} placeholders.",
393
+ "examples": [
394
+ "${PKCS11_LIBRARY}"
395
+ ]
396
+ },
397
+ "slot": {
398
+ "description": "Slot selection. Either the numeric slot index (as a string for ENV interpolation, or a number) or the token label. Supports ${ENV_VAR} placeholders.",
399
+ "examples": [
400
+ "${PKCS11_SLOT}"
401
+ ],
402
+ "type": [
403
+ "number",
404
+ "string"
405
+ ]
406
+ },
407
+ "pin": {
408
+ "anyOf": [
409
+ {
410
+ "type": "string",
411
+ "minLength": 1
412
+ },
413
+ {
414
+ "type": "string",
415
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
416
+ }
417
+ ],
418
+ "description": "User PIN used for C_Login. Supports ${ENV_VAR} placeholders.",
419
+ "examples": [
420
+ "${PKCS11_PIN}"
421
+ ]
422
+ },
423
+ "readOnly": {
424
+ "description": "Open the PKCS#11 session in read-only mode. Defaults to false.",
425
+ "examples": [
426
+ false
427
+ ],
428
+ "type": "boolean"
429
+ }
430
+ },
431
+ "required": [
432
+ "id",
433
+ "type",
434
+ "library",
435
+ "slot",
436
+ "pin"
437
+ ],
438
+ "additionalProperties": false
439
+ },
440
+ {
441
+ "type": "object",
442
+ "properties": {
443
+ "id": {
444
+ "anyOf": [
445
+ {
446
+ "type": "string",
447
+ "minLength": 1
448
+ },
449
+ {
450
+ "type": "string",
451
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
452
+ }
453
+ ],
454
+ "description": "Unique identifier for this provider instance. Used when generating keys to specify which provider to use.",
455
+ "examples": [
456
+ "main-vault"
457
+ ]
458
+ },
459
+ "type": {
460
+ "type": "string",
461
+ "const": "http",
462
+ "description": "Type of the KMS provider.",
463
+ "examples": [
464
+ "http"
465
+ ]
466
+ },
467
+ "description": {
468
+ "description": "Human-readable description of this provider instance.",
469
+ "examples": [
470
+ "Production HashiCorp Vault for signing keys"
471
+ ],
472
+ "anyOf": [
473
+ {
474
+ "type": "string",
475
+ "minLength": 1
476
+ },
477
+ {
478
+ "type": "string",
479
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
480
+ }
481
+ ]
482
+ },
483
+ "baseUrl": {
484
+ "anyOf": [
485
+ {
486
+ "type": "string",
487
+ "format": "uri"
488
+ },
489
+ {
490
+ "type": "string",
491
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
492
+ }
493
+ ],
494
+ "description": "Base URL of the remote KMS microservice (no trailing slash). Supports ${ENV_VAR} placeholders.",
495
+ "examples": [
496
+ "${KMS_SERVICE_URL}"
497
+ ]
498
+ },
499
+ "auth": {
500
+ "description": "Authentication method for the remote KMS service. Supports bearer token, OAuth 2.0 client credentials, and mutual TLS. Omit (or set type to \"none\") for unauthenticated services.",
501
+ "oneOf": [
502
+ {
503
+ "type": "object",
504
+ "properties": {
505
+ "type": {
506
+ "type": "string",
507
+ "const": "none",
508
+ "description": "No authentication — suitable for services on a trusted private network.",
509
+ "examples": [
510
+ "none"
511
+ ]
512
+ }
513
+ },
514
+ "required": [
515
+ "type"
516
+ ],
517
+ "additionalProperties": false
518
+ },
519
+ {
520
+ "type": "object",
521
+ "properties": {
522
+ "type": {
523
+ "type": "string",
524
+ "const": "bearer",
525
+ "description": "Static Bearer token sent as Authorization: Bearer <token>.",
526
+ "examples": [
527
+ "bearer"
528
+ ]
529
+ },
530
+ "token": {
531
+ "anyOf": [
532
+ {
533
+ "type": "string",
534
+ "minLength": 1
535
+ },
536
+ {
537
+ "type": "string",
538
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
539
+ }
540
+ ],
541
+ "description": "Bearer token value. Supports ${ENV_VAR} placeholders.",
542
+ "examples": [
543
+ "${KMS_API_KEY}"
544
+ ]
545
+ }
546
+ },
547
+ "required": [
548
+ "type",
549
+ "token"
550
+ ],
551
+ "additionalProperties": false
552
+ },
553
+ {
554
+ "type": "object",
555
+ "properties": {
556
+ "type": {
557
+ "type": "string",
558
+ "const": "oauth2-client-credentials",
559
+ "description": "OAuth 2.0 Client Credentials — EUDIPLO fetches and caches short-lived tokens.",
560
+ "examples": [
561
+ "oauth2-client-credentials"
562
+ ]
563
+ },
564
+ "tokenUrl": {
565
+ "anyOf": [
566
+ {
567
+ "type": "string",
568
+ "format": "uri"
569
+ },
570
+ {
571
+ "type": "string",
572
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
573
+ }
574
+ ],
575
+ "description": "Token endpoint URL (e.g. Keycloak, Entra ID). Supports ${ENV_VAR} placeholders.",
576
+ "examples": [
577
+ "${IAM_TOKEN_URL}"
578
+ ]
579
+ },
580
+ "clientId": {
581
+ "anyOf": [
582
+ {
583
+ "type": "string",
584
+ "minLength": 1
585
+ },
586
+ {
587
+ "type": "string",
588
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
589
+ }
590
+ ],
591
+ "description": "OAuth 2.0 client ID. Supports ${ENV_VAR} placeholders.",
592
+ "examples": [
593
+ "${KMS_CLIENT_ID}"
594
+ ]
595
+ },
596
+ "clientSecret": {
597
+ "anyOf": [
598
+ {
599
+ "type": "string",
600
+ "minLength": 1
601
+ },
602
+ {
603
+ "type": "string",
604
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
605
+ }
606
+ ],
607
+ "description": "OAuth 2.0 client secret. Supports ${ENV_VAR} placeholders.",
608
+ "examples": [
609
+ "${KMS_CLIENT_SECRET}"
610
+ ]
611
+ },
612
+ "scope": {
613
+ "description": "Space-separated list of OAuth 2.0 scopes to request. Optional.",
614
+ "examples": [
615
+ "kms:sign kms:admin"
616
+ ],
617
+ "anyOf": [
618
+ {
619
+ "type": "string",
620
+ "minLength": 1
621
+ },
622
+ {
623
+ "type": "string",
624
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
625
+ }
626
+ ]
627
+ }
628
+ },
629
+ "required": [
630
+ "type",
631
+ "tokenUrl",
632
+ "clientId",
633
+ "clientSecret"
634
+ ],
635
+ "additionalProperties": false
636
+ },
637
+ {
638
+ "type": "object",
639
+ "properties": {
640
+ "type": {
641
+ "type": "string",
642
+ "const": "mtls",
643
+ "description": "Mutual TLS — EUDIPLO presents a client certificate on every connection.",
644
+ "examples": [
645
+ "mtls"
646
+ ]
647
+ },
648
+ "certFile": {
649
+ "anyOf": [
650
+ {
651
+ "type": "string",
652
+ "minLength": 1
653
+ },
654
+ {
655
+ "type": "string",
656
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
657
+ }
658
+ ],
659
+ "description": "Absolute path to the PEM-encoded client certificate file. Supports ${ENV_VAR} placeholders.",
660
+ "examples": [
661
+ "/etc/certs/eudiplo.crt"
662
+ ]
663
+ },
664
+ "keyFile": {
665
+ "anyOf": [
666
+ {
667
+ "type": "string",
668
+ "minLength": 1
669
+ },
670
+ {
671
+ "type": "string",
672
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
673
+ }
674
+ ],
675
+ "description": "Absolute path to the PEM-encoded private key file for the client certificate. Supports ${ENV_VAR} placeholders.",
676
+ "examples": [
677
+ "/etc/certs/eudiplo.key"
678
+ ]
679
+ },
680
+ "caFile": {
681
+ "description": "Absolute path to the PEM-encoded CA bundle to trust for the remote server's certificate. Omit to use the system CA store.",
682
+ "examples": [
683
+ "/etc/certs/ca.crt"
684
+ ],
685
+ "anyOf": [
686
+ {
687
+ "type": "string",
688
+ "minLength": 1
689
+ },
690
+ {
691
+ "type": "string",
692
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
693
+ }
694
+ ]
695
+ }
696
+ },
697
+ "required": [
698
+ "type",
699
+ "certFile",
700
+ "keyFile"
701
+ ],
702
+ "additionalProperties": false
703
+ }
704
+ ]
705
+ },
706
+ "keysPath": {
707
+ "description": "Path prefix for key endpoints on the remote service. Defaults to /keys.",
708
+ "examples": [
709
+ "/v1/keys"
710
+ ],
711
+ "anyOf": [
712
+ {
713
+ "type": "string",
714
+ "minLength": 1
715
+ },
716
+ {
717
+ "type": "string",
718
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
719
+ }
720
+ ]
721
+ },
722
+ "healthPath": {
723
+ "description": "Path for the health check endpoint on the remote service. Defaults to /health.",
724
+ "examples": [
725
+ "/health"
726
+ ],
727
+ "anyOf": [
728
+ {
729
+ "type": "string",
730
+ "minLength": 1
731
+ },
732
+ {
733
+ "type": "string",
734
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
735
+ }
736
+ ]
737
+ },
738
+ "canImport": {
739
+ "description": "Whether the remote service supports key import via POST {keysPath}/{kid}/import. Defaults to false.",
740
+ "examples": [
741
+ false
742
+ ],
743
+ "type": "boolean"
744
+ }
745
+ },
746
+ "required": [
747
+ "id",
748
+ "type",
749
+ "baseUrl"
750
+ ],
751
+ "additionalProperties": false
752
+ },
753
+ {
754
+ "type": "object",
755
+ "properties": {
756
+ "id": {
757
+ "anyOf": [
758
+ {
759
+ "type": "string",
760
+ "minLength": 1
761
+ },
762
+ {
763
+ "type": "string",
764
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
765
+ }
766
+ ],
767
+ "description": "Unique identifier for this provider instance. Used when generating keys to specify which provider to use.",
768
+ "examples": [
769
+ "main-vault"
770
+ ]
771
+ },
772
+ "type": {
773
+ "type": "string",
774
+ "const": "csc",
775
+ "description": "Type of the KMS provider.",
776
+ "examples": [
777
+ "csc"
778
+ ]
779
+ },
780
+ "description": {
781
+ "description": "Human-readable description of this provider instance.",
782
+ "examples": [
783
+ "Production HashiCorp Vault for signing keys"
784
+ ],
785
+ "anyOf": [
786
+ {
787
+ "type": "string",
788
+ "minLength": 1
789
+ },
790
+ {
791
+ "type": "string",
792
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
793
+ }
794
+ ]
795
+ },
796
+ "baseUrl": {
797
+ "anyOf": [
798
+ {
799
+ "type": "string",
800
+ "format": "uri"
801
+ },
802
+ {
803
+ "type": "string",
804
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
805
+ }
806
+ ],
807
+ "description": "Base URL of the CSC service (without trailing slash). Supports ${ENV_VAR} placeholders.",
808
+ "examples": [
809
+ "${CSC_URL}"
810
+ ]
811
+ },
812
+ "tokenUrl": {
813
+ "anyOf": [
814
+ {
815
+ "type": "string",
816
+ "format": "uri"
817
+ },
818
+ {
819
+ "type": "string",
820
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
821
+ }
822
+ ],
823
+ "description": "OAuth2 token endpoint URL for client-credentials flow. Supports ${ENV_VAR} placeholders.",
824
+ "examples": [
825
+ "${CSC_TOKEN_URL}"
826
+ ]
827
+ },
828
+ "clientId": {
829
+ "anyOf": [
830
+ {
831
+ "type": "string",
832
+ "minLength": 1
833
+ },
834
+ {
835
+ "type": "string",
836
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
837
+ }
838
+ ],
839
+ "description": "OAuth2 client ID. Supports ${ENV_VAR} placeholders.",
840
+ "examples": [
841
+ "${CSC_CLIENT_ID}"
842
+ ]
843
+ },
844
+ "clientSecret": {
845
+ "anyOf": [
846
+ {
847
+ "type": "string",
848
+ "minLength": 1
849
+ },
850
+ {
851
+ "type": "string",
852
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
853
+ }
854
+ ],
855
+ "description": "OAuth2 client secret. Supports ${ENV_VAR} placeholders.",
856
+ "examples": [
857
+ "${CSC_CLIENT_SECRET}"
858
+ ]
859
+ },
860
+ "scope": {
861
+ "description": "OAuth2 scope to request during token acquisition.",
862
+ "examples": [
863
+ "service"
864
+ ],
865
+ "anyOf": [
866
+ {
867
+ "type": "string",
868
+ "minLength": 1
869
+ },
870
+ {
871
+ "type": "string",
872
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
873
+ }
874
+ ]
875
+ },
876
+ "credentialId": {
877
+ "description": "Default CSC credential ID. If omitted, the adapter calls credentials/list and picks the first entry.",
878
+ "examples": [
879
+ "[INTESIQCSEALEC]_SEAL_351_SIGN_1781018892758"
880
+ ],
881
+ "anyOf": [
882
+ {
883
+ "type": "string",
884
+ "minLength": 1
885
+ },
886
+ {
887
+ "type": "string",
888
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
889
+ }
890
+ ]
891
+ },
892
+ "userId": {
893
+ "description": "Optional CSC user ID used in credentials/list requests.",
894
+ "examples": [
895
+ "eudiplo_user"
896
+ ],
897
+ "anyOf": [
898
+ {
899
+ "type": "string",
900
+ "minLength": 1
901
+ },
902
+ {
903
+ "type": "string",
904
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
905
+ }
906
+ ]
907
+ },
908
+ "apiPath": {
909
+ "description": "CSC API path prefix appended to baseUrl. Defaults to /csc/v2.",
910
+ "examples": [
911
+ "/csc/v2"
912
+ ],
913
+ "anyOf": [
914
+ {
915
+ "type": "string",
916
+ "minLength": 1
917
+ },
918
+ {
919
+ "type": "string",
920
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
921
+ }
922
+ ]
923
+ },
924
+ "hashAlgorithmOid": {
925
+ "description": "Hash algorithm OID for signatures/signHash and credentials/authorize. Defaults to SHA-256 OID.",
926
+ "examples": [
927
+ "2.16.840.1.101.3.4.2.1"
928
+ ],
929
+ "anyOf": [
930
+ {
931
+ "type": "string",
932
+ "minLength": 1
933
+ },
934
+ {
935
+ "type": "string",
936
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
937
+ }
938
+ ]
939
+ },
940
+ "signAlgorithmOid": {
941
+ "description": "Signature algorithm OID for signatures/signHash. Defaults to ecdsa-with-SHA256 OID.",
942
+ "examples": [
943
+ "1.2.840.10045.4.3.2"
944
+ ],
945
+ "anyOf": [
946
+ {
947
+ "type": "string",
948
+ "minLength": 1
949
+ },
950
+ {
951
+ "type": "string",
952
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
953
+ }
954
+ ]
955
+ },
956
+ "sad": {
957
+ "description": "Static SAD token. If set, the adapter sends it directly in signatures/signHash requests.",
958
+ "anyOf": [
959
+ {
960
+ "type": "string",
961
+ "minLength": 1
962
+ },
963
+ {
964
+ "type": "string",
965
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
966
+ }
967
+ ]
968
+ },
969
+ "useAuthorizeEndpoint": {
970
+ "description": "When true and no static SAD is provided, the adapter calls credentials/authorize to obtain SAD before signatures/signHash.",
971
+ "examples": [
972
+ false
973
+ ],
974
+ "type": "boolean"
975
+ },
976
+ "authorizeAuthData": {
977
+ "description": "Optional authData array passed to credentials/authorize (e.g., PIN/OTP factors).",
978
+ "type": "array",
979
+ "items": {
980
+ "type": "object",
981
+ "properties": {
982
+ "id": {
983
+ "anyOf": [
984
+ {
985
+ "type": "string",
986
+ "minLength": 1
987
+ },
988
+ {
989
+ "type": "string",
990
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
991
+ }
992
+ ],
993
+ "description": "Authentication factor identifier expected by the CSC provider (e.g., PIN, OTP).",
994
+ "examples": [
995
+ "PIN"
996
+ ]
997
+ },
998
+ "value": {
999
+ "anyOf": [
1000
+ {
1001
+ "type": "string",
1002
+ "minLength": 1
1003
+ },
1004
+ {
1005
+ "type": "string",
1006
+ "pattern": "^\\$\\{([A-Z0-9_]+)\\}$"
1007
+ }
1008
+ ],
1009
+ "description": "Authentication factor value sent to CSC credentials/authorize.",
1010
+ "examples": [
1011
+ "123456"
1012
+ ]
1013
+ }
1014
+ },
1015
+ "required": [
1016
+ "id",
1017
+ "value"
1018
+ ],
1019
+ "additionalProperties": false
1020
+ }
1021
+ }
1022
+ },
1023
+ "required": [
1024
+ "id",
1025
+ "type",
1026
+ "baseUrl",
1027
+ "tokenUrl",
1028
+ "clientId",
1029
+ "clientSecret"
1030
+ ],
1031
+ "additionalProperties": false
1032
+ }
1033
+ ]
1034
+ },
1035
+ "description": "List of KMS provider configurations. Each provider must have a unique id and a type.",
1036
+ "examples": [
1037
+ [
1038
+ {
1039
+ "id": "db",
1040
+ "type": "db",
1041
+ "description": "Default database provider"
1042
+ },
1043
+ {
1044
+ "id": "main-vault",
1045
+ "type": "vault",
1046
+ "description": "Production Vault",
1047
+ "vaultUrl": "${VAULT_URL}",
1048
+ "vaultToken": "${VAULT_TOKEN}"
1049
+ },
1050
+ {
1051
+ "id": "aws",
1052
+ "type": "aws-kms",
1053
+ "description": "AWS KMS",
1054
+ "region": "${AWS_REGION}"
1055
+ }
1056
+ ]
1057
+ ]
1058
+ }
1059
+ },
1060
+ "required": [
1061
+ "providers"
1062
+ ],
1063
+ "additionalProperties": false,
1064
+ "title": "KmsConfigDto"
1065
+ }
1066
+ }
42
1067
  }
43
1068
  ]
44
1069
  }