@kibibit/configit 1.0.0-beta.26 → 1.0.0-beta.27
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 +419 -0
- package/lib/scripts/test-vault-comprehensive.d.ts +2 -0
- package/lib/scripts/test-vault-comprehensive.d.ts.map +1 -0
- package/lib/scripts/test-vault-comprehensive.js +422 -0
- package/lib/scripts/test-vault-comprehensive.js.map +1 -0
- package/lib/scripts/test-vault-dynamic.d.ts +2 -0
- package/lib/scripts/test-vault-dynamic.d.ts.map +1 -0
- package/lib/scripts/test-vault-dynamic.js +193 -0
- package/lib/scripts/test-vault-dynamic.js.map +1 -0
- package/lib/scripts/test-vault-gcp-ttl.d.ts +3 -0
- package/lib/scripts/test-vault-gcp-ttl.d.ts.map +1 -0
- package/lib/scripts/test-vault-gcp-ttl.js +218 -0
- package/lib/scripts/test-vault-gcp-ttl.js.map +1 -0
- package/lib/scripts/test-vault.d.ts +2 -0
- package/lib/scripts/test-vault.d.ts.map +1 -0
- package/lib/scripts/test-vault.js +167 -0
- package/lib/scripts/test-vault.js.map +1 -0
- package/lib/src/config.errors.d.ts.map +1 -0
- package/lib/src/config.errors.js.map +1 -0
- package/lib/src/config.model.d.ts.map +1 -0
- package/lib/src/config.model.js.map +1 -0
- package/lib/{config.service.d.ts → src/config.service.d.ts} +10 -1
- package/lib/src/config.service.d.ts.map +1 -0
- package/lib/{config.service.js → src/config.service.js} +75 -9
- package/lib/src/config.service.js.map +1 -0
- package/lib/src/environment.service.d.ts.map +1 -0
- package/lib/src/environment.service.js.map +1 -0
- package/lib/{index.d.ts → src/index.d.ts} +1 -0
- package/lib/src/index.d.ts.map +1 -0
- package/lib/{index.js → src/index.js} +1 -0
- package/lib/src/index.js.map +1 -0
- package/lib/src/json-schema.validator.d.ts.map +1 -0
- package/lib/src/json-schema.validator.js.map +1 -0
- package/lib/src/vault/__tests__/vault-integration.test.d.ts +2 -0
- package/lib/src/vault/__tests__/vault-integration.test.d.ts.map +1 -0
- package/lib/src/vault/__tests__/vault-integration.test.js +190 -0
- package/lib/src/vault/__tests__/vault-integration.test.js.map +1 -0
- package/lib/src/vault/decorators.d.ts +17 -0
- package/lib/src/vault/decorators.d.ts.map +1 -0
- package/lib/src/vault/decorators.js +149 -0
- package/lib/src/vault/decorators.js.map +1 -0
- package/lib/src/vault/index.d.ts +7 -0
- package/lib/src/vault/index.d.ts.map +1 -0
- package/lib/src/vault/index.js +42 -0
- package/lib/src/vault/index.js.map +1 -0
- package/lib/src/vault/secret-refresh-manager.d.ts +23 -0
- package/lib/src/vault/secret-refresh-manager.d.ts.map +1 -0
- package/lib/src/vault/secret-refresh-manager.js +149 -0
- package/lib/src/vault/secret-refresh-manager.js.map +1 -0
- package/lib/src/vault/types.d.ts +149 -0
- package/lib/src/vault/types.d.ts.map +1 -0
- package/lib/src/vault/types.js +4 -0
- package/lib/src/vault/types.js.map +1 -0
- package/lib/src/vault/vault-cache.d.ts +20 -0
- package/lib/src/vault/vault-cache.d.ts.map +1 -0
- package/lib/src/vault/vault-cache.js +139 -0
- package/lib/src/vault/vault-cache.js.map +1 -0
- package/lib/src/vault/vault-integration.d.ts +27 -0
- package/lib/src/vault/vault-integration.d.ts.map +1 -0
- package/lib/src/vault/vault-integration.js +211 -0
- package/lib/src/vault/vault-integration.js.map +1 -0
- package/lib/src/vault/vault-provider.d.ts +37 -0
- package/lib/src/vault/vault-provider.d.ts.map +1 -0
- package/lib/src/vault/vault-provider.js +354 -0
- package/lib/src/vault/vault-provider.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -65
- package/src/config.service.ts +155 -10
- package/src/config.service.vault.spec.ts +859 -0
- package/src/index.ts +1 -0
- package/src/vault/__tests__/vault-integration.test.ts +226 -0
- package/src/vault/decorators.ts +228 -0
- package/src/vault/index.ts +31 -0
- package/src/vault/secret-refresh-manager.ts +241 -0
- package/src/vault/types.ts +487 -0
- package/src/vault/vault-cache.ts +240 -0
- package/src/vault/vault-integration.ts +332 -0
- package/src/vault/vault-provider.ts +576 -0
- package/lib/config.errors.d.ts.map +0 -1
- package/lib/config.errors.js.map +0 -1
- package/lib/config.model.d.ts.map +0 -1
- package/lib/config.model.js.map +0 -1
- package/lib/config.service.d.ts.map +0 -1
- package/lib/config.service.js.map +0 -1
- package/lib/environment.service.d.ts.map +0 -1
- package/lib/environment.service.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/json-schema.validator.d.ts.map +0 -1
- package/lib/json-schema.validator.js.map +0 -1
- /package/lib/{config.errors.d.ts → src/config.errors.d.ts} +0 -0
- /package/lib/{config.errors.js → src/config.errors.js} +0 -0
- /package/lib/{config.model.d.ts → src/config.model.d.ts} +0 -0
- /package/lib/{config.model.js → src/config.model.js} +0 -0
- /package/lib/{environment.service.d.ts → src/environment.service.d.ts} +0 -0
- /package/lib/{environment.service.js → src/environment.service.js} +0 -0
- /package/lib/{json-schema.validator.d.ts → src/json-schema.validator.d.ts} +0 -0
- /package/lib/{json-schema.validator.js → src/json-schema.validator.js} +0 -0
|
@@ -0,0 +1,576 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VaultProvider
|
|
3
|
+
* Vault client wrapper for HashiCorp Vault integration
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { GoogleAuth } from 'google-auth-library';
|
|
7
|
+
import vault, { VaultOptions } from 'node-vault';
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
IAppRoleAuthConfig,
|
|
11
|
+
IAWSAuthConfig,
|
|
12
|
+
IGCPAuthConfig,
|
|
13
|
+
IRetryPolicy,
|
|
14
|
+
ITokenAuthConfig,
|
|
15
|
+
IVaultAuthMethod,
|
|
16
|
+
IVaultConfigOptions,
|
|
17
|
+
IVaultSecret,
|
|
18
|
+
IVaultSecretResponse,
|
|
19
|
+
VaultEngineType
|
|
20
|
+
} from './types';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* VaultProvider - Manages Vault connections and operations
|
|
24
|
+
*/
|
|
25
|
+
export class VaultProvider {
|
|
26
|
+
private client: any;
|
|
27
|
+
private config: IVaultConfigOptions;
|
|
28
|
+
private currentToken: string | null = null;
|
|
29
|
+
private tokenExpiry = 0;
|
|
30
|
+
private retryPolicy: IRetryPolicy;
|
|
31
|
+
private isConnected = false;
|
|
32
|
+
|
|
33
|
+
constructor(config: IVaultConfigOptions) {
|
|
34
|
+
this.config = config;
|
|
35
|
+
this.retryPolicy = config.retry || {
|
|
36
|
+
maxAttempts: 3,
|
|
37
|
+
backoff: {
|
|
38
|
+
strategy: 'exponential',
|
|
39
|
+
initial: 1000,
|
|
40
|
+
max: 10000,
|
|
41
|
+
multiplier: 2
|
|
42
|
+
},
|
|
43
|
+
retryableErrors: [ 'ECONNREFUSED', 'ETIMEDOUT', 'ENOTFOUND', '5xx' ]
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Initialize Vault connection and authenticate
|
|
49
|
+
*/
|
|
50
|
+
async initialize(): Promise<void> {
|
|
51
|
+
// Validate TLS configuration
|
|
52
|
+
this.validateTLS();
|
|
53
|
+
|
|
54
|
+
// Create Vault client
|
|
55
|
+
const vaultOptions: VaultOptions = {
|
|
56
|
+
endpoint: this.config.endpoint,
|
|
57
|
+
apiVersion: 'v1'
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// Configure TLS
|
|
61
|
+
if (this.config.tls) {
|
|
62
|
+
vaultOptions.requestOptions = {
|
|
63
|
+
...vaultOptions.requestOptions,
|
|
64
|
+
rejectUnauthorized: this.config.tls.verifyCertificate !== false
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
if (this.config.tls.caCert) {
|
|
68
|
+
vaultOptions.requestOptions = {
|
|
69
|
+
...vaultOptions.requestOptions,
|
|
70
|
+
ca: this.config.tls.caCert
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
this.client = vault(vaultOptions);
|
|
76
|
+
|
|
77
|
+
// Authenticate using priority order
|
|
78
|
+
await this.authenticate();
|
|
79
|
+
this.isConnected = true;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Connect to Vault (alias for initialize)
|
|
84
|
+
*/
|
|
85
|
+
async connect(): Promise<void> {
|
|
86
|
+
await this.initialize();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Disconnect from Vault
|
|
91
|
+
*/
|
|
92
|
+
async disconnect(): Promise<void> {
|
|
93
|
+
this.currentToken = null;
|
|
94
|
+
this.tokenExpiry = 0;
|
|
95
|
+
this.isConnected = false;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Check if connected and authenticated
|
|
100
|
+
*/
|
|
101
|
+
connected(): boolean {
|
|
102
|
+
return this.isConnected && this.currentToken !== null;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Check if token has expired
|
|
107
|
+
*/
|
|
108
|
+
isTokenExpired(): boolean {
|
|
109
|
+
if (this.tokenExpiry === 0) {
|
|
110
|
+
// No expiry tracking (e.g., token auth)
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
// Add small buffer (5s) to avoid edge cases
|
|
114
|
+
return Date.now() >= (this.tokenExpiry - 5000);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Re-authenticate if token is expired
|
|
119
|
+
*/
|
|
120
|
+
async ensureAuthenticated(): Promise<void> {
|
|
121
|
+
if (!this.isConnected) {
|
|
122
|
+
throw new Error('Not connected to Vault');
|
|
123
|
+
}
|
|
124
|
+
if (this.isTokenExpired()) {
|
|
125
|
+
await this.authenticate();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Read secret from Vault with engine type support
|
|
131
|
+
*/
|
|
132
|
+
async readSecret(path: string, engine: VaultEngineType = 'kv2'): Promise<IVaultSecret> {
|
|
133
|
+
await this.ensureAuthenticated();
|
|
134
|
+
|
|
135
|
+
// Construct full path based on engine type
|
|
136
|
+
let fullPath: string;
|
|
137
|
+
switch (engine) {
|
|
138
|
+
case 'kv1':
|
|
139
|
+
case 'kv-v1':
|
|
140
|
+
fullPath = `secret/${ path }`;
|
|
141
|
+
break;
|
|
142
|
+
case 'kv2':
|
|
143
|
+
case 'kv-v2':
|
|
144
|
+
fullPath = `secret/data/${ path }`;
|
|
145
|
+
break;
|
|
146
|
+
case 'database':
|
|
147
|
+
fullPath = path.startsWith('database/') ? path : `database/${ path }`;
|
|
148
|
+
break;
|
|
149
|
+
default:
|
|
150
|
+
fullPath = path;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return this.read(fullPath);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Validate TLS configuration
|
|
158
|
+
*/
|
|
159
|
+
private validateTLS(): void {
|
|
160
|
+
const tlsConfig = this.config.tls || { enabled: true, verifyCertificate: true };
|
|
161
|
+
const endpoint = this.config.endpoint.toLowerCase();
|
|
162
|
+
|
|
163
|
+
// Enforce HTTPS in production (allow HTTP only for localhost)
|
|
164
|
+
if (tlsConfig.enabled !== false) {
|
|
165
|
+
if (!endpoint.startsWith('https://') && !endpoint.startsWith('http://127.0.0.1') && !endpoint.startsWith('http://localhost')) {
|
|
166
|
+
throw new Error('TLS is required for Vault communication. Use HTTPS endpoint or set tls.enabled=false for local development only.');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Warn if HTTP is used (even for localhost)
|
|
171
|
+
if (endpoint.startsWith('http://')) {
|
|
172
|
+
console.warn('WARNING: Using HTTP for Vault connection. This should only be used for local development.');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Authenticate using priority order: GCP IAM → AWS IAM → AppRole → Token
|
|
178
|
+
*/
|
|
179
|
+
private async authenticate(): Promise<void> {
|
|
180
|
+
// Normalize auth config to method array
|
|
181
|
+
const methods = this.normalizeAuthConfig();
|
|
182
|
+
|
|
183
|
+
if (methods.length === 0) {
|
|
184
|
+
throw new Error('No authentication methods configured');
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const errors: Error[] = [];
|
|
188
|
+
|
|
189
|
+
for (const method of methods) {
|
|
190
|
+
try {
|
|
191
|
+
await this.authenticateWithMethod(method);
|
|
192
|
+
// Success, exit
|
|
193
|
+
return;
|
|
194
|
+
} catch (error) {
|
|
195
|
+
errors.push(error as Error);
|
|
196
|
+
// Continue to next method
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// All methods failed
|
|
201
|
+
const errorMessages = errors.map((e) => e.message).join('; ');
|
|
202
|
+
throw new Error(`All authentication methods failed: ${ errorMessages }`);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Normalize auth config to method array
|
|
207
|
+
* Supports both simple single-method and array-based configs
|
|
208
|
+
*/
|
|
209
|
+
private normalizeAuthConfig(): IVaultAuthMethod[] {
|
|
210
|
+
const auth = this.config.auth;
|
|
211
|
+
|
|
212
|
+
if (!auth) {
|
|
213
|
+
return [];
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Check if it's the array-based format
|
|
217
|
+
if ('methods' in auth && Array.isArray(auth.methods)) {
|
|
218
|
+
return auth.methods;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// It's the simple format with 'method' property
|
|
222
|
+
if ('method' in auth) {
|
|
223
|
+
const simpleAuth = auth as { method: string };
|
|
224
|
+
return [ {
|
|
225
|
+
type: simpleAuth.method as 'gcp' | 'aws' | 'approle' | 'token',
|
|
226
|
+
config: auth
|
|
227
|
+
} ];
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return [];
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Authenticate with a specific method
|
|
235
|
+
*/
|
|
236
|
+
private async authenticateWithMethod(method: IVaultAuthMethod): Promise<void> {
|
|
237
|
+
switch (method.type) {
|
|
238
|
+
case 'gcp':
|
|
239
|
+
await this.authenticateGCP(method.config as IGCPAuthConfig);
|
|
240
|
+
break;
|
|
241
|
+
case 'aws':
|
|
242
|
+
await this.authenticateAWS(method.config as IAWSAuthConfig);
|
|
243
|
+
break;
|
|
244
|
+
case 'approle':
|
|
245
|
+
await this.authenticateAppRole(method.config as IAppRoleAuthConfig);
|
|
246
|
+
break;
|
|
247
|
+
case 'token':
|
|
248
|
+
await this.authenticateToken(method.config as ITokenAuthConfig);
|
|
249
|
+
break;
|
|
250
|
+
default:
|
|
251
|
+
throw new Error(`Unsupported authentication method: ${ method.type }`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Authenticate using GCP IAM
|
|
257
|
+
* Uses Google IAM API to sign a JWT, then exchanges it for a Vault token
|
|
258
|
+
*/
|
|
259
|
+
private async authenticateGCP(config: IGCPAuthConfig): Promise<void> {
|
|
260
|
+
const { role, serviceAccountKeyFile, serviceAccountEmail } = config;
|
|
261
|
+
|
|
262
|
+
if (!role) {
|
|
263
|
+
throw new Error('GCP IAM authentication requires a role name');
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
try {
|
|
267
|
+
// Get credentials from key file or Application Default Credentials
|
|
268
|
+
const auth = new GoogleAuth({
|
|
269
|
+
keyFile: serviceAccountKeyFile,
|
|
270
|
+
scopes: [ 'https://www.googleapis.com/auth/cloud-platform' ]
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
// Get the service account email
|
|
274
|
+
const credentials = await auth.getCredentials();
|
|
275
|
+
const saEmail = serviceAccountEmail || credentials.client_email;
|
|
276
|
+
|
|
277
|
+
if (!saEmail) {
|
|
278
|
+
throw new Error('Could not determine service account email');
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Create JWT claims for Vault
|
|
282
|
+
const now = Math.floor(Date.now() / 1000);
|
|
283
|
+
// Default JWT expiration: 15 minutes
|
|
284
|
+
const expiry = config.jwtExpiration || 900;
|
|
285
|
+
|
|
286
|
+
const jwtClaims = {
|
|
287
|
+
aud: `vault/${ role }`,
|
|
288
|
+
sub: saEmail,
|
|
289
|
+
iat: now,
|
|
290
|
+
exp: now + expiry
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
// Use Google IAM API to sign the JWT
|
|
294
|
+
// This ensures Vault can verify using Google's public keys
|
|
295
|
+
const signedJwt = await this.signJwtWithGoogleIAM(auth, saEmail, jwtClaims);
|
|
296
|
+
|
|
297
|
+
// Call Vault's GCP auth endpoint
|
|
298
|
+
const response = await this.client.write('auth/gcp/login', {
|
|
299
|
+
role,
|
|
300
|
+
jwt: signedJwt
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
if (!response?.auth?.client_token) {
|
|
304
|
+
throw new Error('GCP IAM authentication failed: No token received');
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
this.currentToken = response.auth.client_token;
|
|
308
|
+
this.client.token = this.currentToken;
|
|
309
|
+
|
|
310
|
+
// Track token expiry for auto-renewal
|
|
311
|
+
const tokenTTL = response.auth.lease_duration || 0;
|
|
312
|
+
if (tokenTTL > 0) {
|
|
313
|
+
this.tokenExpiry = Date.now() + (tokenTTL * 1000);
|
|
314
|
+
}
|
|
315
|
+
} catch (error: any) {
|
|
316
|
+
const message = error.message || 'Unknown GCP auth error';
|
|
317
|
+
throw new Error(`GCP IAM authentication failed: ${ message }`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Sign a JWT using Google's IAM signJwt API
|
|
323
|
+
* This allows Vault to verify the signature using Google's public keys
|
|
324
|
+
*/
|
|
325
|
+
private async signJwtWithGoogleIAM(
|
|
326
|
+
auth: GoogleAuth,
|
|
327
|
+
serviceAccountEmail: string,
|
|
328
|
+
claims: object
|
|
329
|
+
): Promise<string> {
|
|
330
|
+
const client = await auth.getClient();
|
|
331
|
+
|
|
332
|
+
// Build the JWT payload (without signature) as a JSON string
|
|
333
|
+
const payload = JSON.stringify(claims);
|
|
334
|
+
|
|
335
|
+
// Call IAM signJwt API
|
|
336
|
+
const iamUrl = `https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${ serviceAccountEmail }:signJwt`;
|
|
337
|
+
|
|
338
|
+
const response = await client.request({
|
|
339
|
+
url: iamUrl,
|
|
340
|
+
method: 'POST',
|
|
341
|
+
data: { payload }
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
345
|
+
const signedJwt = (response.data as any).signedJwt;
|
|
346
|
+
|
|
347
|
+
if (!signedJwt) {
|
|
348
|
+
throw new Error('Failed to sign JWT with Google IAM');
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return signedJwt;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Authenticate using AWS IAM
|
|
356
|
+
*/
|
|
357
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
358
|
+
private authenticateAWS(_config: IAWSAuthConfig): Promise<void> {
|
|
359
|
+
// Note: AWS IAM auth requires AWS SDK and proper IAM role setup
|
|
360
|
+
// For now, we'll throw an error indicating it needs to be implemented
|
|
361
|
+
// In a full implementation, this would:
|
|
362
|
+
// 1. Get AWS credentials from instance profile or environment
|
|
363
|
+
// 2. Create AWS signature
|
|
364
|
+
// 3. Call Vault AWS auth endpoint
|
|
365
|
+
throw new Error('AWS IAM authentication not yet implemented. Use AppRole or Token for now.');
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Authenticate using AppRole
|
|
370
|
+
*/
|
|
371
|
+
private async authenticateAppRole(config: IAppRoleAuthConfig): Promise<void> {
|
|
372
|
+
if (!config.roleId || !config.secretId) {
|
|
373
|
+
throw new Error('AppRole authentication requires roleId and secretId');
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
const mountPath = config.mountPath || 'approle';
|
|
377
|
+
const response = await this.client.approleLogin({
|
|
378
|
+
role_id: config.roleId,
|
|
379
|
+
secret_id: config.secretId,
|
|
380
|
+
mount_point: mountPath
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
if (!response?.auth?.client_token) {
|
|
384
|
+
throw new Error('AppRole authentication failed: No token received');
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
this.currentToken = response.auth.client_token;
|
|
388
|
+
this.client.token = this.currentToken;
|
|
389
|
+
|
|
390
|
+
// Track token expiry for auto-renewal
|
|
391
|
+
const tokenTTL = response.auth.lease_duration || 0;
|
|
392
|
+
if (tokenTTL > 0) {
|
|
393
|
+
this.tokenExpiry = Date.now() + (tokenTTL * 1000);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Authenticate using Token
|
|
399
|
+
*/
|
|
400
|
+
private async authenticateToken(config: ITokenAuthConfig): Promise<void> {
|
|
401
|
+
if (!config.token) {
|
|
402
|
+
throw new Error('Token authentication requires a token');
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
this.currentToken = config.token;
|
|
406
|
+
this.client.token = this.currentToken;
|
|
407
|
+
|
|
408
|
+
// Verify token is valid by checking token lookup
|
|
409
|
+
try {
|
|
410
|
+
await this.client.tokenLookupSelf();
|
|
411
|
+
} catch (error) {
|
|
412
|
+
throw new Error(`Token authentication failed: Invalid token`);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Read secret from Vault
|
|
418
|
+
*/
|
|
419
|
+
async read(path: string): Promise<IVaultSecret> {
|
|
420
|
+
return this.executeWithRetry(async () => {
|
|
421
|
+
const response = await this.client.read(path);
|
|
422
|
+
|
|
423
|
+
if (!response) {
|
|
424
|
+
throw new Error(`Secret not found at path: ${ this.sanitizePath(path) }`);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
return this.normalizeSecretResponse(response);
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* Renew lease for dynamic secret
|
|
433
|
+
*/
|
|
434
|
+
async renewLease(leaseId: string, increment?: number): Promise<void> {
|
|
435
|
+
return this.executeWithRetry(async () => {
|
|
436
|
+
await this.client.write('sys/leases/renew', {
|
|
437
|
+
lease_id: leaseId,
|
|
438
|
+
increment: increment
|
|
439
|
+
});
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Normalize Vault secret response to internal format
|
|
445
|
+
*/
|
|
446
|
+
private normalizeSecretResponse(response: IVaultSecretResponse): IVaultSecret {
|
|
447
|
+
// Handle KV v2 nested structure
|
|
448
|
+
const data = response.data?.data || response.data || {};
|
|
449
|
+
|
|
450
|
+
return {
|
|
451
|
+
data,
|
|
452
|
+
leaseId: response.lease_id,
|
|
453
|
+
leaseDuration: response.lease_duration || 0,
|
|
454
|
+
renewable: response.renewable || false,
|
|
455
|
+
metadata: response.data?.metadata
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Execute operation with retry logic
|
|
461
|
+
*/
|
|
462
|
+
private async executeWithRetry<T>(operation: () => Promise<T>): Promise<T> {
|
|
463
|
+
let lastError: Error | null = null;
|
|
464
|
+
|
|
465
|
+
for (let attempt = 1; attempt <= this.retryPolicy.maxAttempts; attempt++) {
|
|
466
|
+
try {
|
|
467
|
+
return await operation();
|
|
468
|
+
} catch (error: any) {
|
|
469
|
+
lastError = error;
|
|
470
|
+
|
|
471
|
+
// Check if error is retryable - don't retry non-retryable errors
|
|
472
|
+
if (!this.isRetryableError(error)) {
|
|
473
|
+
throw error;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// Don't retry on last attempt
|
|
477
|
+
if (attempt === this.retryPolicy.maxAttempts) {
|
|
478
|
+
break;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
// Calculate backoff delay
|
|
482
|
+
const delay = this.calculateBackoff(attempt);
|
|
483
|
+
await this.sleep(delay);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
throw lastError || new Error('Operation failed after retries');
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* Check if error is retryable
|
|
492
|
+
*/
|
|
493
|
+
private isRetryableError(error: any): boolean {
|
|
494
|
+
const errorMessage = error.message || '';
|
|
495
|
+
const errorCode = error.code || '';
|
|
496
|
+
const statusCode = error.statusCode || error.response?.statusCode;
|
|
497
|
+
|
|
498
|
+
// Check against retryable error patterns
|
|
499
|
+
for (const pattern of this.retryPolicy.retryableErrors) {
|
|
500
|
+
if (pattern.includes('xx') && statusCode) {
|
|
501
|
+
// Handle HTTP status code patterns like '5xx'
|
|
502
|
+
const codePrefix = parseInt(pattern[0]);
|
|
503
|
+
const statusPrefix = Math.floor(statusCode / 100);
|
|
504
|
+
if (statusPrefix === codePrefix) {
|
|
505
|
+
return true;
|
|
506
|
+
}
|
|
507
|
+
} else if (errorMessage.includes(pattern) || errorCode.includes(pattern)) {
|
|
508
|
+
return true;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
return false;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
/**
|
|
516
|
+
* Calculate backoff delay
|
|
517
|
+
*/
|
|
518
|
+
private calculateBackoff(attempt: number): number {
|
|
519
|
+
const { strategy, initial, max, multiplier } = this.retryPolicy.backoff;
|
|
520
|
+
|
|
521
|
+
let delay: number;
|
|
522
|
+
|
|
523
|
+
switch (strategy) {
|
|
524
|
+
case 'exponential':
|
|
525
|
+
delay = initial * Math.pow(multiplier, attempt - 1);
|
|
526
|
+
break;
|
|
527
|
+
case 'linear':
|
|
528
|
+
delay = initial * attempt;
|
|
529
|
+
break;
|
|
530
|
+
case 'fixed':
|
|
531
|
+
default:
|
|
532
|
+
delay = initial;
|
|
533
|
+
break;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
return Math.min(delay, max);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* Sleep utility
|
|
541
|
+
*/
|
|
542
|
+
private sleep(ms: number): Promise<void> {
|
|
543
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
* Sanitize path for logging (mask sensitive segments)
|
|
548
|
+
*/
|
|
549
|
+
private sanitizePath(path: string): string {
|
|
550
|
+
// Mask last segment if potentially sensitive
|
|
551
|
+
const segments = path.split('/');
|
|
552
|
+
if (segments.length > 0) {
|
|
553
|
+
const lastSegment = segments[segments.length - 1];
|
|
554
|
+
// Simple check for potentially sensitive names
|
|
555
|
+
const sensitivePatterns = [ /password/i, /secret/i, /key/i, /token/i, /credential/i ];
|
|
556
|
+
if (sensitivePatterns.some((pattern) => pattern.test(lastSegment))) {
|
|
557
|
+
segments[segments.length - 1] = '***';
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
return segments.join('/');
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
/**
|
|
564
|
+
* Get current token (for debugging, never log this)
|
|
565
|
+
*/
|
|
566
|
+
getToken(): string | null {
|
|
567
|
+
return this.currentToken;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/**
|
|
571
|
+
* Check if authenticated
|
|
572
|
+
*/
|
|
573
|
+
isAuthenticated(): boolean {
|
|
574
|
+
return this.currentToken !== null;
|
|
575
|
+
}
|
|
576
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.errors.d.ts","sourceRoot":"","sources":["../src/config.errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIlD,OAAO,OAAO,MAAM,mBAAmB,CAAC;AAExC,qBAAa,qBAAsB,SAAQ,OAAO;gBACpC,gBAAgB,EAAE,eAAe,EAAE;CAkBhD"}
|
package/lib/config.errors.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.errors.js","sourceRoot":"","sources":["../src/config.errors.ts"],"names":[],"mappings":";;;;;;AACA,mCAAmC;AACnC,mCAAuC;AAEvC,iEAAwC;AAExC,MAAa,qBAAsB,SAAQ,kBAAO;IAChD,YAAY,gBAAmC;QAC7C,MAAM,OAAO,GAAG,gBAAgB;aAC7B,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE;YACvB,MAAM,IAAI,GAAG,IAAA,aAAI,EAAC,IAAA,cAAK,EAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,OAAO;gBACL,EAAE;gBACF,IAAI;gBACJ,IAAK,IAAA,aAAI,EAAC,WAAW,CAAE,IAAK,eAAe,CAAC,QAAS,EAAE;gBACvD,IAAK,IAAA,aAAI,EAAC,QAAQ,CAAE,IAAK,IAAA,YAAG,EAAC,eAAe,CAAC,KAAK,CAAE,EAAE;gBACtD,IAAI;gBACJ,IAAA,eAAM,EAAC,eAAe,CAAC,WAAW,CAAC;qBAChC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAU,IAAA,YAAG,EAAC,KAAK,CAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;aACtD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAnBD,sDAmBC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.model.d.ts","sourceRoot":"","sources":["../src/config.model.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD,eAAO,MAAM,wBAAwB,UAQpC,CAAC;AAEF,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAElD,qBACa,UAAU;IACrB,IAAI,EAAE,MAAM,CAAC;IAOX,QAAQ,SAAiB;IAOzB,UAAU,UAAS;IAQnB,OAAO,EAAE,YAAY,CAAC;IAQtB,OAAO,MAAC;IAQR,QAAQ,MAAC;gBAEC,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM;IAItC,YAAY;IAwCnB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC;IAIxC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,UAAQ;IAU/C,iBAAiB;CAGlB"}
|
package/lib/config.model.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.model.js","sourceRoot":"","sources":["../src/config.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../src/config.service.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAY5C,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,aAAa,CAAC,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,yBAAyB;IACtC,UAAU,EAAE,YAAY,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAQlD,qBAAa,aAAa,CAAC,CAAC,SAAS,UAAU;IAC7C,OAAO,CAAC,aAAa,CAAe;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAoB;IACzC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAM;IACrC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAGvB,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,EACrB,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACzB,OAAO,GAAE,qBAA0B;IAwErC,aAAa;IAKb,iBAAiB,CACf,EACE,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACb,GAAE,yBAGF;IA8DH,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,eAAe;IA2DvB,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,uBAAuB;IAoC/B,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,wBAAwB;CAQjC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.service.js","sourceRoot":"","sources":["../src/config.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"environment.service.d.ts","sourceRoot":"","sources":["../src/environment.service.ts"],"names":[],"mappings":"AAMA,wBAAgB,cAAc,CAAC,gBAAgB,EAAE,MAAM,QAEtD;AAED,wBAAgB,cAAc,WAE7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"environment.service.js","sourceRoot":"","sources":["../src/environment.service.ts"],"names":[],"mappings":";;;AAAA,mCAA6B;AAE7B,MAAM,eAAe,GAAG,IAAA,YAAG,EAAC,OAAO,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;AAEpE,IAAI,WAAmB,CAAC;AAExB,SAAgB,cAAc,CAAC,gBAAwB;IACrD,WAAW,GAAG,gBAAgB,CAAC;AACjC,CAAC;AAFD,wCAEC;AAED,SAAgB,cAAc;IAC5B,OAAO,WAAW,IAAI,eAAe,CAAC;AACxC,CAAC;AAFD,wCAEC"}
|
package/lib/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,kDAAgC;AAChC,iDAA+B;AAC/B,0DAAwC;AACxC,wDAAsC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.validator.d.ts","sourceRoot":"","sources":["../src/json-schema.validator.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAaD,wBAAgB,aAAa,IAAI,cAAc,CAM9C;AAED,wBAAgB,cAAc,CAC5B,WAAW,GAAE,MAAM,GAAG,MAAM,EAAO,EACnC,OAAO,GAAE,sBAA2B,GACnC,iBAAiB,CASnB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.validator.js","sourceRoot":"","sources":["../src/json-schema.validator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,yDAAoD;AACpD,qDAIyB;AAOzB,IAAM,UAAU,GAAhB,MAAM,UAAU;IACd,QAAQ;QACN,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAA;AARK,UAAU;IADf,IAAA,qCAAmB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GACpD,UAAU,CAQf;AAED,SAAgB,aAAa;IAC3B,MAAM,QAAQ,GAAG,IAAA,2BAAO,GAAE,CAAC;IAE3B,OAAO,UAAS,MAAW;QACzB,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC;AAND,sCAMC;AAED,SAAgB,cAAc,CAC5B,cAAiC,EAAE,EACnC,UAAkC,EAAE;IAEpC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAE,WAAW,CAAE,CAAC;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,2BAAO,GAAE,CAAC,CAAC,CAAC,IAAA,0BAAM,GAAE,CAAC;IACxD,MAAM,MAAM,GAAG,IAAA,0BAAQ,EAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAEjD,OAAO,UAAS,MAAe,EAAE,GAAW;QAC1C,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC;AAZD,wCAYC"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|