@kibibit/configit 1.0.0-beta.25 → 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.
Files changed (98) hide show
  1. package/README.md +419 -0
  2. package/lib/scripts/test-vault-comprehensive.d.ts +2 -0
  3. package/lib/scripts/test-vault-comprehensive.d.ts.map +1 -0
  4. package/lib/scripts/test-vault-comprehensive.js +422 -0
  5. package/lib/scripts/test-vault-comprehensive.js.map +1 -0
  6. package/lib/scripts/test-vault-dynamic.d.ts +2 -0
  7. package/lib/scripts/test-vault-dynamic.d.ts.map +1 -0
  8. package/lib/scripts/test-vault-dynamic.js +193 -0
  9. package/lib/scripts/test-vault-dynamic.js.map +1 -0
  10. package/lib/scripts/test-vault-gcp-ttl.d.ts +3 -0
  11. package/lib/scripts/test-vault-gcp-ttl.d.ts.map +1 -0
  12. package/lib/scripts/test-vault-gcp-ttl.js +218 -0
  13. package/lib/scripts/test-vault-gcp-ttl.js.map +1 -0
  14. package/lib/scripts/test-vault.d.ts +2 -0
  15. package/lib/scripts/test-vault.d.ts.map +1 -0
  16. package/lib/scripts/test-vault.js +167 -0
  17. package/lib/scripts/test-vault.js.map +1 -0
  18. package/lib/src/config.errors.d.ts.map +1 -0
  19. package/lib/src/config.errors.js.map +1 -0
  20. package/lib/src/config.model.d.ts.map +1 -0
  21. package/lib/src/config.model.js.map +1 -0
  22. package/lib/{config.service.d.ts → src/config.service.d.ts} +10 -1
  23. package/lib/src/config.service.d.ts.map +1 -0
  24. package/lib/{config.service.js → src/config.service.js} +75 -9
  25. package/lib/src/config.service.js.map +1 -0
  26. package/lib/src/environment.service.d.ts.map +1 -0
  27. package/lib/src/environment.service.js.map +1 -0
  28. package/lib/{index.d.ts → src/index.d.ts} +1 -0
  29. package/lib/src/index.d.ts.map +1 -0
  30. package/lib/{index.js → src/index.js} +1 -0
  31. package/lib/src/index.js.map +1 -0
  32. package/lib/src/json-schema.validator.d.ts.map +1 -0
  33. package/lib/src/json-schema.validator.js.map +1 -0
  34. package/lib/src/vault/__tests__/vault-integration.test.d.ts +2 -0
  35. package/lib/src/vault/__tests__/vault-integration.test.d.ts.map +1 -0
  36. package/lib/src/vault/__tests__/vault-integration.test.js +190 -0
  37. package/lib/src/vault/__tests__/vault-integration.test.js.map +1 -0
  38. package/lib/src/vault/decorators.d.ts +17 -0
  39. package/lib/src/vault/decorators.d.ts.map +1 -0
  40. package/lib/src/vault/decorators.js +149 -0
  41. package/lib/src/vault/decorators.js.map +1 -0
  42. package/lib/src/vault/index.d.ts +7 -0
  43. package/lib/src/vault/index.d.ts.map +1 -0
  44. package/lib/src/vault/index.js +42 -0
  45. package/lib/src/vault/index.js.map +1 -0
  46. package/lib/src/vault/secret-refresh-manager.d.ts +23 -0
  47. package/lib/src/vault/secret-refresh-manager.d.ts.map +1 -0
  48. package/lib/src/vault/secret-refresh-manager.js +149 -0
  49. package/lib/src/vault/secret-refresh-manager.js.map +1 -0
  50. package/lib/src/vault/types.d.ts +149 -0
  51. package/lib/src/vault/types.d.ts.map +1 -0
  52. package/lib/src/vault/types.js +4 -0
  53. package/lib/src/vault/types.js.map +1 -0
  54. package/lib/src/vault/vault-cache.d.ts +20 -0
  55. package/lib/src/vault/vault-cache.d.ts.map +1 -0
  56. package/lib/src/vault/vault-cache.js +139 -0
  57. package/lib/src/vault/vault-cache.js.map +1 -0
  58. package/lib/src/vault/vault-integration.d.ts +27 -0
  59. package/lib/src/vault/vault-integration.d.ts.map +1 -0
  60. package/lib/src/vault/vault-integration.js +211 -0
  61. package/lib/src/vault/vault-integration.js.map +1 -0
  62. package/lib/src/vault/vault-provider.d.ts +37 -0
  63. package/lib/src/vault/vault-provider.d.ts.map +1 -0
  64. package/lib/src/vault/vault-provider.js +354 -0
  65. package/lib/src/vault/vault-provider.js.map +1 -0
  66. package/lib/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +14 -74
  68. package/src/config.service.ts +155 -10
  69. package/src/config.service.vault.spec.ts +859 -0
  70. package/src/index.ts +1 -0
  71. package/src/vault/__tests__/vault-integration.test.ts +226 -0
  72. package/src/vault/decorators.ts +228 -0
  73. package/src/vault/index.ts +31 -0
  74. package/src/vault/secret-refresh-manager.ts +241 -0
  75. package/src/vault/types.ts +487 -0
  76. package/src/vault/vault-cache.ts +240 -0
  77. package/src/vault/vault-integration.ts +332 -0
  78. package/src/vault/vault-provider.ts +576 -0
  79. package/lib/config.errors.d.ts.map +0 -1
  80. package/lib/config.errors.js.map +0 -1
  81. package/lib/config.model.d.ts.map +0 -1
  82. package/lib/config.model.js.map +0 -1
  83. package/lib/config.service.d.ts.map +0 -1
  84. package/lib/config.service.js.map +0 -1
  85. package/lib/environment.service.d.ts.map +0 -1
  86. package/lib/environment.service.js.map +0 -1
  87. package/lib/index.d.ts.map +0 -1
  88. package/lib/index.js.map +0 -1
  89. package/lib/json-schema.validator.d.ts.map +0 -1
  90. package/lib/json-schema.validator.js.map +0 -1
  91. /package/lib/{config.errors.d.ts → src/config.errors.d.ts} +0 -0
  92. /package/lib/{config.errors.js → src/config.errors.js} +0 -0
  93. /package/lib/{config.model.d.ts → src/config.model.d.ts} +0 -0
  94. /package/lib/{config.model.js → src/config.model.js} +0 -0
  95. /package/lib/{environment.service.d.ts → src/environment.service.d.ts} +0 -0
  96. /package/lib/{environment.service.js → src/environment.service.js} +0 -0
  97. /package/lib/{json-schema.validator.d.ts → src/json-schema.validator.d.ts} +0 -0
  98. /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"}
@@ -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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.model.js","sourceRoot":"","sources":["../src/config.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAKyB;AACzB,2EAA0E;AAC1E,mCAA0C;AAE1C,qDAAgD;AAChD,+DAAuD;AACvD,mEAAwE;AAE3D,QAAA,wBAAwB,GAAG;IACtC,QAAQ;IACR,aAAa;IACb,YAAY;IACZ,MAAM;IACN,cAAc;IACd,SAAS;IACT,KAAK;CACN,CAAC;AAIF,IACa,UAAU,GADvB,MACa,UAAU;IAyCrB,YAAY,UAA+B,EAAE;QAjC3C,aAAQ,GAAG,aAAa,CAAC;QAOzB,eAAU,GAAG,KAAK,CAAC;QA2BnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAEM,YAAY;QACjB,MAAM,mBAAmB,GAAG,IAAA,yDAA4B,EAAC;YACvD,oBAAoB,EAAE;gBACpB,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACrB,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;iBACvC,CAAC;aACH;SACF,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,IAAA,cAAK,EAAC,mBAAmB,CAAC;aAC9C,IAAI,EAAE;aACN,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;aACxD,KAAK,EAAE,CAAC;QACX,MAAM,gBAAgB,GAAG,IAAA,cAAK,EAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;aAChE,IAAI,CAAC;YACJ,qBAAqB;YACrB,oBAAoB;YACpB,uBAAuB;YACvB,qBAAqB;YACrB,oBAAoB;YACpB,oBAAoB;SACrB,CAAC;aACD,KAAK,EAAE,CAAC;QAEX,IAAI,gBAAgB,CAAC,QAAQ,EAAE;YAC7B,gBAAgB,CAAC,QAAQ,GAAG,IAAA,cAAK,EAAC,gBAAgB,CAAC,QAAQ,CAAC;iBACzD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClB,UAAU;gBACV,SAAS;gBACT,YAAY;gBACZ,UAAU;gBACV,SAAS;gBACT,SAAS;aACV,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;iBACjB,KAAK,EAAE,CAAC;SACZ;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEO,aAAa,CAAC,QAAgB;QACpC,OAAO,IAAA,cAAK,EAAC,QAAQ,CAAC;aACnB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;aACvB,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;aAC9B,KAAK,EAAE,CAAC;IACb,CAAC;IAED,OAAO,CAAC,YAAgC;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,WAAW,CAAC,GAAW,EAAE,cAAc,GAAG,KAAK;QAC7C,OAAO;YACL,OAAO;YACP,IAAA,oCAAc,GAAE,EAAE,GAAG;YACrB,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YACjC,IAAA,kBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG;YACzB,GAAG;SACJ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,CAAC;IAED,iBAAiB;QACf,OAAO,GAAI,IAAA,kBAAS,EAAC,IAAI,CAAC,IAAI,CAAE,kBAAkB,CAAC;IACrD,CAAC;CACF,CAAA;AArGG;IALD,IAAA,0BAAQ,GAAE;IACV,IAAA,sCAAc,EACb,oEAAoE,EACpE,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB;;4CAC0B;AAOzB;IALD,IAAA,2BAAS,GAAE;IACX,IAAA,sCAAc,EAAC;QACd,oEAAoE;QACpE,4EAA4E;KAC7E,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;8CACA;AAQnB;IAND,IAAA,wBAAM,EAAC,6BAAY,CAAC;IACpB,IAAA,4BAAU,GAAE;IACZ,IAAA,sCAAc,EACb,0DAA0D,EAC1D,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB;;2CACuB;AAQtB;IAND,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,sCAAc,EACb,+BAA+B,EAC/B,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB;;2CACS;AAQR;IAND,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,GAAE;IACZ,IAAA,sCAAc,EACb,6CAA6C,EAC7C,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB;;4CACU;AAvCA,UAAU;IADtB,IAAA,qCAAa,GAAE;;GACH,UAAU,CA6GtB;AA7GY,gCAAU"}
@@ -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"}
@@ -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