@sphereon/ssi-sdk.kms-rest-client 0.34.1-feature.IDK.11.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/dist/index.cjs +2083 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1468 -0
- package/dist/index.d.ts +1468 -0
- package/dist/index.js +2063 -0
- package/dist/index.js.map +1 -0
- package/package.json +60 -0
- package/plugin.schema.json +1123 -0
- package/src/agent/KmsRestClient.ts +468 -0
- package/src/index.ts +7 -0
- package/src/models/AwsAssumeRoleCredentials.ts +98 -0
- package/src/models/AwsClientConfiguration.ts +72 -0
- package/src/models/AwsKmsSetting.ts +126 -0
- package/src/models/AwsStaticCredentials.ts +98 -0
- package/src/models/AwsWebIdentityTokenCredentials.ts +99 -0
- package/src/models/AzureClientSecretCredentialOpts.ts +90 -0
- package/src/models/AzureCredentialOpts.ts +70 -0
- package/src/models/AzureKeyVaultSetting.ts +112 -0
- package/src/models/CoseKey.ts +145 -0
- package/src/models/CoseKeyPair.ts +79 -0
- package/src/models/CoseKeyType.ts +55 -0
- package/src/models/CreateKeyProvider.ts +115 -0
- package/src/models/CreateRawSignature.ts +80 -0
- package/src/models/CreateRawSignatureResponse.ts +65 -0
- package/src/models/CreateSimpleSignature.ts +100 -0
- package/src/models/CryptoAlg.ts +55 -0
- package/src/models/Curve.ts +59 -0
- package/src/models/DigestAlg.ts +58 -0
- package/src/models/ErrorResponse.ts +82 -0
- package/src/models/GenerateKey.ts +106 -0
- package/src/models/GenerateKeyGlobal.ts +114 -0
- package/src/models/GenerateKeyResponse.ts +71 -0
- package/src/models/GetKeyResponse.ts +71 -0
- package/src/models/IdentifierMethod.ts +56 -0
- package/src/models/JoseKeyPair.ts +79 -0
- package/src/models/Jwk.ts +248 -0
- package/src/models/JwkKeyType.ts +55 -0
- package/src/models/JwkUse.ts +53 -0
- package/src/models/KeyEncoding.ts +53 -0
- package/src/models/KeyInfo.ts +164 -0
- package/src/models/KeyOperations.ts +59 -0
- package/src/models/KeyProvider.ts +82 -0
- package/src/models/KeyProviderResponse.ts +82 -0
- package/src/models/KeyProviderType.ts +54 -0
- package/src/models/KeyResolver.ts +92 -0
- package/src/models/KeyType.ts +54 -0
- package/src/models/KeyVisibility.ts +53 -0
- package/src/models/ListKeyProvidersResponse.ts +71 -0
- package/src/models/ListKeysResponse.ts +71 -0
- package/src/models/ListResolversResponse.ts +71 -0
- package/src/models/LookupMode.ts +54 -0
- package/src/models/ManagedKeyInfo.ts +167 -0
- package/src/models/ManagedKeyPair.ts +111 -0
- package/src/models/MaskGenFunction.ts +52 -0
- package/src/models/ProviderCapabilities.ts +122 -0
- package/src/models/ResolvePublicKey.ts +102 -0
- package/src/models/ResolvedKeyInfo.ts +165 -0
- package/src/models/Resolver.ts +92 -0
- package/src/models/SignInput.ts +92 -0
- package/src/models/SignOutput.ts +79 -0
- package/src/models/Signature.ts +103 -0
- package/src/models/SignatureAlgorithm.ts +63 -0
- package/src/models/StoreKey.ts +79 -0
- package/src/models/StoreKeyResponse.ts +71 -0
- package/src/models/UpdateKeyProvider.ts +99 -0
- package/src/models/VerifyRawSignature.ts +89 -0
- package/src/models/VerifyRawSignatureResponse.ts +65 -0
- package/src/models/VerifySimpleSignature.ts +85 -0
- package/src/models/index.ts +60 -0
- package/src/types/IKmsRestClient.ts +133 -0
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
import { IAgentPlugin } from '@veramo/core'
|
|
2
|
+
import { Loggers } from '@sphereon/ssi-types'
|
|
3
|
+
import { fetch } from 'cross-fetch'
|
|
4
|
+
import type {
|
|
5
|
+
kmsGetResolverArgs,
|
|
6
|
+
KmsListResolversArgs,
|
|
7
|
+
IKmsRestClient,
|
|
8
|
+
KmsResolveKeyArgs,
|
|
9
|
+
KmsCreateRawSignatureArgs,
|
|
10
|
+
KmsGetKeyArgs,
|
|
11
|
+
KmsListKeysArgs,
|
|
12
|
+
KmsStoreKeyArgs,
|
|
13
|
+
KmsGenerateKeyArgs,
|
|
14
|
+
KmsDeleteKeyArgs,
|
|
15
|
+
KmsGetKeyProviderArgs,
|
|
16
|
+
KmsListKeyProvidersArgs,
|
|
17
|
+
KmsProviderListKeysArgs,
|
|
18
|
+
KmsProviderStoreKey,
|
|
19
|
+
KmsProviderGenerateKey,
|
|
20
|
+
KmsProviderGetKeyArgs,
|
|
21
|
+
KmsProviderDeleteKeyArgs,
|
|
22
|
+
RestClientAuthenticationOpts,
|
|
23
|
+
KmsRestClientArgs,
|
|
24
|
+
KmsIsValidRawSignatureArgs
|
|
25
|
+
} from '../types/IKmsRestClient'
|
|
26
|
+
import type {
|
|
27
|
+
CreateRawSignature,
|
|
28
|
+
CreateRawSignatureResponse,
|
|
29
|
+
GenerateKey,
|
|
30
|
+
GenerateKeyGlobal,
|
|
31
|
+
ListKeyProvidersResponse,
|
|
32
|
+
ListKeysResponse,
|
|
33
|
+
ListResolversResponse,
|
|
34
|
+
ManagedKeyInfo,
|
|
35
|
+
ManagedKeyPair,
|
|
36
|
+
ResolvedKeyInfo,
|
|
37
|
+
ResolvePublicKey,
|
|
38
|
+
Resolver,
|
|
39
|
+
VerifyRawSignatureResponse,
|
|
40
|
+
StoreKey,
|
|
41
|
+
VerifyRawSignature,
|
|
42
|
+
KeyProviderResponse,
|
|
43
|
+
} from '../models'
|
|
44
|
+
import {
|
|
45
|
+
CreateRawSignatureToJSONTyped,
|
|
46
|
+
CreateRawSignatureResponseFromJSONTyped,
|
|
47
|
+
GenerateKeyGlobalToJSONTyped,
|
|
48
|
+
GenerateKeyToJSONTyped,
|
|
49
|
+
ListKeyProvidersResponseFromJSONTyped,
|
|
50
|
+
ListKeysResponseFromJSONTyped,
|
|
51
|
+
ListResolversResponseFromJSONTyped,
|
|
52
|
+
ManagedKeyInfoFromJSONTyped,
|
|
53
|
+
ManagedKeyPairFromJSONTyped,
|
|
54
|
+
ResolvePublicKeyToJSONTyped,
|
|
55
|
+
ResolvedKeyInfoFromJSONTyped,
|
|
56
|
+
ResolverFromJSONTyped,
|
|
57
|
+
VerifyRawSignatureResponseFromJSONTyped,
|
|
58
|
+
StoreKeyToJSONTyped,
|
|
59
|
+
VerifyRawSignatureToJSONTyped,
|
|
60
|
+
KeyProviderResponseFromJSONTyped
|
|
61
|
+
} from '../models'
|
|
62
|
+
|
|
63
|
+
const logger = Loggers.DEFAULT.get('sphereon:ssi-sdk:kms:rest-client')
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* {@inheritDoc IKmsRestClient}
|
|
67
|
+
*/
|
|
68
|
+
export class KmsRestClient implements IAgentPlugin {
|
|
69
|
+
readonly methods: IKmsRestClient = {
|
|
70
|
+
kmsGetKey: this.kmsGetKey.bind(this),
|
|
71
|
+
kmsListKeys: this.kmsListKeys.bind(this),
|
|
72
|
+
kmsStoreKey: this.kmsStoreKey.bind(this),
|
|
73
|
+
kmsGenerateKey: this.kmsGenerateKey.bind(this),
|
|
74
|
+
kmsDeleteKey: this.kmsDeleteKey.bind(this),
|
|
75
|
+
|
|
76
|
+
kmsGetKeyProvider: this.kmsGetKeyProvider.bind(this),
|
|
77
|
+
kmsListKeyProviders: this.kmsListKeyProviders.bind(this),
|
|
78
|
+
kmsProviderListKeys: this.kmsProviderListKeys.bind(this),
|
|
79
|
+
kmsProviderStoreKey: this.kmsProviderStoreKey.bind(this),
|
|
80
|
+
kmsProviderGenerateKey: this.kmsProviderGenerateKey.bind(this),
|
|
81
|
+
kmsProviderGetKey: this.kmsProviderGetKey.bind(this),
|
|
82
|
+
kmsProviderDeleteKey: this.kmsProviderDeleteKey.bind(this),
|
|
83
|
+
|
|
84
|
+
kmsGetResolver: this.kmsGetResolver.bind(this),
|
|
85
|
+
kmsListResolvers: this.kmsListResolvers.bind(this),
|
|
86
|
+
kmsResolveKey: this.kmsResolveKey.bind(this),
|
|
87
|
+
|
|
88
|
+
kmsCreateRawSignature: this.kmsCreateRawSignature.bind(this),
|
|
89
|
+
kmsIsValidRawSignature: this.kmsIsValidRawSignature.bind(this)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private readonly agentBaseUrl?: string
|
|
93
|
+
private readonly authOpts?: RestClientAuthenticationOpts
|
|
94
|
+
|
|
95
|
+
constructor(args?: KmsRestClientArgs) {
|
|
96
|
+
if (args?.baseUrl) {
|
|
97
|
+
this.agentBaseUrl = args.baseUrl
|
|
98
|
+
}
|
|
99
|
+
this.authOpts = args?.authentication
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
private static urlWithBase(path: string, baseUrl: string): string {
|
|
103
|
+
return `${baseUrl}${path.startsWith('/') ? path : `/${path}`}`
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** {@inheritDoc IKmsRestClient.kmsGetResolver} */
|
|
107
|
+
private async kmsGetResolver(args: kmsGetResolverArgs): Promise<Resolver> {
|
|
108
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
109
|
+
const url = KmsRestClient.urlWithBase(`/resolvers/${args.resolverId}`, baseUrl)
|
|
110
|
+
|
|
111
|
+
const response = await fetch(url, {
|
|
112
|
+
method: 'GET'
|
|
113
|
+
})
|
|
114
|
+
logger.debug(`get resolver response: ${response}`)
|
|
115
|
+
|
|
116
|
+
try {
|
|
117
|
+
return ResolverFromJSONTyped(await response.json(), false)
|
|
118
|
+
} catch (error) {
|
|
119
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** {@inheritDoc IKmsRestClient.kmsListResolvers} */
|
|
124
|
+
private async kmsListResolvers(args: KmsListResolversArgs): Promise<ListResolversResponse> {
|
|
125
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
126
|
+
const url = KmsRestClient.urlWithBase('/resolvers', baseUrl)
|
|
127
|
+
|
|
128
|
+
const response = await fetch(url, {
|
|
129
|
+
method: 'GET'
|
|
130
|
+
})
|
|
131
|
+
logger.debug(`list resolvers response: ${response}`)
|
|
132
|
+
|
|
133
|
+
try {
|
|
134
|
+
return ListResolversResponseFromJSONTyped(await response.json(), false)
|
|
135
|
+
} catch (error) {
|
|
136
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** {@inheritDoc IKmsRestClient.kmsResolveKey} */
|
|
141
|
+
private async kmsResolveKey(args: KmsResolveKeyArgs): Promise<ResolvedKeyInfo> {
|
|
142
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
143
|
+
const url = KmsRestClient.urlWithBase(`/resolvers/${args.resolverId}/resolve`, baseUrl)
|
|
144
|
+
|
|
145
|
+
const body = {
|
|
146
|
+
keyInfo: args.keyInfo,
|
|
147
|
+
identifierMethod: args.identifierMethod,
|
|
148
|
+
trustedCerts: args.trustedCerts,
|
|
149
|
+
verifyX509CertificateChain: args.verifyX509CertificateChain
|
|
150
|
+
} satisfies ResolvePublicKey
|
|
151
|
+
const response = await fetch(url, {
|
|
152
|
+
method: 'POST',
|
|
153
|
+
headers: await this.createHeaders({ 'Content-Type': 'application/json' }),
|
|
154
|
+
body: JSON.stringify(ResolvePublicKeyToJSONTyped(body)),
|
|
155
|
+
})
|
|
156
|
+
logger.debug(`resolve key response: ${response}`)
|
|
157
|
+
|
|
158
|
+
try {
|
|
159
|
+
return ResolvedKeyInfoFromJSONTyped(await response.json(), false)
|
|
160
|
+
} catch (error) {
|
|
161
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** {@inheritDoc IKmsRestClient.kmsCreateRawSignature} */
|
|
166
|
+
private async kmsCreateRawSignature(args: KmsCreateRawSignatureArgs): Promise<CreateRawSignatureResponse> {
|
|
167
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
168
|
+
const url = KmsRestClient.urlWithBase(`/signatures/raw`, baseUrl)
|
|
169
|
+
|
|
170
|
+
const body = {
|
|
171
|
+
keyInfo: args.keyInfo,
|
|
172
|
+
input: args.input,
|
|
173
|
+
} satisfies CreateRawSignature
|
|
174
|
+
const response = await fetch(url, {
|
|
175
|
+
method: 'POST',
|
|
176
|
+
headers: await this.createHeaders({ 'Content-Type': 'application/json' }),
|
|
177
|
+
body: JSON.stringify(CreateRawSignatureToJSONTyped(body)),
|
|
178
|
+
})
|
|
179
|
+
logger.debug(`create raw signature response: ${response}`)
|
|
180
|
+
|
|
181
|
+
try {
|
|
182
|
+
return CreateRawSignatureResponseFromJSONTyped(await response.json(), false)
|
|
183
|
+
} catch (error) {
|
|
184
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/** {@inheritDoc IKmsRestClient.kmsIsValidRawSignature} */
|
|
189
|
+
private async kmsIsValidRawSignature(args: KmsIsValidRawSignatureArgs): Promise<VerifyRawSignatureResponse> {
|
|
190
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
191
|
+
const url = KmsRestClient.urlWithBase(`/signatures/raw/verify`, baseUrl)
|
|
192
|
+
|
|
193
|
+
const body = {
|
|
194
|
+
keyInfo: args.keyInfo,
|
|
195
|
+
signature: args.signature,
|
|
196
|
+
input: args.input,
|
|
197
|
+
} satisfies VerifyRawSignature
|
|
198
|
+
const response = await fetch(url, {
|
|
199
|
+
method: 'POST',
|
|
200
|
+
headers: await this.createHeaders({ 'Content-Type': 'application/json' }),
|
|
201
|
+
body: JSON.stringify(VerifyRawSignatureToJSONTyped(body)),
|
|
202
|
+
})
|
|
203
|
+
logger.debug(`verify raw signature response: ${response}`)
|
|
204
|
+
|
|
205
|
+
try {
|
|
206
|
+
return VerifyRawSignatureResponseFromJSONTyped(await response.json(), false)
|
|
207
|
+
} catch (error) {
|
|
208
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** {@inheritDoc IKmsRestClient.kmsGetKey} */
|
|
213
|
+
private async kmsGetKey(args: KmsGetKeyArgs): Promise<ManagedKeyInfo> {
|
|
214
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
215
|
+
const url = KmsRestClient.urlWithBase(`/keys/${args.aliasOrKid}`, baseUrl)
|
|
216
|
+
|
|
217
|
+
const response = await fetch(url, {
|
|
218
|
+
method: 'GET'
|
|
219
|
+
})
|
|
220
|
+
logger.debug(`get key response: ${response}`)
|
|
221
|
+
|
|
222
|
+
try {
|
|
223
|
+
return ManagedKeyInfoFromJSONTyped(await response.json(), false)
|
|
224
|
+
} catch (error) {
|
|
225
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/** {@inheritDoc IKmsRestClient.kmsListKeys} */
|
|
230
|
+
private async kmsListKeys(args: KmsListKeysArgs): Promise<ListKeysResponse> {
|
|
231
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
232
|
+
const url = this.addSearchParams(KmsRestClient.urlWithBase('/keys', baseUrl), { ...(args.providerId && { providerId: args.providerId }) })
|
|
233
|
+
const response = await fetch(url, {
|
|
234
|
+
method: 'GET',
|
|
235
|
+
})
|
|
236
|
+
logger.debug(`list keys response: ${response}`)
|
|
237
|
+
|
|
238
|
+
try {
|
|
239
|
+
const xx = await response.json()
|
|
240
|
+
return ListKeysResponseFromJSONTyped(xx, false)
|
|
241
|
+
} catch (error) {
|
|
242
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/** {@inheritDoc IKmsRestClient.kmsStoreKey} */
|
|
247
|
+
private async kmsStoreKey(args: KmsStoreKeyArgs): Promise<ManagedKeyInfo> {
|
|
248
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
249
|
+
const url = KmsRestClient.urlWithBase(`/keys`, baseUrl)
|
|
250
|
+
|
|
251
|
+
const body = {
|
|
252
|
+
keyInfo: args.keyInfo,
|
|
253
|
+
certChain: args.certChain,
|
|
254
|
+
} satisfies StoreKey
|
|
255
|
+
const response = await fetch(url, {
|
|
256
|
+
method: 'POST',
|
|
257
|
+
headers: await this.createHeaders({ 'Content-Type': 'application/json' }),
|
|
258
|
+
body: JSON.stringify(StoreKeyToJSONTyped(body)),
|
|
259
|
+
})
|
|
260
|
+
logger.debug(`store key response: ${response}`)
|
|
261
|
+
|
|
262
|
+
try {
|
|
263
|
+
return ManagedKeyInfoFromJSONTyped(await response.json(), false)
|
|
264
|
+
} catch (error) {
|
|
265
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/** {@inheritDoc IKmsRestClient.kmsGenerateKey} */
|
|
270
|
+
private async kmsGenerateKey(args: KmsGenerateKeyArgs): Promise<ManagedKeyPair> {
|
|
271
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
272
|
+
const url = KmsRestClient.urlWithBase(`/keys/generate`, baseUrl)
|
|
273
|
+
|
|
274
|
+
const body = {
|
|
275
|
+
alg: args.alg,
|
|
276
|
+
keyOperations: args.keyOperations,
|
|
277
|
+
providerId: args.providerId,
|
|
278
|
+
use: args.use,
|
|
279
|
+
} satisfies GenerateKeyGlobal
|
|
280
|
+
const response = await fetch(url, {
|
|
281
|
+
method: 'POST',
|
|
282
|
+
headers: await this.createHeaders({ 'Content-Type': 'application/json' }),
|
|
283
|
+
body: JSON.stringify(GenerateKeyGlobalToJSONTyped(body)),
|
|
284
|
+
})
|
|
285
|
+
logger.debug(`generate key response: ${response}`)
|
|
286
|
+
|
|
287
|
+
try {
|
|
288
|
+
return ManagedKeyPairFromJSONTyped(await response.json(), false)
|
|
289
|
+
} catch (error) {
|
|
290
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/** {@inheritDoc IKmsRestClient.kmsDeleteKey} */
|
|
295
|
+
private async kmsDeleteKey(args: KmsDeleteKeyArgs): Promise<boolean> {
|
|
296
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
297
|
+
const url = KmsRestClient.urlWithBase(`/keys/${args.aliasOrKid}`, baseUrl)
|
|
298
|
+
|
|
299
|
+
await fetch(url, {
|
|
300
|
+
method: 'DELETE'
|
|
301
|
+
})
|
|
302
|
+
|
|
303
|
+
return true
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/** {@inheritDoc IKmsRestClient.kmsGetKeyProvider} */
|
|
307
|
+
private async kmsGetKeyProvider(args: KmsGetKeyProviderArgs): Promise<KeyProviderResponse> {
|
|
308
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
309
|
+
const url = KmsRestClient.urlWithBase(`/providers/${args.providerId}`, baseUrl)
|
|
310
|
+
|
|
311
|
+
const response = await fetch(url, {
|
|
312
|
+
method: 'GET'
|
|
313
|
+
})
|
|
314
|
+
logger.debug(`get provider response: ${response}`)
|
|
315
|
+
|
|
316
|
+
try {
|
|
317
|
+
return KeyProviderResponseFromJSONTyped(await response.json(), false)
|
|
318
|
+
} catch (error) {
|
|
319
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/** {@inheritDoc IKmsRestClient.kmsListKeyProviders} */
|
|
324
|
+
private async kmsListKeyProviders(args: KmsListKeyProvidersArgs): Promise<ListKeyProvidersResponse> {
|
|
325
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
326
|
+
const url = KmsRestClient.urlWithBase('/providers', baseUrl)
|
|
327
|
+
|
|
328
|
+
const response = await fetch(url, {
|
|
329
|
+
method: 'GET'
|
|
330
|
+
})
|
|
331
|
+
logger.debug(`list providers response: ${response}`)
|
|
332
|
+
|
|
333
|
+
try {
|
|
334
|
+
return ListKeyProvidersResponseFromJSONTyped(await response.json(), false)
|
|
335
|
+
} catch (error) {
|
|
336
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/** {@inheritDoc IKmsRestClient.kmsProviderListKeys} */
|
|
341
|
+
private async kmsProviderListKeys(args: KmsProviderListKeysArgs): Promise<ListKeysResponse> {
|
|
342
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
343
|
+
const url = KmsRestClient.urlWithBase(`/providers/${args.providerId}/keys`, baseUrl)
|
|
344
|
+
|
|
345
|
+
const response = await fetch(url, {
|
|
346
|
+
method: 'GET'
|
|
347
|
+
})
|
|
348
|
+
logger.debug(`list provider keys response: ${response}`)
|
|
349
|
+
|
|
350
|
+
try {
|
|
351
|
+
return ListKeysResponseFromJSONTyped(await response.json(), false)
|
|
352
|
+
} catch (error) {
|
|
353
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/** {@inheritDoc IKmsRestClient.kmsProviderStoreKey} */
|
|
358
|
+
private async kmsProviderStoreKey(args: KmsProviderStoreKey): Promise<ManagedKeyInfo> {
|
|
359
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
360
|
+
const url = KmsRestClient.urlWithBase(`/providers/${args.providerId}/keys`, baseUrl)
|
|
361
|
+
|
|
362
|
+
const body = {
|
|
363
|
+
keyInfo: args.keyInfo,
|
|
364
|
+
certChain: args.certChain,
|
|
365
|
+
} satisfies StoreKey
|
|
366
|
+
const response = await fetch(url, {
|
|
367
|
+
method: 'POST',
|
|
368
|
+
headers: await this.createHeaders({ 'Content-Type': 'application/json' }),
|
|
369
|
+
body: JSON.stringify(StoreKeyToJSONTyped(body)),
|
|
370
|
+
})
|
|
371
|
+
logger.debug(`provider store key response: ${response}`)
|
|
372
|
+
|
|
373
|
+
try {
|
|
374
|
+
return ManagedKeyInfoFromJSONTyped(await response.json(), false)
|
|
375
|
+
} catch (error) {
|
|
376
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/** {@inheritDoc IKmsRestClient.kmsProviderGenerateKey} */
|
|
381
|
+
private async kmsProviderGenerateKey(args: KmsProviderGenerateKey): Promise<ManagedKeyPair> {
|
|
382
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
383
|
+
const url = KmsRestClient.urlWithBase(`/providers/${args.providerId}/keys/generate`, baseUrl)
|
|
384
|
+
|
|
385
|
+
const body = {
|
|
386
|
+
alg: args.alg,
|
|
387
|
+
keyOperations: args.keyOperations,
|
|
388
|
+
use: args.use,
|
|
389
|
+
} satisfies GenerateKey
|
|
390
|
+
const response = await fetch(url, {
|
|
391
|
+
method: 'POST',
|
|
392
|
+
headers: await this.createHeaders({ 'Content-Type': 'application/json' }),
|
|
393
|
+
body: JSON.stringify(GenerateKeyToJSONTyped(body)),
|
|
394
|
+
})
|
|
395
|
+
logger.debug(`provider generate key response: ${response}`)
|
|
396
|
+
|
|
397
|
+
try {
|
|
398
|
+
return ManagedKeyPairFromJSONTyped(await response.json(), false)
|
|
399
|
+
} catch (error) {
|
|
400
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/** {@inheritDoc IKmsRestClient.kmsProviderGetKey} */
|
|
405
|
+
private async kmsProviderGetKey(args: KmsProviderGetKeyArgs): Promise<ManagedKeyInfo> {
|
|
406
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
407
|
+
const url = KmsRestClient.urlWithBase(`/providers/${args.providerId}/keys/${args.aliasOrKid}`, baseUrl)
|
|
408
|
+
|
|
409
|
+
const response = await fetch(url, {
|
|
410
|
+
method: 'GET'
|
|
411
|
+
})
|
|
412
|
+
logger.debug(`get provider key response: ${response}`)
|
|
413
|
+
|
|
414
|
+
try {
|
|
415
|
+
return ManagedKeyInfoFromJSONTyped(await response.json(), false)
|
|
416
|
+
} catch (error) {
|
|
417
|
+
return Promise.reject(Error(`request to ${url} returned ${error}`))
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/** {@inheritDoc IKmsRestClient.kmsProviderDeleteKey} */
|
|
422
|
+
private async kmsProviderDeleteKey(args: KmsProviderDeleteKeyArgs): Promise<boolean> {
|
|
423
|
+
const baseUrl = this.assertedAgentBaseUrl(args.baseUrl)
|
|
424
|
+
const url = KmsRestClient.urlWithBase(`providers/${args.providerId}/keys/${args.aliasOrKid}`, baseUrl)
|
|
425
|
+
|
|
426
|
+
await fetch(url, {
|
|
427
|
+
method: 'DELETE'
|
|
428
|
+
})
|
|
429
|
+
|
|
430
|
+
return true
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
private assertedAgentBaseUrl(baseUrl?: string): string {
|
|
434
|
+
if (baseUrl) {
|
|
435
|
+
return baseUrl
|
|
436
|
+
} else if (this.agentBaseUrl) {
|
|
437
|
+
return this.agentBaseUrl
|
|
438
|
+
}
|
|
439
|
+
throw new Error('No base url has been provided')
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
private async createHeaders(existing?: Record<string, any>): Promise<HeadersInit> {
|
|
443
|
+
const headers: HeadersInit = {
|
|
444
|
+
...existing,
|
|
445
|
+
Accept: 'application/json',
|
|
446
|
+
}
|
|
447
|
+
if (this.authOpts?.enabled === true) {
|
|
448
|
+
if (!this.authOpts.bearerToken) {
|
|
449
|
+
throw Error(`Cannot have authentication enabled, whilst not enabling static bearer tokens at this point`)
|
|
450
|
+
}
|
|
451
|
+
headers.Authorization = `Bearer ${
|
|
452
|
+
typeof this.authOpts.bearerToken === 'string' ? this.authOpts.bearerToken : await this.authOpts.bearerToken()
|
|
453
|
+
}`
|
|
454
|
+
}
|
|
455
|
+
return headers
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
private addSearchParams(baseUrl: string, params: Record<string, string | number | boolean>): URL {
|
|
459
|
+
const url = new URL(baseUrl);
|
|
460
|
+
|
|
461
|
+
for (const [key, value] of Object.entries(params)) {
|
|
462
|
+
url.searchParams.set(key, String(value));
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
return url;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
/**
|
|
4
|
+
* KMS REST Server API
|
|
5
|
+
* A REST API for managing cryptographic keys and performing signing and verification operations.
|
|
6
|
+
*
|
|
7
|
+
* The version of the OpenAPI document: 0.0.1
|
|
8
|
+
* Contact: support@sphereon.com
|
|
9
|
+
*
|
|
10
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
11
|
+
* https://openapi-generator.tech
|
|
12
|
+
* Do not edit the class manually.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type { LookupMode } from './LookupMode';
|
|
16
|
+
import {
|
|
17
|
+
LookupModeFromJSON,
|
|
18
|
+
LookupModeToJSON,
|
|
19
|
+
} from './LookupMode';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Credentials obtained by assuming an IAM role.
|
|
23
|
+
* @export
|
|
24
|
+
* @interface AwsAssumeRoleCredentials
|
|
25
|
+
*/
|
|
26
|
+
export interface AwsAssumeRoleCredentials {
|
|
27
|
+
/**
|
|
28
|
+
* The Amazon Resource Name (ARN) of the role to assume.
|
|
29
|
+
* @type {string}
|
|
30
|
+
* @memberof AwsAssumeRoleCredentials
|
|
31
|
+
*/
|
|
32
|
+
roleArn: string;
|
|
33
|
+
/**
|
|
34
|
+
* An identifier for the assumed role session. Use characters compatible with file systems.
|
|
35
|
+
* @type {string}
|
|
36
|
+
* @memberof AwsAssumeRoleCredentials
|
|
37
|
+
*/
|
|
38
|
+
roleSessionName: string;
|
|
39
|
+
/**
|
|
40
|
+
* An optional external ID that might be required by the role's trust policy.
|
|
41
|
+
* @type {string}
|
|
42
|
+
* @memberof AwsAssumeRoleCredentials
|
|
43
|
+
*/
|
|
44
|
+
externalId?: string;
|
|
45
|
+
/**
|
|
46
|
+
*
|
|
47
|
+
* @type {LookupMode}
|
|
48
|
+
* @memberof AwsAssumeRoleCredentials
|
|
49
|
+
*/
|
|
50
|
+
lookupMode?: LookupMode;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Check if a given object implements the AwsAssumeRoleCredentials interface.
|
|
57
|
+
*/
|
|
58
|
+
export function instanceOfAwsAssumeRoleCredentials(value: object): value is AwsAssumeRoleCredentials {
|
|
59
|
+
if (!('roleArn' in value) || value['roleArn'] === undefined) return false;
|
|
60
|
+
if (!('roleSessionName' in value) || value['roleSessionName'] === undefined) return false;
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function AwsAssumeRoleCredentialsFromJSON(json: any): AwsAssumeRoleCredentials {
|
|
65
|
+
return AwsAssumeRoleCredentialsFromJSONTyped(json, false);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function AwsAssumeRoleCredentialsFromJSONTyped(json: any, ignoreDiscriminator: boolean): AwsAssumeRoleCredentials {
|
|
69
|
+
if (json == null) {
|
|
70
|
+
return json;
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
|
|
74
|
+
'roleArn': json['roleArn'],
|
|
75
|
+
'roleSessionName': json['roleSessionName'],
|
|
76
|
+
'externalId': json['externalId'] == null ? undefined : json['externalId'],
|
|
77
|
+
'lookupMode': json['lookupMode'] == null ? undefined : LookupModeFromJSON(json['lookupMode']),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function AwsAssumeRoleCredentialsToJSON(json: any): AwsAssumeRoleCredentials {
|
|
82
|
+
return AwsAssumeRoleCredentialsToJSONTyped(json, false);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function AwsAssumeRoleCredentialsToJSONTyped(value?: AwsAssumeRoleCredentials | null, ignoreDiscriminator: boolean = false): any {
|
|
86
|
+
if (value == null) {
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return {
|
|
91
|
+
|
|
92
|
+
'roleArn': value['roleArn'],
|
|
93
|
+
'roleSessionName': value['roleSessionName'],
|
|
94
|
+
'externalId': value['externalId'],
|
|
95
|
+
'lookupMode': LookupModeToJSON(value['lookupMode']),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
/**
|
|
4
|
+
* KMS REST Server API
|
|
5
|
+
* A REST API for managing cryptographic keys and performing signing and verification operations.
|
|
6
|
+
*
|
|
7
|
+
* The version of the OpenAPI document: 0.0.1
|
|
8
|
+
* Contact: support@sphereon.com
|
|
9
|
+
*
|
|
10
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
11
|
+
* https://openapi-generator.tech
|
|
12
|
+
* Do not edit the class manually.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Optional advanced AWS SDK client settings.
|
|
17
|
+
* @export
|
|
18
|
+
* @interface AwsClientConfiguration
|
|
19
|
+
*/
|
|
20
|
+
export interface AwsClientConfiguration {
|
|
21
|
+
/**
|
|
22
|
+
* Amount of time (in milliseconds) to wait when initially establishing a connection before giving up.
|
|
23
|
+
* @type {number}
|
|
24
|
+
* @memberof AwsClientConfiguration
|
|
25
|
+
*/
|
|
26
|
+
connectionTimeoutInMillis?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Amount of time (in milliseconds) to wait for data to be transferred over an established, open connection before timing out.
|
|
29
|
+
* @type {number}
|
|
30
|
+
* @memberof AwsClientConfiguration
|
|
31
|
+
*/
|
|
32
|
+
socketTimeoutInMillis?: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Check if a given object implements the AwsClientConfiguration interface.
|
|
37
|
+
*/
|
|
38
|
+
export function instanceOfAwsClientConfiguration(value: object): value is AwsClientConfiguration {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function AwsClientConfigurationFromJSON(json: any): AwsClientConfiguration {
|
|
43
|
+
return AwsClientConfigurationFromJSONTyped(json, false);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function AwsClientConfigurationFromJSONTyped(json: any, ignoreDiscriminator: boolean): AwsClientConfiguration {
|
|
47
|
+
if (json == null) {
|
|
48
|
+
return json;
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
|
|
52
|
+
'connectionTimeoutInMillis': json['connectionTimeoutInMillis'] == null ? undefined : json['connectionTimeoutInMillis'],
|
|
53
|
+
'socketTimeoutInMillis': json['socketTimeoutInMillis'] == null ? undefined : json['socketTimeoutInMillis'],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function AwsClientConfigurationToJSON(json: any): AwsClientConfiguration {
|
|
58
|
+
return AwsClientConfigurationToJSONTyped(json, false);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function AwsClientConfigurationToJSONTyped(value?: AwsClientConfiguration | null, ignoreDiscriminator: boolean = false): any {
|
|
62
|
+
if (value == null) {
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
|
|
68
|
+
'connectionTimeoutInMillis': value['connectionTimeoutInMillis'],
|
|
69
|
+
'socketTimeoutInMillis': value['socketTimeoutInMillis'],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|