@diia-inhouse/env 2.8.25 → 3.3.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/dist/index.d.ts +3 -0
- package/dist/index.js +8 -21
- package/dist/interfaces/index.d.ts +30 -0
- package/dist/interfaces/index.js +12 -13
- package/dist/metrics/index.js +5 -6
- package/dist/services/env.d.ts +38 -0
- package/dist/services/env.js +201 -214
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +2 -18
- package/dist/services/vaultClient.js +48 -56
- package/package.json +32 -25
- package/dist/index.js.map +0 -1
- package/dist/interfaces/index.js.map +0 -1
- package/dist/interfaces/metrics/index.js +0 -3
- package/dist/interfaces/metrics/index.js.map +0 -1
- package/dist/metrics/index.js.map +0 -1
- package/dist/services/env.js.map +0 -1
- package/dist/services/index.js.map +0 -1
- package/dist/services/vaultClient.js.map +0 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/types/interfaces/index.d.ts +0 -27
- package/dist/types/interfaces/metrics/index.d.ts +0 -4
- package/dist/types/metrics/index.d.ts +0 -3
- package/dist/types/services/env.d.ts +0 -34
- package/dist/types/services/index.d.ts +0 -1
- package/dist/types/services/vaultClient.d.ts +0 -27
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Env, GetSecretOps, GetTransitKeyOps, GetTransitKeyReadResult, GetTransitKeyResult, ProcessedTransitKey } from "./interfaces/index.js";
|
|
2
|
+
import { EnvService } from "./services/env.js";
|
|
3
|
+
export { Env, EnvService, GetSecretOps, GetTransitKeyOps, GetTransitKeyReadResult, GetTransitKeyResult, ProcessedTransitKey };
|
package/dist/index.js
CHANGED
|
@@ -1,21 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
const dotenv_flow_1 = require("dotenv-flow");
|
|
18
|
-
(0, dotenv_flow_1.config)({ silent: true });
|
|
19
|
-
__exportStar(require("./interfaces"), exports);
|
|
20
|
-
__exportStar(require("./services"), exports);
|
|
21
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
import { Env } from "./interfaces/index.js";
|
|
2
|
+
import { EnvService } from "./services/env.js";
|
|
3
|
+
import "./services/index.js";
|
|
4
|
+
import { config } from "dotenv-flow";
|
|
5
|
+
//#region src/index.ts
|
|
6
|
+
config({ silent: true });
|
|
7
|
+
//#endregion
|
|
8
|
+
export { Env, EnvService };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region src/interfaces/index.d.ts
|
|
2
|
+
declare enum Env {
|
|
3
|
+
Local = "local",
|
|
4
|
+
Test = "test",
|
|
5
|
+
Dev = "dev",
|
|
6
|
+
Sandbox = "sandbox",
|
|
7
|
+
Stage = "stage",
|
|
8
|
+
Prod = "prod"
|
|
9
|
+
}
|
|
10
|
+
interface GetSecretOps {
|
|
11
|
+
accessor?: string;
|
|
12
|
+
nullable?: boolean;
|
|
13
|
+
}
|
|
14
|
+
type GetTransitKeyResult = {
|
|
15
|
+
keys: Record<number, string>;
|
|
16
|
+
name: string;
|
|
17
|
+
type: string;
|
|
18
|
+
};
|
|
19
|
+
type GetTransitKeyReadResult = Record<string, unknown> & {
|
|
20
|
+
data: GetTransitKeyResult;
|
|
21
|
+
};
|
|
22
|
+
interface GetTransitKeyOps {
|
|
23
|
+
keyVersion?: string;
|
|
24
|
+
}
|
|
25
|
+
interface ProcessedTransitKey {
|
|
26
|
+
fullKeyName: string;
|
|
27
|
+
key: string;
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { Env, GetSecretOps, GetTransitKeyOps, GetTransitKeyReadResult, GetTransitKeyResult, ProcessedTransitKey };
|
package/dist/interfaces/index.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
//#region src/interfaces/index.ts
|
|
2
|
+
let Env = /* @__PURE__ */ function(Env) {
|
|
3
|
+
Env["Local"] = "local";
|
|
4
|
+
Env["Test"] = "test";
|
|
5
|
+
Env["Dev"] = "dev";
|
|
6
|
+
Env["Sandbox"] = "sandbox";
|
|
7
|
+
Env["Stage"] = "stage";
|
|
8
|
+
Env["Prod"] = "prod";
|
|
9
|
+
return Env;
|
|
10
|
+
}({});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { Env };
|
package/dist/metrics/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
import { Counter } from "@diia-inhouse/diia-metrics";
|
|
2
|
+
//#region src/metrics/index.ts
|
|
3
|
+
const vaultRequestsTotalMetric = new Counter("vault_requests_total", ["status", "method"]);
|
|
4
|
+
//#endregion
|
|
5
|
+
export { vaultRequestsTotalMetric };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Env, GetSecretOps, GetTransitKeyOps, ProcessedTransitKey } from "../interfaces/index.js";
|
|
2
|
+
import { Logger, OnDestroy } from "@diia-inhouse/types";
|
|
3
|
+
|
|
4
|
+
//#region src/services/env.d.ts
|
|
5
|
+
declare class EnvService implements OnDestroy {
|
|
6
|
+
private logger;
|
|
7
|
+
private readonly kubernetesPath;
|
|
8
|
+
private readonly isVaultEnabled;
|
|
9
|
+
private readonly renewalLeaseLifetime;
|
|
10
|
+
private readonly renewalMaxDelay;
|
|
11
|
+
private readonly rawSecrets;
|
|
12
|
+
private vault;
|
|
13
|
+
constructor(logger: Logger);
|
|
14
|
+
static getVar(name: string, type: "boolean", defaultValue?: boolean | null): boolean;
|
|
15
|
+
static getVar(name: string, type: "number", defaultValue?: number | null): number;
|
|
16
|
+
static getVar(name: string, type?: "string", defaultValue?: string | null): string;
|
|
17
|
+
static getVar<T extends unknown[]>(name: string, type: "object", defaultValue?: T | null): T;
|
|
18
|
+
static getVar<T extends Record<string, unknown>>(name: string, type: "object", defaultValue?: T | null): T;
|
|
19
|
+
init(): Promise<void>;
|
|
20
|
+
onDestroy(): Promise<void>;
|
|
21
|
+
getSecret(envName: string, ops?: GetSecretOps): Promise<string>;
|
|
22
|
+
getTransitKey(keyId: string, ops?: GetTransitKeyOps): Promise<ProcessedTransitKey>;
|
|
23
|
+
isLocal(): boolean;
|
|
24
|
+
isTest(): boolean;
|
|
25
|
+
isSandbox(): boolean;
|
|
26
|
+
isStage(): boolean;
|
|
27
|
+
isDev(): boolean;
|
|
28
|
+
isProd(): boolean;
|
|
29
|
+
getEnv(): Env;
|
|
30
|
+
private renewToken;
|
|
31
|
+
private renewLease;
|
|
32
|
+
private scheduleTokenRenewal;
|
|
33
|
+
private scheduleLeaseRenewal;
|
|
34
|
+
private getRenewalDelay;
|
|
35
|
+
private revokeToken;
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { EnvService };
|
package/dist/services/env.js
CHANGED
|
@@ -1,215 +1,202 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import "../interfaces/index.js";
|
|
2
|
+
import { vaultRequestsTotalMetric } from "../metrics/index.js";
|
|
3
|
+
import { VaultClient } from "./vaultClient.js";
|
|
4
|
+
import fs from "node:fs/promises";
|
|
5
|
+
import { setTimeout as setTimeout$1 } from "node:timers/promises";
|
|
6
|
+
import get from "lodash.get";
|
|
7
|
+
import { DurationMs } from "@diia-inhouse/types";
|
|
8
|
+
//#region src/services/env.ts
|
|
9
|
+
var EnvService = class EnvService {
|
|
10
|
+
logger;
|
|
11
|
+
kubernetesPath = "kubernetes";
|
|
12
|
+
isVaultEnabled = EnvService.getVar("VAULT_ENABLED", "boolean", false);
|
|
13
|
+
renewalLeaseLifetime = EnvService.getVar("VAULT_RENEWAL_LEASE_LIFETIME", "number", .6);
|
|
14
|
+
renewalMaxDelay = EnvService.getVar("VAULT_RENEWAL_MAX_DELAY", "number", DurationMs.Minute);
|
|
15
|
+
rawSecrets = /* @__PURE__ */ new Map();
|
|
16
|
+
vault = null;
|
|
17
|
+
constructor(logger) {
|
|
18
|
+
this.logger = logger;
|
|
19
|
+
if (!this.isVaultEnabled) return;
|
|
20
|
+
this.vault = new VaultClient(EnvService.getVar("VAULT_ADDR"));
|
|
21
|
+
}
|
|
22
|
+
static getVar(name, type = "string", defaultValue) {
|
|
23
|
+
const value = process.env[name];
|
|
24
|
+
if (!value) {
|
|
25
|
+
if (defaultValue || defaultValue !== void 0) return defaultValue;
|
|
26
|
+
throw new Error(`Env variable ${name} is not defined`);
|
|
27
|
+
}
|
|
28
|
+
if (type === "string") return value;
|
|
29
|
+
try {
|
|
30
|
+
const parsedValue = JSON.parse(value);
|
|
31
|
+
if (typeof parsedValue !== type) throw new TypeError(`Unexpected typeof ${name} variable; Current typeof ${typeof parsedValue}`);
|
|
32
|
+
return parsedValue;
|
|
33
|
+
} catch (err) {
|
|
34
|
+
throw new Error(`Error while parsing ${name} variable. Current value: ${value}; ${String(err)}`, { cause: err });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async init() {
|
|
38
|
+
if (!this.vault) return;
|
|
39
|
+
try {
|
|
40
|
+
const tokenPath = EnvService.getVar("KUBERNETES_TOKEN_PATH", "string", "/var/run/secrets/kubernetes.io/serviceaccount/token");
|
|
41
|
+
const k8sToken = await fs.readFile(tokenPath, "utf8");
|
|
42
|
+
const { auth: { client_token: token, lease_duration: leaseDuration, accessor, service_account_name } } = await this.vault.kubernetesLogin({
|
|
43
|
+
jwt: k8sToken,
|
|
44
|
+
kubernetesPath: this.kubernetesPath,
|
|
45
|
+
role: EnvService.getVar("VAULT_ROLE")
|
|
46
|
+
});
|
|
47
|
+
this.logger = this.logger.child({ vaultServiceAccountName: service_account_name });
|
|
48
|
+
this.logger.info("Vault token accessor", { accessor });
|
|
49
|
+
this.vault.token = token;
|
|
50
|
+
this.scheduleTokenRenewal(leaseDuration);
|
|
51
|
+
} catch (err) {
|
|
52
|
+
this.logger.error("Failed to init vault", { err });
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async onDestroy() {
|
|
57
|
+
await this.revokeToken();
|
|
58
|
+
}
|
|
59
|
+
async getSecret(envName, ops = {}) {
|
|
60
|
+
const { accessor = `data.${envName}`, nullable } = ops;
|
|
61
|
+
const envValue = EnvService.getVar(envName, "string", nullable ? null : void 0);
|
|
62
|
+
if (!this.vault) return envValue;
|
|
63
|
+
const cachedRawSecret = this.rawSecrets.get(envValue);
|
|
64
|
+
if (cachedRawSecret) return get(cachedRawSecret, accessor);
|
|
65
|
+
try {
|
|
66
|
+
const { data, lease_id: leaseId, lease_duration: leaseDuration } = await this.vault.read(envValue);
|
|
67
|
+
if (leaseId) this.scheduleLeaseRenewal(leaseId, leaseDuration);
|
|
68
|
+
this.rawSecrets.set(envValue, data);
|
|
69
|
+
vaultRequestsTotalMetric.increment({
|
|
70
|
+
status: "success",
|
|
71
|
+
method: "get_secret"
|
|
72
|
+
});
|
|
73
|
+
return get(data, accessor);
|
|
74
|
+
} catch (err) {
|
|
75
|
+
vaultRequestsTotalMetric.increment({
|
|
76
|
+
status: "failure",
|
|
77
|
+
method: "get_secret"
|
|
78
|
+
});
|
|
79
|
+
this.logger.error("Failed to get vault secret", {
|
|
80
|
+
err,
|
|
81
|
+
envName,
|
|
82
|
+
envValue
|
|
83
|
+
});
|
|
84
|
+
throw err;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async getTransitKey(keyId, ops = {}) {
|
|
88
|
+
const { keyVersion } = ops;
|
|
89
|
+
if (!this.vault) throw new Error("Vault is not initialized. Failed to get transit key");
|
|
90
|
+
try {
|
|
91
|
+
const vaultPath = keyVersion ? `${keyId}/${keyVersion}` : keyId;
|
|
92
|
+
const { data } = await this.vault.read(vaultPath);
|
|
93
|
+
const highestKeyVersion = Object.keys(data.keys).sort((a, b) => Number(b) - Number(a))[0];
|
|
94
|
+
if (!highestKeyVersion) throw new Error(`No key versions found for key ${keyId}`);
|
|
95
|
+
const key = data.keys[Number(highestKeyVersion)];
|
|
96
|
+
return {
|
|
97
|
+
fullKeyName: `${keyId}/${highestKeyVersion}`,
|
|
98
|
+
key
|
|
99
|
+
};
|
|
100
|
+
} catch (err) {
|
|
101
|
+
this.logger.error("Failed to get transit key", {
|
|
102
|
+
err,
|
|
103
|
+
path: keyId
|
|
104
|
+
});
|
|
105
|
+
throw err;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
isLocal() {
|
|
109
|
+
return this.getEnv() === "local";
|
|
110
|
+
}
|
|
111
|
+
isTest() {
|
|
112
|
+
return this.getEnv() === "test";
|
|
113
|
+
}
|
|
114
|
+
isSandbox() {
|
|
115
|
+
return this.getEnv() === "sandbox";
|
|
116
|
+
}
|
|
117
|
+
isStage() {
|
|
118
|
+
return this.getEnv() === "stage";
|
|
119
|
+
}
|
|
120
|
+
isDev() {
|
|
121
|
+
return this.getEnv() === "dev";
|
|
122
|
+
}
|
|
123
|
+
isProd() {
|
|
124
|
+
return this.getEnv() === "prod";
|
|
125
|
+
}
|
|
126
|
+
getEnv() {
|
|
127
|
+
return process.env.NODE_ENV;
|
|
128
|
+
}
|
|
129
|
+
async renewToken(retryDelay = DurationMs.Second) {
|
|
130
|
+
if (!this.vault) return;
|
|
131
|
+
this.logger.info("Start vault token renewing");
|
|
132
|
+
try {
|
|
133
|
+
const { auth: { lease_duration: leaseDuration } } = await this.vault.tokenRenewSelf();
|
|
134
|
+
this.scheduleTokenRenewal(leaseDuration);
|
|
135
|
+
vaultRequestsTotalMetric.increment({
|
|
136
|
+
status: "success",
|
|
137
|
+
method: "renew_token"
|
|
138
|
+
});
|
|
139
|
+
} catch (err) {
|
|
140
|
+
if (err instanceof Error && err.message.includes("permission denied")) {
|
|
141
|
+
this.logger.error("Vault token is revoked. Exiting", { err });
|
|
142
|
+
process.emit("SIGINT");
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
vaultRequestsTotalMetric.increment({
|
|
146
|
+
status: "failure",
|
|
147
|
+
method: "renew_token"
|
|
148
|
+
});
|
|
149
|
+
if (retryDelay > this.renewalMaxDelay) retryDelay = this.renewalMaxDelay;
|
|
150
|
+
this.logger.error(`Failed to renew vault token. Retrying in ${retryDelay}ms`, { err });
|
|
151
|
+
await setTimeout$1(retryDelay, null, { ref: false });
|
|
152
|
+
await this.renewToken(retryDelay * 2);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async renewLease(leaseId, retryDelay = DurationMs.Second) {
|
|
156
|
+
if (!this.vault) return;
|
|
157
|
+
this.logger.info("Start vault lease renewing", { leaseId });
|
|
158
|
+
try {
|
|
159
|
+
const { lease_duration: leaseDuration } = await this.vault.write("sys/leases/renew", { lease_id: leaseId });
|
|
160
|
+
this.scheduleLeaseRenewal(leaseId, leaseDuration);
|
|
161
|
+
vaultRequestsTotalMetric.increment({
|
|
162
|
+
status: "success",
|
|
163
|
+
method: "renew_lease"
|
|
164
|
+
});
|
|
165
|
+
} catch (err) {
|
|
166
|
+
if (err instanceof Error && err.message.includes("lease not found")) {
|
|
167
|
+
this.logger.error("Vault lease is revoked. Exiting", {
|
|
168
|
+
err,
|
|
169
|
+
leaseId
|
|
170
|
+
});
|
|
171
|
+
process.emit("SIGINT");
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
vaultRequestsTotalMetric.increment({
|
|
175
|
+
status: "failure",
|
|
176
|
+
method: "renew_lease"
|
|
177
|
+
});
|
|
178
|
+
this.logger.error(`Failed to renew vault lease. Retrying in ${retryDelay}ms`, {
|
|
179
|
+
err,
|
|
180
|
+
leaseId
|
|
181
|
+
});
|
|
182
|
+
if (retryDelay > this.renewalMaxDelay) retryDelay = this.renewalMaxDelay;
|
|
183
|
+
await setTimeout$1(retryDelay, null, { ref: false });
|
|
184
|
+
await this.renewLease(leaseId, retryDelay * 2);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
scheduleTokenRenewal(leaseDuration) {
|
|
188
|
+
setTimeout(async () => await this.renewToken(), this.getRenewalDelay(leaseDuration)).unref();
|
|
189
|
+
}
|
|
190
|
+
scheduleLeaseRenewal(leaseId, leaseDuration) {
|
|
191
|
+
setTimeout(async () => await this.renewLease(leaseId), this.getRenewalDelay(leaseDuration)).unref();
|
|
192
|
+
}
|
|
193
|
+
getRenewalDelay(leaseDurationS) {
|
|
194
|
+
return leaseDurationS * DurationMs.Second * this.renewalLeaseLifetime;
|
|
195
|
+
}
|
|
196
|
+
async revokeToken() {
|
|
197
|
+
if (!this.vault) return;
|
|
198
|
+
await this.vault.tokenRevokeSelf();
|
|
199
|
+
}
|
|
4
200
|
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
-
const promises_2 = require("node:timers/promises");
|
|
9
|
-
const lodash_get_1 = __importDefault(require("lodash.get"));
|
|
10
|
-
const types_1 = require("@diia-inhouse/types");
|
|
11
|
-
const interfaces_1 = require("../interfaces");
|
|
12
|
-
const metrics_1 = require("../metrics");
|
|
13
|
-
const vaultClient_1 = require("./vaultClient");
|
|
14
|
-
class EnvService {
|
|
15
|
-
logger;
|
|
16
|
-
kubernetesPath = 'kubernetes';
|
|
17
|
-
isVaultEnabled = EnvService.getVar('VAULT_ENABLED', 'boolean', false);
|
|
18
|
-
renewalLeaseLifetime = EnvService.getVar('VAULT_RENEWAL_LEASE_LIFETIME', 'number', 0.6);
|
|
19
|
-
renewalMaxDelay = EnvService.getVar('VAULT_RENEWAL_MAX_DELAY', 'number', types_1.DurationMs.Minute);
|
|
20
|
-
rawSecrets = new Map();
|
|
21
|
-
vault = null;
|
|
22
|
-
constructor(logger) {
|
|
23
|
-
this.logger = logger;
|
|
24
|
-
if (!this.isVaultEnabled) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
this.vault = new vaultClient_1.VaultClient(EnvService.getVar('VAULT_ADDR'));
|
|
28
|
-
}
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
|
-
static getVar(name, type = 'string', defaultValue) {
|
|
31
|
-
const value = process.env[name];
|
|
32
|
-
if (!value) {
|
|
33
|
-
if (defaultValue || defaultValue !== undefined) {
|
|
34
|
-
return defaultValue;
|
|
35
|
-
}
|
|
36
|
-
throw new Error(`Env variable ${name} is not defined`);
|
|
37
|
-
}
|
|
38
|
-
if (type === 'string') {
|
|
39
|
-
return value;
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
const parsedValue = JSON.parse(value);
|
|
43
|
-
if (typeof parsedValue !== type) {
|
|
44
|
-
throw new TypeError(`Unexpected typeof ${name} variable; Current typeof ${typeof parsedValue}`);
|
|
45
|
-
}
|
|
46
|
-
return parsedValue;
|
|
47
|
-
}
|
|
48
|
-
catch (err) {
|
|
49
|
-
throw new Error(`Error while parsing ${name} variable. Current value: ${value}; ${err}`);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
async init() {
|
|
53
|
-
if (!this.vault) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
try {
|
|
57
|
-
const tokenPath = EnvService.getVar('KUBERNETES_TOKEN_PATH', 'string', '/var/run/secrets/kubernetes.io/serviceaccount/token');
|
|
58
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
|
59
|
-
const k8sToken = await promises_1.default.readFile(tokenPath, 'utf8'); // nosemgrep: eslint.detect-non-literal-fs-filename
|
|
60
|
-
const loginResult = await this.vault.kubernetesLogin({
|
|
61
|
-
jwt: k8sToken,
|
|
62
|
-
kubernetesPath: this.kubernetesPath,
|
|
63
|
-
role: EnvService.getVar('VAULT_ROLE'),
|
|
64
|
-
});
|
|
65
|
-
const { auth: { client_token: token, lease_duration: leaseDuration, accessor, service_account_name }, } = loginResult;
|
|
66
|
-
this.logger = this.logger.child({ vaultServiceAccountName: service_account_name });
|
|
67
|
-
this.logger.info('Vault token accessor', { accessor });
|
|
68
|
-
this.vault.token = token;
|
|
69
|
-
this.scheduleTokenRenewal(leaseDuration);
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
this.logger.error('Failed to init vault', { err });
|
|
73
|
-
throw err;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
async onDestroy() {
|
|
77
|
-
await this.revokeToken();
|
|
78
|
-
}
|
|
79
|
-
async getSecret(envName, ops = {}) {
|
|
80
|
-
const { accessor = `data.${envName}`, nullable } = ops;
|
|
81
|
-
const envValue = EnvService.getVar(envName, 'string', nullable ? null : undefined);
|
|
82
|
-
if (!this.vault) {
|
|
83
|
-
return envValue;
|
|
84
|
-
}
|
|
85
|
-
const cachedRawSecret = this.rawSecrets.get(envValue);
|
|
86
|
-
if (cachedRawSecret) {
|
|
87
|
-
return (0, lodash_get_1.default)(cachedRawSecret, accessor);
|
|
88
|
-
}
|
|
89
|
-
try {
|
|
90
|
-
const result = await this.vault.read(envValue);
|
|
91
|
-
const { data, lease_id: leaseId, lease_duration: leaseDuration } = result;
|
|
92
|
-
if (leaseId) {
|
|
93
|
-
this.scheduleLeaseRenewal(leaseId, leaseDuration);
|
|
94
|
-
}
|
|
95
|
-
this.rawSecrets.set(envValue, data);
|
|
96
|
-
metrics_1.vaultRequestsTotalMetric.increment({ status: 'success', method: 'get_secret' });
|
|
97
|
-
return (0, lodash_get_1.default)(data, accessor);
|
|
98
|
-
}
|
|
99
|
-
catch (err) {
|
|
100
|
-
metrics_1.vaultRequestsTotalMetric.increment({ status: 'failure', method: 'get_secret' });
|
|
101
|
-
this.logger.error('Failed to get vault secret', { err, envName, envValue });
|
|
102
|
-
throw err;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
async getTransitKey(keyId, ops = {}) {
|
|
106
|
-
const { keyVersion } = ops;
|
|
107
|
-
if (!this.vault) {
|
|
108
|
-
throw new Error('Vault is not initialized. Failed to get transit key');
|
|
109
|
-
}
|
|
110
|
-
try {
|
|
111
|
-
const vaultPath = keyVersion ? `${keyId}/${keyVersion}` : keyId;
|
|
112
|
-
const { data } = await this.vault.read(vaultPath);
|
|
113
|
-
const keyVersions = Object.keys(data.keys);
|
|
114
|
-
const highestKeyVersion = keyVersions.sort((a, b) => Number(b) - Number(a))[0];
|
|
115
|
-
if (!highestKeyVersion) {
|
|
116
|
-
throw new Error(`No key versions found for key ${keyId}`);
|
|
117
|
-
}
|
|
118
|
-
const key = data.keys[Number(highestKeyVersion)];
|
|
119
|
-
const fullKeyName = `${keyId}/${highestKeyVersion}`;
|
|
120
|
-
return { fullKeyName, key };
|
|
121
|
-
}
|
|
122
|
-
catch (err) {
|
|
123
|
-
this.logger.error('Failed to get transit key', { err, path: keyId });
|
|
124
|
-
throw err;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
isLocal() {
|
|
128
|
-
return this.getEnv() === interfaces_1.Env.Local;
|
|
129
|
-
}
|
|
130
|
-
isTest() {
|
|
131
|
-
return this.getEnv() === interfaces_1.Env.Test;
|
|
132
|
-
}
|
|
133
|
-
isSandbox() {
|
|
134
|
-
return this.getEnv() === interfaces_1.Env.Sandbox;
|
|
135
|
-
}
|
|
136
|
-
isStage() {
|
|
137
|
-
return this.getEnv() === interfaces_1.Env.Stage;
|
|
138
|
-
}
|
|
139
|
-
isDev() {
|
|
140
|
-
return this.getEnv() === interfaces_1.Env.Dev;
|
|
141
|
-
}
|
|
142
|
-
isProd() {
|
|
143
|
-
return this.getEnv() === interfaces_1.Env.Prod;
|
|
144
|
-
}
|
|
145
|
-
getEnv() {
|
|
146
|
-
return process.env.NODE_ENV;
|
|
147
|
-
}
|
|
148
|
-
async renewToken(retryDelay = types_1.DurationMs.Second) {
|
|
149
|
-
if (!this.vault) {
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
this.logger.info('Start vault token renewing');
|
|
153
|
-
try {
|
|
154
|
-
const { auth: { lease_duration: leaseDuration }, } = await this.vault.tokenRenewSelf();
|
|
155
|
-
this.scheduleTokenRenewal(leaseDuration);
|
|
156
|
-
metrics_1.vaultRequestsTotalMetric.increment({ status: 'success', method: 'renew_token' });
|
|
157
|
-
}
|
|
158
|
-
catch (err) {
|
|
159
|
-
if (err instanceof Error && err.message.includes('permission denied')) {
|
|
160
|
-
this.logger.error('Vault token is revoked. Exiting', { err });
|
|
161
|
-
process.emit('SIGINT');
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
metrics_1.vaultRequestsTotalMetric.increment({ status: 'failure', method: 'renew_token' });
|
|
165
|
-
if (retryDelay > this.renewalMaxDelay) {
|
|
166
|
-
retryDelay = this.renewalMaxDelay;
|
|
167
|
-
}
|
|
168
|
-
this.logger.error(`Failed to renew vault token. Retrying in ${retryDelay}ms`, { err });
|
|
169
|
-
await (0, promises_2.setTimeout)(retryDelay, null, { ref: false });
|
|
170
|
-
await this.renewToken(retryDelay * 2);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
async renewLease(leaseId, retryDelay = types_1.DurationMs.Second) {
|
|
174
|
-
if (!this.vault) {
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
this.logger.info('Start vault lease renewing', { leaseId });
|
|
178
|
-
try {
|
|
179
|
-
const { lease_duration: leaseDuration } = await this.vault.write('sys/leases/renew', { lease_id: leaseId });
|
|
180
|
-
this.scheduleLeaseRenewal(leaseId, leaseDuration);
|
|
181
|
-
metrics_1.vaultRequestsTotalMetric.increment({ status: 'success', method: 'renew_lease' });
|
|
182
|
-
}
|
|
183
|
-
catch (err) {
|
|
184
|
-
if (err instanceof Error && err.message.includes('lease not found')) {
|
|
185
|
-
this.logger.error('Vault lease is revoked. Exiting', { err, leaseId });
|
|
186
|
-
process.emit('SIGINT');
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
metrics_1.vaultRequestsTotalMetric.increment({ status: 'failure', method: 'renew_lease' });
|
|
190
|
-
this.logger.error(`Failed to renew vault lease. Retrying in ${retryDelay}ms`, { err, leaseId });
|
|
191
|
-
if (retryDelay > this.renewalMaxDelay) {
|
|
192
|
-
retryDelay = this.renewalMaxDelay;
|
|
193
|
-
}
|
|
194
|
-
await (0, promises_2.setTimeout)(retryDelay, null, { ref: false });
|
|
195
|
-
await this.renewLease(leaseId, retryDelay * 2);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
scheduleTokenRenewal(leaseDuration) {
|
|
199
|
-
setTimeout(async () => await this.renewToken(), this.getRenewalDelay(leaseDuration)).unref();
|
|
200
|
-
}
|
|
201
|
-
scheduleLeaseRenewal(leaseId, leaseDuration) {
|
|
202
|
-
setTimeout(async () => await this.renewLease(leaseId), this.getRenewalDelay(leaseDuration)).unref();
|
|
203
|
-
}
|
|
204
|
-
getRenewalDelay(leaseDurationS) {
|
|
205
|
-
return leaseDurationS * types_1.DurationMs.Second * this.renewalLeaseLifetime;
|
|
206
|
-
}
|
|
207
|
-
async revokeToken() {
|
|
208
|
-
if (!this.vault) {
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
await this.vault.tokenRevokeSelf();
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
exports.EnvService = EnvService;
|
|
215
|
-
//# sourceMappingURL=env.js.map
|
|
201
|
+
//#endregion
|
|
202
|
+
export { EnvService };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { EnvService } from "./env.js";
|
package/dist/services/index.js
CHANGED
|
@@ -1,18 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./env"), exports);
|
|
18
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
import "./env.js";
|
|
2
|
+
export {};
|
|
@@ -1,56 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (hasBody) {
|
|
50
|
-
h['Content-Type'] = 'application/json';
|
|
51
|
-
}
|
|
52
|
-
return h;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
exports.VaultClient = VaultClient;
|
|
56
|
-
//# sourceMappingURL=vaultClient.js.map
|
|
1
|
+
//#region src/services/vaultClient.ts
|
|
2
|
+
var VaultClient = class {
|
|
3
|
+
endpoint;
|
|
4
|
+
token = null;
|
|
5
|
+
constructor(endpoint) {
|
|
6
|
+
this.endpoint = endpoint;
|
|
7
|
+
}
|
|
8
|
+
async kubernetesLogin(opts) {
|
|
9
|
+
return await this.request("POST", `auth/${opts.kubernetesPath}/login`, {
|
|
10
|
+
jwt: opts.jwt,
|
|
11
|
+
role: opts.role
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
async read(path) {
|
|
15
|
+
return await this.request("GET", path);
|
|
16
|
+
}
|
|
17
|
+
async write(path, body) {
|
|
18
|
+
return await this.request("POST", path, body);
|
|
19
|
+
}
|
|
20
|
+
async tokenRenewSelf() {
|
|
21
|
+
return await this.request("POST", "auth/token/renew-self");
|
|
22
|
+
}
|
|
23
|
+
async tokenRevokeSelf() {
|
|
24
|
+
return await this.request("POST", "auth/token/revoke-self");
|
|
25
|
+
}
|
|
26
|
+
async request(method, path, body) {
|
|
27
|
+
const url = `${this.endpoint}/v1/${path}`;
|
|
28
|
+
const res = await fetch(url, {
|
|
29
|
+
method,
|
|
30
|
+
headers: this.getHeaders(body !== void 0),
|
|
31
|
+
body: body === void 0 ? void 0 : JSON.stringify(body)
|
|
32
|
+
});
|
|
33
|
+
const json = res.status === 204 ? null : await res.json();
|
|
34
|
+
if (!res.ok) {
|
|
35
|
+
const msg = json?.errors?.[0] ?? res.statusText;
|
|
36
|
+
throw new Error(msg);
|
|
37
|
+
}
|
|
38
|
+
return json;
|
|
39
|
+
}
|
|
40
|
+
getHeaders(hasBody) {
|
|
41
|
+
const h = {};
|
|
42
|
+
if (this.token) h["X-Vault-Token"] = this.token;
|
|
43
|
+
if (hasBody) h["Content-Type"] = "application/json";
|
|
44
|
+
return h;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
//#endregion
|
|
48
|
+
export { VaultClient };
|
package/package.json
CHANGED
|
@@ -1,25 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@diia-inhouse/env",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.3.1",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"description": "Environment checking service",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./package.json": "./package.json"
|
|
14
|
+
},
|
|
7
15
|
"repository": "https://github.com/diia-open-source/be-pkg-env",
|
|
8
16
|
"author": "Diia",
|
|
9
|
-
"license": "SEE LICENSE IN LICENSE.md",
|
|
10
17
|
"files": [
|
|
11
18
|
"dist"
|
|
12
19
|
],
|
|
13
20
|
"engines": {
|
|
14
|
-
"node": ">=
|
|
21
|
+
"node": ">=24"
|
|
15
22
|
},
|
|
16
23
|
"scripts": {
|
|
17
24
|
"prebuild": "rimraf dist",
|
|
18
|
-
"build": "
|
|
25
|
+
"build": "tsdown",
|
|
19
26
|
"semantic-release": "semantic-release",
|
|
20
27
|
"start": "npm run build && node dist/index.js",
|
|
21
|
-
"lint": "
|
|
22
|
-
"lint-fix": "
|
|
28
|
+
"lint": "oxlint && oxfmt --check .",
|
|
29
|
+
"lint-fix": "oxlint --fix && oxfmt .",
|
|
23
30
|
"lint:lockfile": "lockfile-lint --path package-lock.json --allowed-hosts registry.npmjs.org --validate-https",
|
|
24
31
|
"prepare": "npm run build",
|
|
25
32
|
"test": "vitest run",
|
|
@@ -27,30 +34,33 @@
|
|
|
27
34
|
"find-circulars": "madge --circular --extensions ts ./"
|
|
28
35
|
},
|
|
29
36
|
"dependencies": {
|
|
30
|
-
"@diia-inhouse/diia-metrics": "
|
|
37
|
+
"@diia-inhouse/diia-metrics": "7.1.5",
|
|
31
38
|
"dotenv-flow": "4.1.0",
|
|
32
39
|
"lodash.get": "4.4.2"
|
|
33
40
|
},
|
|
34
41
|
"devDependencies": {
|
|
35
|
-
"@diia-inhouse/configs": "
|
|
36
|
-
"@diia-inhouse/diia-logger": "
|
|
37
|
-
"@diia-inhouse/errors": "1.
|
|
38
|
-
"@diia-inhouse/
|
|
39
|
-
"@diia-inhouse/test": "
|
|
40
|
-
"@diia-inhouse/types": "
|
|
42
|
+
"@diia-inhouse/configs": "7.0.0",
|
|
43
|
+
"@diia-inhouse/diia-logger": "4.2.4",
|
|
44
|
+
"@diia-inhouse/errors": "2.1.1",
|
|
45
|
+
"@diia-inhouse/oxc-config": "1.10.0",
|
|
46
|
+
"@diia-inhouse/test": "8.2.1",
|
|
47
|
+
"@diia-inhouse/types": "13.2.0",
|
|
41
48
|
"@types/dotenv-flow": "3.3.3",
|
|
42
49
|
"@types/lodash.get": "4.4.9",
|
|
43
|
-
"@vitest/coverage-v8": "4.
|
|
44
|
-
"@vitest/ui": "4.
|
|
45
|
-
"
|
|
46
|
-
"lockfile-lint": "4.14.1",
|
|
50
|
+
"@vitest/coverage-v8": "4.1.5",
|
|
51
|
+
"@vitest/ui": "4.1.5",
|
|
52
|
+
"lockfile-lint": "5.0.0",
|
|
47
53
|
"madge": "8.0.0",
|
|
54
|
+
"oxfmt": "0.48.0",
|
|
55
|
+
"oxlint": "1.63.0",
|
|
56
|
+
"oxlint-tsgolint": "0.22.1",
|
|
48
57
|
"rimraf": "6.1.3",
|
|
58
|
+
"tsdown": "0.22.0",
|
|
49
59
|
"vite-tsconfig-paths": "6.1.1",
|
|
50
|
-
"vitest": "4.
|
|
60
|
+
"vitest": "4.1.5"
|
|
51
61
|
},
|
|
52
62
|
"peerDependencies": {
|
|
53
|
-
"@diia-inhouse/types": ">=
|
|
63
|
+
"@diia-inhouse/types": ">=13.1.1"
|
|
54
64
|
},
|
|
55
65
|
"release": {
|
|
56
66
|
"extends": "@diia-inhouse/configs/dist/semantic-release/package",
|
|
@@ -61,11 +71,8 @@
|
|
|
61
71
|
"commitlint": {
|
|
62
72
|
"extends": "@diia-inhouse/configs/dist/commitlint"
|
|
63
73
|
},
|
|
64
|
-
"jest": {
|
|
65
|
-
"preset": "@diia-inhouse/configs/dist/jest"
|
|
66
|
-
},
|
|
67
|
-
"prettier": "@diia-inhouse/eslint-config/prettier",
|
|
68
74
|
"madge": {
|
|
69
75
|
"tsConfig": "./tsconfig.json"
|
|
70
|
-
}
|
|
76
|
+
},
|
|
77
|
+
"license": "SEE LICENSE IN LICENSE.md"
|
|
71
78
|
}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAAoC;AAEpC,IAAA,oBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;AAExB,+CAA4B;AAE5B,6CAA0B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":";;;AAAA,IAAY,GAOX;AAPD,WAAY,GAAG;IACX,sBAAe,CAAA;IACf,oBAAa,CAAA;IACb,kBAAW,CAAA;IACX,0BAAmB,CAAA;IACnB,sBAAe,CAAA;IACf,oBAAa,CAAA;AACjB,CAAC,EAPW,GAAG,mBAAH,GAAG,QAOd"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/metrics/index.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":";;;AAEA,6DAAoD;AAEvC,QAAA,wBAAwB,GAAG,IAAI,sBAAO,CAA8B,sBAAsB,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA"}
|
package/dist/services/env.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/services/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAqB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vaultClient.js","sourceRoot":"","sources":["../../src/services/vaultClient.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IAGS;IAF7B,KAAK,GAAkB,IAAI,CAAA;IAE3B,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEjD,KAAK,CAAC,eAAe,CAAC,IAA2D;QAQ7E,OAAO,MAAM,IAAI,CAAC,OAAO,CAOtB,MAAM,EAAE,QAAQ,IAAI,CAAC,cAAc,QAAQ,EAAE;YAC5C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC,CAAA;IACN,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,IAAI,CAAC,IAAY;QACnB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,IAA6B;QACnD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,cAAc;QAChB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAuC,MAAM,EAAE,uBAAuB,CAAC,CAAA;IACpG,CAAC;IAED,KAAK,CAAC,eAAe;QACjB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAO,MAAM,EAAE,wBAAwB,CAAC,CAAA;IACrE,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc;QACjE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,OAAO,IAAI,EAAE,CAAA;QACzC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACzB,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC;YAC5C,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC9D,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QACzD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAA;YAE/C,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,IAAS,CAAA;IACpB,CAAC;IAEO,UAAU,CAAC,OAAgB;QAC/B,MAAM,CAAC,GAA2B,EAAE,CAAA;QAEpC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,CAAC,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QACnC,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACV,CAAC,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAA;QAC1C,CAAC;QAED,OAAO,CAAC,CAAA;IACZ,CAAC;CACJ;AA1ED,kCA0EC"}
|
package/dist/types/index.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export declare enum Env {
|
|
2
|
-
Local = "local",
|
|
3
|
-
Test = "test",
|
|
4
|
-
Dev = "dev",
|
|
5
|
-
Sandbox = "sandbox",
|
|
6
|
-
Stage = "stage",
|
|
7
|
-
Prod = "prod"
|
|
8
|
-
}
|
|
9
|
-
export interface GetSecretOps {
|
|
10
|
-
accessor?: string;
|
|
11
|
-
nullable?: boolean;
|
|
12
|
-
}
|
|
13
|
-
export type GetTransitKeyResult = {
|
|
14
|
-
keys: Record<number, string>;
|
|
15
|
-
name: string;
|
|
16
|
-
type: string;
|
|
17
|
-
};
|
|
18
|
-
export type GetTransitKeyReadResult = Record<string, unknown> & {
|
|
19
|
-
data: GetTransitKeyResult;
|
|
20
|
-
};
|
|
21
|
-
export interface GetTransitKeyOps {
|
|
22
|
-
keyVersion?: string;
|
|
23
|
-
}
|
|
24
|
-
export interface ProcessedTransitKey {
|
|
25
|
-
fullKeyName: string;
|
|
26
|
-
key: string;
|
|
27
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Logger, OnDestroy } from '@diia-inhouse/types';
|
|
2
|
-
import { Env, GetSecretOps, GetTransitKeyOps, ProcessedTransitKey } from '../interfaces';
|
|
3
|
-
export declare class EnvService implements OnDestroy {
|
|
4
|
-
private logger;
|
|
5
|
-
private readonly kubernetesPath;
|
|
6
|
-
private readonly isVaultEnabled;
|
|
7
|
-
private readonly renewalLeaseLifetime;
|
|
8
|
-
private readonly renewalMaxDelay;
|
|
9
|
-
private readonly rawSecrets;
|
|
10
|
-
private vault;
|
|
11
|
-
constructor(logger: Logger);
|
|
12
|
-
static getVar(name: string, type: 'boolean', defaultValue?: boolean | null): boolean;
|
|
13
|
-
static getVar(name: string, type: 'number', defaultValue?: number | null): number;
|
|
14
|
-
static getVar(name: string, type?: 'string', defaultValue?: string | null): string;
|
|
15
|
-
static getVar<T extends unknown[]>(name: string, type: 'object', defaultValue?: T | null): T;
|
|
16
|
-
static getVar<T extends Record<string, unknown>>(name: string, type: 'object', defaultValue?: T | null): T;
|
|
17
|
-
init(): Promise<void>;
|
|
18
|
-
onDestroy(): Promise<void>;
|
|
19
|
-
getSecret(envName: string, ops?: GetSecretOps): Promise<string>;
|
|
20
|
-
getTransitKey(keyId: string, ops?: GetTransitKeyOps): Promise<ProcessedTransitKey>;
|
|
21
|
-
isLocal(): boolean;
|
|
22
|
-
isTest(): boolean;
|
|
23
|
-
isSandbox(): boolean;
|
|
24
|
-
isStage(): boolean;
|
|
25
|
-
isDev(): boolean;
|
|
26
|
-
isProd(): boolean;
|
|
27
|
-
getEnv(): Env;
|
|
28
|
-
private renewToken;
|
|
29
|
-
private renewLease;
|
|
30
|
-
private scheduleTokenRenewal;
|
|
31
|
-
private scheduleLeaseRenewal;
|
|
32
|
-
private getRenewalDelay;
|
|
33
|
-
private revokeToken;
|
|
34
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './env';
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export declare class VaultClient {
|
|
2
|
-
private readonly endpoint;
|
|
3
|
-
token: string | null;
|
|
4
|
-
constructor(endpoint: string);
|
|
5
|
-
kubernetesLogin(opts: {
|
|
6
|
-
jwt: string;
|
|
7
|
-
role: string;
|
|
8
|
-
kubernetesPath: string;
|
|
9
|
-
}): Promise<{
|
|
10
|
-
auth: {
|
|
11
|
-
client_token: string;
|
|
12
|
-
lease_duration: number;
|
|
13
|
-
accessor: string;
|
|
14
|
-
service_account_name: string;
|
|
15
|
-
};
|
|
16
|
-
}>;
|
|
17
|
-
read(path: string): Promise<any>;
|
|
18
|
-
write(path: string, body: Record<string, unknown>): Promise<any>;
|
|
19
|
-
tokenRenewSelf(): Promise<{
|
|
20
|
-
auth: {
|
|
21
|
-
lease_duration: number;
|
|
22
|
-
};
|
|
23
|
-
}>;
|
|
24
|
-
tokenRevokeSelf(): Promise<void>;
|
|
25
|
-
private request;
|
|
26
|
-
private getHeaders;
|
|
27
|
-
}
|