@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,28 @@
1
+ import { RequestResolver } from '@shambay/cached-http-resolver';
2
+ import { createMemoryResolver } from './memory.js';
3
+ import { createRedisResolver } from './redis.js';
4
+ /**
5
+ * Factory that creates a RequestResolver based on the provided configuration.
6
+ *
7
+ * @example
8
+ * // In-memory cache (default)
9
+ * const resolver = createResolver({ cache: 'memory' });
10
+ *
11
+ * @example
12
+ * // Redis-backed cache
13
+ * const resolver = createResolver({
14
+ * cache: 'redis',
15
+ * redis: { host: 'localhost', port: 6379 },
16
+ * keyPrefix: 'vault:',
17
+ * });
18
+ */
19
+ export function createResolver(config = { cache: 'memory' }) {
20
+ switch (config.cache) {
21
+ case 'redis':
22
+ return createRedisResolver(config);
23
+ case 'memory':
24
+ default:
25
+ return createMemoryResolver(config);
26
+ }
27
+ }
28
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/resolver/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC7B,SAAgC,EAAE,KAAK,EAAE,QAAQ,EAAE;IAEnD,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,OAAO;YACX,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,QAAQ,CAAC;QACd;YACC,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;AACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Public entry point for resolver factories.
3
+ * Re-exports the unified factory plus the concrete memory/redis factories.
4
+ */
5
+ export { createResolver } from './factory.js';
6
+ export { createMemoryResolver } from './memory.js';
7
+ export { createRedisResolver } from './redis.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Public entry point for resolver factories.
3
+ * Re-exports the unified factory plus the concrete memory/redis factories.
4
+ */
5
+ export { createResolver } from './factory.js';
6
+ export { createMemoryResolver } from './memory.js';
7
+ export { createRedisResolver } from './redis.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { RequestResolver } from '@shambay/cached-http-resolver';
2
+ import type { MemoryResolverConfig } from '../types/resolver.js';
3
+ /**
4
+ * Creates a RequestResolver backed by an in-memory cache.
5
+ * Suitable for single-process usage where the cache does not need to be shared.
6
+ */
7
+ export declare function createMemoryResolver(config?: MemoryResolverConfig): RequestResolver;
8
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/resolver/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAoB,MAAM,+BAA+B,CAAC;AAClF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE;;;GAGG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,GAAE,oBAA0C,GAChD,eAAe,CAUjB"}
@@ -0,0 +1,15 @@
1
+ import { RequestResolver, createCacheStore } from '@shambay/cached-http-resolver';
2
+ /**
3
+ * Creates a RequestResolver backed by an in-memory cache.
4
+ * Suitable for single-process usage where the cache does not need to be shared.
5
+ */
6
+ export function createMemoryResolver(config = { cache: 'memory' }) {
7
+ const { maxRetries = 3, baseDelay = 1000, useExponential = true } = config;
8
+ const cache = createCacheStore('memory');
9
+ return new RequestResolver(cache, {
10
+ maxRetries,
11
+ baseDelay,
12
+ useExponential
13
+ });
14
+ }
15
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/resolver/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGlF;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CACnC,SAA+B,EAAE,KAAK,EAAE,QAAQ,EAAE;IAElD,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAE3E,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEzC,OAAO,IAAI,eAAe,CAAC,KAAK,EAAE;QACjC,UAAU;QACV,SAAS;QACT,cAAc;KACd,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { RequestResolver } from '@shambay/cached-http-resolver';
2
+ import type { RedisResolverConfig } from '../types/resolver.js';
3
+ /**
4
+ * Creates a RequestResolver backed by a Redis cache.
5
+ * Use this when the cache must be shared across multiple processes or instances.
6
+ *
7
+ * Requires `ioredis` to be installed as a peer dependency.
8
+ */
9
+ export declare function createRedisResolver(config: RedisResolverConfig): RequestResolver;
10
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/resolver/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAoB,MAAM,+BAA+B,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,eAAe,CAahF"}
@@ -0,0 +1,20 @@
1
+ import { RequestResolver, createCacheStore } from '@shambay/cached-http-resolver';
2
+ /**
3
+ * Creates a RequestResolver backed by a Redis cache.
4
+ * Use this when the cache must be shared across multiple processes or instances.
5
+ *
6
+ * Requires `ioredis` to be installed as a peer dependency.
7
+ */
8
+ export function createRedisResolver(config) {
9
+ const { maxRetries = 3, baseDelay = 1000, useExponential = true, redis, keyPrefix } = config;
10
+ const cache = createCacheStore('redis', {
11
+ redis,
12
+ ...(keyPrefix && { keyPrefix })
13
+ });
14
+ return new RequestResolver(cache, {
15
+ maxRetries,
16
+ baseDelay,
17
+ useExponential
18
+ });
19
+ }
20
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/resolver/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGlF;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA2B;IAC9D,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAE7F,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAE;QACvC,KAAK;QACL,GAAG,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;KAC/B,CAAC,CAAC;IAEH,OAAO,IAAI,eAAe,CAAC,KAAK,EAAE;QACjC,UAAU;QACV,SAAS;QACT,cAAc;KACd,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Optional environment variable reading.
3
+ * Does not require dotenv — if the variables are already set in
4
+ * process.env, they will be used as-is.
5
+ * If you want to load a .env file, install dotenv separately
6
+ * and call `import 'dotenv/config'` in your application.
7
+ */
8
+ export declare function getEnv(key: string, fallback?: string): string | undefined;
9
+ /**
10
+ * Reads a required environment variable.
11
+ * Throws if the variable is missing or empty.
12
+ */
13
+ export declare function getEnvRequired(key: string): string;
14
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/shared/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEzE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlD"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Optional environment variable reading.
3
+ * Does not require dotenv — if the variables are already set in
4
+ * process.env, they will be used as-is.
5
+ * If you want to load a .env file, install dotenv separately
6
+ * and call `import 'dotenv/config'` in your application.
7
+ */
8
+ export function getEnv(key, fallback) {
9
+ return process.env[key] ?? fallback;
10
+ }
11
+ /**
12
+ * Reads a required environment variable.
13
+ * Throws if the variable is missing or empty.
14
+ */
15
+ export function getEnvRequired(key) {
16
+ const value = getEnv(key);
17
+ if (!value) {
18
+ throw new Error(`Missing required environment variable: ${key}`);
19
+ }
20
+ return value;
21
+ }
22
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/shared/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,QAAiB;IACpD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,0CAA0C,GAAG,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { getEnv, getEnvRequired } from './env.js';
2
+ export { createLogger, setLogLevel, getLogLevel } from './logger.js';
3
+ export type { LogLevel, Logger } from './logger.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { getEnv, getEnvRequired } from './env.js';
2
+ export { createLogger, setLogLevel, getLogLevel } from './logger.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Minimal dependency-free logger used across the package.
3
+ *
4
+ * Consumers can control verbosity globally via {@link setLogLevel}.
5
+ * Default level is `'silent'`, which matches the pre-logger behavior
6
+ * (console.log / console.error on Vault operations).
7
+ */
8
+ /**
9
+ * Logging verbosity. Each level includes all levels above it:
10
+ * - `silent` — no output at all
11
+ * - `error` — errors only
12
+ * - `warn` — errors and warnings
13
+ * - `info` — errors, warnings, informational messages
14
+ * - `debug` — everything, including request lifecycle details
15
+ */
16
+ export type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';
17
+ /**
18
+ * Sets the global log level for all loggers created via {@link createLogger}.
19
+ */
20
+ export declare function setLogLevel(level: LogLevel): void;
21
+ /**
22
+ * Returns the current global log level.
23
+ */
24
+ export declare function getLogLevel(): LogLevel;
25
+ /**
26
+ * Public logger interface. Each method accepts a message and
27
+ * optional additional arguments forwarded to the console.
28
+ */
29
+ export interface Logger {
30
+ error(message: string, ...args: unknown[]): void;
31
+ warn(message: string, ...args: unknown[]): void;
32
+ info(message: string, ...args: unknown[]): void;
33
+ debug(message: string, ...args: unknown[]): void;
34
+ }
35
+ /**
36
+ * Creates a namespaced logger. The namespace is prepended to every
37
+ * message, e.g. `createLogger('Vault')` produces `[Vault] ...`.
38
+ *
39
+ * @example
40
+ * const log = createLogger('Vault');
41
+ * log.info('Token obtained');
42
+ * // → [Vault] Token obtained
43
+ */
44
+ export declare function createLogger(namespace: string): Logger;
45
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAYtE;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACtB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACjD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAyBtD"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Minimal dependency-free logger used across the package.
3
+ *
4
+ * Consumers can control verbosity globally via {@link setLogLevel}.
5
+ * Default level is `'silent'`, which matches the pre-logger behavior
6
+ * (console.log / console.error on Vault operations).
7
+ */
8
+ const LEVEL_RANK = {
9
+ silent: 0,
10
+ error: 1,
11
+ warn: 2,
12
+ info: 3,
13
+ debug: 4
14
+ };
15
+ let currentLevel = 'silent';
16
+ /**
17
+ * Sets the global log level for all loggers created via {@link createLogger}.
18
+ */
19
+ export function setLogLevel(level) {
20
+ currentLevel = level;
21
+ }
22
+ /**
23
+ * Returns the current global log level.
24
+ */
25
+ export function getLogLevel() {
26
+ return currentLevel;
27
+ }
28
+ function shouldLog(level) {
29
+ return LEVEL_RANK[level] <= LEVEL_RANK[currentLevel];
30
+ }
31
+ /**
32
+ * Creates a namespaced logger. The namespace is prepended to every
33
+ * message, e.g. `createLogger('Vault')` produces `[Vault] ...`.
34
+ *
35
+ * @example
36
+ * const log = createLogger('Vault');
37
+ * log.info('Token obtained');
38
+ * // → [Vault] Token obtained
39
+ */
40
+ export function createLogger(namespace) {
41
+ const prefix = `[${namespace}]`;
42
+ return {
43
+ error: (message, ...args) => {
44
+ if (shouldLog('error')) {
45
+ console.error(prefix, message, ...args);
46
+ }
47
+ },
48
+ warn: (message, ...args) => {
49
+ if (shouldLog('warn')) {
50
+ console.warn(prefix, message, ...args);
51
+ }
52
+ },
53
+ info: (message, ...args) => {
54
+ if (shouldLog('info')) {
55
+ console.log(prefix, message, ...args);
56
+ }
57
+ },
58
+ debug: (message, ...args) => {
59
+ if (shouldLog('debug')) {
60
+ console.log(prefix, message, ...args);
61
+ }
62
+ }
63
+ };
64
+ }
65
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/shared/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,MAAM,UAAU,GAA6B;IAC5C,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACR,CAAC;AAEF,IAAI,YAAY,GAAa,QAAQ,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAe;IAC1C,YAAY,GAAG,KAAK,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IAC1B,OAAO,YAAY,CAAC;AACrB,CAAC;AAaD,SAAS,SAAS,CAAC,KAAkC;IACpD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC7C,MAAM,MAAM,GAAG,IAAI,SAAS,GAAG,CAAC;IAEhC,OAAO;QACN,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;YAC3B,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YACzC,CAAC;QACF,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;YAC1B,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YACxC,CAAC;QACF,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;YAC1B,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YACvC,CAAC;QACF,CAAC;QACD,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;YAC3B,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YACvC,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type { VaultManagerActions, VaultConfig, VaultDynamicDatabaseRole } from './vault.js';
2
+ export type { VaultRequestHooks, VaultTokenOptions, DatabaseCredsOptions, KvSecretOptions } from './request.js';
3
+ export type { ResolverRetryOptions, MemoryResolverConfig, RedisResolverConfig, ResolverFactoryConfig } from './resolver.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG7F,YAAY,EACX,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,MAAM,cAAc,CAAC;AAGtB,YAAY,EACX,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Hooks for observing the lifecycle of a Vault request.
3
+ * All hooks are optional.
4
+ */
5
+ export interface VaultRequestHooks {
6
+ /** Called right before a request is sent. */
7
+ onBefore?: (url: string) => void;
8
+ /** Called after a successful response. */
9
+ onAfter?: (response: unknown, data: unknown) => void;
10
+ /** Called when a request attempt fails. */
11
+ onError?: (error: Error, attempt: number) => void;
12
+ }
13
+ /**
14
+ * Per-call options for Vault token retrieval.
15
+ */
16
+ export interface VaultTokenOptions extends VaultRequestHooks {
17
+ /**
18
+ * Refresh the token this many seconds before it expires.
19
+ * Default: 300 (5 minutes).
20
+ */
21
+ refreshBufferSeconds?: number;
22
+ /**
23
+ * Fallback TTL in seconds used when Vault does not return
24
+ * a valid `lease_duration`. Default: 3300.
25
+ */
26
+ fallbackTtlSeconds?: number;
27
+ }
28
+ /**
29
+ * Per-call options for dynamic database credentials.
30
+ */
31
+ export interface DatabaseCredsOptions extends VaultRequestHooks {
32
+ /** Refresh the credentials this many seconds before they expire. Default: 300. */
33
+ refreshBufferSeconds?: number;
34
+ /** Fallback TTL in seconds when `lease_duration` is missing. Default: 3300. */
35
+ fallbackTtlSeconds?: number;
36
+ }
37
+ /**
38
+ * Per-call options for KV v2 secret reads.
39
+ */
40
+ export interface KvSecretOptions extends VaultRequestHooks {
41
+ /** Whether to cache the result. Default: true. */
42
+ useCache?: boolean;
43
+ /** Explicit cache TTL in seconds. If omitted, the cache store default is used. */
44
+ cacheTTL?: number;
45
+ /** Refresh the value this many seconds before it expires. Default: 300. */
46
+ refreshBufferSeconds?: number;
47
+ }
48
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/types/request.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IACjC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,2CAA2C;IAC3C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC3D;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC9D,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,+EAA+E;IAC/E,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACzD,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/types/request.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Common retry/backoff options shared by all resolvers.
3
+ */
4
+ export interface ResolverRetryOptions {
5
+ /** Maximum number of retry attempts (default: 3) */
6
+ maxRetries?: number;
7
+ /** Base delay between retries in milliseconds (default: 1000) */
8
+ baseDelay?: number;
9
+ /** Whether to use exponential backoff (default: true) */
10
+ useExponential?: boolean;
11
+ }
12
+ /**
13
+ * Configuration for an in-memory cache resolver.
14
+ */
15
+ export interface MemoryResolverConfig extends ResolverRetryOptions {
16
+ cache: 'memory';
17
+ }
18
+ /**
19
+ * Configuration for a Redis-backed cache resolver.
20
+ * `redis` accepts the same options as `ioredis` (host, port, password, etc.).
21
+ */
22
+ export interface RedisResolverConfig extends ResolverRetryOptions {
23
+ cache: 'redis';
24
+ /** ioredis connection options */
25
+ redis: {
26
+ host?: string;
27
+ port?: number;
28
+ password?: string;
29
+ db?: number;
30
+ [key: string]: unknown;
31
+ };
32
+ /** Optional prefix for all cache keys */
33
+ keyPrefix?: string;
34
+ }
35
+ /**
36
+ * Union of all supported resolver configurations.
37
+ * Discriminated by the `cache` field.
38
+ */
39
+ export type ResolverFactoryConfig = MemoryResolverConfig | RedisResolverConfig;
40
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/types/resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IACjE,KAAK,EAAE,QAAQ,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,iCAAiC;IACjC,KAAK,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,CAAC;IACF,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,GAAG,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/types/resolver.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Supported Vault manager actions.
3
+ * - `pg_url` — fetch dynamic PostgreSQL credentials and build a connection URL
4
+ * - `value_by_key` — read a secret from Vault KV v2 by path
5
+ */
6
+ export type VaultManagerActions = 'pg_url' | 'value_by_key';
7
+ /**
8
+ * Configuration required to authenticate against Vault via AppRole.
9
+ */
10
+ export interface VaultConfig {
11
+ /** Base address of the Vault server (e.g. `https://vault.example.com:8200`) */
12
+ vaultAddress: string;
13
+ /** AppRole mount path (e.g. `approle`) */
14
+ rolePath: string;
15
+ /** AppRole Role ID */
16
+ roleId: string;
17
+ /** AppRole Secret ID */
18
+ secretId: string;
19
+ }
20
+ /**
21
+ * Describes a dynamic database role and the target database
22
+ * used to assemble a connection URL.
23
+ */
24
+ export interface VaultDynamicDatabaseRole {
25
+ /** Name of the database role in Vault */
26
+ role: string;
27
+ /** Database host */
28
+ host: string;
29
+ /** Database port */
30
+ port: number;
31
+ /** Database name */
32
+ name: string;
33
+ }
34
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/types/vault.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,cAAc,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACxC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;CACb"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/types/vault.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { getVaultToken } from './token.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vault/approle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getVaultToken } from './token.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vault/approle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { RequestResolver } from '@shambay/cached-http-resolver';
2
+ import type { VaultConfig } from '../../types/vault.js';
3
+ import type { VaultTokenOptions } from '../../types/request.js';
4
+ /**
5
+ * Retrieves a Vault token via AppRole authentication.
6
+ * The token is cached and proactively refreshed before it expires.
7
+ *
8
+ * @param resolver - RequestResolver used to perform the HTTP request
9
+ * @param config - Vault configuration (address, rolePath, roleId, secretId)
10
+ * @param options - Optional per-call overrides (buffer, fallback TTL, hooks)
11
+ */
12
+ export declare function getVaultToken(resolver: RequestResolver, config: VaultConfig, options?: VaultTokenOptions): Promise<string>;
13
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/vault/approle/token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA+BhE;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAClC,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,iBAAsB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
@@ -0,0 +1,60 @@
1
+ import { DEFAULT_REFRESH_BUFFER_SECONDS, DEFAULT_FALLBACK_TTL_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: (url) => log.debug(`Requesting token from ${url}`),
12
+ onAfter: (_response, data) => {
13
+ const lease = data?.auth?.lease_duration;
14
+ log.debug(`Token obtained, lease_duration: ${lease}`);
15
+ },
16
+ onError: (error, attempt) => {
17
+ log.error(`Attempt ${attempt} failed: ${error.message}`);
18
+ }
19
+ };
20
+ /**
21
+ * Retrieves a Vault token via AppRole authentication.
22
+ * The token is cached and proactively refreshed before it expires.
23
+ *
24
+ * @param resolver - RequestResolver used to perform the HTTP request
25
+ * @param config - Vault configuration (address, rolePath, roleId, secretId)
26
+ * @param options - Optional per-call overrides (buffer, fallback TTL, hooks)
27
+ */
28
+ export async function getVaultToken(resolver, config, options = {}) {
29
+ const { refreshBufferSeconds, fallbackTtlSeconds, onBefore, onAfter, onError } = {
30
+ ...defaultOptions,
31
+ ...options
32
+ };
33
+ const { vaultAddress, rolePath, roleId, secretId } = config;
34
+ const url = `${vaultAddress}/v1/auth/${rolePath}/login`;
35
+ const data = await resolver.request(url, {
36
+ method: 'POST',
37
+ headers: { 'Content-Type': 'application/json' },
38
+ body: JSON.stringify({ role_id: roleId, secret_id: secretId })
39
+ }, {
40
+ cacheKey: `vault_token_${roleId}`,
41
+ requestKey: `vault_token_request_${roleId}`,
42
+ refreshBufferSeconds,
43
+ ttlResolver: (responseData) => {
44
+ const lease = responseData?.auth?.lease_duration;
45
+ if (typeof lease === 'number' && lease > 0) {
46
+ return lease;
47
+ }
48
+ return fallbackTtlSeconds;
49
+ },
50
+ onBefore,
51
+ onAfter,
52
+ onError
53
+ });
54
+ const token = data.auth?.client_token;
55
+ if (!token) {
56
+ throw new Error('Vault response missing client_token');
57
+ }
58
+ return token;
59
+ }
60
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/vault/approle/token.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAUlC;;;GAGG;AACH,MAAM,cAAc,GAAgC;IACnD,oBAAoB,EAAE,8BAA8B;IACpD,kBAAkB,EAAE,4BAA4B;IAChD,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC;IAC5D,OAAO,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAI,IAAuC,EAAE,IAAI,EAAE,cAAc,CAAC;QAC7E,GAAG,CAAC,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QAC3B,GAAG,CAAC,KAAK,CAAC,WAAW,OAAO,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;CACD,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,QAAyB,EACzB,MAAmB,EACnB,UAA6B,EAAE;IAE/B,MAAM,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG;QAChF,GAAG,cAAc;QACjB,GAAG,OAAO;KACV,CAAC;IAEF,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC5D,MAAM,GAAG,GAAG,GAAG,YAAY,YAAY,QAAQ,QAAQ,CAAC;IAExD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAClC,GAAG,EACH;QACC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;KAC9D,EACD;QACC,QAAQ,EAAE,eAAe,MAAM,EAAE;QACjC,UAAU,EAAE,uBAAuB,MAAM,EAAE;QAC3C,oBAAoB;QACpB,WAAW,EAAE,CAAC,YAAY,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAI,YAA+C,EAAE,IAAI,EAAE,cAAc,CAAC;YACrF,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,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Default values used across the package.
3
+ * Consumers can override most of these via per-call options.
4
+ */
5
+ /** 5 minutes */
6
+ export declare const DEFAULT_REFRESH_BUFFER_SECONDS = 300;
7
+ /** 55 minutes */
8
+ export declare const DEFAULT_FALLBACK_TTL_SECONDS = 3300;
9
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/vault/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gBAAgB;AAChB,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD,iBAAiB;AACjB,eAAO,MAAM,4BAA4B,OAAO,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Default values used across the package.
3
+ * Consumers can override most of these via per-call options.
4
+ */
5
+ /** 5 minutes */
6
+ export const DEFAULT_REFRESH_BUFFER_SECONDS = 300;
7
+ /** 55 minutes */
8
+ export const DEFAULT_FALLBACK_TTL_SECONDS = 3300;
9
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/vault/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gBAAgB;AAChB,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAElD,iBAAiB;AACjB,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC"}