@incanta/config 0.4.4 → 0.5.0

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 CHANGED
@@ -8,12 +8,18 @@ export default class Config {
8
8
  private normalizedValues;
9
9
  private customValues;
10
10
  private envVarConfig;
11
+ private secretsToken;
12
+ private secretsCache;
13
+ private secretsCacheExpiration;
11
14
  constructor(options?: IConfigOptions);
12
15
  init(options?: IConfigOptions): void;
13
16
  dir(): string;
14
17
  getConfiguredEnv(): any;
15
18
  get<T>(key: string): T;
16
19
  getWithParts<T>(keyParts: string[]): T;
20
+ refreshSecrets(): Promise<void>;
21
+ getWithSecrets<T>(key: string): Promise<T>;
22
+ private processSecrets;
17
23
  normalizeString(value: string, currentPath: string[]): string;
18
24
  normalizeArray(arr: any[], currentPath: string[]): any[];
19
25
  normalizeObject(obj: any, currentPath: string[]): any;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,SAAS,CAAc;IAE/B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,YAAY,CAAM;gBAEP,OAAO,CAAC,EAAE,cAAc;IAIpC,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAuFpC,GAAG,IAAI,MAAM;IAIb,gBAAgB,IAAI,GAAG;IAevB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;IAKtB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC;IAuBtC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;IA8C7D,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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,SAAS,CAAc;IAE/B,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,CAA2B;IAC/C,OAAO,CAAC,sBAAsB,CAAqB;gBAEhC,OAAO,CAAC,EAAE,cAAc;IAIpC,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IA0FpC,GAAG,IAAI,MAAM;IAIb,gBAAgB,IAAI,GAAG;IAevB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;IAKtB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC;IAuBhC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB/B,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAWzC,cAAc;IAsDrB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;IA8C7D,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
@@ -7,12 +7,16 @@ const lodash_merge_1 = __importDefault(require("lodash.merge"));
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const loader_1 = require("./loader");
10
+ const provider_1 = require("./secrets/provider");
10
11
  class Config {
11
12
  configDir = "";
12
13
  values;
13
14
  normalizedValues;
14
15
  customValues;
15
16
  envVarConfig;
17
+ secretsToken = null;
18
+ secretsCache = {};
19
+ secretsCacheExpiration = null;
16
20
  constructor(options) {
17
21
  this.init(options);
18
22
  }
@@ -20,6 +24,9 @@ class Config {
20
24
  this.values = {};
21
25
  this.normalizedValues = {};
22
26
  this.customValues = {};
27
+ this.secretsToken = null;
28
+ this.secretsCache = {};
29
+ this.secretsCacheExpiration = null;
23
30
  let defaultConfigDir = "config";
24
31
  let defaultConfigEnv = "default";
25
32
  if (fs_1.default.existsSync(path_1.default.join(process.cwd(), "config-settings.json"))) {
@@ -101,6 +108,61 @@ class Config {
101
108
  }
102
109
  return obj;
103
110
  }
111
+ async refreshSecrets() {
112
+ const provider = (0, provider_1.GetSecretsProvider)(this.normalizedValues.secrets.provider);
113
+ if (this.secretsToken === null ||
114
+ this.secretsToken.expires.getTime() < Date.now() + 500) {
115
+ this.secretsToken = await provider.getAuthToken();
116
+ }
117
+ this.secretsCache = await provider.getSecrets(this, this.secretsToken.value);
118
+ this.secretsCacheExpiration = new Date(Date.now() + this.get("secrets.cache-duration-seconds") * 1000);
119
+ }
120
+ async getWithSecrets(key) {
121
+ let value = this.get(key);
122
+ const provider = this.normalizedValues.secrets?.provider;
123
+ if (typeof provider === "string" && provider !== provider_1.SecretsProviderType.None) {
124
+ value = await this.processSecrets(value);
125
+ }
126
+ return value;
127
+ }
128
+ async processSecrets(v) {
129
+ if (typeof v === "string" && v.startsWith("secret|")) {
130
+ const secretKey = v.slice(7);
131
+ const provider = (0, provider_1.GetSecretsProvider)(this.normalizedValues.secrets.provider);
132
+ if (this.secretsToken === null ||
133
+ this.secretsToken.expires.getTime() < Date.now() + 500) {
134
+ this.secretsToken = await provider.getAuthToken();
135
+ }
136
+ if (this.secretsCacheExpiration === null ||
137
+ this.secretsCacheExpiration < new Date() ||
138
+ this.secretsCache[secretKey] === undefined) {
139
+ this.secretsCache = await provider.getSecrets(this, this.secretsToken.value);
140
+ this.secretsCacheExpiration = new Date(Date.now() + this.get("secrets.cache-duration-seconds") * 1000);
141
+ }
142
+ if (this.secretsCache[secretKey] === undefined) {
143
+ throw new Error(`Secret ${secretKey} not found`);
144
+ }
145
+ return this.secretsCache[secretKey];
146
+ }
147
+ else if (typeof v === "object" && v !== null) {
148
+ if (Array.isArray(v)) {
149
+ const newObjs = [];
150
+ for (const value of v) {
151
+ newObjs.push(await this.processSecrets(value));
152
+ }
153
+ return newObjs;
154
+ }
155
+ else {
156
+ const newObj = {};
157
+ for (const key of Object.keys(v)) {
158
+ const value = v[key];
159
+ newObj[key] = await this.processSecrets(value);
160
+ }
161
+ return newObj;
162
+ }
163
+ }
164
+ return v;
165
+ }
104
166
  normalizeString(value, currentPath) {
105
167
  let result = value;
106
168
  const variableRegex = /\$\{[a-zA-Z\-_0-9./]+\}/g;
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,30 @@
1
+ import Config from "../config";
2
+ import { ISecretsProvider, ISecretsToken } from "./provider";
3
+ export interface IHcpVaultSecret {
4
+ name: string;
5
+ version: {
6
+ version: string;
7
+ type: string;
8
+ created_at: string;
9
+ value: string;
10
+ created_by: {
11
+ name: string;
12
+ type: string;
13
+ email: string;
14
+ };
15
+ };
16
+ created_at: string;
17
+ latest_version: string;
18
+ created_by: {
19
+ name: string;
20
+ type: string;
21
+ email: string;
22
+ };
23
+ sync_status: any;
24
+ }
25
+ export declare class HcpVaultSecretsProvider implements ISecretsProvider {
26
+ getAuthToken(): Promise<ISecretsToken>;
27
+ getSecrets(config: Config, token: string): Promise<Record<string, string>>;
28
+ getSecret(config: Config, token: string, secretName: string): Promise<string>;
29
+ }
30
+ //# sourceMappingURL=hcp-vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcp-vault.d.ts","sourceRoot":"","sources":["../../src/secrets/hcp-vault.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,EAAE,GAAG,CAAC;CAClB;AAED,qBAAa,uBAAwB,YAAW,gBAAgB;IACjD,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC;IAsBtC,UAAU,CACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAqBrB,SAAS,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC;CAenB"}
@@ -0,0 +1,53 @@
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.HcpVaultSecretsProvider = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ class HcpVaultSecretsProvider {
9
+ async getAuthToken() {
10
+ const response = await axios_1.default.post("https://auth.idp.hashicorp.com/oauth2/token", {
11
+ client_id: process.env.HCP_CLIENT_ID,
12
+ client_secret: process.env.HCP_CLIENT_SECRET,
13
+ grant_type: "client_credentials",
14
+ audience: "https://api.hashicorp.cloud",
15
+ }, {
16
+ headers: {
17
+ "Content-Type": "application/x-www-form-urlencoded",
18
+ },
19
+ });
20
+ return {
21
+ value: response.data.access_token,
22
+ expires: new Date(Date.now() + response.data.expires_in * 1000),
23
+ };
24
+ }
25
+ async getSecrets(config, token) {
26
+ const orgId = config.get("secrets.hcp-vault.organization-id");
27
+ const projectId = config.get("secrets.hcp-vault.project-id");
28
+ const appName = config.get("secrets.hcp-vault.app-name");
29
+ const response = await axios_1.default.get(`https://api.cloud.hashicorp.com/secrets/2023-06-13/organizations/${orgId}/projects/${projectId}/apps/${appName}/open`, {
30
+ headers: {
31
+ Authorization: `Bearer ${token}`,
32
+ },
33
+ });
34
+ const secrets = {};
35
+ for (const secret of response.data.secrets) {
36
+ secrets[secret.name] = secret.version.value;
37
+ }
38
+ return secrets;
39
+ }
40
+ async getSecret(config, token, secretName) {
41
+ const orgId = config.get("secrets.hcp-vault.organization-id");
42
+ const projectId = config.get("secrets.hcp-vault.project-id");
43
+ const appName = config.get("secrets.hcp-vault.app-name");
44
+ const response = await axios_1.default.get(`https://api.cloud.hashicorp.com/secrets/2023-06-13/organizations/${orgId}/projects/${projectId}/apps/${appName}/open/${secretName}`, {
45
+ headers: {
46
+ Authorization: `Bearer ${token}`,
47
+ },
48
+ });
49
+ return response.data.secret.version.value;
50
+ }
51
+ }
52
+ exports.HcpVaultSecretsProvider = HcpVaultSecretsProvider;
53
+ //# sourceMappingURL=hcp-vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcp-vault.js","sourceRoot":"","sources":["../../src/secrets/hcp-vault.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AA2B1B,MAAa,uBAAuB;IAC3B,KAAK,CAAC,YAAY;QACvB,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,6CAA6C,EAC7C;YACE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;YACpC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC5C,UAAU,EAAE,oBAAoB;YAChC,QAAQ,EAAE,6BAA6B;SACxC,EACD;YACE,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;aACpD;SACF,CACF,CAAC;QAEF,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY;YACjC,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SAChE,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,UAAU,CACrB,MAAc,EACd,KAAa;QAEb,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAS,mCAAmC,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAS,8BAA8B,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAS,4BAA4B,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAC9B,oEAAoE,KAAK,aAAa,SAAS,SAAS,OAAO,OAAO,EACtH;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;SACF,CACF,CAAC;QAEF,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,OAA4B,EAAE;YAC/D,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAC7C;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,SAAS,CACpB,MAAc,EACd,KAAa,EACb,UAAkB;QAElB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAS,mCAAmC,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAS,8BAA8B,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAS,4BAA4B,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAC9B,oEAAoE,KAAK,aAAa,SAAS,SAAS,OAAO,SAAS,UAAU,EAAE,EACpI;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;SACF,CACF,CAAC;QAEF,OAAQ,QAAQ,CAAC,IAAI,CAAC,MAA0B,CAAC,OAAO,CAAC,KAAK,CAAC;IACjE,CAAC;CACF;AAlED,0DAkEC"}
@@ -0,0 +1,16 @@
1
+ import Config from "../config";
2
+ export declare enum SecretsProviderType {
3
+ HcpVault = "hcp-vault",
4
+ None = "none"
5
+ }
6
+ export interface ISecretsToken {
7
+ value: string;
8
+ expires: Date;
9
+ }
10
+ export interface ISecretsProvider {
11
+ getAuthToken(): Promise<ISecretsToken>;
12
+ getSecrets(config: Config, token: string): Promise<Record<string, string>>;
13
+ getSecret(config: Config, token: string, secretName: string): Promise<string>;
14
+ }
15
+ export declare function GetSecretsProvider(provider: SecretsProviderType): ISecretsProvider;
16
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/secrets/provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,oBAAY,mBAAmB;IAC7B,QAAQ,cAAc;IACtB,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,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3E,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/E;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,mBAAmB,GAC5B,gBAAgB,CAOlB"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetSecretsProvider = exports.SecretsProviderType = void 0;
4
+ const hcp_vault_1 = require("./hcp-vault");
5
+ var SecretsProviderType;
6
+ (function (SecretsProviderType) {
7
+ SecretsProviderType["HcpVault"] = "hcp-vault";
8
+ SecretsProviderType["None"] = "none";
9
+ })(SecretsProviderType = exports.SecretsProviderType || (exports.SecretsProviderType = {}));
10
+ function GetSecretsProvider(provider) {
11
+ switch (provider) {
12
+ case SecretsProviderType.HcpVault:
13
+ return new hcp_vault_1.HcpVaultSecretsProvider();
14
+ default:
15
+ throw new Error(`Unknown secrets provider: ${provider}`);
16
+ }
17
+ }
18
+ exports.GetSecretsProvider = GetSecretsProvider;
19
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/secrets/provider.ts"],"names":[],"mappings":";;;AACA,2CAAsD;AAEtD,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,6CAAsB,CAAA;IACtB,oCAAa,CAAA;AACf,CAAC,EAHW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAG9B;AAaD,SAAgB,kBAAkB,CAChC,QAA6B;IAE7B,QAAQ,QAAQ,EAAE;QAChB,KAAK,mBAAmB,CAAC,QAAQ;YAC/B,OAAO,IAAI,mCAAuB,EAAE,CAAC;QACvC;YACE,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC;KAC5D;AACH,CAAC;AATD,gDASC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@incanta/config",
3
- "version": "0.4.4",
3
+ "version": "0.5.0",
4
4
  "main": "lib/index.js",
5
5
  "exports": {
6
6
  ".": "./lib/index.js",
@@ -18,6 +18,7 @@
18
18
  "test": "jest"
19
19
  },
20
20
  "dependencies": {
21
+ "axios": "^1.7.2",
21
22
  "js-yaml": "^4.1.0",
22
23
  "json5": "^2.2.3",
23
24
  "jsonc-parser": "^3.2.0",
package/src/config.ts CHANGED
@@ -2,6 +2,7 @@ import merge from "lodash.merge";
2
2
  import path from "path";
3
3
  import fs from "fs";
4
4
  import { Loader } from "./loader";
5
+ import { GetSecretsProvider, SecretsProviderType } from "./secrets/provider";
5
6
 
6
7
  export interface IConfigOptions {
7
8
  configDir?: string;
@@ -17,6 +18,13 @@ export default class Config {
17
18
 
18
19
  private envVarConfig: any;
19
20
 
21
+ private secretsToken: {
22
+ value: string;
23
+ expires: Date;
24
+ } | null = null;
25
+ private secretsCache: Record<string, any> = {};
26
+ private secretsCacheExpiration: Date | null = null;
27
+
20
28
  public constructor(options?: IConfigOptions) {
21
29
  this.init(options);
22
30
  }
@@ -25,6 +33,9 @@ export default class Config {
25
33
  this.values = {};
26
34
  this.normalizedValues = {};
27
35
  this.customValues = {};
36
+ this.secretsToken = null;
37
+ this.secretsCache = {};
38
+ this.secretsCacheExpiration = null;
28
39
 
29
40
  let defaultConfigDir = "config";
30
41
  let defaultConfigEnv = "default";
@@ -155,6 +166,90 @@ export default class Config {
155
166
  return obj as T;
156
167
  }
157
168
 
169
+ public async refreshSecrets(): Promise<void> {
170
+ const provider = GetSecretsProvider(this.normalizedValues.secrets.provider);
171
+
172
+ if (
173
+ this.secretsToken === null ||
174
+ this.secretsToken.expires.getTime() < Date.now() + 500
175
+ ) {
176
+ this.secretsToken = await provider.getAuthToken();
177
+ }
178
+
179
+ this.secretsCache = await provider.getSecrets(
180
+ this,
181
+ this.secretsToken.value
182
+ );
183
+ this.secretsCacheExpiration = new Date(
184
+ Date.now() + this.get<number>("secrets.cache-duration-seconds") * 1000
185
+ );
186
+ }
187
+
188
+ public async getWithSecrets<T>(key: string): Promise<T> {
189
+ let value = this.get<T>(key);
190
+
191
+ const provider = this.normalizedValues.secrets?.provider;
192
+ if (typeof provider === "string" && provider !== SecretsProviderType.None) {
193
+ value = await this.processSecrets(value);
194
+ }
195
+
196
+ return value;
197
+ }
198
+
199
+ private async processSecrets<T>(v: T): Promise<T> {
200
+ if (typeof v === "string" && v.startsWith("secret|")) {
201
+ const secretKey = v.slice(7);
202
+
203
+ const provider = GetSecretsProvider(
204
+ this.normalizedValues.secrets.provider
205
+ );
206
+
207
+ if (
208
+ this.secretsToken === null ||
209
+ this.secretsToken.expires.getTime() < Date.now() + 500
210
+ ) {
211
+ this.secretsToken = await provider.getAuthToken();
212
+ }
213
+
214
+ if (
215
+ this.secretsCacheExpiration === null ||
216
+ this.secretsCacheExpiration < new Date() ||
217
+ this.secretsCache[secretKey] === undefined
218
+ ) {
219
+ this.secretsCache = await provider.getSecrets(
220
+ this,
221
+ this.secretsToken.value
222
+ );
223
+ this.secretsCacheExpiration = new Date(
224
+ Date.now() + this.get<number>("secrets.cache-duration-seconds") * 1000
225
+ );
226
+ }
227
+
228
+ if (this.secretsCache[secretKey] === undefined) {
229
+ throw new Error(`Secret ${secretKey} not found`);
230
+ }
231
+
232
+ return this.secretsCache[secretKey] as T;
233
+ } else if (typeof v === "object" && v !== null) {
234
+ if (Array.isArray(v)) {
235
+ const newObjs: any[] = [];
236
+ for (const value of v) {
237
+ newObjs.push(await this.processSecrets(value));
238
+ }
239
+ return newObjs as T;
240
+ } else {
241
+ const newObj: any = {};
242
+ for (const key of Object.keys(v)) {
243
+ const value = (v as any)[key];
244
+ newObj[key] = await this.processSecrets(value);
245
+ }
246
+ return newObj as T;
247
+ }
248
+ }
249
+
250
+ return v;
251
+ }
252
+
158
253
  public normalizeString(value: string, currentPath: string[]): string {
159
254
  let result = value;
160
255
 
@@ -0,0 +1,94 @@
1
+ import axios 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
+ const response = await axios.post(
31
+ "https://auth.idp.hashicorp.com/oauth2/token",
32
+ {
33
+ client_id: process.env.HCP_CLIENT_ID,
34
+ client_secret: process.env.HCP_CLIENT_SECRET,
35
+ grant_type: "client_credentials",
36
+ audience: "https://api.hashicorp.cloud",
37
+ },
38
+ {
39
+ headers: {
40
+ "Content-Type": "application/x-www-form-urlencoded",
41
+ },
42
+ }
43
+ );
44
+
45
+ return {
46
+ value: response.data.access_token,
47
+ expires: new Date(Date.now() + response.data.expires_in * 1000),
48
+ };
49
+ }
50
+
51
+ public async getSecrets(
52
+ config: Config,
53
+ token: string
54
+ ): Promise<Record<string, string>> {
55
+ const orgId = config.get<string>("secrets.hcp-vault.organization-id");
56
+ const projectId = config.get<string>("secrets.hcp-vault.project-id");
57
+ const appName = config.get<string>("secrets.hcp-vault.app-name");
58
+ const response = await axios.get(
59
+ `https://api.cloud.hashicorp.com/secrets/2023-06-13/organizations/${orgId}/projects/${projectId}/apps/${appName}/open`,
60
+ {
61
+ headers: {
62
+ Authorization: `Bearer ${token}`,
63
+ },
64
+ }
65
+ );
66
+
67
+ const secrets: Record<string, string> = {};
68
+ for (const secret of response.data.secrets as IHcpVaultSecret[]) {
69
+ secrets[secret.name] = secret.version.value;
70
+ }
71
+
72
+ return secrets;
73
+ }
74
+
75
+ public async getSecret(
76
+ config: Config,
77
+ token: string,
78
+ secretName: string
79
+ ): Promise<string> {
80
+ const orgId = config.get<string>("secrets.hcp-vault.organization-id");
81
+ const projectId = config.get<string>("secrets.hcp-vault.project-id");
82
+ const appName = config.get<string>("secrets.hcp-vault.app-name");
83
+ const response = await axios.get(
84
+ `https://api.cloud.hashicorp.com/secrets/2023-06-13/organizations/${orgId}/projects/${projectId}/apps/${appName}/open/${secretName}`,
85
+ {
86
+ headers: {
87
+ Authorization: `Bearer ${token}`,
88
+ },
89
+ }
90
+ );
91
+
92
+ return (response.data.secret as IHcpVaultSecret).version.value;
93
+ }
94
+ }
@@ -0,0 +1,29 @@
1
+ import Config from "../config";
2
+ import { HcpVaultSecretsProvider } from "./hcp-vault";
3
+
4
+ export enum SecretsProviderType {
5
+ HcpVault = "hcp-vault",
6
+ None = "none",
7
+ }
8
+
9
+ export interface ISecretsToken {
10
+ value: string;
11
+ expires: Date;
12
+ }
13
+
14
+ export interface ISecretsProvider {
15
+ getAuthToken(): Promise<ISecretsToken>;
16
+ getSecrets(config: Config, token: string): Promise<Record<string, string>>;
17
+ getSecret(config: Config, token: string, secretName: string): Promise<string>;
18
+ }
19
+
20
+ export function GetSecretsProvider(
21
+ provider: SecretsProviderType
22
+ ): ISecretsProvider {
23
+ switch (provider) {
24
+ case SecretsProviderType.HcpVault:
25
+ return new HcpVaultSecretsProvider();
26
+ default:
27
+ throw new Error(`Unknown secrets provider: ${provider}`);
28
+ }
29
+ }