@shambay/vault-manager 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +367 -0
  3. package/dist/index.d.ts +33 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +33 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/resolver/factory.d.ts +19 -0
  8. package/dist/resolver/factory.d.ts.map +1 -0
  9. package/dist/resolver/factory.js +28 -0
  10. package/dist/resolver/factory.js.map +1 -0
  11. package/dist/resolver/index.d.ts +8 -0
  12. package/dist/resolver/index.d.ts.map +1 -0
  13. package/dist/resolver/index.js +8 -0
  14. package/dist/resolver/index.js.map +1 -0
  15. package/dist/resolver/memory.d.ts +8 -0
  16. package/dist/resolver/memory.d.ts.map +1 -0
  17. package/dist/resolver/memory.js +15 -0
  18. package/dist/resolver/memory.js.map +1 -0
  19. package/dist/resolver/redis.d.ts +10 -0
  20. package/dist/resolver/redis.d.ts.map +1 -0
  21. package/dist/resolver/redis.js +20 -0
  22. package/dist/resolver/redis.js.map +1 -0
  23. package/dist/shared/env.d.ts +14 -0
  24. package/dist/shared/env.d.ts.map +1 -0
  25. package/dist/shared/env.js +22 -0
  26. package/dist/shared/env.js.map +1 -0
  27. package/dist/shared/index.d.ts +4 -0
  28. package/dist/shared/index.d.ts.map +1 -0
  29. package/dist/shared/index.js +3 -0
  30. package/dist/shared/index.js.map +1 -0
  31. package/dist/shared/logger.d.ts +45 -0
  32. package/dist/shared/logger.d.ts.map +1 -0
  33. package/dist/shared/logger.js +65 -0
  34. package/dist/shared/logger.js.map +1 -0
  35. package/dist/types/index.d.ts +4 -0
  36. package/dist/types/index.d.ts.map +1 -0
  37. package/dist/types/index.js +2 -0
  38. package/dist/types/index.js.map +1 -0
  39. package/dist/types/request.d.ts +48 -0
  40. package/dist/types/request.d.ts.map +1 -0
  41. package/dist/types/request.js +2 -0
  42. package/dist/types/request.js.map +1 -0
  43. package/dist/types/resolver.d.ts +40 -0
  44. package/dist/types/resolver.d.ts.map +1 -0
  45. package/dist/types/resolver.js +2 -0
  46. package/dist/types/resolver.js.map +1 -0
  47. package/dist/types/vault.d.ts +34 -0
  48. package/dist/types/vault.d.ts.map +1 -0
  49. package/dist/types/vault.js +2 -0
  50. package/dist/types/vault.js.map +1 -0
  51. package/dist/vault/approle/index.d.ts +2 -0
  52. package/dist/vault/approle/index.d.ts.map +1 -0
  53. package/dist/vault/approle/index.js +2 -0
  54. package/dist/vault/approle/index.js.map +1 -0
  55. package/dist/vault/approle/token.d.ts +13 -0
  56. package/dist/vault/approle/token.d.ts.map +1 -0
  57. package/dist/vault/approle/token.js +60 -0
  58. package/dist/vault/approle/token.js.map +1 -0
  59. package/dist/vault/constants.d.ts +9 -0
  60. package/dist/vault/constants.d.ts.map +1 -0
  61. package/dist/vault/constants.js +9 -0
  62. package/dist/vault/constants.js.map +1 -0
  63. package/dist/vault/database/index.d.ts +2 -0
  64. package/dist/vault/database/index.d.ts.map +1 -0
  65. package/dist/vault/database/index.js +2 -0
  66. package/dist/vault/database/index.js.map +1 -0
  67. package/dist/vault/database/postgres-url.d.ts +16 -0
  68. package/dist/vault/database/postgres-url.d.ts.map +1 -0
  69. package/dist/vault/database/postgres-url.js +53 -0
  70. package/dist/vault/database/postgres-url.js.map +1 -0
  71. package/dist/vault/index.d.ts +4 -0
  72. package/dist/vault/index.d.ts.map +1 -0
  73. package/dist/vault/index.js +4 -0
  74. package/dist/vault/index.js.map +1 -0
  75. package/dist/vault/kv/index.d.ts +2 -0
  76. package/dist/vault/kv/index.d.ts.map +1 -0
  77. package/dist/vault/kv/index.js +2 -0
  78. package/dist/vault/kv/index.js.map +1 -0
  79. package/dist/vault/kv/secret.d.ts +13 -0
  80. package/dist/vault/kv/secret.d.ts.map +1 -0
  81. package/dist/vault/kv/secret.js +46 -0
  82. package/dist/vault/kv/secret.js.map +1 -0
  83. package/package.json +76 -0
@@ -0,0 +1,2 @@
1
+ export { getPostgresUrl } from './postgres-url.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vault/database/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getPostgresUrl } from './postgres-url.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vault/database/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { RequestResolver } from '@shambay/cached-http-resolver';
2
+ import type { DatabaseCredsOptions } from '../../types/request.js';
3
+ /**
4
+ * Fetches dynamic PostgreSQL credentials from Vault and builds a connection URL.
5
+ *
6
+ * @param resolver - RequestResolver used to perform the HTTP request
7
+ * @param vaultAddress - Vault base address
8
+ * @param token - Vault access token
9
+ * @param databaseRole - Name of the database role in Vault
10
+ * @param host - Database host
11
+ * @param port - Database port
12
+ * @param databaseName - Database name
13
+ * @param options - Optional per-call overrides (buffer, fallback TTL, hooks)
14
+ */
15
+ export declare function getPostgresUrl(resolver: RequestResolver, vaultAddress: string, token: string, databaseRole: string, host: string, port: number, databaseName: string, options?: DatabaseCredsOptions): Promise<string>;
16
+ //# sourceMappingURL=postgres-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-url.d.ts","sourceRoot":"","sources":["../../../src/vault/database/postgres-url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AA0BnE;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CACnC,QAAQ,EAAE,eAAe,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
@@ -0,0 +1,53 @@
1
+ import { DEFAULT_FALLBACK_TTL_SECONDS, DEFAULT_REFRESH_BUFFER_SECONDS } from '../constants.js';
2
+ import { createLogger } from '../../shared/logger.js';
3
+ const log = createLogger('Vault');
4
+ /**
5
+ * Default hooks and fallback values used when the caller
6
+ * does not provide any per-call options.
7
+ */
8
+ const defaultOptions = {
9
+ refreshBufferSeconds: DEFAULT_REFRESH_BUFFER_SECONDS,
10
+ fallbackTtlSeconds: DEFAULT_FALLBACK_TTL_SECONDS,
11
+ onBefore: () => { },
12
+ onAfter: () => { },
13
+ onError: (error, attempt) => {
14
+ log.error(`[DB] Attempt ${attempt} failed:`, error.message);
15
+ }
16
+ };
17
+ /**
18
+ * Fetches dynamic PostgreSQL credentials from Vault and builds a connection URL.
19
+ *
20
+ * @param resolver - RequestResolver used to perform the HTTP request
21
+ * @param vaultAddress - Vault base address
22
+ * @param token - Vault access token
23
+ * @param databaseRole - Name of the database role in Vault
24
+ * @param host - Database host
25
+ * @param port - Database port
26
+ * @param databaseName - Database name
27
+ * @param options - Optional per-call overrides (buffer, fallback TTL, hooks)
28
+ */
29
+ export async function getPostgresUrl(resolver, vaultAddress, token, databaseRole, host, port, databaseName, options = {}) {
30
+ const { refreshBufferSeconds, fallbackTtlSeconds, onBefore, onAfter, onError } = {
31
+ ...defaultOptions,
32
+ ...options
33
+ };
34
+ const url = `${vaultAddress}/v1/database/creds/${databaseRole}`;
35
+ const cacheKey = `db_creds_${databaseRole}`;
36
+ const data = await resolver.request(url, { headers: { 'X-Vault-Token': token } }, {
37
+ cacheKey,
38
+ requestKey: cacheKey,
39
+ refreshBufferSeconds,
40
+ ttlResolver: (responseData) => {
41
+ const lease = responseData?.lease_duration;
42
+ if (typeof lease === 'number' && lease > 0) {
43
+ return lease;
44
+ }
45
+ return fallbackTtlSeconds;
46
+ },
47
+ onBefore,
48
+ onAfter,
49
+ onError
50
+ });
51
+ return `postgresql://${data.data.username}:${data.data.password}@${host}:${port}/${databaseName}`;
52
+ }
53
+ //# sourceMappingURL=postgres-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-url.js","sourceRoot":"","sources":["../../../src/vault/database/postgres-url.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAQlC;;;GAGG;AACH,MAAM,cAAc,GAAmC;IACtD,oBAAoB,EAAE,8BAA8B;IACpD,kBAAkB,EAAE,4BAA4B;IAChD,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;IACjB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QAC3B,GAAG,CAAC,KAAK,CAAC,gBAAgB,OAAO,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;CACD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,QAAyB,EACzB,YAAoB,EACpB,KAAa,EACb,YAAoB,EACpB,IAAY,EACZ,IAAY,EACZ,YAAoB,EACpB,UAAgC,EAAE;IAElC,MAAM,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG;QAChF,GAAG,cAAc;QACjB,GAAG,OAAO;KACV,CAAC;IAEF,MAAM,GAAG,GAAG,GAAG,YAAY,sBAAsB,YAAY,EAAE,CAAC;IAChE,MAAM,QAAQ,GAAG,YAAY,YAAY,EAAE,CAAC;IAE5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAClC,GAAG,EACH,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,EACvC;QACC,QAAQ;QACR,UAAU,EAAE,QAAQ;QACpB,oBAAoB;QACpB,WAAW,EAAE,CAAC,YAAY,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAI,YAAkD,EAAE,cAAc,CAAC;YAClF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAC;YACd,CAAC;YACD,OAAO,kBAAkB,CAAC;QAC3B,CAAC;QACD,QAAQ;QACR,OAAO;QACP,OAAO;KACP,CACD,CAAC;IAEF,OAAO,gBAAgB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,YAAY,EAAE,CAAC;AACnG,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { getVaultToken } from './approle/index.js';
2
+ export { getPostgresUrl } from './database/index.js';
3
+ export { getValueByKey } from './kv/index.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vault/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { getVaultToken } from './approle/index.js';
2
+ export { getPostgresUrl } from './database/index.js';
3
+ export { getValueByKey } from './kv/index.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vault/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getValueByKey } from './secret.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vault/kv/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getValueByKey } from './secret.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vault/kv/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { RequestResolver } from '@shambay/cached-http-resolver';
2
+ import type { KvSecretOptions } from '../../types/request.js';
3
+ /**
4
+ * Reads a secret from Vault KV v2 by path.
5
+ *
6
+ * @param resolver - RequestResolver used to perform the HTTP request
7
+ * @param vaultAddress - Vault base address
8
+ * @param token - Vault access token
9
+ * @param path - Secret path (e.g. `myapp/config`)
10
+ * @param options - Optional per-call overrides (cache, TTL, hooks)
11
+ */
12
+ export declare function getValueByKey<T>(resolver: RequestResolver, vaultAddress: string, token: string, path: string, options?: KvSecretOptions): Promise<T>;
13
+ //# sourceMappingURL=secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../../../src/vault/kv/secret.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AA6B9D;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACpC,QAAQ,EAAE,eAAe,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAyBZ"}
@@ -0,0 +1,46 @@
1
+ import { DEFAULT_REFRESH_BUFFER_SECONDS } from '../constants.js';
2
+ import { createLogger } from '../../shared/logger.js';
3
+ const log = createLogger('KV');
4
+ /**
5
+ * Default hooks and fallback values used when the caller
6
+ * does not provide any per-call options.
7
+ *
8
+ * Note: `useCache` and `cacheTTL` are handled separately below,
9
+ * since they depend on whether caching is enabled at all.
10
+ */
11
+ const defaultOptions = {
12
+ useCache: true,
13
+ refreshBufferSeconds: DEFAULT_REFRESH_BUFFER_SECONDS,
14
+ onBefore: (url) => log.debug(`Fetching ${url}`),
15
+ onAfter: () => { },
16
+ onError: (error, attempt) => log.error(`Attempt ${attempt} failed:`, error.message)
17
+ };
18
+ /**
19
+ * Reads a secret from Vault KV v2 by path.
20
+ *
21
+ * @param resolver - RequestResolver used to perform the HTTP request
22
+ * @param vaultAddress - Vault base address
23
+ * @param token - Vault access token
24
+ * @param path - Secret path (e.g. `myapp/config`)
25
+ * @param options - Optional per-call overrides (cache, TTL, hooks)
26
+ */
27
+ export async function getValueByKey(resolver, vaultAddress, token, path, options = {}) {
28
+ const { useCache, cacheTTL, refreshBufferSeconds, onBefore, onAfter, onError } = {
29
+ ...defaultOptions,
30
+ ...options
31
+ };
32
+ const url = `${vaultAddress}/v1/kv/data/${path}`;
33
+ const rawResponse = await resolver.request(url, { headers: { 'X-Vault-Token': token } }, {
34
+ ...(useCache && {
35
+ cacheKey: `vault_kv_${path}`,
36
+ requestKey: `vault_kv_${path}`,
37
+ cacheTTL,
38
+ refreshBufferSeconds
39
+ }),
40
+ onBefore,
41
+ onAfter,
42
+ onError
43
+ });
44
+ return rawResponse.data.data;
45
+ }
46
+ //# sourceMappingURL=secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.js","sourceRoot":"","sources":["../../../src/vault/kv/secret.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AAS/B;;;;;;GAMG;AACH,MAAM,cAAc,GAC0C;IAC7D,QAAQ,EAAE,IAAI;IACd,oBAAoB,EAAE,8BAA8B;IACpD,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC;IAC/C,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;IACjB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,OAAO,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC;CACnF,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,QAAyB,EACzB,YAAoB,EACpB,KAAa,EACb,IAAY,EACZ,UAA2B,EAAE;IAE7B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG;QAChF,GAAG,cAAc;QACjB,GAAG,OAAO;KACV,CAAC;IAEF,MAAM,GAAG,GAAG,GAAG,YAAY,eAAe,IAAI,EAAE,CAAC;IAEjD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CACzC,GAAG,EACH,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,EACvC;QACC,GAAG,CAAC,QAAQ,IAAI;YACf,QAAQ,EAAE,YAAY,IAAI,EAAE;YAC5B,UAAU,EAAE,YAAY,IAAI,EAAE;YAC9B,QAAQ;YACR,oBAAoB;SACpB,CAAC;QACF,QAAQ;QACR,OAAO;QACP,OAAO;KACP,CACD,CAAC;IAEF,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@shambay/vault-manager",
3
+ "version": "1.0.1",
4
+ "description": "Vault client with built-in caching, deduplication, and proactive data refresh",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/sham-bay/ts-vault-manager.git"
8
+ },
9
+ "bugs": {
10
+ "url": "https://github.com/sham-bay/ts-vault-manager/issues"
11
+ },
12
+ "homepage": "https://github.com/sham-bay/ts-vault-manager",
13
+ "license": "Apache-2.0",
14
+ "author": "Sham Bay <sham.bay@use_social_to_contact.me>",
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "engines": {
19
+ "node": ">=22.0.0"
20
+ },
21
+ "sideEffects": false,
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "type": "module",
26
+ "main": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.js",
32
+ "default": "./dist/index.js"
33
+ }
34
+ },
35
+ "scripts": {
36
+ "build": "tsc -p tsconfig.build.json",
37
+ "prepublishOnly": "pnpm run build",
38
+ "lint": "prettier --check . && eslint .",
39
+ "format": "prettier --write .",
40
+ "test": "vitest run",
41
+ "test:watch": "vitest",
42
+ "test:coverage": "vitest run --coverage"
43
+ },
44
+ "peerDependencies": {
45
+ "ioredis": "^6.0.0",
46
+ "dotenv": "^17.4.0"
47
+ },
48
+ "peerDependenciesMeta": {
49
+ "ioredis": {
50
+ "optional": true
51
+ },
52
+ "dotenv": {
53
+ "optional": true
54
+ }
55
+ },
56
+ "dependencies": {
57
+ "@shambay/cached-http-resolver": "^1.1.0"
58
+ },
59
+ "devDependencies": {
60
+ "@eslint/js": "^10.0.1",
61
+ "@types/node": "^22",
62
+ "@vitest/coverage-v8": "^4.1.11",
63
+ "eslint": "^10.4.1",
64
+ "eslint-config-prettier": "^10.1.8",
65
+ "prettier": "^3.8.3",
66
+ "typescript": "^6.0.3",
67
+ "typescript-eslint": "^8.60.1",
68
+ "vitest": "^4.1.11"
69
+ },
70
+ "keywords": [
71
+ "vault-manager",
72
+ "vault",
73
+ "hashicorp"
74
+ ],
75
+ "packageManager": "pnpm@11.21.0"
76
+ }