@marktoflow/core 2.0.0-alpha.9 → 2.0.2
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 +24 -222
- package/dist/built-in-operations.d.ts +150 -0
- package/dist/built-in-operations.d.ts.map +1 -0
- package/dist/built-in-operations.js +799 -0
- package/dist/built-in-operations.js.map +1 -0
- package/dist/core-tools.d.ts +39 -0
- package/dist/core-tools.d.ts.map +1 -0
- package/dist/core-tools.js +58 -0
- package/dist/core-tools.js.map +1 -0
- package/dist/credentials.d.ts +60 -1
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +229 -4
- package/dist/credentials.js.map +1 -1
- package/dist/engine.d.ts +92 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +937 -59
- package/dist/engine.js.map +1 -1
- package/dist/file-operations.d.ts +86 -0
- package/dist/file-operations.d.ts.map +1 -0
- package/dist/file-operations.js +382 -0
- package/dist/file-operations.js.map +1 -0
- package/dist/index.d.ts +16 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -4
- package/dist/index.js.map +1 -1
- package/dist/logging.d.ts +40 -2
- package/dist/logging.d.ts.map +1 -1
- package/dist/logging.js +166 -13
- package/dist/logging.js.map +1 -1
- package/dist/models.d.ts +1441 -54
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +124 -2
- package/dist/models.js.map +1 -1
- package/dist/nunjucks-filters.d.ts +271 -0
- package/dist/nunjucks-filters.d.ts.map +1 -0
- package/dist/nunjucks-filters.js +648 -0
- package/dist/nunjucks-filters.js.map +1 -0
- package/dist/oauth-manager.d.ts +128 -0
- package/dist/oauth-manager.d.ts.map +1 -0
- package/dist/oauth-manager.js +291 -0
- package/dist/oauth-manager.js.map +1 -0
- package/dist/oauth-refresh.d.ts +37 -0
- package/dist/oauth-refresh.d.ts.map +1 -0
- package/dist/oauth-refresh.js +76 -0
- package/dist/oauth-refresh.js.map +1 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +113 -3
- package/dist/parser.js.map +1 -1
- package/dist/permissions.d.ts +49 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +286 -0
- package/dist/permissions.js.map +1 -0
- package/dist/prompt-loader.d.ts +53 -0
- package/dist/prompt-loader.d.ts.map +1 -0
- package/dist/prompt-loader.js +205 -0
- package/dist/prompt-loader.js.map +1 -0
- package/dist/scheduler.d.ts +22 -3
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +72 -73
- package/dist/scheduler.js.map +1 -1
- package/dist/script-executor.d.ts +65 -0
- package/dist/script-executor.d.ts.map +1 -0
- package/dist/script-executor.js +261 -0
- package/dist/script-executor.js.map +1 -0
- package/dist/sdk-registry.d.ts +20 -2
- package/dist/sdk-registry.d.ts.map +1 -1
- package/dist/sdk-registry.js +100 -15
- package/dist/sdk-registry.js.map +1 -1
- package/dist/secret-providers/index.d.ts +12 -0
- package/dist/secret-providers/index.d.ts.map +1 -0
- package/dist/secret-providers/index.js +11 -0
- package/dist/secret-providers/index.js.map +1 -0
- package/dist/secret-providers/providers/aws.d.ts +32 -0
- package/dist/secret-providers/providers/aws.d.ts.map +1 -0
- package/dist/secret-providers/providers/aws.js +118 -0
- package/dist/secret-providers/providers/aws.js.map +1 -0
- package/dist/secret-providers/providers/azure.d.ts +40 -0
- package/dist/secret-providers/providers/azure.d.ts.map +1 -0
- package/dist/secret-providers/providers/azure.js +170 -0
- package/dist/secret-providers/providers/azure.js.map +1 -0
- package/dist/secret-providers/providers/env.d.ts +26 -0
- package/dist/secret-providers/providers/env.d.ts.map +1 -0
- package/dist/secret-providers/providers/env.js +59 -0
- package/dist/secret-providers/providers/env.js.map +1 -0
- package/dist/secret-providers/providers/vault.d.ts +39 -0
- package/dist/secret-providers/providers/vault.d.ts.map +1 -0
- package/dist/secret-providers/providers/vault.js +180 -0
- package/dist/secret-providers/providers/vault.js.map +1 -0
- package/dist/secret-providers/secret-manager.d.ts +72 -0
- package/dist/secret-providers/secret-manager.d.ts.map +1 -0
- package/dist/secret-providers/secret-manager.js +226 -0
- package/dist/secret-providers/secret-manager.js.map +1 -0
- package/dist/secret-providers/types.d.ts +105 -0
- package/dist/secret-providers/types.d.ts.map +1 -0
- package/dist/secret-providers/types.js +8 -0
- package/dist/secret-providers/types.js.map +1 -0
- package/dist/secrets/index.d.ts +12 -0
- package/dist/secrets/index.d.ts.map +1 -0
- package/dist/secrets/index.js +11 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/providers/aws.d.ts +32 -0
- package/dist/secrets/providers/aws.d.ts.map +1 -0
- package/dist/secrets/providers/aws.js +118 -0
- package/dist/secrets/providers/aws.js.map +1 -0
- package/dist/secrets/providers/azure.d.ts +40 -0
- package/dist/secrets/providers/azure.d.ts.map +1 -0
- package/dist/secrets/providers/azure.js +170 -0
- package/dist/secrets/providers/azure.js.map +1 -0
- package/dist/secrets/providers/env.d.ts +26 -0
- package/dist/secrets/providers/env.d.ts.map +1 -0
- package/dist/secrets/providers/env.js +59 -0
- package/dist/secrets/providers/env.js.map +1 -0
- package/dist/secrets/providers/vault.d.ts +39 -0
- package/dist/secrets/providers/vault.d.ts.map +1 -0
- package/dist/secrets/providers/vault.js +180 -0
- package/dist/secrets/providers/vault.js.map +1 -0
- package/dist/secrets/secret-manager.d.ts +72 -0
- package/dist/secrets/secret-manager.d.ts.map +1 -0
- package/dist/secrets/secret-manager.js +226 -0
- package/dist/secrets/secret-manager.js.map +1 -0
- package/dist/secrets/types.d.ts +105 -0
- package/dist/secrets/types.d.ts.map +1 -0
- package/dist/secrets/types.js +8 -0
- package/dist/secrets/types.js.map +1 -0
- package/dist/security.d.ts +1 -0
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +4 -0
- package/dist/security.js.map +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +16 -9
- package/dist/state.js.map +1 -1
- package/dist/template-engine.d.ts +51 -0
- package/dist/template-engine.d.ts.map +1 -0
- package/dist/template-engine.js +227 -0
- package/dist/template-engine.js.map +1 -0
- package/dist/templates.d.ts +10 -0
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +21 -17
- package/dist/templates.js.map +1 -1
- package/dist/tools/mcp-tool.js +9 -9
- package/dist/tools/mcp-tool.js.map +1 -1
- package/dist/trigger-manager.js +1 -1
- package/dist/trigger-manager.js.map +1 -1
- package/dist/workflow-tools.d.ts +102 -0
- package/dist/workflow-tools.d.ts.map +1 -0
- package/dist/workflow-tools.js +130 -0
- package/dist/workflow-tools.js.map +1 -0
- package/package.json +31 -13
- package/LICENSE +0 -201
|
@@ -0,0 +1,180 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.js","sourceRoot":"","sources":["../../../src/secret-providers/providers/vault.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-manager.d.ts","sourceRoot":"","sources":["../../src/secret-providers/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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret Manager
|
|
3
|
+
*
|
|
4
|
+
* Coordinates access to external secret managers with caching support.
|
|
5
|
+
*/
|
|
6
|
+
export class SecretNotFoundError extends Error {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = 'SecretNotFoundError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class SecretProviderError extends Error {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = 'SecretProviderError';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class SecretManager {
|
|
19
|
+
providers = new Map();
|
|
20
|
+
cache = new Map();
|
|
21
|
+
options;
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this.options = {
|
|
24
|
+
providers: options.providers,
|
|
25
|
+
defaultCacheTTL: options.defaultCacheTTL ?? 300, // 5 minutes
|
|
26
|
+
referencePrefix: options.referencePrefix ?? 'secret:',
|
|
27
|
+
throwOnNotFound: options.throwOnNotFound ?? true,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Register a secret provider
|
|
32
|
+
*/
|
|
33
|
+
registerProvider(type, provider) {
|
|
34
|
+
this.providers.set(type, provider);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Initialize all configured providers
|
|
38
|
+
*/
|
|
39
|
+
async initialize() {
|
|
40
|
+
for (const [type, provider] of this.providers.entries()) {
|
|
41
|
+
try {
|
|
42
|
+
await provider.initialize();
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw new SecretProviderError(`Failed to initialize ${type} provider: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get a secret from the appropriate provider
|
|
51
|
+
*/
|
|
52
|
+
async getSecret(reference) {
|
|
53
|
+
const parsed = this.parseReference(reference);
|
|
54
|
+
// Check cache first
|
|
55
|
+
if (this.options.providers.find((p) => p.cacheEnabled !== false)) {
|
|
56
|
+
const cached = this.getCached(reference);
|
|
57
|
+
if (cached) {
|
|
58
|
+
return cached;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Get provider
|
|
62
|
+
const provider = this.providers.get(parsed.provider);
|
|
63
|
+
if (!provider) {
|
|
64
|
+
throw new SecretProviderError(`Provider '${parsed.provider}' not configured`);
|
|
65
|
+
}
|
|
66
|
+
// Fetch secret
|
|
67
|
+
try {
|
|
68
|
+
const secret = await provider.getSecret(parsed.path);
|
|
69
|
+
// Extract key if specified
|
|
70
|
+
if (parsed.key && typeof secret.value === 'object') {
|
|
71
|
+
const keyValue = this.extractKey(secret.value, parsed.key);
|
|
72
|
+
secret.value = keyValue;
|
|
73
|
+
}
|
|
74
|
+
// Cache the secret
|
|
75
|
+
this.cacheSecret(reference, secret);
|
|
76
|
+
return secret;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (this.options.throwOnNotFound) {
|
|
80
|
+
throw new SecretNotFoundError(`Secret not found: ${reference} - ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
81
|
+
}
|
|
82
|
+
// Return empty secret if not throwing
|
|
83
|
+
return { value: '' };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Parse a secret reference
|
|
88
|
+
* Formats:
|
|
89
|
+
* ${secret:vault://path/to/secret}
|
|
90
|
+
* ${secret:aws://secret-name}
|
|
91
|
+
* ${secret:azure://secret-name}
|
|
92
|
+
* ${secret:vault://path/to/secret#key}
|
|
93
|
+
*/
|
|
94
|
+
parseReference(reference) {
|
|
95
|
+
// Remove ${secret: and } if present
|
|
96
|
+
let cleaned = reference.trim();
|
|
97
|
+
if (cleaned.startsWith('${')) {
|
|
98
|
+
cleaned = cleaned.slice(2, -1);
|
|
99
|
+
}
|
|
100
|
+
if (cleaned.startsWith(this.options.referencePrefix)) {
|
|
101
|
+
cleaned = cleaned.slice(this.options.referencePrefix.length);
|
|
102
|
+
}
|
|
103
|
+
// Parse provider://path#key format
|
|
104
|
+
const match = cleaned.match(/^([^:]+):\/\/([^#]+)(#(.+))?$/);
|
|
105
|
+
if (!match) {
|
|
106
|
+
throw new SecretProviderError(`Invalid secret reference format: ${reference}`);
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
raw: reference,
|
|
110
|
+
provider: match[1],
|
|
111
|
+
path: match[2],
|
|
112
|
+
key: match[4],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Extract a key from a JSON secret
|
|
117
|
+
*/
|
|
118
|
+
extractKey(value, key) {
|
|
119
|
+
const parts = key.split('.');
|
|
120
|
+
let current = value;
|
|
121
|
+
for (const part of parts) {
|
|
122
|
+
if (typeof current === 'object' && current !== null && part in current) {
|
|
123
|
+
current = current[part];
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
throw new SecretNotFoundError(`Key '${key}' not found in secret`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (typeof current === 'string') {
|
|
130
|
+
return current;
|
|
131
|
+
}
|
|
132
|
+
if (typeof current === 'number' || typeof current === 'boolean') {
|
|
133
|
+
return String(current);
|
|
134
|
+
}
|
|
135
|
+
return JSON.stringify(current);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get secret from cache if not expired
|
|
139
|
+
*/
|
|
140
|
+
getCached(reference) {
|
|
141
|
+
const cached = this.cache.get(reference);
|
|
142
|
+
if (!cached)
|
|
143
|
+
return null;
|
|
144
|
+
if (cached.expiresAt < new Date()) {
|
|
145
|
+
this.cache.delete(reference);
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
return cached.value;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Cache a secret
|
|
152
|
+
*/
|
|
153
|
+
cacheSecret(reference, secret) {
|
|
154
|
+
const now = new Date();
|
|
155
|
+
const ttl = this.options.defaultCacheTTL * 1000; // Convert to ms
|
|
156
|
+
const expiresAt = new Date(now.getTime() + ttl);
|
|
157
|
+
this.cache.set(reference, {
|
|
158
|
+
value: secret,
|
|
159
|
+
fetchedAt: now,
|
|
160
|
+
expiresAt,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Clear cache
|
|
165
|
+
*/
|
|
166
|
+
clearCache() {
|
|
167
|
+
this.cache.clear();
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Clear expired cache entries
|
|
171
|
+
*/
|
|
172
|
+
clearExpiredCache() {
|
|
173
|
+
const now = new Date();
|
|
174
|
+
for (const [key, cached] of this.cache.entries()) {
|
|
175
|
+
if (cached.expiresAt < now) {
|
|
176
|
+
this.cache.delete(key);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Check if a reference looks like a secret reference
|
|
182
|
+
*/
|
|
183
|
+
static isSecretReference(value) {
|
|
184
|
+
return value.includes('secret:') && value.includes('://');
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Replace secret references in a string
|
|
188
|
+
*/
|
|
189
|
+
async resolveSecrets(value) {
|
|
190
|
+
// Find all secret references
|
|
191
|
+
const regex = /\$\{secret:[^}]+\}/g;
|
|
192
|
+
const matches = value.match(regex);
|
|
193
|
+
if (!matches) {
|
|
194
|
+
return value;
|
|
195
|
+
}
|
|
196
|
+
let result = value;
|
|
197
|
+
for (const match of matches) {
|
|
198
|
+
try {
|
|
199
|
+
const secret = await this.getSecret(match);
|
|
200
|
+
const secretValue = typeof secret.value === 'string' ? secret.value : JSON.stringify(secret.value);
|
|
201
|
+
result = result.replace(match, secretValue);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
if (this.options.throwOnNotFound) {
|
|
205
|
+
throw error;
|
|
206
|
+
}
|
|
207
|
+
// Replace with empty string if not throwing
|
|
208
|
+
result = result.replace(match, '');
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Clean up resources
|
|
215
|
+
*/
|
|
216
|
+
async destroy() {
|
|
217
|
+
for (const provider of this.providers.values()) {
|
|
218
|
+
if (provider.destroy) {
|
|
219
|
+
await provider.destroy();
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
this.providers.clear();
|
|
223
|
+
this.cache.clear();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=secret-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-manager.js","sourceRoot":"","sources":["../../src/secret-providers/secret-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External Secrets Management Types
|
|
3
|
+
*
|
|
4
|
+
* Provides integration with external secret managers like HashiCorp Vault,
|
|
5
|
+
* AWS Secrets Manager, Azure Key Vault, etc.
|
|
6
|
+
*/
|
|
7
|
+
export interface SecretMetadata {
|
|
8
|
+
version?: string;
|
|
9
|
+
createdAt?: Date;
|
|
10
|
+
updatedAt?: Date;
|
|
11
|
+
expiresAt?: Date;
|
|
12
|
+
tags?: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
export interface Secret {
|
|
15
|
+
value: string | Record<string, unknown>;
|
|
16
|
+
metadata?: SecretMetadata;
|
|
17
|
+
}
|
|
18
|
+
export interface SecretProviderConfig {
|
|
19
|
+
type: 'vault' | 'aws' | 'azure' | 'gcp' | 'env';
|
|
20
|
+
cacheEnabled?: boolean;
|
|
21
|
+
cacheTTL?: number;
|
|
22
|
+
config?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
export interface VaultConfig {
|
|
25
|
+
address: string;
|
|
26
|
+
token?: string;
|
|
27
|
+
namespace?: string;
|
|
28
|
+
roleId?: string;
|
|
29
|
+
secretId?: string;
|
|
30
|
+
kvVersion?: 1 | 2;
|
|
31
|
+
mountPath?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface AWSSecretsManagerConfig {
|
|
34
|
+
region?: string;
|
|
35
|
+
accessKeyId?: string;
|
|
36
|
+
secretAccessKey?: string;
|
|
37
|
+
sessionToken?: string;
|
|
38
|
+
useIAMRole?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface AzureKeyVaultConfig {
|
|
41
|
+
vaultUrl: string;
|
|
42
|
+
tenantId?: string;
|
|
43
|
+
clientId?: string;
|
|
44
|
+
clientSecret?: string;
|
|
45
|
+
useManagedIdentity?: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface GCPSecretManagerConfig {
|
|
48
|
+
projectId: string;
|
|
49
|
+
credentials?: string | Record<string, unknown>;
|
|
50
|
+
useADC?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Secret Provider Interface
|
|
54
|
+
*
|
|
55
|
+
* All secret managers must implement this interface
|
|
56
|
+
*/
|
|
57
|
+
export interface SecretProvider {
|
|
58
|
+
/**
|
|
59
|
+
* Get a secret by path/name
|
|
60
|
+
*/
|
|
61
|
+
getSecret(path: string): Promise<Secret>;
|
|
62
|
+
/**
|
|
63
|
+
* Check if a secret exists
|
|
64
|
+
*/
|
|
65
|
+
exists(path: string): Promise<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* List secrets at a path (optional)
|
|
68
|
+
*/
|
|
69
|
+
listSecrets?(path: string): Promise<string[]>;
|
|
70
|
+
/**
|
|
71
|
+
* Initialize the provider
|
|
72
|
+
*/
|
|
73
|
+
initialize(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Clean up resources
|
|
76
|
+
*/
|
|
77
|
+
destroy?(): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Secret Cache Entry
|
|
81
|
+
*/
|
|
82
|
+
export interface CachedSecret {
|
|
83
|
+
value: Secret;
|
|
84
|
+
fetchedAt: Date;
|
|
85
|
+
expiresAt: Date;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Secret Manager Options
|
|
89
|
+
*/
|
|
90
|
+
export interface SecretManagerOptions {
|
|
91
|
+
providers: SecretProviderConfig[];
|
|
92
|
+
defaultCacheTTL?: number;
|
|
93
|
+
referencePrefix?: string;
|
|
94
|
+
throwOnNotFound?: boolean;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Parse result for secret references
|
|
98
|
+
*/
|
|
99
|
+
export interface SecretReference {
|
|
100
|
+
raw: string;
|
|
101
|
+
provider: string;
|
|
102
|
+
path: string;
|
|
103
|
+
key?: string;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/secret-providers/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/secret-providers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External Secrets Management
|
|
3
|
+
*
|
|
4
|
+
* Provides integration with external secret managers.
|
|
5
|
+
*/
|
|
6
|
+
export { SecretManager, SecretNotFoundError, SecretProviderError } from './secret-manager.js';
|
|
7
|
+
export { VaultProvider } from './providers/vault.js';
|
|
8
|
+
export { AWSSecretsManagerProvider } from './providers/aws.js';
|
|
9
|
+
export { AzureKeyVaultProvider } from './providers/azure.js';
|
|
10
|
+
export { EnvProvider } from './providers/env.js';
|
|
11
|
+
export type { Secret, SecretMetadata, SecretProvider, SecretProviderConfig, SecretManagerOptions, SecretReference, CachedSecret, VaultConfig, AWSSecretsManagerConfig, AzureKeyVaultConfig, GCPSecretManagerConfig, } from './types.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,YAAY,EACV,MAAM,EACN,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External Secrets Management
|
|
3
|
+
*
|
|
4
|
+
* Provides integration with external secret managers.
|
|
5
|
+
*/
|
|
6
|
+
export { SecretManager, SecretNotFoundError, SecretProviderError } from './secret-manager.js';
|
|
7
|
+
export { VaultProvider } from './providers/vault.js';
|
|
8
|
+
export { AWSSecretsManagerProvider } from './providers/aws.js';
|
|
9
|
+
export { AzureKeyVaultProvider } from './providers/azure.js';
|
|
10
|
+
export { EnvProvider } from './providers/env.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|