@achs/env 4.12.3 → 5.0.0-alpha.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.
Files changed (103) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +98 -110
  3. package/arguments.d.ts +14 -14
  4. package/arguments.d.ts.map +1 -1
  5. package/arguments.js +135 -131
  6. package/arguments.js.map +1 -1
  7. package/commands/env.command.d.ts +8 -2
  8. package/commands/env.command.d.ts.map +1 -1
  9. package/commands/env.command.js +55 -82
  10. package/commands/env.command.js.map +1 -1
  11. package/commands/export.command.d.ts +8 -2
  12. package/commands/export.command.d.ts.map +1 -1
  13. package/commands/export.command.js +53 -62
  14. package/commands/export.command.js.map +1 -1
  15. package/commands/index.d.ts +5 -5
  16. package/commands/index.d.ts.map +1 -1
  17. package/commands/index.js +5 -14
  18. package/commands/pull.command.d.ts +6 -1
  19. package/commands/pull.command.d.ts.map +1 -1
  20. package/commands/pull.command.js +20 -37
  21. package/commands/pull.command.js.map +1 -1
  22. package/commands/push.command.d.ts +6 -1
  23. package/commands/push.command.d.ts.map +1 -1
  24. package/commands/push.command.js +20 -36
  25. package/commands/push.command.js.map +1 -1
  26. package/commands/schema.command.d.ts +6 -1
  27. package/commands/schema.command.d.ts.map +1 -1
  28. package/commands/schema.command.js +16 -17
  29. package/commands/schema.command.js.map +1 -1
  30. package/exec.d.ts +7 -1
  31. package/exec.d.ts.map +1 -1
  32. package/exec.js +84 -160
  33. package/exec.js.map +1 -1
  34. package/index.d.ts +3 -3
  35. package/index.d.ts.map +1 -1
  36. package/index.js +3 -20
  37. package/interfaces/index.d.ts +1 -1
  38. package/interfaces/index.d.ts.map +1 -1
  39. package/interfaces/loader.interface.d.ts +29 -3
  40. package/interfaces/loader.interface.d.ts.map +1 -1
  41. package/main.d.ts +0 -1
  42. package/main.js +7 -26
  43. package/main.js.map +1 -1
  44. package/package.json +55 -34
  45. package/providers/app-settings.provider.d.ts +5 -2
  46. package/providers/app-settings.provider.d.ts.map +1 -1
  47. package/providers/app-settings.provider.js +36 -49
  48. package/providers/app-settings.provider.js.map +1 -1
  49. package/providers/azure-key-vault.provider.d.ts +12 -8
  50. package/providers/azure-key-vault.provider.d.ts.map +1 -1
  51. package/providers/azure-key-vault.provider.js +138 -169
  52. package/providers/azure-key-vault.provider.js.map +1 -1
  53. package/providers/index.d.ts +2 -2
  54. package/providers/index.d.ts.map +1 -1
  55. package/providers/index.js +18 -28
  56. package/providers/index.js.map +1 -1
  57. package/providers/local.provider.d.ts +5 -2
  58. package/providers/local.provider.d.ts.map +1 -1
  59. package/providers/local.provider.js +27 -40
  60. package/providers/local.provider.js.map +1 -1
  61. package/providers/package-json.provider.d.ts +5 -2
  62. package/providers/package-json.provider.d.ts.map +1 -1
  63. package/providers/package-json.provider.js +26 -28
  64. package/providers/package-json.provider.js.map +1 -1
  65. package/utils/argv.util.d.ts +10 -0
  66. package/utils/argv.util.d.ts.map +1 -0
  67. package/utils/argv.util.js +24 -0
  68. package/utils/argv.util.js.map +1 -0
  69. package/utils/command.util.d.ts +70 -3
  70. package/utils/command.util.d.ts.map +1 -1
  71. package/utils/command.util.js +60 -140
  72. package/utils/command.util.js.map +1 -1
  73. package/utils/index.d.ts +7 -6
  74. package/utils/index.d.ts.map +1 -1
  75. package/utils/index.js +8 -23
  76. package/utils/interpolate.util.d.ts +29 -1
  77. package/utils/interpolate.util.d.ts.map +1 -1
  78. package/utils/interpolate.util.js +12 -30
  79. package/utils/interpolate.util.js.map +1 -1
  80. package/utils/json.util.d.ts +41 -3
  81. package/utils/json.util.d.ts.map +1 -1
  82. package/utils/json.util.js +24 -42
  83. package/utils/json.util.js.map +1 -1
  84. package/utils/logger.d.ts +21 -2
  85. package/utils/logger.d.ts.map +1 -1
  86. package/utils/logger.js +31 -17
  87. package/utils/logger.js.map +1 -1
  88. package/utils/normalize.util.d.ts +24 -2
  89. package/utils/normalize.util.d.ts.map +1 -1
  90. package/utils/normalize.util.js +35 -56
  91. package/utils/normalize.util.js.map +1 -1
  92. package/utils/schema.util.d.ts +59 -0
  93. package/utils/schema.util.d.ts.map +1 -1
  94. package/utils/schema.util.js +62 -97
  95. package/utils/schema.util.js.map +1 -1
  96. package/commands/index.js.map +0 -1
  97. package/index.js.map +0 -1
  98. package/interfaces/index.js +0 -18
  99. package/interfaces/index.js.map +0 -1
  100. package/interfaces/loader.interface.js +0 -3
  101. package/interfaces/loader.interface.js.map +0 -1
  102. package/tsconfig.build.tsbuildinfo +0 -1
  103. package/utils/index.js.map +0 -1
@@ -1,51 +1,38 @@
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.AppSettingsProvider = void 0;
7
- const picocolors_1 = __importDefault(require("picocolors"));
8
- const utils_1 = require("../utils");
9
- const KEY = 'app-settings';
10
- const logger = utils_1.logger.getChildLogger({
11
- prefix: [picocolors_1.default.bold(picocolors_1.default.blue(`[${KEY}]`))]
12
- });
13
- exports.AppSettingsProvider = {
14
- key: KEY,
15
- builder: (builder) => {
16
- builder.options({
17
- envFile: {
18
- group: KEY,
19
- alias: 'ef',
20
- type: 'string',
21
- default: '[[root]]/appsettings.json',
22
- describe: 'Environment variables file path (non secrets)'
23
- }
24
- });
25
- },
26
- load: async ({ env, root, modes = [], envFile, ci }) => {
27
- const [appsettings = {}, wasFound] = await (0, utils_1.readJson)(envFile);
28
- if (!wasFound)
29
- logger.warn(`${picocolors_1.default.blue(envFile)} not found`);
30
- const composite = appsettings['|DEFAULT|'] ||
31
- appsettings['|ENV|'] ||
32
- appsettings['|MODE|'] ||
33
- appsettings['|LOCAL|'];
34
- const unitary = await Promise.all([
35
- (0, utils_1.readJson)(`${root}/appsettings.${env}.json`).then(([settings]) => settings),
36
- (0, utils_1.readJson)(`${root}/appsettings.${env}.local.json`).then(([settings]) => (ci ? {} : settings)),
37
- ...modes.map((mode) => (0, utils_1.readJson)(`${root}/appsettings.${mode}.json`).then(([settings]) => settings))
38
- ]);
39
- if (ci)
40
- appsettings['|LOCAL|'] = null;
41
- return [
42
- composite ? {} : appsettings,
43
- appsettings['|DEFAULT|'],
44
- appsettings['|ENV|']?.[env],
45
- ...modes.map((mode) => appsettings['|MODE|']?.[mode]),
46
- appsettings['|LOCAL|']?.[env],
47
- ...unitary
48
- ];
49
- }
1
+ import { readJson as e } from "../utils/json.util.js";
2
+ import { logger as t } from "../utils/logger.js";
3
+ import "../utils/index.js";
4
+ import n from "picocolors";
5
+ //#region src/providers/app-settings.provider.ts
6
+ var r = "app-settings", i = t.getSubLogger({ prefix: [n.bold(n.blue(`[${r}]`))] }), a = {
7
+ key: r,
8
+ builder: (e) => {
9
+ e.options({ envFile: {
10
+ alias: "ef",
11
+ default: "[[root]]/appsettings.json",
12
+ describe: "Environment variables file path (non secrets)",
13
+ group: r,
14
+ type: "string"
15
+ } });
16
+ },
17
+ load: async ({ ci: t, env: r, envFile: a, modes: o = [], root: s }) => {
18
+ let [c = {}, l] = await e(a);
19
+ l || i.warn(`${n.blue(a)} not found`);
20
+ let u = c["|DEFAULT|"] || c["|ENV|"] || c["|MODE|"] || c["|LOCAL|"], d = await Promise.all([
21
+ e(`${s}/appsettings.${r}.json`).then(([e]) => e),
22
+ e(`${s}/appsettings.${r}.local.json`).then(([e]) => t ? {} : e),
23
+ ...o.map((t) => e(`${s}/appsettings.${t}.json`).then(([e]) => e))
24
+ ]);
25
+ return t && (c["|LOCAL|"] = null), [
26
+ u ? {} : c,
27
+ c["|DEFAULT|"],
28
+ c["|ENV|"]?.[r],
29
+ ...o.map((e) => c["|MODE|"]?.[e]),
30
+ c["|LOCAL|"]?.[r],
31
+ ...d
32
+ ];
33
+ }
50
34
  };
35
+ //#endregion
36
+ export { a as AppSettingsProvider };
37
+
51
38
  //# sourceMappingURL=app-settings.provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-settings.provider.js","sourceRoot":"","sources":["../../src/providers/app-settings.provider.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAG5B,oCAA4D;AAE5D,MAAM,GAAG,GAAG,cAAc,CAAC;AAE3B,MAAM,MAAM,GAAG,cAAY,CAAC,cAAc,CAAC;IAC1C,MAAM,EAAE,CAAC,oBAAE,CAAC,IAAI,CAAC,oBAAE,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;CACtC,CAAC,CAAC;AASU,QAAA,mBAAmB,GAA6C;IAC5E,GAAG,EAAE,GAAG;IAER,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;QACpB,OAAO,CAAC,OAAO,CAAC;YACf,OAAO,EAAE;gBACR,KAAK,EAAE,GAAG;gBACV,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,2BAA2B;gBACpC,QAAQ,EAAE,+CAA+C;aACzD;SACD,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE;QACtD,MAAM,CAAC,WAAW,GAAG,EAAE,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAA,gBAAQ,EAAC,OAAO,CAAC,CAAC;QAE7D,IAAI,CAAC,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,oBAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAE5D,MAAM,SAAS,GACd,WAAW,CAAC,WAAW,CAAC;YACxB,WAAW,CAAC,OAAO,CAAC;YACpB,WAAW,CAAC,QAAQ,CAAC;YACrB,WAAW,CAAC,SAAS,CAAC,CAAC;QAExB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjC,IAAA,gBAAQ,EAAC,GAAG,IAAI,gBAAgB,GAAG,OAAO,CAAC,CAAC,IAAI,CAC/C,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CACxB;YACD,IAAA,gBAAQ,EAAC,GAAG,IAAI,gBAAgB,GAAG,aAAa,CAAC,CAAC,IAAI,CACrD,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CACpC;YACD,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACrB,IAAA,gBAAQ,EAAC,GAAG,IAAI,gBAAgB,IAAI,OAAO,CAAC,CAAC,IAAI,CAChD,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CACxB,CACD;SACD,CAAC,CAAC;QAGH,IAAI,EAAE;YAAE,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAEtC,OAAO;YACN,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;YAE5B,WAAW,CAAC,WAAW,CAAC;YAExB,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC;YAE3B,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAErD,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC;YAE7B,GAAG,OAAO;SACV,CAAC;IACH,CAAC;CACD,CAAC"}
1
+ {"version":3,"file":"app-settings.provider.js","names":[],"sources":["../../src/providers/app-settings.provider.ts"],"sourcesContent":["import pc from 'picocolors';\r\nimport type { CommandArguments } from '../arguments.js';\r\nimport type { EnvProvider } from '../interfaces/index.js';\r\nimport { logger as globalLogger, readJson } from '../utils/index.js';\r\n\r\nconst KEY = 'app-settings';\r\n\r\nconst logger = globalLogger.getSubLogger({\r\n\tprefix: [pc.bold(pc.blue(`[${KEY}]`))],\r\n});\r\n\r\ninterface AppSettingsCommandArguments extends CommandArguments {\r\n\tenvFile: string;\r\n}\r\n\r\n/**\r\n * Loads config from appsettings.json.\r\n */\r\nexport const AppSettingsProvider: EnvProvider<AppSettingsCommandArguments> = {\r\n\tkey: KEY,\r\n\r\n\tbuilder: (builder) => {\r\n\t\tbuilder.options({\r\n\t\t\tenvFile: {\r\n\t\t\t\talias: 'ef',\r\n\t\t\t\tdefault: '[[root]]/appsettings.json',\r\n\t\t\t\tdescribe: 'Environment variables file path (non secrets)',\r\n\t\t\t\tgroup: KEY,\r\n\t\t\t\ttype: 'string',\r\n\t\t\t},\r\n\t\t});\r\n\t},\r\n\r\n\tload: async ({ ci, env, envFile, modes = [], root }) => {\r\n\t\tconst [appsettings = {}, wasFound] = await readJson(envFile);\r\n\r\n\t\tif (!wasFound) logger.warn(`${pc.blue(envFile)} not found`);\r\n\r\n\t\tconst composite =\r\n\t\t\tappsettings['|DEFAULT|'] ||\r\n\t\t\tappsettings['|ENV|'] ||\r\n\t\t\tappsettings['|MODE|'] ||\r\n\t\t\tappsettings['|LOCAL|'];\r\n\r\n\t\tconst unitary = await Promise.all([\r\n\t\t\treadJson(`${root}/appsettings.${env}.json`).then(\r\n\t\t\t\t([settings]) => settings,\r\n\t\t\t),\r\n\t\t\treadJson(`${root}/appsettings.${env}.local.json`).then(\r\n\t\t\t\t([settings]) => (ci ? {} : settings),\r\n\t\t\t),\r\n\t\t\t...modes.map((mode) =>\r\n\t\t\t\treadJson(`${root}/appsettings.${mode}.json`).then(\r\n\t\t\t\t\t([settings]) => settings,\r\n\t\t\t\t),\r\n\t\t\t),\r\n\t\t]);\r\n\r\n\t\t// only load local in env load cmd\r\n\t\tif (ci) appsettings['|LOCAL|'] = null;\r\n\r\n\t\treturn [\r\n\t\t\tcomposite ? {} : appsettings,\r\n\r\n\t\t\tappsettings['|DEFAULT|'],\r\n\r\n\t\t\tappsettings['|ENV|']?.[env],\r\n\r\n\t\t\t...modes.map((mode) => appsettings['|MODE|']?.[mode]),\r\n\r\n\t\t\tappsettings['|LOCAL|']?.[env],\r\n\r\n\t\t\t...unitary,\r\n\t\t];\r\n\t},\r\n};\r\n"],"mappings":";;;;;AAKA,IAAM,IAAM,gBAEN,IAAS,EAAa,aAAa,EACxC,QAAQ,CAAC,EAAG,KAAK,EAAG,KAAK,IAAI,EAAI,EAAE,CAAC,CAAC,EACtC,CAAC,GASY,IAAgE;CAC5E,KAAK;CAEL,UAAU,MAAY;EACrB,EAAQ,QAAQ,EACf,SAAS;GACR,OAAO;GACP,SAAS;GACT,UAAU;GACV,OAAO;GACP,MAAM;EACP,EACD,CAAC;CACF;CAEA,MAAM,OAAO,EAAE,OAAI,QAAK,YAAS,WAAQ,CAAC,GAAG,cAAW;EACvD,IAAM,CAAC,IAAc,CAAC,GAAG,KAAY,MAAM,EAAS,CAAO;EAE3D,AAAK,KAAU,EAAO,KAAK,GAAG,EAAG,KAAK,CAAO,EAAE,WAAW;EAE1D,IAAM,IACL,EAAY,gBACZ,EAAY,YACZ,EAAY,aACZ,EAAY,YAEP,IAAU,MAAM,QAAQ,IAAI;GACjC,EAAS,GAAG,EAAK,eAAe,EAAI,MAAM,EAAE,MAC1C,CAAC,OAAc,CACjB;GACA,EAAS,GAAG,EAAK,eAAe,EAAI,YAAY,EAAE,MAChD,CAAC,OAAe,IAAK,CAAC,IAAI,CAC5B;GACA,GAAG,EAAM,KAAK,MACb,EAAS,GAAG,EAAK,eAAe,EAAK,MAAM,EAAE,MAC3C,CAAC,OAAc,CACjB,CACD;EACD,CAAC;EAKD,OAFI,MAAI,EAAY,aAAa,OAE1B;GACN,IAAY,CAAC,IAAI;GAEjB,EAAY;GAEZ,EAAY,WAAW;GAEvB,GAAG,EAAM,KAAK,MAAS,EAAY,YAAY,EAAK;GAEpD,EAAY,aAAa;GAEzB,GAAG;EACJ;CACD;AACD"}
@@ -1,21 +1,25 @@
1
- import { CommandArguments } from '../arguments';
2
- import { EnvProvider } from '../interfaces';
3
- import { PullCommandArguments } from 'commands/pull.command';
1
+ import { CommandArguments } from '../arguments.js';
2
+ import { PullCommandArguments } from '../commands/pull.command.js';
3
+ import { EnvProvider } from '../interfaces/index.js';
4
4
  interface AzureKeyVaultCommandArguments extends CommandArguments {
5
+ mock: boolean;
6
+ password: string;
5
7
  secretsFile: string;
6
- keysFile?: string[];
7
- vaultUrl: string;
8
+ skipDnsCheck: boolean;
8
9
  spn: string;
9
- password: string;
10
10
  tenant: string;
11
- mock: boolean;
12
- skipDnsCheck: boolean;
11
+ vaultUrl: string;
12
+ keysFile?: string[];
13
13
  }
14
14
  interface AzureKeyVaultCommandConfig {
15
15
  [key: string]: {
16
16
  vaultUrl: string;
17
17
  };
18
18
  }
19
+ /**
20
+ * Loads secrets from env files in env/secrets
21
+ * folder, loaded from Azure Key Vault.
22
+ */
19
23
  export declare const AzureKeyVaultProvider: EnvProvider<AzureKeyVaultCommandArguments & PullCommandArguments, AzureKeyVaultCommandConfig>;
20
24
  export {};
21
25
  //# sourceMappingURL=azure-key-vault.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"azure-key-vault.provider.d.ts","sourceRoot":"","sources":["../../src/providers/azure-key-vault.provider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAU5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAS7D,UAAU,6BAA8B,SAAQ,gBAAgB;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,0BAA0B;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG;QACd,QAAQ,EAAE,MAAM,CAAC;KACjB,CAAC;CACF;AAMD,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAC9C,6BAA6B,GAAG,oBAAoB,EACpD,0BAA0B,CAgJ1B,CAAC"}
1
+ {"version":3,"file":"azure-key-vault.provider.d.ts","sourceRoot":"","sources":["../../src/providers/azure-key-vault.provider.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAe1D,UAAU,6BAA8B,SAAQ,gBAAgB;IAC/D,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,UAAU,0BAA0B;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG;QACd,QAAQ,EAAE,MAAM,CAAC;KACjB,CAAC;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAC9C,6BAA6B,GAAG,oBAAoB,EACpD,0BAA0B,CAgJ1B,CAAC"}
@@ -1,174 +1,143 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
1
+ import { generateSchemaFrom as e } from "../utils/command.util.js";
2
+ import { readJson as t, writeJson as n } from "../utils/json.util.js";
3
+ import { logger as r } from "../utils/logger.js";
4
+ import { schemaToJson as i } from "../utils/schema.util.js";
5
+ import "../utils/index.js";
6
+ import a from "picocolors";
7
+ import { existsSync as o } from "node:fs";
8
+ import { AzureKeyVault as s, createAzureKeyVaultMock as c } from "@achs/azure-key-vault";
9
+ import l from "node:dns";
10
+ //#region src/providers/azure-key-vault.provider.ts
11
+ var u = "azure-key-vault", d = r.getSubLogger({ prefix: [a.bold(a.blue(`[${u}]`))] }), f = {
12
+ key: u,
13
+ builder: (e) => {
14
+ e.options({
15
+ keysFile: {
16
+ alias: ["k", "keys"],
17
+ default: ["[[root]]/keys.json", "../keys.json"],
18
+ describe: "Azure Key Vault keys file path",
19
+ group: u,
20
+ type: "array"
21
+ },
22
+ mock: {
23
+ default: !1,
24
+ describe: "Mocks Azure Key Vault client",
25
+ group: u,
26
+ type: "boolean"
27
+ },
28
+ password: {
29
+ alias: [
30
+ "p",
31
+ "pass",
32
+ "clientSecret"
33
+ ],
34
+ describe: "SPN Client Secret Password",
35
+ group: u,
36
+ type: "string"
37
+ },
38
+ secretsFile: {
39
+ default: "[[root]]/[[env]].env.json",
40
+ describe: "Secret variables file path",
41
+ group: u,
42
+ type: "string"
43
+ },
44
+ skipDnsCheck: {
45
+ alias: "dns",
46
+ default: !1,
47
+ describe: "Skips DNS checking when connect to Azure Key Vault",
48
+ type: "boolean"
49
+ },
50
+ spn: {
51
+ alias: ["clientId", "id"],
52
+ describe: "SPN Client ID",
53
+ group: u,
54
+ type: "string"
55
+ },
56
+ tenant: {
57
+ alias: "t",
58
+ describe: "Azure Tenant ID",
59
+ group: u,
60
+ type: "string"
61
+ },
62
+ vaultUrl: {
63
+ alias: "url",
64
+ describe: "Azure Key Vault URL",
65
+ group: u,
66
+ type: "string"
67
+ }
68
+ });
69
+ },
70
+ push: async (n, r) => {
71
+ let [i, o] = await t(n.secretsFile);
72
+ o || (d.error(`${a.blue(n.secretsFile)} not found`), process.exit(1)), d.silly("local secrets loaded:", i);
73
+ let s = await h(n, r?.[n.env]?.vaultUrl);
74
+ d.info("pushing variables to store");
75
+ let c = await s.setAll(i);
76
+ d.silly("secrets pushed:", c);
77
+ let l = await e([{
78
+ key: u,
79
+ value: i
80
+ }], n);
81
+ d.silly("schema for akv updated:", l);
82
+ },
83
+ pull: async (e, t) => {
84
+ let r = e.schema?.[u];
85
+ if (!r) {
86
+ d.error("no schema found, you can gen one with \"env schema -e {env} -m {modes}\""), d.info(`generated empty ${a.bold(a.underline(a.yellowBright(e.secretsFile)))} file (you can retry the command)`), await n(e.secretsFile, {}, !1, !0);
87
+ return;
88
+ }
89
+ let o = i(r), s = t?.[e.env]?.vaultUrl;
90
+ if (!s) return n(e.secretsFile, {}, !1, !0);
91
+ let c = await h(e, s);
92
+ d.info(`pulling stored secrets from ${a.underline(a.yellowBright(s))}`);
93
+ let l = await c.getFor(o, !0);
94
+ d.silly("remote secrets loaded:", l), await n(e.secretsFile, l, e.overwrite, !0);
95
+ },
96
+ load: async (e, n) => {
97
+ let { env: r, secretsFile: i } = e;
98
+ if (!r) return d.silly("no env, so skipping provider"), [];
99
+ o(i) || (d.warn("secrets file not found, pulling from store"), await f.pull(e, n));
100
+ let [a] = await t(i);
101
+ return [a];
102
+ }
4
103
  };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.AzureKeyVaultProvider = void 0;
7
- const picocolors_1 = __importDefault(require("picocolors"));
8
- const azure_key_vault_1 = require("@achs/azure-key-vault");
9
- const utils_1 = require("../utils");
10
- const fs_1 = require("fs");
11
- const node_dns_1 = __importDefault(require("node:dns"));
12
- const KEY = 'azure-key-vault';
13
- const logger = utils_1.logger.getChildLogger({
14
- prefix: [picocolors_1.default.bold(picocolors_1.default.blue(`[${KEY}]`))]
15
- });
16
- exports.AzureKeyVaultProvider = {
17
- key: KEY,
18
- builder: (builder) => {
19
- builder.options({
20
- secretsFile: {
21
- group: KEY,
22
- type: 'string',
23
- default: '[[root]]/[[env]].env.json',
24
- describe: 'Secret variables file path'
25
- },
26
- keysFile: {
27
- group: KEY,
28
- alias: ['k', 'keys'],
29
- type: 'array',
30
- default: ['[[root]]/keys.json', '../keys.json'],
31
- describe: 'Azure Key Vault keys file path'
32
- },
33
- vaultUrl: {
34
- group: KEY,
35
- alias: 'url',
36
- type: 'string',
37
- describe: 'Azure Key Vault URL'
38
- },
39
- spn: {
40
- group: KEY,
41
- alias: ['clientId', 'id'],
42
- type: 'string',
43
- describe: 'SPN Client ID'
44
- },
45
- password: {
46
- group: KEY,
47
- alias: ['p', 'pass', 'clientSecret'],
48
- type: 'string',
49
- describe: 'SPN Client Secret Password'
50
- },
51
- tenant: {
52
- group: KEY,
53
- alias: 't',
54
- type: 'string',
55
- describe: 'Azure Tenant ID'
56
- },
57
- mock: {
58
- group: KEY,
59
- type: 'boolean',
60
- default: false,
61
- describe: 'Mocks Azure Key Vault client'
62
- },
63
- skipDnsCheck: {
64
- alias: 'dns',
65
- type: 'boolean',
66
- default: false,
67
- describe: 'Skips DNS checking when connect to Azure Key Vault'
68
- }
69
- });
70
- },
71
- push: async (argv, config) => {
72
- const [secrets, secretsWasFound] = await (0, utils_1.readJson)(argv.secretsFile);
73
- if (!secretsWasFound) {
74
- logger.error(`${picocolors_1.default.blue(String(argv.secretFile))} not found`);
75
- process.exit(1);
76
- }
77
- logger.silly('local secrets loaded:', secrets);
78
- const akv = await loadAzureKeyVaultClient(argv, config?.[argv.env]?.vaultUrl);
79
- logger.info('pushing variables to store');
80
- const results = await akv.setAll(secrets);
81
- logger.silly('secrets pushed:', results);
82
- const schema = await (0, utils_1.generateSchemaFrom)([{ key: KEY, value: secrets }], argv);
83
- logger.silly('schema for akv updated:', schema);
84
- },
85
- pull: async (argv, config) => {
86
- const schema = argv.schema?.[KEY];
87
- if (!schema) {
88
- logger.error('no schema found, you can gen one with "env schema -e {env} -m {modes}"');
89
- logger.info(`generated empty ${picocolors_1.default.bold(picocolors_1.default.underline(picocolors_1.default.yellowBright(argv.secretsFile)))} file (you can retry the command)`);
90
- await (0, utils_1.writeJson)(argv.secretsFile, {}, false, true);
91
- return;
92
- }
93
- const jsonTemplate = (0, utils_1.schemaToJson)(schema);
94
- const vaultUrl = config?.[argv.env]?.vaultUrl;
95
- if (!vaultUrl)
96
- return (0, utils_1.writeJson)(argv.secretsFile, {}, false, true);
97
- const akv = await loadAzureKeyVaultClient(argv, vaultUrl);
98
- logger.info(`pulling stored secrets from ${picocolors_1.default.underline(picocolors_1.default.yellowBright(vaultUrl))}`);
99
- const secrets = await akv.getFor(jsonTemplate, true);
100
- logger.silly('remote secrets loaded:', secrets);
101
- await (0, utils_1.writeJson)(argv.secretsFile, secrets, argv.overwrite, true);
102
- },
103
- load: async (argv, config) => {
104
- const { secretsFile, env } = argv;
105
- if (!env) {
106
- logger.silly('no env, so skipping provider');
107
- return [];
108
- }
109
- if (!(0, fs_1.existsSync)(secretsFile)) {
110
- logger.warn('secrets file not found, pulling from store');
111
- await exports.AzureKeyVaultProvider.pull(argv, config);
112
- }
113
- const [secrets] = await (0, utils_1.readJson)(secretsFile);
114
- return [secrets];
115
- }
116
- };
117
- function keysAreValid(keys) {
118
- return keys && keys.clientId && keys.clientSecret && keys.tenantId;
104
+ function p(e) {
105
+ return !!(e && e.clientId && e.clientSecret && e.tenantId);
106
+ }
107
+ async function m(e, n) {
108
+ d.debug(`searching keys at ${a.yellow(n.join(","))}`);
109
+ let [r] = (await Promise.all(n.map((e) => t(e)))).find(([t, n]) => n && p(t[e])) ?? [null];
110
+ return r?.[e] ?? {};
119
111
  }
120
- async function loadKeysFile(env, paths) {
121
- logger.debug(`searching keys at ${picocolors_1.default.yellow(paths.join(','))}`);
122
- const readers = await Promise.all(paths.map((path) => (0, utils_1.readJson)(path)));
123
- const [keys, wasFound] = readers.find(([keys, wasFound]) => wasFound && keysAreValid(keys[env])) ?? [null, false];
124
- return keys?.[env] ?? {};
112
+ async function h({ env: e, keysFile: t, mock: n, password: r, projectInfo: i, skipDnsCheck: o, spn: l, tenant: u, vaultUrl: f }, h) {
113
+ let _ = process.env.AZURE_VAULT_URL ?? f ?? h, v = {
114
+ env: e,
115
+ group: process.env.AZURE_GROUP ?? i.name,
116
+ project: process.env.AZURE_PROJECT ?? i.project
117
+ };
118
+ v.project || (d.error(`no project info from ${a.blue("package.json")} found`), process.exit(1));
119
+ let y = {
120
+ clientId: process.env.AZURE_CLIENT_ID ?? l,
121
+ tenantId: process.env.AZURE_TENANT_ID ?? u,
122
+ clientSecret: process.env.AZURE_CLIENT_SECRET ?? r
123
+ };
124
+ if (t && t.length > 0 && !p(y)) {
125
+ let n = await m(e, t);
126
+ _ ??= n.vaultUrl, y.clientId ??= n.clientId, y.clientSecret ??= n.clientSecret, y.tenantId ??= n.tenantId;
127
+ }
128
+ if (d.debug(`credentials loaded for project ${a.bold(a.underline(a.yellowBright(v.project)))} and group ${a.bold(a.underline(a.yellowBright(v.group)))}`), d.debug(`connected to ${a.bold(a.underline(a.greenBright(_)))}`), n) return c(v);
129
+ let b = new s(_, v, y);
130
+ return o || await g(_), b;
125
131
  }
126
- async function loadAzureKeyVaultClient({ env, vaultUrl, spn, password, tenant, projectInfo, keysFile, mock, logLevel, skipDnsCheck }, configVaultUrl) {
127
- let url = process.env.AZURE_VAULT_URL ?? vaultUrl ?? configVaultUrl;
128
- const config = {
129
- project: process.env.AZURE_PROJECT ?? projectInfo.project,
130
- group: process.env.AZURE_GROUP ?? projectInfo.name,
131
- env
132
- };
133
- if (!config.project) {
134
- logger.error(`no project info from ${picocolors_1.default.blue('package.json')} found`);
135
- process.exit(1);
136
- }
137
- const credentials = {
138
- clientId: process.env.AZURE_CLIENT_ID ?? spn,
139
- clientSecret: process.env.AZURE_CLIENT_SECRET ?? password,
140
- tenantId: process.env.AZURE_TENANT_ID ?? tenant
141
- };
142
- if (keysFile && keysFile.length > 0 && !keysAreValid(credentials)) {
143
- const keys = await loadKeysFile(env, keysFile);
144
- url ??= keys.vaultUrl;
145
- credentials.clientId ??= keys.clientId;
146
- credentials.clientSecret ??= keys.clientSecret;
147
- credentials.tenantId ??= keys.tenantId;
148
- }
149
- logger.debug(`credentials loaded for project ${picocolors_1.default.bold(picocolors_1.default.underline(picocolors_1.default.yellowBright(config.project)))} and group ${picocolors_1.default.bold(picocolors_1.default.underline(picocolors_1.default.yellowBright(config.group)))}`);
150
- logger.debug(`connected to ${picocolors_1.default.bold(picocolors_1.default.underline(picocolors_1.default.greenBright(url)))}`);
151
- if (mock)
152
- return (0, azure_key_vault_1.createAzureKeyVaultMock)(config);
153
- const akv = new azure_key_vault_1.AzureKeyVault(url, config, credentials);
154
- if (!skipDnsCheck) {
155
- const resolver = new node_dns_1.default.Resolver();
156
- resolver.setServers([
157
- '8.8.8.8',
158
- '1.1.1.1'
159
- ]);
160
- resolver.resolveCname(new URL(url).hostname, (error) => {
161
- if (error) {
162
- logger.error(error);
163
- process.exit(1);
164
- }
165
- logger.debug(`Connected to ${picocolors_1.default.green(url)}`);
166
- });
167
- await akv.client.getSecret('').catch((error) => {
168
- if (error?.errorResponse)
169
- logger.error(error.errorResponse);
170
- });
171
- }
172
- return akv;
132
+ function g(e) {
133
+ let t = new l.Resolver();
134
+ return t.setServers(["8.8.8.8", "1.1.1.1"]), new Promise((n) => {
135
+ t.resolve4(new URL(e).hostname, (t) => {
136
+ t && (d.error(`cannot resolve vault host ${a.red(e)}`, t), process.exit(1)), d.debug(`vault host reachable ${a.green(e)}`), n();
137
+ });
138
+ });
173
139
  }
140
+ //#endregion
141
+ export { f as AzureKeyVaultProvider };
142
+
174
143
  //# sourceMappingURL=azure-key-vault.provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"azure-key-vault.provider.js","sourceRoot":"","sources":["../../src/providers/azure-key-vault.provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"azure-key-vault.provider.js","names":[],"sources":["../../src/providers/azure-key-vault.provider.ts"],"sourcesContent":["import { AzureKeyVault, createAzureKeyVaultMock } from '@achs/azure-key-vault';\r\nimport type { AzureKeyVaultSecrets } from '@achs/azure-key-vault';\r\nimport dns from 'node:dns';\r\nimport { existsSync } from 'node:fs';\r\nimport pc from 'picocolors';\r\nimport type { Arguments } from 'yargs';\r\nimport type { CommandArguments } from '../arguments.js';\r\nimport type { PullCommandArguments } from '../commands/pull.command.js';\r\nimport type { EnvProvider } from '../interfaces/index.js';\r\nimport {\r\n\tgenerateSchemaFrom,\r\n\tlogger as globalLogger,\r\n\treadJson,\r\n\tschemaToJson,\r\n\twriteJson,\r\n} from '../utils/index.js';\r\n\r\nconst KEY = 'azure-key-vault';\r\n\r\nconst logger = globalLogger.getSubLogger({\r\n\tprefix: [pc.bold(pc.blue(`[${KEY}]`))],\r\n});\r\n\r\ninterface AzureKeyVaultCommandArguments extends CommandArguments {\r\n\tmock: boolean;\r\n\tpassword: string;\r\n\tsecretsFile: string;\r\n\tskipDnsCheck: boolean;\r\n\tspn: string;\r\n\ttenant: string;\r\n\tvaultUrl: string;\r\n\tkeysFile?: string[];\r\n}\r\n\r\ninterface AzureKeyVaultCommandConfig {\r\n\t[key: string]: {\r\n\t\tvaultUrl: string;\r\n\t};\r\n}\r\n\r\n/**\r\n * Loads secrets from env files in env/secrets\r\n * folder, loaded from Azure Key Vault.\r\n */\r\nexport const AzureKeyVaultProvider: EnvProvider<\r\n\tAzureKeyVaultCommandArguments & PullCommandArguments,\r\n\tAzureKeyVaultCommandConfig\r\n> = {\r\n\tkey: KEY,\r\n\r\n\tbuilder: (builder) => {\r\n\t\tbuilder.options({\r\n\t\t\tkeysFile: {\r\n\t\t\t\talias: ['k', 'keys'],\r\n\t\t\t\tdefault: ['[[root]]/keys.json', '../keys.json'],\r\n\t\t\t\tdescribe: 'Azure Key Vault keys file path',\r\n\t\t\t\tgroup: KEY,\r\n\t\t\t\ttype: 'array',\r\n\t\t\t},\r\n\t\t\tmock: {\r\n\t\t\t\tdefault: false,\r\n\t\t\t\tdescribe: 'Mocks Azure Key Vault client',\r\n\t\t\t\tgroup: KEY,\r\n\t\t\t\ttype: 'boolean',\r\n\t\t\t},\r\n\t\t\tpassword: {\r\n\t\t\t\talias: ['p', 'pass', 'clientSecret'],\r\n\t\t\t\tdescribe: 'SPN Client Secret Password',\r\n\t\t\t\tgroup: KEY,\r\n\t\t\t\ttype: 'string',\r\n\t\t\t},\r\n\t\t\tsecretsFile: {\r\n\t\t\t\tdefault: '[[root]]/[[env]].env.json',\r\n\t\t\t\tdescribe: 'Secret variables file path',\r\n\t\t\t\tgroup: KEY,\r\n\t\t\t\ttype: 'string',\r\n\t\t\t},\r\n\t\t\tskipDnsCheck: {\r\n\t\t\t\talias: 'dns',\r\n\t\t\t\tdefault: false,\r\n\t\t\t\tdescribe: 'Skips DNS checking when connect to Azure Key Vault',\r\n\t\t\t\ttype: 'boolean',\r\n\t\t\t},\r\n\t\t\tspn: {\r\n\t\t\t\talias: ['clientId', 'id'],\r\n\t\t\t\tdescribe: 'SPN Client ID',\r\n\t\t\t\tgroup: KEY,\r\n\t\t\t\ttype: 'string',\r\n\t\t\t},\r\n\t\t\ttenant: {\r\n\t\t\t\talias: 't',\r\n\t\t\t\tdescribe: 'Azure Tenant ID',\r\n\t\t\t\tgroup: KEY,\r\n\t\t\t\ttype: 'string',\r\n\t\t\t},\r\n\t\t\tvaultUrl: {\r\n\t\t\t\talias: 'url',\r\n\t\t\t\tdescribe: 'Azure Key Vault URL',\r\n\t\t\t\tgroup: KEY,\r\n\t\t\t\ttype: 'string',\r\n\t\t\t},\r\n\t\t});\r\n\t},\r\n\r\n\tpush: async (argv, config) => {\r\n\t\tconst [secrets, secretsWasFound] = await readJson(argv.secretsFile);\r\n\r\n\t\tif (!secretsWasFound) {\r\n\t\t\tlogger.error(`${pc.blue(argv.secretsFile)} not found`);\r\n\r\n\t\t\tprocess.exit(1);\r\n\t\t}\r\n\r\n\t\tlogger.silly('local secrets loaded:', secrets);\r\n\t\tconst akv = await loadAzureKeyVaultClient(\r\n\t\t\targv,\r\n\t\t\tconfig?.[argv.env]?.vaultUrl,\r\n\t\t);\r\n\t\tlogger.info('pushing variables to store');\r\n\t\tconst results = await akv.setAll(secrets);\r\n\t\tlogger.silly('secrets pushed:', results);\r\n\r\n\t\tconst schema = await generateSchemaFrom(\r\n\t\t\t[{ key: KEY, value: secrets }],\r\n\t\t\targv,\r\n\t\t);\r\n\r\n\t\tlogger.silly('schema for akv updated:', schema);\r\n\t},\r\n\r\n\tpull: async (argv, config) => {\r\n\t\tconst schema = argv.schema?.[KEY] as\r\n\t\t\t| Record<string, unknown>\r\n\t\t\t| undefined;\r\n\r\n\t\tif (!schema) {\r\n\t\t\tlogger.error(\r\n\t\t\t\t'no schema found, you can gen one with \"env schema -e {env} -m {modes}\"',\r\n\t\t\t);\r\n\r\n\t\t\tlogger.info(\r\n\t\t\t\t`generated empty ${pc.bold(\r\n\t\t\t\t\tpc.underline(pc.yellowBright(argv.secretsFile)),\r\n\t\t\t\t)} file (you can retry the command)`,\r\n\t\t\t);\r\n\t\t\tawait writeJson(argv.secretsFile, {}, false, true);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst jsonTemplate = schemaToJson(schema) as Record<string, unknown>;\r\n\r\n\t\tconst vaultUrl = config?.[argv.env]?.vaultUrl;\r\n\t\tif (!vaultUrl) return writeJson(argv.secretsFile, {}, false, true);\r\n\r\n\t\tconst akv = await loadAzureKeyVaultClient(argv, vaultUrl);\r\n\r\n\t\tlogger.info(\r\n\t\t\t`pulling stored secrets from ${pc.underline(pc.yellowBright(vaultUrl))}`,\r\n\t\t);\r\n\r\n\t\tconst secrets = await akv.getFor(\r\n\t\t\tjsonTemplate as AzureKeyVaultSecrets,\r\n\t\t\ttrue,\r\n\t\t);\r\n\r\n\t\tlogger.silly('remote secrets loaded:', secrets);\r\n\r\n\t\tawait writeJson(argv.secretsFile, secrets, argv.overwrite, true);\r\n\t},\r\n\r\n\tload: async (argv, config) => {\r\n\t\tconst { env, secretsFile } = argv;\r\n\r\n\t\tif (!env) {\r\n\t\t\tlogger.silly('no env, so skipping provider');\r\n\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tif (!existsSync(secretsFile)) {\r\n\t\t\tlogger.warn('secrets file not found, pulling from store');\r\n\r\n\t\t\tawait AzureKeyVaultProvider.pull!(argv, config);\r\n\t\t}\r\n\r\n\t\tconst [secrets] = await readJson(secretsFile);\r\n\r\n\t\treturn [secrets];\r\n\t},\r\n};\r\n\r\n/**\r\n * Validate SPN credentials/keys.\r\n *\r\n * @param {(Record<string, any> | null)} keys\r\n *\r\n * @returns {boolean}\r\n */\r\nfunction keysAreValid(keys: Record<string, any> | null): boolean {\r\n\treturn Boolean(keys && keys.clientId && keys.clientSecret && keys.tenantId);\r\n}\r\n\r\n/**\r\n * Loads SPN Azure Key Vault credentials from keys file.\r\n *\r\n * @param {string} env\r\n * @param {string[]} paths\r\n *\r\n * @returns {Record<string, string>} credentials\r\n */\r\nasync function loadKeysFile(\r\n\tenv: string,\r\n\tpaths: string[],\r\n): Promise<Record<string, string>> {\r\n\tlogger.debug(`searching keys at ${pc.yellow(paths.join(','))}`);\r\n\r\n\tconst readers = await Promise.all(paths.map((path) => readJson(path)));\r\n\r\n\tconst [keys] = readers.find(\r\n\t\t([candidate, wasFound]) => wasFound && keysAreValid(candidate[env]),\r\n\t) ?? [null];\r\n\r\n\treturn keys?.[env] ?? {};\r\n}\r\n\r\n/**\r\n * Loads credentials and initializes Azure Key Vault client.\r\n *\r\n * @param {Arguments<AzureKeyVaultCommandArguments>} argv command arguments\r\n *\r\n * @returns {*} {Promise<AzureKeyVault>}\r\n */\r\n// linear credential-resolution (env vars → args → keys file precedence);\r\n// complexity comes from `??` fallbacks, not tangled control flow\r\n// eslint-disable-next-line complexity\r\nasync function loadAzureKeyVaultClient(\r\n\t{\r\n\t\tenv,\r\n\t\tkeysFile,\r\n\t\tmock,\r\n\t\tpassword,\r\n\t\tprojectInfo,\r\n\t\tskipDnsCheck,\r\n\t\tspn,\r\n\t\ttenant,\r\n\t\tvaultUrl,\r\n\t}: Arguments<AzureKeyVaultCommandArguments>,\r\n\tconfigVaultUrl?: string,\r\n): Promise<AzureKeyVault> {\r\n\tlet url = process.env.AZURE_VAULT_URL ?? vaultUrl ?? configVaultUrl;\r\n\r\n\tconst config = {\r\n\t\tenv,\r\n\t\tgroup: process.env.AZURE_GROUP ?? projectInfo.name,\r\n\t\tproject: process.env.AZURE_PROJECT ?? projectInfo.project,\r\n\t};\r\n\r\n\tif (!config.project) {\r\n\t\tlogger.error(`no project info from ${pc.blue('package.json')} found`);\r\n\r\n\t\tprocess.exit(1);\r\n\t}\r\n\r\n\tconst credentials = {\r\n\t\tclientId: process.env.AZURE_CLIENT_ID ?? spn,\r\n\t\ttenantId: process.env.AZURE_TENANT_ID ?? tenant,\r\n\t\tclientSecret: process.env.AZURE_CLIENT_SECRET ?? password,\r\n\t};\r\n\r\n\tif (keysFile && keysFile.length > 0 && !keysAreValid(credentials)) {\r\n\t\tconst keys = await loadKeysFile(env, keysFile);\r\n\r\n\t\turl ??= keys.vaultUrl;\r\n\t\tcredentials.clientId ??= keys.clientId;\r\n\t\tcredentials.clientSecret ??= keys.clientSecret;\r\n\t\tcredentials.tenantId ??= keys.tenantId;\r\n\t}\r\n\r\n\tlogger.debug(\r\n\t\t`credentials loaded for project ${pc.bold(\r\n\t\t\tpc.underline(pc.yellowBright(config.project)),\r\n\t\t)} and group ${pc.bold(pc.underline(pc.yellowBright(config.group)))}`,\r\n\t);\r\n\r\n\tlogger.debug(`connected to ${pc.bold(pc.underline(pc.greenBright(url)))}`);\r\n\r\n\tif (mock) return createAzureKeyVaultMock(config);\r\n\r\n\tconst akv = new AzureKeyVault(url, config, credentials);\r\n\r\n\tif (!skipDnsCheck) await verifyVaultReachable(url);\r\n\r\n\treturn akv;\r\n}\r\n\r\n/**\r\n * Best-effort DNS reachability check for the vault host. Resolves the hostname\r\n * via public resolvers; logs and exits on failure. Does NOT issue a\r\n * guaranteed-failing secret call (the old `getSecret('')` probe).\r\n */\r\nfunction verifyVaultReachable(url: string): Promise<void> {\r\n\tconst resolver = new dns.Resolver();\r\n\r\n\tresolver.setServers(['8.8.8.8', '1.1.1.1']);\r\n\r\n\treturn new Promise<void>((resolve) => {\r\n\t\tresolver.resolve4(new URL(url).hostname, (error) => {\r\n\t\t\tif (error) {\r\n\t\t\t\tlogger.error(`cannot resolve vault host ${pc.red(url)}`, error);\r\n\t\t\t\tprocess.exit(1);\r\n\t\t\t}\r\n\r\n\t\t\tlogger.debug(`vault host reachable ${pc.green(url)}`);\r\n\t\t\tresolve();\r\n\t\t});\r\n\t});\r\n}\r\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { EnvProvider } from '../interfaces';
1
+ import { EnvProvider } from '../interfaces/index.js';
2
2
  declare const IntegratedProviders: Record<string, EnvProvider<any, any>>;
3
3
  declare const IntegratedProviderConfig: {
4
4
  path: string;
5
5
  }[];
6
- export { IntegratedProviders, IntegratedProviderConfig };
6
+ export { IntegratedProviderConfig, IntegratedProviders };
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM5C,QAAA,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAK9D,CAAC;AAEF,QAAA,MAAM,wBAAwB;;GAa7B,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAM1D,QAAA,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAK9D,CAAC;AAKF,QAAA,MAAM,wBAAwB;;GAa7B,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,30 +1,20 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IntegratedProviderConfig = exports.IntegratedProviders = void 0;
4
- const app_settings_provider_1 = require("./app-settings.provider");
5
- const package_json_provider_1 = require("./package-json.provider");
6
- const azure_key_vault_provider_1 = require("./azure-key-vault.provider");
7
- const local_provider_1 = require("./local.provider");
8
- const IntegratedProviders = {
9
- [package_json_provider_1.PackageJsonProvider.key]: package_json_provider_1.PackageJsonProvider,
10
- [app_settings_provider_1.AppSettingsProvider.key]: app_settings_provider_1.AppSettingsProvider,
11
- [azure_key_vault_provider_1.AzureKeyVaultProvider.key]: azure_key_vault_provider_1.AzureKeyVaultProvider,
12
- [local_provider_1.LocalProvider.key]: local_provider_1.LocalProvider
13
- };
14
- exports.IntegratedProviders = IntegratedProviders;
15
- const IntegratedProviderConfig = [
16
- {
17
- path: package_json_provider_1.PackageJsonProvider.key
18
- },
19
- {
20
- path: app_settings_provider_1.AppSettingsProvider.key
21
- },
22
- {
23
- path: azure_key_vault_provider_1.AzureKeyVaultProvider.key
24
- },
25
- {
26
- path: local_provider_1.LocalProvider.key
27
- }
1
+ import { AppSettingsProvider as e } from "./app-settings.provider.js";
2
+ import { AzureKeyVaultProvider as t } from "./azure-key-vault.provider.js";
3
+ import { LocalProvider as n } from "./local.provider.js";
4
+ import { PackageJsonProvider as r } from "./package-json.provider.js";
5
+ //#region src/providers/index.ts
6
+ var i = {
7
+ [e.key]: e,
8
+ [t.key]: t,
9
+ [n.key]: n,
10
+ [r.key]: r
11
+ }, a = [
12
+ { path: r.key },
13
+ { path: e.key },
14
+ { path: t.key },
15
+ { path: n.key }
28
16
  ];
29
- exports.IntegratedProviderConfig = IntegratedProviderConfig;
17
+ //#endregion
18
+ export { a as IntegratedProviderConfig, i as IntegratedProviders };
19
+
30
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;;AACA,mEAA8D;AAC9D,mEAA8D;AAC9D,yEAAmE;AACnE,qDAAiD;AAEjD,MAAM,mBAAmB,GAA0C;IAClE,CAAC,2CAAmB,CAAC,GAAG,CAAC,EAAE,2CAAmB;IAC9C,CAAC,2CAAmB,CAAC,GAAG,CAAC,EAAE,2CAAmB;IAC9C,CAAC,gDAAqB,CAAC,GAAG,CAAC,EAAE,gDAAqB;IAClD,CAAC,8BAAa,CAAC,GAAG,CAAC,EAAE,8BAAa;CAClC,CAAC;AAiBO,kDAAmB;AAf5B,MAAM,wBAAwB,GAAG;IAChC;QACC,IAAI,EAAE,2CAAmB,CAAC,GAAG;KAC7B;IACD;QACC,IAAI,EAAE,2CAAmB,CAAC,GAAG;KAC7B;IACD;QACC,IAAI,EAAE,gDAAqB,CAAC,GAAG;KAC/B;IACD;QACC,IAAI,EAAE,8BAAa,CAAC,GAAG;KACvB;CACD,CAAC;AAE4B,4DAAwB"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/providers/index.ts"],"sourcesContent":["import type { EnvProvider } from '../interfaces/index.js';\r\nimport { AppSettingsProvider } from './app-settings.provider.js';\r\nimport { AzureKeyVaultProvider } from './azure-key-vault.provider.js';\r\nimport { LocalProvider } from './local.provider.js';\r\nimport { PackageJsonProvider } from './package-json.provider.js';\r\n\r\nconst IntegratedProviders: Record<string, EnvProvider<any, any>> = {\r\n\t[AppSettingsProvider.key]: AppSettingsProvider,\r\n\t[AzureKeyVaultProvider.key]: AzureKeyVaultProvider,\r\n\t[LocalProvider.key]: LocalProvider,\r\n\t[PackageJsonProvider.key]: PackageJsonProvider,\r\n};\r\n\r\n// order defines provider load + merge precedence (later entries win):\r\n// package-json (base info) < app-settings < azure-key-vault < local (highest).\r\n// Do NOT alphabetize this array — the sequence is semantic.\r\nconst IntegratedProviderConfig = [\r\n\t{\r\n\t\tpath: PackageJsonProvider.key,\r\n\t},\r\n\t{\r\n\t\tpath: AppSettingsProvider.key,\r\n\t},\r\n\t{\r\n\t\tpath: AzureKeyVaultProvider.key,\r\n\t},\r\n\t{\r\n\t\tpath: LocalProvider.key,\r\n\t},\r\n];\r\n\r\nexport { IntegratedProviderConfig, IntegratedProviders };\r\n"],"mappings":";;;;;AAMA,IAAM,IAA6D;EACjE,EAAoB,MAAM;EAC1B,EAAsB,MAAM;EAC5B,EAAc,MAAM;EACpB,EAAoB,MAAM;AAC5B,GAKM,IAA2B;CAChC,EACC,MAAM,EAAoB,IAC3B;CACA,EACC,MAAM,EAAoB,IAC3B;CACA,EACC,MAAM,EAAsB,IAC7B;CACA,EACC,MAAM,EAAc,IACrB;AACD"}
@@ -1,8 +1,11 @@
1
- import { CommandArguments } from '../arguments';
2
- import { EnvProvider } from '../interfaces';
1
+ import { CommandArguments } from '../arguments.js';
2
+ import { EnvProvider } from '../interfaces/index.js';
3
3
  interface LocalCommandArguments extends CommandArguments {
4
4
  localFile: string;
5
5
  }
6
+ /**
7
+ * Loads local variables from env files in env folder.
8
+ */
6
9
  export declare const LocalProvider: EnvProvider<LocalCommandArguments>;
7
10
  export {};
8
11
  //# sourceMappingURL=local.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local.provider.d.ts","sourceRoot":"","sources":["../../src/providers/local.provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAS5C,UAAU,qBAAsB,SAAQ,gBAAgB;IACvD,SAAS,EAAE,MAAM,CAAC;CAClB;AAKD,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,qBAAqB,CAmC5D,CAAC"}
1
+ {"version":3,"file":"local.provider.d.ts","sourceRoot":"","sources":["../../src/providers/local.provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAS1D,UAAU,qBAAsB,SAAQ,gBAAgB;IACvD,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,qBAAqB,CAmC5D,CAAC"}