@incanta/config 0.6.5 → 2.0.1
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/lib/config.d.ts +0 -2
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +10 -18
- package/lib/config.js.map +1 -1
- package/lib/secrets/aws-secrets-manager.d.ts +7 -0
- package/lib/secrets/aws-secrets-manager.d.ts.map +1 -0
- package/lib/secrets/aws-secrets-manager.js +28 -0
- package/lib/secrets/aws-secrets-manager.js.map +1 -0
- package/lib/secrets/azure-key-vault.d.ts +7 -0
- package/lib/secrets/azure-key-vault.d.ts.map +1 -0
- package/lib/secrets/azure-key-vault.js +26 -0
- package/lib/secrets/azure-key-vault.js.map +1 -0
- package/lib/secrets/gcp-secret-manager.d.ts +7 -0
- package/lib/secrets/gcp-secret-manager.d.ts.map +1 -0
- package/lib/secrets/gcp-secret-manager.js +26 -0
- package/lib/secrets/gcp-secret-manager.js.map +1 -0
- package/lib/secrets/local.d.ts +7 -0
- package/lib/secrets/local.d.ts.map +1 -0
- package/lib/secrets/local.js +44 -0
- package/lib/secrets/local.js.map +1 -0
- package/lib/secrets/provider.d.ts +7 -3
- package/lib/secrets/provider.d.ts.map +1 -1
- package/lib/secrets/provider.js +21 -2
- package/lib/secrets/provider.js.map +1 -1
- package/lib/secrets/vault.d.ts +7 -0
- package/lib/secrets/vault.d.ts.map +1 -0
- package/lib/secrets/vault.js +71 -0
- package/lib/secrets/vault.js.map +1 -0
- package/package.json +5 -1
- package/src/config.ts +21 -32
- package/src/secrets/aws-secrets-manager.ts +40 -0
- package/src/secrets/azure-key-vault.ts +33 -0
- package/src/secrets/gcp-secret-manager.ts +35 -0
- package/src/secrets/local.ts +53 -0
- package/src/secrets/provider.ts +25 -5
- package/src/secrets/vault.ts +96 -0
- package/src/secrets/hcp-vault.ts +0 -100
package/lib/config.d.ts
CHANGED
|
@@ -20,7 +20,6 @@ export default class Config {
|
|
|
20
20
|
private envVarConfig;
|
|
21
21
|
private secretsToken;
|
|
22
22
|
private secretsCache;
|
|
23
|
-
private secretsCacheExpiration;
|
|
24
23
|
constructor(options?: IConfigOptions);
|
|
25
24
|
init(options?: IConfigOptions): void;
|
|
26
25
|
dir(): string;
|
|
@@ -29,7 +28,6 @@ export default class Config {
|
|
|
29
28
|
getConfiguredEnv(): any;
|
|
30
29
|
get<T>(key: string): T;
|
|
31
30
|
getWithParts<T>(keyParts: string[]): T;
|
|
32
|
-
refreshSecrets(): Promise<void>;
|
|
33
31
|
getWithSecrets<T>(key: string): Promise<T>;
|
|
34
32
|
processSecrets<T>(v: T): Promise<T>;
|
|
35
33
|
normalizeString(value: string, currentPath: string[]): string;
|
package/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE;QACT,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE;QACT,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAOD,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,eAAe,CAAgB;IAEvC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,YAAY,CAGJ;IAChB,OAAO,CAAC,YAAY,CAA+B;gBAEhC,OAAO,CAAC,EAAE,cAAc;IAIpC,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAuIpC,GAAG,IAAI,MAAM;IAIb,GAAG,IAAI,MAAM;IAIb,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA0B9C,gBAAgB,IAAI,GAAG;IAevB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;IAKtB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC;IAyBhC,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAW1C,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAmEzC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;IAgD7D,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE;IAkBxD,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG;IA4BrD,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAShC,OAAO,IAAI,GAAG;IAMd,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAKnC,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAe7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAMnC"}
|
package/lib/config.js
CHANGED
|
@@ -19,7 +19,6 @@ class Config {
|
|
|
19
19
|
envVarConfig;
|
|
20
20
|
secretsToken = null;
|
|
21
21
|
secretsCache = {};
|
|
22
|
-
secretsCacheExpiration = null;
|
|
23
22
|
constructor(options) {
|
|
24
23
|
this.init(options);
|
|
25
24
|
}
|
|
@@ -29,7 +28,6 @@ class Config {
|
|
|
29
28
|
this.customValues = {};
|
|
30
29
|
this.secretsToken = null;
|
|
31
30
|
this.secretsCache = {};
|
|
32
|
-
this.secretsCacheExpiration = null;
|
|
33
31
|
let defaultConfigDir = "config";
|
|
34
32
|
let defaultConfigEnv = "default";
|
|
35
33
|
const cwd = options?.cwd || process.cwd();
|
|
@@ -171,15 +169,6 @@ class Config {
|
|
|
171
169
|
}
|
|
172
170
|
return obj;
|
|
173
171
|
}
|
|
174
|
-
async refreshSecrets() {
|
|
175
|
-
const provider = (0, provider_1.GetSecretsProvider)(this.normalizedValues.secrets.provider);
|
|
176
|
-
if (this.secretsToken === null ||
|
|
177
|
-
this.secretsToken.expires.getTime() < Date.now() + 500) {
|
|
178
|
-
this.secretsToken = await provider.getAuthToken();
|
|
179
|
-
}
|
|
180
|
-
this.secretsCache = await provider.getSecrets(this, this.secretsToken.value);
|
|
181
|
-
this.secretsCacheExpiration = new Date(Date.now() + this.get("secrets.cache-duration-seconds") * 1000);
|
|
182
|
-
}
|
|
183
172
|
async getWithSecrets(key) {
|
|
184
173
|
let value = this.get(key);
|
|
185
174
|
const provider = this.normalizedValues.secrets?.provider;
|
|
@@ -199,18 +188,21 @@ class Config {
|
|
|
199
188
|
const provider = (0, provider_1.GetSecretsProvider)(this.normalizedValues.secrets.provider);
|
|
200
189
|
if (this.secretsToken === null ||
|
|
201
190
|
this.secretsToken.expires.getTime() < Date.now() + 500) {
|
|
202
|
-
this.secretsToken = await provider.getAuthToken();
|
|
191
|
+
this.secretsToken = await provider.getAuthToken(this);
|
|
203
192
|
}
|
|
204
|
-
if (this.
|
|
205
|
-
this.
|
|
206
|
-
this.
|
|
207
|
-
this.secretsCache =
|
|
208
|
-
|
|
193
|
+
if (this.secretsCache[secretKey] === undefined ||
|
|
194
|
+
this.secretsCache[secretKey].expires < new Date()) {
|
|
195
|
+
const secretValue = await provider.getSecret(this, this.secretsToken.value, secretKey);
|
|
196
|
+
this.secretsCache[secretKey] = {
|
|
197
|
+
value: secretValue,
|
|
198
|
+
expires: new Date(Date.now() +
|
|
199
|
+
this.get("secrets.cache-duration-seconds") * 1000),
|
|
200
|
+
};
|
|
209
201
|
}
|
|
210
202
|
if (this.secretsCache[secretKey] === undefined) {
|
|
211
203
|
throw new Error(`Secret ${secretKey} not found`);
|
|
212
204
|
}
|
|
213
|
-
return this.secretsCache[secretKey];
|
|
205
|
+
return this.secretsCache[secretKey].value;
|
|
214
206
|
}
|
|
215
207
|
else if (typeof v === "object" && v !== null) {
|
|
216
208
|
if (Array.isArray(v)) {
|
package/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ISecretsProvider, ISecretsToken } from "./provider";
|
|
2
|
+
import Config from "../config";
|
|
3
|
+
export declare class AwsSecretsManagerSecretsProvider implements ISecretsProvider {
|
|
4
|
+
getAuthToken(config: Config): Promise<ISecretsToken>;
|
|
5
|
+
getSecret(config: Config, token: string, name: string): Promise<string>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=aws-secrets-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-secrets-manager.d.ts","sourceRoot":"","sources":["../../src/secrets/aws-secrets-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,qBAAa,gCAAiC,YAAW,gBAAgB;IAC1D,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAOpD,SAAS,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC;CAoBnB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AwsSecretsManagerSecretsProvider = void 0;
|
|
4
|
+
const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
|
|
5
|
+
class AwsSecretsManagerSecretsProvider {
|
|
6
|
+
async getAuthToken(config) {
|
|
7
|
+
return {
|
|
8
|
+
value: "",
|
|
9
|
+
expires: new Date(Date.now() + 3600 * 1000),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
async getSecret(config, token, name) {
|
|
13
|
+
const region = config.get("secrets.aws-kms.region");
|
|
14
|
+
const client = new client_secrets_manager_1.SecretsManagerClient({
|
|
15
|
+
region,
|
|
16
|
+
});
|
|
17
|
+
const response = await client.send(new client_secrets_manager_1.GetSecretValueCommand({
|
|
18
|
+
SecretId: name,
|
|
19
|
+
VersionStage: "AWSCURRENT",
|
|
20
|
+
}));
|
|
21
|
+
if (!response.SecretString) {
|
|
22
|
+
throw new Error(`No secret found with name: ${name}`);
|
|
23
|
+
}
|
|
24
|
+
return response.SecretString;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.AwsSecretsManagerSecretsProvider = AwsSecretsManagerSecretsProvider;
|
|
28
|
+
//# sourceMappingURL=aws-secrets-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-secrets-manager.js","sourceRoot":"","sources":["../../src/secrets/aws-secrets-manager.ts"],"names":[],"mappings":";;;AAAA,4EAGyC;AAIzC,MAAa,gCAAgC;IACpC,KAAK,CAAC,YAAY,CAAC,MAAc;QACtC,OAAO;YACL,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;SAC5C,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,SAAS,CACpB,MAAc,EACd,KAAa,EACb,IAAY;QAEZ,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAS,wBAAwB,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,IAAI,6CAAoB,CAAC;YACtC,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,IAAI,8CAAqB,CAAC;YACxB,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,YAAY;SAC3B,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;SACvD;QAED,OAAO,QAAQ,CAAC,YAAY,CAAC;IAC/B,CAAC;CACF;AAhCD,4EAgCC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ISecretsProvider, ISecretsToken } from "./provider";
|
|
2
|
+
import Config from "../config";
|
|
3
|
+
export declare class AzureKeyVaultSecretsProvider implements ISecretsProvider {
|
|
4
|
+
getAuthToken(config: Config): Promise<ISecretsToken>;
|
|
5
|
+
getSecret(config: Config, token: string, name: string): Promise<string>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=azure-key-vault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-key-vault.d.ts","sourceRoot":"","sources":["../../src/secrets/azure-key-vault.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,qBAAa,4BAA6B,YAAW,gBAAgB;IACtD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAOpD,SAAS,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC;CAenB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AzureKeyVaultSecretsProvider = void 0;
|
|
4
|
+
const keyvault_secrets_1 = require("@azure/keyvault-secrets");
|
|
5
|
+
const identity_1 = require("@azure/identity");
|
|
6
|
+
class AzureKeyVaultSecretsProvider {
|
|
7
|
+
async getAuthToken(config) {
|
|
8
|
+
return {
|
|
9
|
+
value: "",
|
|
10
|
+
expires: new Date(Date.now() + 3600 * 1000),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
async getSecret(config, token, name) {
|
|
14
|
+
// DefaultAzureCredential expects the following three environment variables:
|
|
15
|
+
// - AZURE_TENANT_ID: The tenant ID in Azure Active Directory
|
|
16
|
+
// - AZURE_CLIENT_ID: The application (client) ID registered in the AAD tenant
|
|
17
|
+
// - AZURE_CLIENT_SECRET: The client secret for the registered application
|
|
18
|
+
const credential = new identity_1.DefaultAzureCredential();
|
|
19
|
+
const endpoint = config.get("secrets.azure-key-vault.endpoint");
|
|
20
|
+
const client = new keyvault_secrets_1.SecretClient(endpoint, credential);
|
|
21
|
+
const secret = await client.getSecret(name);
|
|
22
|
+
return secret.value || "";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.AzureKeyVaultSecretsProvider = AzureKeyVaultSecretsProvider;
|
|
26
|
+
//# sourceMappingURL=azure-key-vault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-key-vault.js","sourceRoot":"","sources":["../../src/secrets/azure-key-vault.ts"],"names":[],"mappings":";;;AAAA,8DAAuD;AACvD,8CAAyD;AAIzD,MAAa,4BAA4B;IAChC,KAAK,CAAC,YAAY,CAAC,MAAc;QACtC,OAAO;YACL,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;SAC5C,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,SAAS,CACpB,MAAc,EACd,KAAa,EACb,IAAY;QAEZ,4EAA4E;QAC5E,6DAA6D;QAC7D,8EAA8E;QAC9E,0EAA0E;QAC1E,MAAM,UAAU,GAAG,IAAI,iCAAsB,EAAE,CAAC;QAEhD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAS,kCAAkC,CAAC,CAAC;QAExE,MAAM,MAAM,GAAG,IAAI,+BAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5C,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IAC5B,CAAC;CACF;AA3BD,oEA2BC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ISecretsProvider, ISecretsToken } from "./provider";
|
|
2
|
+
import Config from "../config";
|
|
3
|
+
export declare class GcpSecretManagerSecretsProvider implements ISecretsProvider {
|
|
4
|
+
getAuthToken(config: Config): Promise<ISecretsToken>;
|
|
5
|
+
getSecret(config: Config, token: string, name: string): Promise<string>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=gcp-secret-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcp-secret-manager.d.ts","sourceRoot":"","sources":["../../src/secrets/gcp-secret-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,qBAAa,+BAAgC,YAAW,gBAAgB;IACzD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAOpD,SAAS,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC;CAiBnB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GcpSecretManagerSecretsProvider = void 0;
|
|
4
|
+
const secret_manager_1 = require("@google-cloud/secret-manager");
|
|
5
|
+
const { SecretManagerServiceClient } = secret_manager_1.v1;
|
|
6
|
+
class GcpSecretManagerSecretsProvider {
|
|
7
|
+
async getAuthToken(config) {
|
|
8
|
+
return {
|
|
9
|
+
value: "",
|
|
10
|
+
expires: new Date(Date.now() + 3600 * 1000),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
async getSecret(config, token, name) {
|
|
14
|
+
const client = new SecretManagerServiceClient();
|
|
15
|
+
const projectId = config.get("secrets.gcp-secret-manager.project-id");
|
|
16
|
+
const [secret] = await client.accessSecretVersion({
|
|
17
|
+
name: `projects/${projectId}/secrets/${name}/versions/latest`,
|
|
18
|
+
});
|
|
19
|
+
if (!secret.payload || !secret.payload.data) {
|
|
20
|
+
throw new Error(`No secret found with name: ${name}`);
|
|
21
|
+
}
|
|
22
|
+
return secret.payload.data.toString();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.GcpSecretManagerSecretsProvider = GcpSecretManagerSecretsProvider;
|
|
26
|
+
//# sourceMappingURL=gcp-secret-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcp-secret-manager.js","sourceRoot":"","sources":["../../src/secrets/gcp-secret-manager.ts"],"names":[],"mappings":";;;AAAA,iEAAkD;AAClD,MAAM,EAAE,0BAA0B,EAAE,GAAG,mBAAE,CAAC;AAI1C,MAAa,+BAA+B;IACnC,KAAK,CAAC,YAAY,CAAC,MAAc;QACtC,OAAO;YACL,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;SAC5C,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,SAAS,CACpB,MAAc,EACd,KAAa,EACb,IAAY;QAEZ,MAAM,MAAM,GAAG,IAAI,0BAA0B,EAAE,CAAC;QAEhD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAC1B,uCAAuC,CACxC,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC;YAChD,IAAI,EAAE,YAAY,SAAS,YAAY,IAAI,kBAAkB;SAC9D,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;YAC3C,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;SACvD;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC;CACF;AA7BD,0EA6BC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ISecretsProvider, ISecretsToken } from "./provider";
|
|
2
|
+
import Config from "../config";
|
|
3
|
+
export declare class LocalSecretsProvider implements ISecretsProvider {
|
|
4
|
+
getAuthToken(config: Config): Promise<ISecretsToken>;
|
|
5
|
+
getSecret(config: Config, token: string, name: string): Promise<string>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/secrets/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,MAAM,MAAM,WAAW,CAAC;AAI/B,qBAAa,oBAAqB,YAAW,gBAAgB;IAC9C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAOpD,SAAS,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC;CAmCnB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LocalSecretsProvider = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
class LocalSecretsProvider {
|
|
10
|
+
async getAuthToken(config) {
|
|
11
|
+
return {
|
|
12
|
+
value: "",
|
|
13
|
+
expires: new Date(Date.now() + 3600 * 1000),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
async getSecret(config, token, name) {
|
|
17
|
+
let filePath = config.tryGet("secrets.local.file-path");
|
|
18
|
+
if (filePath === null) {
|
|
19
|
+
filePath = ".secrets";
|
|
20
|
+
}
|
|
21
|
+
const absolutePath = path_1.default.resolve(process.cwd(), filePath);
|
|
22
|
+
if ((0, fs_1.existsSync)(absolutePath) === false) {
|
|
23
|
+
throw new Error(`Secrets file does not exist: ${absolutePath}`);
|
|
24
|
+
}
|
|
25
|
+
const contents = await fs_1.promises.readFile(absolutePath, "utf8");
|
|
26
|
+
const secretLines = contents.replace(/\r\n/g, "\n").split("\n");
|
|
27
|
+
const secretMap = {};
|
|
28
|
+
for (const line of secretLines) {
|
|
29
|
+
const [key, value] = line.split("=");
|
|
30
|
+
if (key && value) {
|
|
31
|
+
secretMap[key.trim()] = value.trim();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (Object.keys(secretMap).length === 0) {
|
|
35
|
+
throw new Error(`No secrets found in file: ${filePath}`);
|
|
36
|
+
}
|
|
37
|
+
if (!secretMap[name]) {
|
|
38
|
+
throw new Error(`No secret found with name: ${name}`);
|
|
39
|
+
}
|
|
40
|
+
return secretMap[name];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.LocalSecretsProvider = LocalSecretsProvider;
|
|
44
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/secrets/local.ts"],"names":[],"mappings":";;;;;;AAEA,2BAAgD;AAChD,gDAAwB;AAExB,MAAa,oBAAoB;IACxB,KAAK,CAAC,YAAY,CAAC,MAAc;QACtC,OAAO;YACL,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;SAC5C,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,SAAS,CACpB,MAAc,EACd,KAAa,EACb,IAAY;QAEZ,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAS,yBAAyB,CAAC,CAAC;QAEhE,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,QAAQ,GAAG,UAAU,CAAC;SACvB;QAED,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAE3D,IAAI,IAAA,eAAU,EAAC,YAAY,CAAC,KAAK,KAAK,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAC;SACjE;QAED,MAAM,QAAQ,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAEzD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhE,MAAM,SAAS,GAA2B,EAAE,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;YAC9B,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,GAAG,IAAI,KAAK,EAAE;gBAChB,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;aACtC;SACF;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC;SAC1D;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;SACvD;QAED,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;CACF;AA/CD,oDA+CC"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import Config from "../config";
|
|
2
2
|
export declare enum SecretsProviderType {
|
|
3
3
|
HcpVault = "hcp-vault",
|
|
4
|
+
Vault = "vault",
|
|
5
|
+
AwsSecretsManager = "aws-secrets-manager",
|
|
6
|
+
AzureKeyVault = "azure-key-vault",
|
|
7
|
+
GcpSecretManager = "gcp-secret-manager",
|
|
8
|
+
Local = "local",
|
|
4
9
|
None = "none"
|
|
5
10
|
}
|
|
6
11
|
export interface ISecretsToken {
|
|
@@ -8,9 +13,8 @@ export interface ISecretsToken {
|
|
|
8
13
|
expires: Date;
|
|
9
14
|
}
|
|
10
15
|
export interface ISecretsProvider {
|
|
11
|
-
getAuthToken(): Promise<ISecretsToken>;
|
|
12
|
-
|
|
13
|
-
getSecret(config: Config, token: string, secretName: string): Promise<string>;
|
|
16
|
+
getAuthToken(config: Config): Promise<ISecretsToken>;
|
|
17
|
+
getSecret(config: Config, token: string, name: string): Promise<string>;
|
|
14
18
|
}
|
|
15
19
|
export declare function GetSecretsProvider(provider: SecretsProviderType): ISecretsProvider;
|
|
16
20
|
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/secrets/provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/secrets/provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;AAO/B,oBAAY,mBAAmB;IAC7B,QAAQ,cAAc;IACtB,KAAK,UAAU;IACf,iBAAiB,wBAAwB;IACzC,aAAa,oBAAoB;IACjC,gBAAgB,uBAAuB;IACvC,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzE;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,mBAAmB,GAC5B,gBAAgB,CAmBlB"}
|
package/lib/secrets/provider.js
CHANGED
|
@@ -1,16 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GetSecretsProvider = exports.SecretsProviderType = void 0;
|
|
4
|
-
const
|
|
4
|
+
const vault_1 = require("./vault");
|
|
5
|
+
const aws_secrets_manager_1 = require("./aws-secrets-manager");
|
|
6
|
+
const azure_key_vault_1 = require("./azure-key-vault");
|
|
7
|
+
const gcp_secret_manager_1 = require("./gcp-secret-manager");
|
|
8
|
+
const local_1 = require("./local");
|
|
5
9
|
var SecretsProviderType;
|
|
6
10
|
(function (SecretsProviderType) {
|
|
7
11
|
SecretsProviderType["HcpVault"] = "hcp-vault";
|
|
12
|
+
SecretsProviderType["Vault"] = "vault";
|
|
13
|
+
SecretsProviderType["AwsSecretsManager"] = "aws-secrets-manager";
|
|
14
|
+
SecretsProviderType["AzureKeyVault"] = "azure-key-vault";
|
|
15
|
+
SecretsProviderType["GcpSecretManager"] = "gcp-secret-manager";
|
|
16
|
+
SecretsProviderType["Local"] = "local";
|
|
8
17
|
SecretsProviderType["None"] = "none";
|
|
9
18
|
})(SecretsProviderType = exports.SecretsProviderType || (exports.SecretsProviderType = {}));
|
|
10
19
|
function GetSecretsProvider(provider) {
|
|
11
20
|
switch (provider) {
|
|
12
21
|
case SecretsProviderType.HcpVault:
|
|
13
|
-
|
|
22
|
+
throw new Error(`Hashicorp's managed HCP Vault has been discontinued; please use another secrets provider\n\nhttps://developer.hashicorp.com/hcp/docs/vault-secrets/end-of-sale-announcement\n`);
|
|
23
|
+
case SecretsProviderType.Vault:
|
|
24
|
+
return new vault_1.VaultSecretsProvider();
|
|
25
|
+
case SecretsProviderType.AwsSecretsManager:
|
|
26
|
+
return new aws_secrets_manager_1.AwsSecretsManagerSecretsProvider();
|
|
27
|
+
case SecretsProviderType.AzureKeyVault:
|
|
28
|
+
return new azure_key_vault_1.AzureKeyVaultSecretsProvider();
|
|
29
|
+
case SecretsProviderType.GcpSecretManager:
|
|
30
|
+
return new gcp_secret_manager_1.GcpSecretManagerSecretsProvider();
|
|
31
|
+
case SecretsProviderType.Local:
|
|
32
|
+
return new local_1.LocalSecretsProvider();
|
|
14
33
|
default:
|
|
15
34
|
throw new Error(`Unknown secrets provider: ${provider}`);
|
|
16
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/secrets/provider.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/secrets/provider.ts"],"names":[],"mappings":";;;AACA,mCAA+C;AAC/C,+DAAyE;AACzE,uDAAiE;AACjE,6DAAuE;AACvE,mCAA+C;AAE/C,IAAY,mBAQX;AARD,WAAY,mBAAmB;IAC7B,6CAAsB,CAAA;IACtB,sCAAe,CAAA;IACf,gEAAyC,CAAA;IACzC,wDAAiC,CAAA;IACjC,8DAAuC,CAAA;IACvC,sCAAe,CAAA;IACf,oCAAa,CAAA;AACf,CAAC,EARW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAQ9B;AAYD,SAAgB,kBAAkB,CAChC,QAA6B;IAE7B,QAAQ,QAAQ,EAAE;QAChB,KAAK,mBAAmB,CAAC,QAAQ;YAC/B,MAAM,IAAI,KAAK,CACb,+KAA+K,CAChL,CAAC;QACJ,KAAK,mBAAmB,CAAC,KAAK;YAC5B,OAAO,IAAI,4BAAoB,EAAE,CAAC;QACpC,KAAK,mBAAmB,CAAC,iBAAiB;YACxC,OAAO,IAAI,sDAAgC,EAAE,CAAC;QAChD,KAAK,mBAAmB,CAAC,aAAa;YACpC,OAAO,IAAI,8CAA4B,EAAE,CAAC;QAC5C,KAAK,mBAAmB,CAAC,gBAAgB;YACvC,OAAO,IAAI,oDAA+B,EAAE,CAAC;QAC/C,KAAK,mBAAmB,CAAC,KAAK;YAC5B,OAAO,IAAI,4BAAoB,EAAE,CAAC;QACpC;YACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC;KAC5D;AACH,CAAC;AArBD,gDAqBC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import Config from "../config";
|
|
2
|
+
import { ISecretsProvider, ISecretsToken } from "./provider";
|
|
3
|
+
export declare class VaultSecretsProvider implements ISecretsProvider {
|
|
4
|
+
getAuthToken(config: Config): Promise<ISecretsToken>;
|
|
5
|
+
getSecret(config: Config, token: string, name: string): Promise<string>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=vault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/secrets/vault.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAO7D,qBAAa,oBAAqB,YAAW,gBAAgB;IAC9C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAwBpD,SAAS,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC;CAyDnB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.VaultSecretsProvider = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
var VaultKvEngine;
|
|
9
|
+
(function (VaultKvEngine) {
|
|
10
|
+
VaultKvEngine["V1"] = "v1";
|
|
11
|
+
VaultKvEngine["V2"] = "v2";
|
|
12
|
+
})(VaultKvEngine || (VaultKvEngine = {}));
|
|
13
|
+
class VaultSecretsProvider {
|
|
14
|
+
async getAuthToken(config) {
|
|
15
|
+
const endpoint = config.get("secrets.vault.endpoint");
|
|
16
|
+
const namespace = config.get("secrets.vault.namespace");
|
|
17
|
+
const response = await axios_1.default.post(`${endpoint}/v1/auth/approle/login`, {
|
|
18
|
+
role_id: process.env.VAULT_ROLE_ID,
|
|
19
|
+
secret_id: process.env.VAULT_SECRET_ID,
|
|
20
|
+
}, {
|
|
21
|
+
headers: {
|
|
22
|
+
"Content-Type": "application/json",
|
|
23
|
+
"X-Vault-Namespace": namespace,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
value: response.data.auth.client_token,
|
|
28
|
+
expires: new Date(Date.now() + response.data.auth.lease_duration * 1000),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
async getSecret(config, token, name) {
|
|
32
|
+
const kvEngine = config.get("secrets.vault.kv-engine");
|
|
33
|
+
const engineName = config.get("secrets.vault.engine-name");
|
|
34
|
+
const pathPrefix = config.get("secrets.vault.path-prefix");
|
|
35
|
+
if (kvEngine === VaultKvEngine.V1) {
|
|
36
|
+
const response = await axios_1.default.get(`${config.get("secrets.vault.endpoint")}/v1/${engineName}/${pathPrefix}${name}`, {
|
|
37
|
+
headers: {
|
|
38
|
+
"X-Vault-Token": token,
|
|
39
|
+
"X-Vault-Namespace": config.get("secrets.vault.namespace"),
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
if (!response.data.data) {
|
|
43
|
+
throw new Error(`No data found at path: ${name}`);
|
|
44
|
+
}
|
|
45
|
+
if (!response.data.data.value) {
|
|
46
|
+
throw new Error(`No key with name 'value' found in secret key/value at path: ${name}`);
|
|
47
|
+
}
|
|
48
|
+
return response.data.data.value;
|
|
49
|
+
}
|
|
50
|
+
else if (kvEngine === VaultKvEngine.V2) {
|
|
51
|
+
const response = await axios_1.default.get(`${config.get("secrets.vault.endpoint")}/v1/${engineName}/data/${pathPrefix}${name}`, {
|
|
52
|
+
headers: {
|
|
53
|
+
"X-Vault-Token": token,
|
|
54
|
+
"X-Vault-Namespace": config.get("secrets.vault.namespace"),
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
if (!response.data.data || !response.data.data.data) {
|
|
58
|
+
throw new Error(`No data found at path: ${name}`);
|
|
59
|
+
}
|
|
60
|
+
if (!response.data.data.data.value) {
|
|
61
|
+
throw new Error(`No key with name 'value' found in secret key/value at path: ${name}`);
|
|
62
|
+
}
|
|
63
|
+
return response.data.data.data.value;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
throw new Error(`Unsupported Vault KV engine: ${kvEngine}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.VaultSecretsProvider = VaultSecretsProvider;
|
|
71
|
+
//# sourceMappingURL=vault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/secrets/vault.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@incanta/config",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./lib/index.js",
|
|
@@ -18,6 +18,10 @@
|
|
|
18
18
|
"test": "jest"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
+
"@aws-sdk/client-secrets-manager": "^3.839.0",
|
|
22
|
+
"@azure/identity": "^4.10.1",
|
|
23
|
+
"@azure/keyvault-secrets": "^4.10.0",
|
|
24
|
+
"@google-cloud/secret-manager": "^6.0.1",
|
|
21
25
|
"axios": "^1.8.2",
|
|
22
26
|
"js-yaml": "^4.1.0",
|
|
23
27
|
"json5": "^2.2.3",
|
package/src/config.ts
CHANGED
|
@@ -19,6 +19,11 @@ export interface IConfigSettings {
|
|
|
19
19
|
extraDirs?: string[];
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
interface ISecret {
|
|
23
|
+
value: string;
|
|
24
|
+
expires: Date;
|
|
25
|
+
}
|
|
26
|
+
|
|
22
27
|
export default class Config {
|
|
23
28
|
private configDir: string = "";
|
|
24
29
|
private configEnv: string = "";
|
|
@@ -34,8 +39,7 @@ export default class Config {
|
|
|
34
39
|
value: string;
|
|
35
40
|
expires: Date;
|
|
36
41
|
} | null = null;
|
|
37
|
-
private secretsCache: Record<string,
|
|
38
|
-
private secretsCacheExpiration: Date | null = null;
|
|
42
|
+
private secretsCache: Record<string, ISecret> = {};
|
|
39
43
|
|
|
40
44
|
public constructor(options?: IConfigOptions) {
|
|
41
45
|
this.init(options);
|
|
@@ -47,7 +51,6 @@ export default class Config {
|
|
|
47
51
|
this.customValues = {};
|
|
48
52
|
this.secretsToken = null;
|
|
49
53
|
this.secretsCache = {};
|
|
50
|
-
this.secretsCacheExpiration = null;
|
|
51
54
|
|
|
52
55
|
let defaultConfigDir = "config";
|
|
53
56
|
let defaultConfigEnv = "default";
|
|
@@ -256,25 +259,6 @@ export default class Config {
|
|
|
256
259
|
return obj as T;
|
|
257
260
|
}
|
|
258
261
|
|
|
259
|
-
public async refreshSecrets(): Promise<void> {
|
|
260
|
-
const provider = GetSecretsProvider(this.normalizedValues.secrets.provider);
|
|
261
|
-
|
|
262
|
-
if (
|
|
263
|
-
this.secretsToken === null ||
|
|
264
|
-
this.secretsToken.expires.getTime() < Date.now() + 500
|
|
265
|
-
) {
|
|
266
|
-
this.secretsToken = await provider.getAuthToken();
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
this.secretsCache = await provider.getSecrets(
|
|
270
|
-
this,
|
|
271
|
-
this.secretsToken.value
|
|
272
|
-
);
|
|
273
|
-
this.secretsCacheExpiration = new Date(
|
|
274
|
-
Date.now() + this.get<number>("secrets.cache-duration-seconds") * 1000
|
|
275
|
-
);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
262
|
public async getWithSecrets<T>(key: string): Promise<T> {
|
|
279
263
|
let value = this.get<T>(key);
|
|
280
264
|
|
|
@@ -306,28 +290,33 @@ export default class Config {
|
|
|
306
290
|
this.secretsToken === null ||
|
|
307
291
|
this.secretsToken.expires.getTime() < Date.now() + 500
|
|
308
292
|
) {
|
|
309
|
-
this.secretsToken = await provider.getAuthToken();
|
|
293
|
+
this.secretsToken = await provider.getAuthToken(this);
|
|
310
294
|
}
|
|
311
295
|
|
|
312
296
|
if (
|
|
313
|
-
this.
|
|
314
|
-
this.
|
|
315
|
-
this.secretsCache[secretKey] === undefined
|
|
297
|
+
this.secretsCache[secretKey] === undefined ||
|
|
298
|
+
this.secretsCache[secretKey].expires < new Date()
|
|
316
299
|
) {
|
|
317
|
-
|
|
300
|
+
const secretValue = await provider.getSecret(
|
|
318
301
|
this,
|
|
319
|
-
this.secretsToken.value
|
|
320
|
-
|
|
321
|
-
this.secretsCacheExpiration = new Date(
|
|
322
|
-
Date.now() + this.get<number>("secrets.cache-duration-seconds") * 1000
|
|
302
|
+
this.secretsToken.value,
|
|
303
|
+
secretKey
|
|
323
304
|
);
|
|
305
|
+
|
|
306
|
+
this.secretsCache[secretKey] = {
|
|
307
|
+
value: secretValue,
|
|
308
|
+
expires: new Date(
|
|
309
|
+
Date.now() +
|
|
310
|
+
this.get<number>("secrets.cache-duration-seconds") * 1000
|
|
311
|
+
),
|
|
312
|
+
};
|
|
324
313
|
}
|
|
325
314
|
|
|
326
315
|
if (this.secretsCache[secretKey] === undefined) {
|
|
327
316
|
throw new Error(`Secret ${secretKey} not found`);
|
|
328
317
|
}
|
|
329
318
|
|
|
330
|
-
return this.secretsCache[secretKey] as T;
|
|
319
|
+
return this.secretsCache[secretKey].value as T;
|
|
331
320
|
} else if (typeof v === "object" && v !== null) {
|
|
332
321
|
if (Array.isArray(v)) {
|
|
333
322
|
const newObjs: any[] = [];
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SecretsManagerClient,
|
|
3
|
+
GetSecretValueCommand,
|
|
4
|
+
} from "@aws-sdk/client-secrets-manager";
|
|
5
|
+
import { ISecretsProvider, ISecretsToken } from "./provider";
|
|
6
|
+
import Config from "../config";
|
|
7
|
+
|
|
8
|
+
export class AwsSecretsManagerSecretsProvider implements ISecretsProvider {
|
|
9
|
+
public async getAuthToken(config: Config): Promise<ISecretsToken> {
|
|
10
|
+
return {
|
|
11
|
+
value: "", // auth happens automatically with AWS SDK
|
|
12
|
+
expires: new Date(Date.now() + 3600 * 1000),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public async getSecret(
|
|
17
|
+
config: Config,
|
|
18
|
+
token: string,
|
|
19
|
+
name: string
|
|
20
|
+
): Promise<string> {
|
|
21
|
+
const region = config.get<string>("secrets.aws-kms.region");
|
|
22
|
+
|
|
23
|
+
const client = new SecretsManagerClient({
|
|
24
|
+
region,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const response = await client.send(
|
|
28
|
+
new GetSecretValueCommand({
|
|
29
|
+
SecretId: name,
|
|
30
|
+
VersionStage: "AWSCURRENT",
|
|
31
|
+
})
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
if (!response.SecretString) {
|
|
35
|
+
throw new Error(`No secret found with name: ${name}`);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return response.SecretString;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { SecretClient } from "@azure/keyvault-secrets";
|
|
2
|
+
import { DefaultAzureCredential } from "@azure/identity";
|
|
3
|
+
import { ISecretsProvider, ISecretsToken } from "./provider";
|
|
4
|
+
import Config from "../config";
|
|
5
|
+
|
|
6
|
+
export class AzureKeyVaultSecretsProvider implements ISecretsProvider {
|
|
7
|
+
public async getAuthToken(config: Config): Promise<ISecretsToken> {
|
|
8
|
+
return {
|
|
9
|
+
value: "", // auth happens automatically with the Azure SDK
|
|
10
|
+
expires: new Date(Date.now() + 3600 * 1000),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public async getSecret(
|
|
15
|
+
config: Config,
|
|
16
|
+
token: string,
|
|
17
|
+
name: string
|
|
18
|
+
): Promise<string> {
|
|
19
|
+
// DefaultAzureCredential expects the following three environment variables:
|
|
20
|
+
// - AZURE_TENANT_ID: The tenant ID in Azure Active Directory
|
|
21
|
+
// - AZURE_CLIENT_ID: The application (client) ID registered in the AAD tenant
|
|
22
|
+
// - AZURE_CLIENT_SECRET: The client secret for the registered application
|
|
23
|
+
const credential = new DefaultAzureCredential();
|
|
24
|
+
|
|
25
|
+
const endpoint = config.get<string>("secrets.azure-key-vault.endpoint");
|
|
26
|
+
|
|
27
|
+
const client = new SecretClient(endpoint, credential);
|
|
28
|
+
|
|
29
|
+
const secret = await client.getSecret(name);
|
|
30
|
+
|
|
31
|
+
return secret.value || "";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { v1 } from "@google-cloud/secret-manager";
|
|
2
|
+
const { SecretManagerServiceClient } = v1;
|
|
3
|
+
import { ISecretsProvider, ISecretsToken } from "./provider";
|
|
4
|
+
import Config from "../config";
|
|
5
|
+
|
|
6
|
+
export class GcpSecretManagerSecretsProvider implements ISecretsProvider {
|
|
7
|
+
public async getAuthToken(config: Config): Promise<ISecretsToken> {
|
|
8
|
+
return {
|
|
9
|
+
value: "", // auth happens automatically with the Azure SDK
|
|
10
|
+
expires: new Date(Date.now() + 3600 * 1000),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public async getSecret(
|
|
15
|
+
config: Config,
|
|
16
|
+
token: string,
|
|
17
|
+
name: string
|
|
18
|
+
): Promise<string> {
|
|
19
|
+
const client = new SecretManagerServiceClient();
|
|
20
|
+
|
|
21
|
+
const projectId = config.get<string>(
|
|
22
|
+
"secrets.gcp-secret-manager.project-id"
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
const [secret] = await client.accessSecretVersion({
|
|
26
|
+
name: `projects/${projectId}/secrets/${name}/versions/latest`,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
if (!secret.payload || !secret.payload.data) {
|
|
30
|
+
throw new Error(`No secret found with name: ${name}`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return secret.payload.data.toString();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ISecretsProvider, ISecretsToken } from "./provider";
|
|
2
|
+
import Config from "../config";
|
|
3
|
+
import { existsSync, promises as fs } from "fs";
|
|
4
|
+
import path from "path";
|
|
5
|
+
|
|
6
|
+
export class LocalSecretsProvider implements ISecretsProvider {
|
|
7
|
+
public async getAuthToken(config: Config): Promise<ISecretsToken> {
|
|
8
|
+
return {
|
|
9
|
+
value: "", // there is no auth token for local secrets
|
|
10
|
+
expires: new Date(Date.now() + 3600 * 1000),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public async getSecret(
|
|
15
|
+
config: Config,
|
|
16
|
+
token: string,
|
|
17
|
+
name: string
|
|
18
|
+
): Promise<string> {
|
|
19
|
+
let filePath = config.tryGet<string>("secrets.local.file-path");
|
|
20
|
+
|
|
21
|
+
if (filePath === null) {
|
|
22
|
+
filePath = ".secrets";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const absolutePath = path.resolve(process.cwd(), filePath);
|
|
26
|
+
|
|
27
|
+
if (existsSync(absolutePath) === false) {
|
|
28
|
+
throw new Error(`Secrets file does not exist: ${absolutePath}`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const contents = await fs.readFile(absolutePath, "utf8");
|
|
32
|
+
|
|
33
|
+
const secretLines = contents.replace(/\r\n/g, "\n").split("\n");
|
|
34
|
+
|
|
35
|
+
const secretMap: Record<string, string> = {};
|
|
36
|
+
for (const line of secretLines) {
|
|
37
|
+
const [key, value] = line.split("=");
|
|
38
|
+
if (key && value) {
|
|
39
|
+
secretMap[key.trim()] = value.trim();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (Object.keys(secretMap).length === 0) {
|
|
44
|
+
throw new Error(`No secrets found in file: ${filePath}`);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (!secretMap[name]) {
|
|
48
|
+
throw new Error(`No secret found with name: ${name}`);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return secretMap[name];
|
|
52
|
+
}
|
|
53
|
+
}
|
package/src/secrets/provider.ts
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import Config from "../config";
|
|
2
|
-
import {
|
|
2
|
+
import { VaultSecretsProvider } from "./vault";
|
|
3
|
+
import { AwsSecretsManagerSecretsProvider } from "./aws-secrets-manager";
|
|
4
|
+
import { AzureKeyVaultSecretsProvider } from "./azure-key-vault";
|
|
5
|
+
import { GcpSecretManagerSecretsProvider } from "./gcp-secret-manager";
|
|
6
|
+
import { LocalSecretsProvider } from "./local";
|
|
3
7
|
|
|
4
8
|
export enum SecretsProviderType {
|
|
5
9
|
HcpVault = "hcp-vault",
|
|
10
|
+
Vault = "vault",
|
|
11
|
+
AwsSecretsManager = "aws-secrets-manager",
|
|
12
|
+
AzureKeyVault = "azure-key-vault",
|
|
13
|
+
GcpSecretManager = "gcp-secret-manager",
|
|
14
|
+
Local = "local",
|
|
6
15
|
None = "none",
|
|
7
16
|
}
|
|
8
17
|
|
|
@@ -12,9 +21,8 @@ export interface ISecretsToken {
|
|
|
12
21
|
}
|
|
13
22
|
|
|
14
23
|
export interface ISecretsProvider {
|
|
15
|
-
getAuthToken(): Promise<ISecretsToken>;
|
|
16
|
-
|
|
17
|
-
getSecret(config: Config, token: string, secretName: string): Promise<string>;
|
|
24
|
+
getAuthToken(config: Config): Promise<ISecretsToken>;
|
|
25
|
+
getSecret(config: Config, token: string, name: string): Promise<string>;
|
|
18
26
|
}
|
|
19
27
|
|
|
20
28
|
export function GetSecretsProvider(
|
|
@@ -22,7 +30,19 @@ export function GetSecretsProvider(
|
|
|
22
30
|
): ISecretsProvider {
|
|
23
31
|
switch (provider) {
|
|
24
32
|
case SecretsProviderType.HcpVault:
|
|
25
|
-
|
|
33
|
+
throw new Error(
|
|
34
|
+
`Hashicorp's managed HCP Vault has been discontinued; please use another secrets provider\n\nhttps://developer.hashicorp.com/hcp/docs/vault-secrets/end-of-sale-announcement\n`
|
|
35
|
+
);
|
|
36
|
+
case SecretsProviderType.Vault:
|
|
37
|
+
return new VaultSecretsProvider();
|
|
38
|
+
case SecretsProviderType.AwsSecretsManager:
|
|
39
|
+
return new AwsSecretsManagerSecretsProvider();
|
|
40
|
+
case SecretsProviderType.AzureKeyVault:
|
|
41
|
+
return new AzureKeyVaultSecretsProvider();
|
|
42
|
+
case SecretsProviderType.GcpSecretManager:
|
|
43
|
+
return new GcpSecretManagerSecretsProvider();
|
|
44
|
+
case SecretsProviderType.Local:
|
|
45
|
+
return new LocalSecretsProvider();
|
|
26
46
|
default:
|
|
27
47
|
throw new Error(`Unknown secrets provider: ${provider}`);
|
|
28
48
|
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import Config from "../config";
|
|
3
|
+
import { ISecretsProvider, ISecretsToken } from "./provider";
|
|
4
|
+
|
|
5
|
+
enum VaultKvEngine {
|
|
6
|
+
V1 = "v1",
|
|
7
|
+
V2 = "v2",
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export class VaultSecretsProvider implements ISecretsProvider {
|
|
11
|
+
public async getAuthToken(config: Config): Promise<ISecretsToken> {
|
|
12
|
+
const endpoint = config.get<string>("secrets.vault.endpoint");
|
|
13
|
+
const namespace = config.get<string>("secrets.vault.namespace");
|
|
14
|
+
|
|
15
|
+
const response = await axios.post(
|
|
16
|
+
`${endpoint}/v1/auth/approle/login`,
|
|
17
|
+
{
|
|
18
|
+
role_id: process.env.VAULT_ROLE_ID,
|
|
19
|
+
secret_id: process.env.VAULT_SECRET_ID,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
headers: {
|
|
23
|
+
"Content-Type": "application/json",
|
|
24
|
+
"X-Vault-Namespace": namespace,
|
|
25
|
+
},
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
value: response.data.auth.client_token,
|
|
31
|
+
expires: new Date(Date.now() + response.data.auth.lease_duration * 1000),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public async getSecret(
|
|
36
|
+
config: Config,
|
|
37
|
+
token: string,
|
|
38
|
+
name: string
|
|
39
|
+
): Promise<string> {
|
|
40
|
+
const kvEngine = config.get<VaultKvEngine>("secrets.vault.kv-engine");
|
|
41
|
+
const engineName = config.get<string>("secrets.vault.engine-name");
|
|
42
|
+
const pathPrefix = config.get<string>("secrets.vault.path-prefix");
|
|
43
|
+
|
|
44
|
+
if (kvEngine === VaultKvEngine.V1) {
|
|
45
|
+
const response = await axios.get(
|
|
46
|
+
`${config.get<string>(
|
|
47
|
+
"secrets.vault.endpoint"
|
|
48
|
+
)}/v1/${engineName}/${pathPrefix}${name}`,
|
|
49
|
+
{
|
|
50
|
+
headers: {
|
|
51
|
+
"X-Vault-Token": token,
|
|
52
|
+
"X-Vault-Namespace": config.get<string>("secrets.vault.namespace"),
|
|
53
|
+
},
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
if (!response.data.data) {
|
|
58
|
+
throw new Error(`No data found at path: ${name}`);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (!response.data.data.value) {
|
|
62
|
+
throw new Error(
|
|
63
|
+
`No key with name 'value' found in secret key/value at path: ${name}`
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return response.data.data.value;
|
|
68
|
+
} else if (kvEngine === VaultKvEngine.V2) {
|
|
69
|
+
const response = await axios.get(
|
|
70
|
+
`${config.get<string>(
|
|
71
|
+
"secrets.vault.endpoint"
|
|
72
|
+
)}/v1/${engineName}/data/${pathPrefix}${name}`,
|
|
73
|
+
{
|
|
74
|
+
headers: {
|
|
75
|
+
"X-Vault-Token": token,
|
|
76
|
+
"X-Vault-Namespace": config.get<string>("secrets.vault.namespace"),
|
|
77
|
+
},
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
if (!response.data.data || !response.data.data.data) {
|
|
82
|
+
throw new Error(`No data found at path: ${name}`);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (!response.data.data.data.value) {
|
|
86
|
+
throw new Error(
|
|
87
|
+
`No key with name 'value' found in secret key/value at path: ${name}`
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return response.data.data.data.value;
|
|
92
|
+
} else {
|
|
93
|
+
throw new Error(`Unsupported Vault KV engine: ${kvEngine}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
package/src/secrets/hcp-vault.ts
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import axios, { AxiosError } from "axios";
|
|
2
|
-
import Config from "../config";
|
|
3
|
-
import { ISecretsProvider, ISecretsToken } from "./provider";
|
|
4
|
-
|
|
5
|
-
export interface IHcpVaultSecret {
|
|
6
|
-
name: string;
|
|
7
|
-
version: {
|
|
8
|
-
version: string;
|
|
9
|
-
type: string;
|
|
10
|
-
created_at: string;
|
|
11
|
-
value: string;
|
|
12
|
-
created_by: {
|
|
13
|
-
name: string;
|
|
14
|
-
type: string;
|
|
15
|
-
email: string;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
created_at: string;
|
|
19
|
-
latest_version: string;
|
|
20
|
-
created_by: {
|
|
21
|
-
name: string;
|
|
22
|
-
type: string;
|
|
23
|
-
email: string;
|
|
24
|
-
};
|
|
25
|
-
sync_status: any;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export class HcpVaultSecretsProvider implements ISecretsProvider {
|
|
29
|
-
public async getAuthToken(): Promise<ISecretsToken> {
|
|
30
|
-
try {
|
|
31
|
-
const response = await axios.post(
|
|
32
|
-
"https://auth.idp.hashicorp.com/oauth2/token",
|
|
33
|
-
{
|
|
34
|
-
client_id: process.env.HCP_CLIENT_ID,
|
|
35
|
-
client_secret: process.env.HCP_CLIENT_SECRET,
|
|
36
|
-
grant_type: "client_credentials",
|
|
37
|
-
audience: "https://api.hashicorp.cloud",
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
headers: {
|
|
41
|
-
"Content-Type": "application/x-www-form-urlencoded",
|
|
42
|
-
},
|
|
43
|
-
}
|
|
44
|
-
);
|
|
45
|
-
return {
|
|
46
|
-
value: response.data.access_token,
|
|
47
|
-
expires: new Date(Date.now() + response.data.expires_in * 1000),
|
|
48
|
-
};
|
|
49
|
-
} catch (error: any) {
|
|
50
|
-
const typedError = error as AxiosError;
|
|
51
|
-
throw new Error(
|
|
52
|
-
`Failed to get HCP Vault token: ${typedError.code}; did you set HCP_CLIENT_ID and HCP_CLIENT_SECRET?`
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
public async getSecrets(
|
|
58
|
-
config: Config,
|
|
59
|
-
token: string
|
|
60
|
-
): Promise<Record<string, string>> {
|
|
61
|
-
const orgId = config.get<string>("secrets.hcp-vault.organization-id");
|
|
62
|
-
const projectId = config.get<string>("secrets.hcp-vault.project-id");
|
|
63
|
-
const appName = config.get<string>("secrets.hcp-vault.app-name");
|
|
64
|
-
const response = await axios.get(
|
|
65
|
-
`https://api.cloud.hashicorp.com/secrets/2023-06-13/organizations/${orgId}/projects/${projectId}/apps/${appName}/open`,
|
|
66
|
-
{
|
|
67
|
-
headers: {
|
|
68
|
-
Authorization: `Bearer ${token}`,
|
|
69
|
-
},
|
|
70
|
-
}
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
const secrets: Record<string, string> = {};
|
|
74
|
-
for (const secret of response.data.secrets as IHcpVaultSecret[]) {
|
|
75
|
-
secrets[secret.name] = secret.version.value;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return secrets;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
public async getSecret(
|
|
82
|
-
config: Config,
|
|
83
|
-
token: string,
|
|
84
|
-
secretName: string
|
|
85
|
-
): Promise<string> {
|
|
86
|
-
const orgId = config.get<string>("secrets.hcp-vault.organization-id");
|
|
87
|
-
const projectId = config.get<string>("secrets.hcp-vault.project-id");
|
|
88
|
-
const appName = config.get<string>("secrets.hcp-vault.app-name");
|
|
89
|
-
const response = await axios.get(
|
|
90
|
-
`https://api.cloud.hashicorp.com/secrets/2023-06-13/organizations/${orgId}/projects/${projectId}/apps/${appName}/open/${secretName}`,
|
|
91
|
-
{
|
|
92
|
-
headers: {
|
|
93
|
-
Authorization: `Bearer ${token}`,
|
|
94
|
-
},
|
|
95
|
-
}
|
|
96
|
-
);
|
|
97
|
-
|
|
98
|
-
return (response.data.secret as IHcpVaultSecret).version.value;
|
|
99
|
-
}
|
|
100
|
-
}
|