@dataformer/env-service 2.0.0 → 2.3.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/CHANGELOG.md +22 -0
- package/dist/index.d.ts +1 -2
- package/dist/index.js +2 -14
- package/package.json +2 -2
- package/src/index.ts +10 -20
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @dataformer/env-service
|
|
2
2
|
|
|
3
|
+
## 2.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- LoggerService upgraded
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
- @dataformer/secret-manager-client@2.3.0
|
|
13
|
+
|
|
14
|
+
## 2.2.0
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- removed requirement for user email from secret manager name
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- Updated dependencies
|
|
23
|
+
- @dataformer/secret-manager-client@2.2.0
|
|
24
|
+
|
|
3
25
|
## 2.0.0
|
|
4
26
|
|
|
5
27
|
### Major Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -43,8 +43,7 @@ declare const getJiraUserEmail: () => Promise<string | null>;
|
|
|
43
43
|
declare const getGeminiApiKey: () => Promise<string | null>;
|
|
44
44
|
declare const getNpmToken: () => Promise<string | null>;
|
|
45
45
|
declare const getProjectRoot: () => string;
|
|
46
|
-
declare const getGcpUserEmail: () => Promise<string | null>;
|
|
47
46
|
declare const printEnv: () => Promise<void>;
|
|
48
47
|
declare const run: () => Promise<void>;
|
|
49
48
|
|
|
50
|
-
export { askQuestion, getBigtableInstanceName, getBigtableProjectId, getBigtableTableName, getCustomSearchApiKey, getEnvVar, getFirestoreProjectId, getGcpProjectId,
|
|
49
|
+
export { askQuestion, getBigtableInstanceName, getBigtableProjectId, getBigtableTableName, getCustomSearchApiKey, getEnvVar, getFirestoreProjectId, getGcpProjectId, getGeminiApiKey, getJiraApiBaseUrl, getJiraApiToken, getJiraUserEmail, getLogToConsole, getNpmToken, getPostgresAuthType, getPostgresDatabase, getPostgresHostName, getPostgresInstanceConnectionName, getPostgresIpType, getPostgresPassword, getPostgresPoolSizeMax, getPostgresUser, getProjectRoot, getSearchEngineId, obfuscateCred, printEnv, run, setBigtableInstanceName, setBigtableProjectId, setBigtableTableName, setCustomSearchApiKey, setEnvVar, setFirestoreProjectId, setGeminiApiKey, setJiraApiBaseUrl, setJiraApiToken, setJiraUserEmail, setLogToConsole, setNpmToken, setPostgresAuthType, setPostgresDatabase, setPostgresHostName, setPostgresInstanceConnectionName, setPostgresIpType, setPostgresPassword, setPostgresPoolSizeMax, setPostgresUser };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import readline from "readline";
|
|
3
3
|
import path from "path";
|
|
4
|
-
import {
|
|
4
|
+
import { SecretManagerClient } from "@dataformer/secret-manager-client";
|
|
5
5
|
var secretManager = null;
|
|
6
6
|
var secretManagerInitialized = false;
|
|
7
7
|
async function getSecretManager() {
|
|
@@ -9,7 +9,7 @@ async function getSecretManager() {
|
|
|
9
9
|
return secretManager;
|
|
10
10
|
}
|
|
11
11
|
try {
|
|
12
|
-
secretManager = await
|
|
12
|
+
secretManager = await SecretManagerClient.create();
|
|
13
13
|
secretManagerInitialized = true;
|
|
14
14
|
return secretManager;
|
|
15
15
|
} catch (error) {
|
|
@@ -226,15 +226,6 @@ var getProjectRoot = () => {
|
|
|
226
226
|
const currentDir = path.dirname(new URL(import.meta.url).pathname);
|
|
227
227
|
return path.resolve(currentDir, "../..");
|
|
228
228
|
};
|
|
229
|
-
var _getResolvedGcpUserEmail = async () => {
|
|
230
|
-
const sm = await getSecretManager();
|
|
231
|
-
if (!sm) {
|
|
232
|
-
console.warn("[EnvService.ts] SecretManager not available for _getResolvedGcpUserEmail");
|
|
233
|
-
return null;
|
|
234
|
-
}
|
|
235
|
-
return sm.getResolvedUserEmail();
|
|
236
|
-
};
|
|
237
|
-
var getGcpUserEmail = _getResolvedGcpUserEmail;
|
|
238
229
|
var printEnv = async () => {
|
|
239
230
|
const logToConsole = await getLogToConsole();
|
|
240
231
|
const postgresUser = await getPostgresUser();
|
|
@@ -255,11 +246,9 @@ var printEnv = async () => {
|
|
|
255
246
|
const geminiApiKey = await getGeminiApiKey();
|
|
256
247
|
const customSearchApiKey = await getCustomSearchApiKey();
|
|
257
248
|
const gcpProjectIdVal = await getGcpProjectId();
|
|
258
|
-
const gcpUserEmailVal = await getGcpUserEmail();
|
|
259
249
|
const npmToken = await getNpmToken();
|
|
260
250
|
console.log(`Project Root: ${getProjectRoot()}`);
|
|
261
251
|
console.log(`GCP Project ID: ${gcpProjectIdVal}`);
|
|
262
|
-
console.log(`GCP User Email (for Secret Manager naming): ${gcpUserEmailVal}`);
|
|
263
252
|
console.log(`Log to Console: ${logToConsole}`);
|
|
264
253
|
console.log(`PostgreSQL User: ${postgresUser}`);
|
|
265
254
|
console.log(`PostgreSQL Password: ${obfuscateCred(postgresPassword)}`);
|
|
@@ -364,7 +353,6 @@ export {
|
|
|
364
353
|
getEnvVar,
|
|
365
354
|
getFirestoreProjectId,
|
|
366
355
|
getGcpProjectId,
|
|
367
|
-
getGcpUserEmail,
|
|
368
356
|
getGeminiApiKey,
|
|
369
357
|
getJiraApiBaseUrl,
|
|
370
358
|
getJiraApiToken,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dataformer/env-service",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Environment service for Dataformer",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@google-cloud/secret-manager": "^5.4.0",
|
|
16
|
-
"@dataformer/secret-manager-client": "^2.
|
|
16
|
+
"@dataformer/secret-manager-client": "^2.3.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"tsup": "^8.0.0",
|
package/src/index.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
// EnvService.ts - Manages environment variables and credentials using Google Secret Manager.
|
|
2
2
|
//
|
|
3
3
|
// HOW TO USE:
|
|
4
|
-
// This script
|
|
4
|
+
// This script can be invoked via the wrapper `env.js` in the project root (after building):
|
|
5
5
|
// Commands are passed as arguments, e.g.:
|
|
6
6
|
// node env.js printEnv - Prints all current environment variable values.
|
|
7
|
-
// node env.js
|
|
7
|
+
// node env.js setGeminiApiKey - Prompts to set the Gemini API key.
|
|
8
|
+
// node env.js setPostgresUser - Prompts to set the PostgreSQL user.
|
|
8
9
|
// ... and so on for other specific setters listed in the `run` function's switch statement.
|
|
9
10
|
//
|
|
11
|
+
// Alternatively, you can run it directly from the compiled output:
|
|
12
|
+
// node packages/services/env-service/dist/index.js printEnv
|
|
13
|
+
//
|
|
10
14
|
// GCLOUD AUTHENTICATION REQUIREMENT:
|
|
11
15
|
// This script requires you to be authenticated with Google Cloud CLI (`gcloud`).
|
|
12
16
|
// The credentials are used by the underlying SecretManagerClient to access Google Secret Manager.
|
|
@@ -30,12 +34,12 @@
|
|
|
30
34
|
// 2. Local gcloud configuration (for development: `gcloud config get-value project`)
|
|
31
35
|
//
|
|
32
36
|
// SECRET NAMING CONVENTION:
|
|
33
|
-
// Secrets are named using the format: {projectId}_{
|
|
34
|
-
// This ensures
|
|
37
|
+
// Secrets are named using the format: {projectId}_{secretId}
|
|
38
|
+
// This ensures project-specific secrets that don't conflict across projects.
|
|
35
39
|
|
|
36
40
|
import readline from 'readline';
|
|
37
41
|
import path from 'path';
|
|
38
|
-
import {
|
|
42
|
+
import { SecretManagerClient } from '@dataformer/secret-manager-client';
|
|
39
43
|
|
|
40
44
|
// SecretManager client will be initialized lazily on first use
|
|
41
45
|
let secretManager: SecretManagerClient | null = null;
|
|
@@ -47,7 +51,7 @@ async function getSecretManager(): Promise<SecretManagerClient | null> {
|
|
|
47
51
|
}
|
|
48
52
|
|
|
49
53
|
try {
|
|
50
|
-
secretManager = await
|
|
54
|
+
secretManager = await SecretManagerClient.create();
|
|
51
55
|
secretManagerInitialized = true;
|
|
52
56
|
return secretManager;
|
|
53
57
|
} catch (error) {
|
|
@@ -319,17 +323,6 @@ const _getResolvedGcpProjectId = async (): Promise<string | null> => {
|
|
|
319
323
|
return sm.getResolvedProjectId();
|
|
320
324
|
};
|
|
321
325
|
|
|
322
|
-
const _getResolvedGcpUserEmail = async (): Promise<string | null> => {
|
|
323
|
-
const sm = await getSecretManager();
|
|
324
|
-
if (!sm) {
|
|
325
|
-
console.warn('[EnvService.ts] SecretManager not available for _getResolvedGcpUserEmail');
|
|
326
|
-
return null;
|
|
327
|
-
}
|
|
328
|
-
return sm.getResolvedUserEmail();
|
|
329
|
-
};
|
|
330
|
-
|
|
331
|
-
const getGcpUserEmail = _getResolvedGcpUserEmail;
|
|
332
|
-
|
|
333
326
|
const printEnv = async (): Promise<void> => {
|
|
334
327
|
const logToConsole = await getLogToConsole();
|
|
335
328
|
const postgresUser = await getPostgresUser();
|
|
@@ -350,12 +343,10 @@ const printEnv = async (): Promise<void> => {
|
|
|
350
343
|
const geminiApiKey = await getGeminiApiKey();
|
|
351
344
|
const customSearchApiKey = await getCustomSearchApiKey();
|
|
352
345
|
const gcpProjectIdVal = await getGcpProjectId();
|
|
353
|
-
const gcpUserEmailVal = await getGcpUserEmail();
|
|
354
346
|
const npmToken = await getNpmToken();
|
|
355
347
|
|
|
356
348
|
console.log(`Project Root: ${getProjectRoot()}`);
|
|
357
349
|
console.log(`GCP Project ID: ${gcpProjectIdVal}`);
|
|
358
|
-
console.log(`GCP User Email (for Secret Manager naming): ${gcpUserEmailVal}`);
|
|
359
350
|
console.log(`Log to Console: ${logToConsole}`);
|
|
360
351
|
console.log(`PostgreSQL User: ${postgresUser}`);
|
|
361
352
|
console.log(`PostgreSQL Password: ${obfuscateCred(postgresPassword)}`);
|
|
@@ -462,7 +453,6 @@ export {
|
|
|
462
453
|
|
|
463
454
|
// Synchronous Getters / Utility
|
|
464
455
|
getProjectRoot,
|
|
465
|
-
getGcpUserEmail,
|
|
466
456
|
|
|
467
457
|
// Generic accessors
|
|
468
458
|
getEnvVar,
|