@marktoflow/core 2.0.3 → 2.0.4
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 +69 -6
- package/dist/built-in-operations.d.ts +2 -136
- package/dist/built-in-operations.d.ts.map +1 -1
- package/dist/built-in-operations.js +7 -743
- package/dist/built-in-operations.js.map +1 -1
- package/dist/engine/conditions.d.ts +29 -0
- package/dist/engine/conditions.d.ts.map +1 -0
- package/dist/engine/conditions.js +109 -0
- package/dist/engine/conditions.js.map +1 -0
- package/dist/engine/control-flow.d.ts +35 -0
- package/dist/engine/control-flow.d.ts.map +1 -0
- package/dist/engine/control-flow.js +653 -0
- package/dist/engine/control-flow.js.map +1 -0
- package/dist/engine/index.d.ts +12 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +11 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/retry.d.ts +35 -0
- package/dist/engine/retry.d.ts.map +1 -0
- package/dist/engine/retry.js +86 -0
- package/dist/engine/retry.js.map +1 -0
- package/dist/engine/subworkflow.d.ts +31 -0
- package/dist/engine/subworkflow.d.ts.map +1 -0
- package/dist/engine/subworkflow.js +240 -0
- package/dist/engine/subworkflow.js.map +1 -0
- package/dist/engine/types.d.ts +55 -0
- package/dist/engine/types.d.ts.map +1 -0
- package/dist/engine/types.js +5 -0
- package/dist/{secrets → engine}/types.js.map +1 -1
- package/dist/engine/variable-resolution.d.ts +29 -0
- package/dist/engine/variable-resolution.d.ts.map +1 -0
- package/dist/engine/variable-resolution.js +130 -0
- package/dist/engine/variable-resolution.js.map +1 -0
- package/dist/engine.d.ts +17 -211
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +80 -1347
- package/dist/engine.js.map +1 -1
- package/dist/file-operations.js +1 -1
- package/dist/file-operations.js.map +1 -1
- package/dist/filters/array.d.ts +9 -0
- package/dist/filters/array.d.ts.map +1 -0
- package/dist/filters/array.js +41 -0
- package/dist/filters/array.js.map +1 -0
- package/dist/filters/date.d.ts +9 -0
- package/dist/filters/date.d.ts.map +1 -0
- package/dist/filters/date.js +51 -0
- package/dist/filters/date.js.map +1 -0
- package/dist/filters/index.d.ts +13 -0
- package/dist/filters/index.d.ts.map +1 -0
- package/dist/filters/index.js +13 -0
- package/dist/filters/index.js.map +1 -0
- package/dist/filters/json.d.ts +6 -0
- package/dist/filters/json.d.ts.map +1 -0
- package/dist/filters/json.js +15 -0
- package/dist/filters/json.js.map +1 -0
- package/dist/filters/logic.d.ts +8 -0
- package/dist/filters/logic.d.ts.map +1 -0
- package/dist/filters/logic.js +28 -0
- package/dist/filters/logic.js.map +1 -0
- package/dist/filters/math.d.ts +13 -0
- package/dist/filters/math.d.ts.map +1 -0
- package/dist/filters/math.js +39 -0
- package/dist/filters/math.js.map +1 -0
- package/dist/filters/object.d.ts +11 -0
- package/dist/filters/object.d.ts.map +1 -0
- package/dist/filters/object.js +64 -0
- package/dist/filters/object.js.map +1 -0
- package/dist/filters/regex.d.ts +7 -0
- package/dist/filters/regex.d.ts.map +1 -0
- package/dist/filters/regex.js +38 -0
- package/dist/filters/regex.js.map +1 -0
- package/dist/filters/string.d.ts +11 -0
- package/dist/filters/string.d.ts.map +1 -0
- package/dist/filters/string.js +35 -0
- package/dist/filters/string.js.map +1 -0
- package/dist/filters/type-checks.d.ts +10 -0
- package/dist/filters/type-checks.d.ts.map +1 -0
- package/dist/filters/type-checks.js +30 -0
- package/dist/filters/type-checks.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/nunjucks-filters.d.ts +2 -261
- package/dist/nunjucks-filters.d.ts.map +1 -1
- package/dist/nunjucks-filters.js +24 -582
- package/dist/nunjucks-filters.js.map +1 -1
- package/dist/operations/compress.d.ts +6 -0
- package/dist/operations/compress.d.ts.map +1 -0
- package/dist/operations/compress.js +36 -0
- package/dist/operations/compress.js.map +1 -0
- package/dist/operations/crypto.d.ts +5 -0
- package/dist/operations/crypto.d.ts.map +1 -0
- package/dist/operations/crypto.js +61 -0
- package/dist/operations/crypto.js.map +1 -0
- package/dist/operations/data-ops.d.ts +10 -0
- package/dist/operations/data-ops.d.ts.map +1 -0
- package/dist/operations/data-ops.js +124 -0
- package/dist/operations/data-ops.js.map +1 -0
- package/dist/operations/datetime.d.ts +5 -0
- package/dist/operations/datetime.d.ts.map +1 -0
- package/dist/operations/datetime.js +86 -0
- package/dist/operations/datetime.js.map +1 -0
- package/dist/operations/extract.d.ts +23 -0
- package/dist/operations/extract.d.ts.map +1 -0
- package/dist/operations/extract.js +31 -0
- package/dist/operations/extract.js.map +1 -0
- package/dist/operations/format.d.ts +14 -0
- package/dist/operations/format.d.ts.map +1 -0
- package/dist/operations/format.js +84 -0
- package/dist/operations/format.js.map +1 -0
- package/dist/operations/index.d.ts +13 -0
- package/dist/operations/index.d.ts.map +1 -0
- package/dist/operations/index.js +13 -0
- package/dist/operations/index.js.map +1 -0
- package/dist/operations/parse.d.ts +5 -0
- package/dist/operations/parse.d.ts.map +1 -0
- package/dist/operations/parse.js +59 -0
- package/dist/operations/parse.js.map +1 -0
- package/dist/operations/set.d.ts +21 -0
- package/dist/operations/set.d.ts.map +1 -0
- package/dist/operations/set.js +25 -0
- package/dist/operations/set.js.map +1 -0
- package/dist/operations/transform.d.ts +15 -0
- package/dist/operations/transform.d.ts.map +1 -0
- package/dist/operations/transform.js +110 -0
- package/dist/operations/transform.js.map +1 -0
- package/dist/parallel.d.ts +114 -0
- package/dist/parallel.d.ts.map +1 -0
- package/dist/parallel.js +325 -0
- package/dist/parallel.js.map +1 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +2 -0
- package/dist/parser.js.map +1 -1
- package/dist/sdk-registry.d.ts.map +1 -1
- package/dist/sdk-registry.js +9 -3
- package/dist/sdk-registry.js.map +1 -1
- package/dist/utils/duration.d.ts +23 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +41 -0
- package/dist/utils/duration.js.map +1 -0
- package/dist/utils/errors.d.ts +20 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +37 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/workflow-templates.d.ts +80 -0
- package/dist/workflow-templates.d.ts.map +1 -0
- package/dist/workflow-templates.js +248 -0
- package/dist/workflow-templates.js.map +1 -0
- package/package.json +30 -5
- package/dist/secrets/index.d.ts +0 -12
- package/dist/secrets/index.d.ts.map +0 -1
- package/dist/secrets/index.js +0 -11
- package/dist/secrets/index.js.map +0 -1
- package/dist/secrets/providers/aws.d.ts +0 -32
- package/dist/secrets/providers/aws.d.ts.map +0 -1
- package/dist/secrets/providers/aws.js +0 -118
- package/dist/secrets/providers/aws.js.map +0 -1
- package/dist/secrets/providers/azure.d.ts +0 -40
- package/dist/secrets/providers/azure.d.ts.map +0 -1
- package/dist/secrets/providers/azure.js +0 -170
- package/dist/secrets/providers/azure.js.map +0 -1
- package/dist/secrets/providers/env.d.ts +0 -26
- package/dist/secrets/providers/env.d.ts.map +0 -1
- package/dist/secrets/providers/env.js +0 -59
- package/dist/secrets/providers/env.js.map +0 -1
- package/dist/secrets/providers/vault.d.ts +0 -39
- package/dist/secrets/providers/vault.d.ts.map +0 -1
- package/dist/secrets/providers/vault.js +0 -180
- package/dist/secrets/providers/vault.js.map +0 -1
- package/dist/secrets/secret-manager.d.ts +0 -72
- package/dist/secrets/secret-manager.d.ts.map +0 -1
- package/dist/secrets/secret-manager.js +0 -226
- package/dist/secrets/secret-manager.js.map +0 -1
- package/dist/secrets/types.d.ts +0 -105
- package/dist/secrets/types.d.ts.map +0 -1
- package/dist/secrets/types.js +0 -8
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Azure Key Vault Secret Provider
|
|
3
|
-
*
|
|
4
|
-
* Supports service principal and managed identity authentication.
|
|
5
|
-
*/
|
|
6
|
-
import type { SecretProvider, Secret, AzureKeyVaultConfig } from '../types.js';
|
|
7
|
-
export declare class AzureKeyVaultProvider implements SecretProvider {
|
|
8
|
-
private config;
|
|
9
|
-
private accessToken?;
|
|
10
|
-
private tokenExpiresAt?;
|
|
11
|
-
private initialized;
|
|
12
|
-
constructor(config: AzureKeyVaultConfig);
|
|
13
|
-
initialize(): Promise<void>;
|
|
14
|
-
/**
|
|
15
|
-
* Get or refresh access token
|
|
16
|
-
*/
|
|
17
|
-
private refreshAccessToken;
|
|
18
|
-
/**
|
|
19
|
-
* Authenticate using service principal
|
|
20
|
-
*/
|
|
21
|
-
private authenticateWithServicePrincipal;
|
|
22
|
-
/**
|
|
23
|
-
* Authenticate using managed identity
|
|
24
|
-
*/
|
|
25
|
-
private authenticateWithManagedIdentity;
|
|
26
|
-
/**
|
|
27
|
-
* Get a secret from Azure Key Vault
|
|
28
|
-
*/
|
|
29
|
-
getSecret(secretName: string): Promise<Secret>;
|
|
30
|
-
/**
|
|
31
|
-
* Check if a secret exists
|
|
32
|
-
*/
|
|
33
|
-
exists(secretName: string): Promise<boolean>;
|
|
34
|
-
/**
|
|
35
|
-
* List secrets
|
|
36
|
-
*/
|
|
37
|
-
listSecrets(): Promise<string[]>;
|
|
38
|
-
destroy(): Promise<void>;
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=azure.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"azure.d.ts","sourceRoot":"","sources":["../../../src/secrets/providers/azure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE/E,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAC,CAAO;IAC9B,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,mBAAmB;IAUjC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBjC;;OAEG;YACW,kBAAkB;IAahC;;OAEG;YACW,gCAAgC;IA0B9C;;OAEG;YACW,+BAA+B;IAc7C;;OAEG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqDpD;;OAEG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA2BhC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Azure Key Vault Secret Provider
|
|
3
|
-
*
|
|
4
|
-
* Supports service principal and managed identity authentication.
|
|
5
|
-
*/
|
|
6
|
-
export class AzureKeyVaultProvider {
|
|
7
|
-
config;
|
|
8
|
-
accessToken;
|
|
9
|
-
tokenExpiresAt;
|
|
10
|
-
initialized = false;
|
|
11
|
-
constructor(config) {
|
|
12
|
-
this.config = {
|
|
13
|
-
vaultUrl: config.vaultUrl,
|
|
14
|
-
tenantId: config.tenantId ?? '',
|
|
15
|
-
clientId: config.clientId ?? '',
|
|
16
|
-
clientSecret: config.clientSecret ?? '',
|
|
17
|
-
useManagedIdentity: config.useManagedIdentity ?? false,
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
async initialize() {
|
|
21
|
-
if (this.initialized)
|
|
22
|
-
return;
|
|
23
|
-
// Validate configuration
|
|
24
|
-
if (!this.config.useManagedIdentity) {
|
|
25
|
-
if (!this.config.tenantId || !this.config.clientId || !this.config.clientSecret) {
|
|
26
|
-
throw new Error('Azure Key Vault requires tenantId, clientId, and clientSecret, or useManagedIdentity must be true');
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
// Get initial access token
|
|
30
|
-
await this.refreshAccessToken();
|
|
31
|
-
this.initialized = true;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Get or refresh access token
|
|
35
|
-
*/
|
|
36
|
-
async refreshAccessToken() {
|
|
37
|
-
// Check if token is still valid (with 5 min buffer)
|
|
38
|
-
if (this.accessToken && this.tokenExpiresAt && this.tokenExpiresAt > new Date(Date.now() + 300000)) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
if (this.config.useManagedIdentity) {
|
|
42
|
-
await this.authenticateWithManagedIdentity();
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
await this.authenticateWithServicePrincipal();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Authenticate using service principal
|
|
50
|
-
*/
|
|
51
|
-
async authenticateWithServicePrincipal() {
|
|
52
|
-
const url = `https://login.microsoftonline.com/${this.config.tenantId}/oauth2/v2.0/token`;
|
|
53
|
-
const response = await fetch(url, {
|
|
54
|
-
method: 'POST',
|
|
55
|
-
headers: {
|
|
56
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
57
|
-
},
|
|
58
|
-
body: new URLSearchParams({
|
|
59
|
-
client_id: this.config.clientId,
|
|
60
|
-
client_secret: this.config.clientSecret,
|
|
61
|
-
scope: 'https://vault.azure.net/.default',
|
|
62
|
-
grant_type: 'client_credentials',
|
|
63
|
-
}),
|
|
64
|
-
});
|
|
65
|
-
if (!response.ok) {
|
|
66
|
-
const error = await response.text();
|
|
67
|
-
throw new Error(`Azure authentication failed: ${response.status} ${error}`);
|
|
68
|
-
}
|
|
69
|
-
const data = (await response.json());
|
|
70
|
-
this.accessToken = data.access_token;
|
|
71
|
-
this.tokenExpiresAt = new Date(Date.now() + data.expires_in * 1000);
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Authenticate using managed identity
|
|
75
|
-
*/
|
|
76
|
-
async authenticateWithManagedIdentity() {
|
|
77
|
-
// This is a placeholder - real implementation would use Azure Instance Metadata Service
|
|
78
|
-
throw new Error('Azure Managed Identity authentication requires @azure/identity package. ' +
|
|
79
|
-
'Install it with: npm install @azure/identity @azure/keyvault-secrets');
|
|
80
|
-
// Production implementation would use:
|
|
81
|
-
// import { DefaultAzureCredential } from '@azure/identity';
|
|
82
|
-
// import { SecretClient } from '@azure/keyvault-secrets';
|
|
83
|
-
// const credential = new DefaultAzureCredential();
|
|
84
|
-
// const client = new SecretClient(this.config.vaultUrl, credential);
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Get a secret from Azure Key Vault
|
|
88
|
-
*/
|
|
89
|
-
async getSecret(secretName) {
|
|
90
|
-
if (!this.initialized) {
|
|
91
|
-
await this.initialize();
|
|
92
|
-
}
|
|
93
|
-
await this.refreshAccessToken();
|
|
94
|
-
// Clean secret name (Azure doesn't allow some characters)
|
|
95
|
-
const cleanName = secretName.replace(/[^a-zA-Z0-9-]/g, '-');
|
|
96
|
-
const url = `${this.config.vaultUrl}/secrets/${cleanName}?api-version=7.4`;
|
|
97
|
-
const response = await fetch(url, {
|
|
98
|
-
headers: {
|
|
99
|
-
Authorization: `Bearer ${this.accessToken}`,
|
|
100
|
-
},
|
|
101
|
-
});
|
|
102
|
-
if (!response.ok) {
|
|
103
|
-
if (response.status === 404) {
|
|
104
|
-
throw new Error(`Secret not found: ${secretName}`);
|
|
105
|
-
}
|
|
106
|
-
const error = await response.text();
|
|
107
|
-
throw new Error(`Failed to fetch secret from Azure Key Vault: ${response.status} ${error}`);
|
|
108
|
-
}
|
|
109
|
-
const data = (await response.json());
|
|
110
|
-
// Try to parse as JSON
|
|
111
|
-
let value;
|
|
112
|
-
try {
|
|
113
|
-
value = JSON.parse(data.value);
|
|
114
|
-
}
|
|
115
|
-
catch {
|
|
116
|
-
value = data.value;
|
|
117
|
-
}
|
|
118
|
-
return {
|
|
119
|
-
value,
|
|
120
|
-
metadata: {
|
|
121
|
-
createdAt: new Date(data.attributes.created * 1000),
|
|
122
|
-
updatedAt: new Date(data.attributes.updated * 1000),
|
|
123
|
-
},
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Check if a secret exists
|
|
128
|
-
*/
|
|
129
|
-
async exists(secretName) {
|
|
130
|
-
try {
|
|
131
|
-
await this.getSecret(secretName);
|
|
132
|
-
return true;
|
|
133
|
-
}
|
|
134
|
-
catch (error) {
|
|
135
|
-
if (error instanceof Error && error.message.includes('not found')) {
|
|
136
|
-
return false;
|
|
137
|
-
}
|
|
138
|
-
throw error;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* List secrets
|
|
143
|
-
*/
|
|
144
|
-
async listSecrets() {
|
|
145
|
-
if (!this.initialized) {
|
|
146
|
-
await this.initialize();
|
|
147
|
-
}
|
|
148
|
-
await this.refreshAccessToken();
|
|
149
|
-
const url = `${this.config.vaultUrl}/secrets?api-version=7.4`;
|
|
150
|
-
const response = await fetch(url, {
|
|
151
|
-
headers: {
|
|
152
|
-
Authorization: `Bearer ${this.accessToken}`,
|
|
153
|
-
},
|
|
154
|
-
});
|
|
155
|
-
if (!response.ok) {
|
|
156
|
-
const error = await response.text();
|
|
157
|
-
throw new Error(`Failed to list secrets from Azure Key Vault: ${response.status} ${error}`);
|
|
158
|
-
}
|
|
159
|
-
const data = (await response.json());
|
|
160
|
-
return data.value.map((secret) => {
|
|
161
|
-
const parts = secret.id.split('/');
|
|
162
|
-
return parts[parts.length - 1];
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
async destroy() {
|
|
166
|
-
this.accessToken = '';
|
|
167
|
-
this.initialized = false;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
//# sourceMappingURL=azure.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"azure.js","sourceRoot":"","sources":["../../../src/secrets/providers/azure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,OAAO,qBAAqB;IACxB,MAAM,CAAgC;IACtC,WAAW,CAAU;IACrB,cAAc,CAAQ;IACtB,WAAW,GAAG,KAAK,CAAC;IAE5B,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG;YACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;YACvC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,KAAK;SACvD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBAChF,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAC;YACJ,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEhC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB;QAC9B,oDAAoD;QACpD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;YACnG,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,+BAA+B,EAAE,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gCAAgC;QAC5C,MAAM,GAAG,GAAG,qCAAqC,IAAI,CAAC,MAAM,CAAC,QAAQ,oBAAoB,CAAC;QAE1F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;aACpD;YACD,IAAI,EAAE,IAAI,eAAe,CAAC;gBACxB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAS;gBAChC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,YAAa;gBACxC,KAAK,EAAE,kCAAkC;gBACzC,UAAU,EAAE,oBAAoB;aACjC,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiD,CAAC;QACrF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,+BAA+B;QAC3C,wFAAwF;QACxF,MAAM,IAAI,KAAK,CACb,0EAA0E;YACxE,sEAAsE,CACzE,CAAC;QAEF,uCAAuC;QACvC,4DAA4D;QAC5D,0DAA0D;QAC1D,mDAAmD;QACnD,qEAAqE;IACvE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,UAAkB;QAChC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEhC,0DAA0D;QAC1D,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAE5D,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,YAAY,SAAS,kBAAkB,CAAC;QAE3E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,WAAW,EAAE;aAC5C;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,gDAAgD,QAAQ,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAQlC,CAAC;QAEF,uBAAuB;QACvB,IAAI,KAAuC,CAAC;QAC5C,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,CAAC;QAED,OAAO;YACL,KAAK;YACL,QAAQ,EAAE;gBACR,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;gBACnD,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;aACpD;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,UAAkB;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClE,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEhC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,0BAA0B,CAAC;QAE9D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,WAAW,EAAE;aAC5C;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,gDAAgD,QAAQ,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAqC,CAAC;QACzE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Environment Variable Provider
|
|
3
|
-
*
|
|
4
|
-
* Simple provider that reads secrets from environment variables.
|
|
5
|
-
* Useful for local development and simple deployments.
|
|
6
|
-
*/
|
|
7
|
-
import type { SecretProvider, Secret } from '../types.js';
|
|
8
|
-
export declare class EnvProvider implements SecretProvider {
|
|
9
|
-
private prefix;
|
|
10
|
-
constructor(prefix?: string);
|
|
11
|
-
initialize(): Promise<void>;
|
|
12
|
-
/**
|
|
13
|
-
* Get a secret from environment variables
|
|
14
|
-
* Path format: VAR_NAME or prefix_VAR_NAME if prefix is set
|
|
15
|
-
*/
|
|
16
|
-
getSecret(path: string): Promise<Secret>;
|
|
17
|
-
/**
|
|
18
|
-
* Check if an environment variable exists
|
|
19
|
-
*/
|
|
20
|
-
exists(path: string): Promise<boolean>;
|
|
21
|
-
/**
|
|
22
|
-
* List all environment variables with the prefix
|
|
23
|
-
*/
|
|
24
|
-
listSecrets(): Promise<string[]>;
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=env.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/secrets/providers/env.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1D,qBAAa,WAAY,YAAW,cAAc;IAChD,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,GAAE,MAAW;IAIzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;OAGG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB9C;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAYvC"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Environment Variable Provider
|
|
3
|
-
*
|
|
4
|
-
* Simple provider that reads secrets from environment variables.
|
|
5
|
-
* Useful for local development and simple deployments.
|
|
6
|
-
*/
|
|
7
|
-
export class EnvProvider {
|
|
8
|
-
prefix;
|
|
9
|
-
constructor(prefix = '') {
|
|
10
|
-
this.prefix = prefix;
|
|
11
|
-
}
|
|
12
|
-
async initialize() {
|
|
13
|
-
// No initialization needed
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Get a secret from environment variables
|
|
17
|
-
* Path format: VAR_NAME or prefix_VAR_NAME if prefix is set
|
|
18
|
-
*/
|
|
19
|
-
async getSecret(path) {
|
|
20
|
-
const envVar = this.prefix ? `${this.prefix}_${path}` : path;
|
|
21
|
-
const value = process.env[envVar];
|
|
22
|
-
if (value === undefined) {
|
|
23
|
-
throw new Error(`Environment variable not found: ${envVar}`);
|
|
24
|
-
}
|
|
25
|
-
// Try to parse as JSON
|
|
26
|
-
let parsedValue = value;
|
|
27
|
-
try {
|
|
28
|
-
parsedValue = JSON.parse(value);
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// Not JSON, use as string
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
value: parsedValue,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Check if an environment variable exists
|
|
39
|
-
*/
|
|
40
|
-
async exists(path) {
|
|
41
|
-
const envVar = this.prefix ? `${this.prefix}_${path}` : path;
|
|
42
|
-
return process.env[envVar] !== undefined;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* List all environment variables with the prefix
|
|
46
|
-
*/
|
|
47
|
-
async listSecrets() {
|
|
48
|
-
if (!this.prefix) {
|
|
49
|
-
// Return all env vars if no prefix
|
|
50
|
-
return Object.keys(process.env);
|
|
51
|
-
}
|
|
52
|
-
// Return only vars with the prefix
|
|
53
|
-
const prefixWithUnderscore = `${this.prefix}_`;
|
|
54
|
-
return Object.keys(process.env)
|
|
55
|
-
.filter((key) => key.startsWith(prefixWithUnderscore))
|
|
56
|
-
.map((key) => key.slice(prefixWithUnderscore.length));
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=env.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/secrets/providers/env.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,OAAO,WAAW;IACd,MAAM,CAAS;IAEvB,YAAY,SAAiB,EAAE;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,2BAA2B;IAC7B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,uBAAuB;QACvB,IAAI,WAAW,GAAqC,KAAK,CAAC;QAC1D,IAAI,CAAC;YACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;QAED,OAAO;YACL,KAAK,EAAE,WAAW;SACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,mCAAmC;YACnC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QAED,mCAAmC;QACnC,MAAM,oBAAoB,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;aACrD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HashiCorp Vault Secret Provider
|
|
3
|
-
*
|
|
4
|
-
* Supports KV v1 and v2 engines with token and AppRole authentication.
|
|
5
|
-
*/
|
|
6
|
-
import type { SecretProvider, Secret, VaultConfig } from '../types.js';
|
|
7
|
-
export declare class VaultProvider implements SecretProvider {
|
|
8
|
-
private config;
|
|
9
|
-
private token?;
|
|
10
|
-
private initialized;
|
|
11
|
-
constructor(config: VaultConfig);
|
|
12
|
-
initialize(): Promise<void>;
|
|
13
|
-
/**
|
|
14
|
-
* Authenticate using AppRole
|
|
15
|
-
*/
|
|
16
|
-
private authenticateAppRole;
|
|
17
|
-
/**
|
|
18
|
-
* Get a secret from Vault
|
|
19
|
-
*/
|
|
20
|
-
getSecret(path: string): Promise<Secret>;
|
|
21
|
-
/**
|
|
22
|
-
* Check if a secret exists
|
|
23
|
-
*/
|
|
24
|
-
exists(path: string): Promise<boolean>;
|
|
25
|
-
/**
|
|
26
|
-
* List secrets at a path
|
|
27
|
-
*/
|
|
28
|
-
listSecrets(path: string): Promise<string[]>;
|
|
29
|
-
/**
|
|
30
|
-
* Build URL for secret access
|
|
31
|
-
*/
|
|
32
|
-
private buildSecretUrl;
|
|
33
|
-
/**
|
|
34
|
-
* Build URL for listing secrets
|
|
35
|
-
*/
|
|
36
|
-
private buildListUrl;
|
|
37
|
-
destroy(): Promise<void>;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=vault.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../../src/secrets/providers/vault.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvE,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,WAAW;IAYzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC;;OAEG;YACW,mBAAmB;IA4BjC;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkD9C;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5C;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA+BlD;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HashiCorp Vault Secret Provider
|
|
3
|
-
*
|
|
4
|
-
* Supports KV v1 and v2 engines with token and AppRole authentication.
|
|
5
|
-
*/
|
|
6
|
-
export class VaultProvider {
|
|
7
|
-
config;
|
|
8
|
-
token;
|
|
9
|
-
initialized = false;
|
|
10
|
-
constructor(config) {
|
|
11
|
-
this.config = {
|
|
12
|
-
address: config.address,
|
|
13
|
-
token: config.token ?? '',
|
|
14
|
-
namespace: config.namespace ?? '',
|
|
15
|
-
roleId: config.roleId ?? '',
|
|
16
|
-
secretId: config.secretId ?? '',
|
|
17
|
-
kvVersion: config.kvVersion ?? 2,
|
|
18
|
-
mountPath: config.mountPath ?? 'secret',
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
async initialize() {
|
|
22
|
-
if (this.initialized)
|
|
23
|
-
return;
|
|
24
|
-
// If using AppRole, authenticate to get token
|
|
25
|
-
if (this.config.roleId && this.config.secretId) {
|
|
26
|
-
await this.authenticateAppRole();
|
|
27
|
-
}
|
|
28
|
-
else if (!this.config.token) {
|
|
29
|
-
throw new Error('Vault provider requires either token or AppRole credentials');
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
this.token = this.config.token;
|
|
33
|
-
}
|
|
34
|
-
this.initialized = true;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Authenticate using AppRole
|
|
38
|
-
*/
|
|
39
|
-
async authenticateAppRole() {
|
|
40
|
-
const url = `${this.config.address}/v1/auth/approle/login`;
|
|
41
|
-
const headers = {
|
|
42
|
-
'Content-Type': 'application/json',
|
|
43
|
-
};
|
|
44
|
-
if (this.config.namespace) {
|
|
45
|
-
headers['X-Vault-Namespace'] = this.config.namespace;
|
|
46
|
-
}
|
|
47
|
-
const response = await fetch(url, {
|
|
48
|
-
method: 'POST',
|
|
49
|
-
headers,
|
|
50
|
-
body: JSON.stringify({
|
|
51
|
-
role_id: this.config.roleId,
|
|
52
|
-
secret_id: this.config.secretId,
|
|
53
|
-
}),
|
|
54
|
-
});
|
|
55
|
-
if (!response.ok) {
|
|
56
|
-
const error = await response.text();
|
|
57
|
-
throw new Error(`Vault AppRole authentication failed: ${response.status} ${error}`);
|
|
58
|
-
}
|
|
59
|
-
const data = (await response.json());
|
|
60
|
-
this.token = data.auth.client_token;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Get a secret from Vault
|
|
64
|
-
*/
|
|
65
|
-
async getSecret(path) {
|
|
66
|
-
if (!this.initialized) {
|
|
67
|
-
await this.initialize();
|
|
68
|
-
}
|
|
69
|
-
const url = this.buildSecretUrl(path);
|
|
70
|
-
const headers = {
|
|
71
|
-
'X-Vault-Token': this.token,
|
|
72
|
-
};
|
|
73
|
-
if (this.config.namespace) {
|
|
74
|
-
headers['X-Vault-Namespace'] = this.config.namespace;
|
|
75
|
-
}
|
|
76
|
-
const response = await fetch(url, { headers });
|
|
77
|
-
if (!response.ok) {
|
|
78
|
-
if (response.status === 404) {
|
|
79
|
-
throw new Error(`Secret not found: ${path}`);
|
|
80
|
-
}
|
|
81
|
-
const error = await response.text();
|
|
82
|
-
throw new Error(`Failed to fetch secret from Vault: ${response.status} ${error}`);
|
|
83
|
-
}
|
|
84
|
-
const data = await response.json();
|
|
85
|
-
// Handle KV v1 vs v2 response format
|
|
86
|
-
if (this.config.kvVersion === 2) {
|
|
87
|
-
const secretData = data.data;
|
|
88
|
-
const metadata = {
|
|
89
|
-
version: String(secretData.metadata.version),
|
|
90
|
-
};
|
|
91
|
-
if (secretData.metadata.created_time) {
|
|
92
|
-
metadata.createdAt = new Date(secretData.metadata.created_time);
|
|
93
|
-
}
|
|
94
|
-
return {
|
|
95
|
-
value: secretData.data,
|
|
96
|
-
metadata,
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
// KV v1
|
|
101
|
-
const secretData = data.data;
|
|
102
|
-
return {
|
|
103
|
-
value: secretData,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Check if a secret exists
|
|
109
|
-
*/
|
|
110
|
-
async exists(path) {
|
|
111
|
-
try {
|
|
112
|
-
await this.getSecret(path);
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
catch {
|
|
116
|
-
return false;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* List secrets at a path
|
|
121
|
-
*/
|
|
122
|
-
async listSecrets(path) {
|
|
123
|
-
if (!this.initialized) {
|
|
124
|
-
await this.initialize();
|
|
125
|
-
}
|
|
126
|
-
const url = this.buildListUrl(path);
|
|
127
|
-
const headers = {
|
|
128
|
-
'X-Vault-Token': this.token,
|
|
129
|
-
};
|
|
130
|
-
if (this.config.namespace) {
|
|
131
|
-
headers['X-Vault-Namespace'] = this.config.namespace;
|
|
132
|
-
}
|
|
133
|
-
const response = await fetch(url, {
|
|
134
|
-
method: 'LIST',
|
|
135
|
-
headers,
|
|
136
|
-
});
|
|
137
|
-
if (!response.ok) {
|
|
138
|
-
if (response.status === 404) {
|
|
139
|
-
return [];
|
|
140
|
-
}
|
|
141
|
-
const error = await response.text();
|
|
142
|
-
throw new Error(`Failed to list secrets from Vault: ${response.status} ${error}`);
|
|
143
|
-
}
|
|
144
|
-
const data = (await response.json());
|
|
145
|
-
return data.data.keys || [];
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Build URL for secret access
|
|
149
|
-
*/
|
|
150
|
-
buildSecretUrl(path) {
|
|
151
|
-
const cleanPath = path.startsWith('/') ? path.slice(1) : path;
|
|
152
|
-
if (this.config.kvVersion === 2) {
|
|
153
|
-
// KV v2: /v1/{mount}/data/{path}
|
|
154
|
-
return `${this.config.address}/v1/${this.config.mountPath}/data/${cleanPath}`;
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
// KV v1: /v1/{mount}/{path}
|
|
158
|
-
return `${this.config.address}/v1/${this.config.mountPath}/${cleanPath}`;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Build URL for listing secrets
|
|
163
|
-
*/
|
|
164
|
-
buildListUrl(path) {
|
|
165
|
-
const cleanPath = path.startsWith('/') ? path.slice(1) : path;
|
|
166
|
-
if (this.config.kvVersion === 2) {
|
|
167
|
-
// KV v2: /v1/{mount}/metadata/{path}
|
|
168
|
-
return `${this.config.address}/v1/${this.config.mountPath}/metadata/${cleanPath}`;
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
// KV v1: /v1/{mount}/{path}
|
|
172
|
-
return `${this.config.address}/v1/${this.config.mountPath}/${cleanPath}`;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
async destroy() {
|
|
176
|
-
this.token = '';
|
|
177
|
-
this.initialized = false;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=vault.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vault.js","sourceRoot":"","sources":["../../../src/secrets/providers/vault.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Secret Manager
|
|
3
|
-
*
|
|
4
|
-
* Coordinates access to external secret managers with caching support.
|
|
5
|
-
*/
|
|
6
|
-
import type { SecretProvider, SecretManagerOptions, Secret, SecretReference } from './types.js';
|
|
7
|
-
export declare class SecretNotFoundError extends Error {
|
|
8
|
-
constructor(message: string);
|
|
9
|
-
}
|
|
10
|
-
export declare class SecretProviderError extends Error {
|
|
11
|
-
constructor(message: string);
|
|
12
|
-
}
|
|
13
|
-
export declare class SecretManager {
|
|
14
|
-
private providers;
|
|
15
|
-
private cache;
|
|
16
|
-
private options;
|
|
17
|
-
constructor(options: SecretManagerOptions);
|
|
18
|
-
/**
|
|
19
|
-
* Register a secret provider
|
|
20
|
-
*/
|
|
21
|
-
registerProvider(type: string, provider: SecretProvider): void;
|
|
22
|
-
/**
|
|
23
|
-
* Initialize all configured providers
|
|
24
|
-
*/
|
|
25
|
-
initialize(): Promise<void>;
|
|
26
|
-
/**
|
|
27
|
-
* Get a secret from the appropriate provider
|
|
28
|
-
*/
|
|
29
|
-
getSecret(reference: string): Promise<Secret>;
|
|
30
|
-
/**
|
|
31
|
-
* Parse a secret reference
|
|
32
|
-
* Formats:
|
|
33
|
-
* ${secret:vault://path/to/secret}
|
|
34
|
-
* ${secret:aws://secret-name}
|
|
35
|
-
* ${secret:azure://secret-name}
|
|
36
|
-
* ${secret:vault://path/to/secret#key}
|
|
37
|
-
*/
|
|
38
|
-
parseReference(reference: string): SecretReference;
|
|
39
|
-
/**
|
|
40
|
-
* Extract a key from a JSON secret
|
|
41
|
-
*/
|
|
42
|
-
private extractKey;
|
|
43
|
-
/**
|
|
44
|
-
* Get secret from cache if not expired
|
|
45
|
-
*/
|
|
46
|
-
private getCached;
|
|
47
|
-
/**
|
|
48
|
-
* Cache a secret
|
|
49
|
-
*/
|
|
50
|
-
private cacheSecret;
|
|
51
|
-
/**
|
|
52
|
-
* Clear cache
|
|
53
|
-
*/
|
|
54
|
-
clearCache(): void;
|
|
55
|
-
/**
|
|
56
|
-
* Clear expired cache entries
|
|
57
|
-
*/
|
|
58
|
-
clearExpiredCache(): void;
|
|
59
|
-
/**
|
|
60
|
-
* Check if a reference looks like a secret reference
|
|
61
|
-
*/
|
|
62
|
-
static isSecretReference(value: string): boolean;
|
|
63
|
-
/**
|
|
64
|
-
* Replace secret references in a string
|
|
65
|
-
*/
|
|
66
|
-
resolveSecrets(value: string): Promise<string>;
|
|
67
|
-
/**
|
|
68
|
-
* Clean up resources
|
|
69
|
-
*/
|
|
70
|
-
destroy(): Promise<void>;
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=secret-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"secret-manager.d.ts","sourceRoot":"","sources":["../../src/secrets/secret-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EAEpB,MAAM,EACN,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,OAAO,CAAiC;gBAEpC,OAAO,EAAE,oBAAoB;IASzC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAI9D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0CnD;;;;;;;OAOG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAwBlD;;OAEG;IACH,OAAO,CAAC,UAAU;IAqBlB;;OAEG;IACH,OAAO,CAAC,SAAS;IAYjB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,iBAAiB,IAAI,IAAI;IASzB;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIhD;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BpD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAS/B"}
|