vaulter 0.2.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 (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +490 -0
  3. package/dist/bin/minienv-mcp.cjs +17 -0
  4. package/dist/bin/minienv.cjs +146 -0
  5. package/dist/cli/commands/delete.d.ts +22 -0
  6. package/dist/cli/commands/delete.d.ts.map +1 -0
  7. package/dist/cli/commands/delete.js +85 -0
  8. package/dist/cli/commands/delete.js.map +1 -0
  9. package/dist/cli/commands/export.d.ts +21 -0
  10. package/dist/cli/commands/export.d.ts.map +1 -0
  11. package/dist/cli/commands/export.js +126 -0
  12. package/dist/cli/commands/export.js.map +1 -0
  13. package/dist/cli/commands/get.d.ts +21 -0
  14. package/dist/cli/commands/get.d.ts.map +1 -0
  15. package/dist/cli/commands/get.js +62 -0
  16. package/dist/cli/commands/get.js.map +1 -0
  17. package/dist/cli/commands/init.d.ts +20 -0
  18. package/dist/cli/commands/init.d.ts.map +1 -0
  19. package/dist/cli/commands/init.js +98 -0
  20. package/dist/cli/commands/init.js.map +1 -0
  21. package/dist/cli/commands/integrations/helm.d.ts +21 -0
  22. package/dist/cli/commands/integrations/helm.d.ts.map +1 -0
  23. package/dist/cli/commands/integrations/helm.js +113 -0
  24. package/dist/cli/commands/integrations/helm.js.map +1 -0
  25. package/dist/cli/commands/integrations/kubernetes.d.ts +25 -0
  26. package/dist/cli/commands/integrations/kubernetes.d.ts.map +1 -0
  27. package/dist/cli/commands/integrations/kubernetes.js +199 -0
  28. package/dist/cli/commands/integrations/kubernetes.js.map +1 -0
  29. package/dist/cli/commands/integrations/terraform.d.ts +25 -0
  30. package/dist/cli/commands/integrations/terraform.d.ts.map +1 -0
  31. package/dist/cli/commands/integrations/terraform.js +131 -0
  32. package/dist/cli/commands/integrations/terraform.js.map +1 -0
  33. package/dist/cli/commands/key.d.ts +19 -0
  34. package/dist/cli/commands/key.d.ts.map +1 -0
  35. package/dist/cli/commands/key.js +247 -0
  36. package/dist/cli/commands/key.js.map +1 -0
  37. package/dist/cli/commands/list.d.ts +21 -0
  38. package/dist/cli/commands/list.d.ts.map +1 -0
  39. package/dist/cli/commands/list.js +94 -0
  40. package/dist/cli/commands/list.js.map +1 -0
  41. package/dist/cli/commands/pull.d.ts +22 -0
  42. package/dist/cli/commands/pull.d.ts.map +1 -0
  43. package/dist/cli/commands/pull.js +142 -0
  44. package/dist/cli/commands/pull.js.map +1 -0
  45. package/dist/cli/commands/push.d.ts +22 -0
  46. package/dist/cli/commands/push.d.ts.map +1 -0
  47. package/dist/cli/commands/push.js +181 -0
  48. package/dist/cli/commands/push.js.map +1 -0
  49. package/dist/cli/commands/services.d.ts +18 -0
  50. package/dist/cli/commands/services.d.ts.map +1 -0
  51. package/dist/cli/commands/services.js +92 -0
  52. package/dist/cli/commands/services.js.map +1 -0
  53. package/dist/cli/commands/set.d.ts +22 -0
  54. package/dist/cli/commands/set.d.ts.map +1 -0
  55. package/dist/cli/commands/set.js +93 -0
  56. package/dist/cli/commands/set.js.map +1 -0
  57. package/dist/cli/commands/sync.d.ts +23 -0
  58. package/dist/cli/commands/sync.d.ts.map +1 -0
  59. package/dist/cli/commands/sync.js +362 -0
  60. package/dist/cli/commands/sync.js.map +1 -0
  61. package/dist/cli/index.d.ts +7 -0
  62. package/dist/cli/index.d.ts.map +1 -0
  63. package/dist/cli/index.js +266 -0
  64. package/dist/cli/index.js.map +1 -0
  65. package/dist/cli/lib/create-client.d.ts +21 -0
  66. package/dist/cli/lib/create-client.d.ts.map +1 -0
  67. package/dist/cli/lib/create-client.js +68 -0
  68. package/dist/cli/lib/create-client.js.map +1 -0
  69. package/dist/cli/lib/hooks.d.ts +5 -0
  70. package/dist/cli/lib/hooks.d.ts.map +1 -0
  71. package/dist/cli/lib/hooks.js +17 -0
  72. package/dist/cli/lib/hooks.js.map +1 -0
  73. package/dist/cli/preload.d.ts +6 -0
  74. package/dist/cli/preload.d.ts.map +1 -0
  75. package/dist/cli/preload.js +7 -0
  76. package/dist/cli/preload.js.map +1 -0
  77. package/dist/client.d.ts +89 -0
  78. package/dist/client.d.ts.map +1 -0
  79. package/dist/client.js +350 -0
  80. package/dist/client.js.map +1 -0
  81. package/dist/index.d.ts +20 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +33 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/lib/batch-runner.d.ts +39 -0
  86. package/dist/lib/batch-runner.d.ts.map +1 -0
  87. package/dist/lib/batch-runner.js +117 -0
  88. package/dist/lib/batch-runner.js.map +1 -0
  89. package/dist/lib/config-loader.d.ts +45 -0
  90. package/dist/lib/config-loader.d.ts.map +1 -0
  91. package/dist/lib/config-loader.js +357 -0
  92. package/dist/lib/config-loader.js.map +1 -0
  93. package/dist/lib/env-parser.d.ts +38 -0
  94. package/dist/lib/env-parser.d.ts.map +1 -0
  95. package/dist/lib/env-parser.js +281 -0
  96. package/dist/lib/env-parser.js.map +1 -0
  97. package/dist/lib/monorepo.d.ts +39 -0
  98. package/dist/lib/monorepo.d.ts.map +1 -0
  99. package/dist/lib/monorepo.js +181 -0
  100. package/dist/lib/monorepo.js.map +1 -0
  101. package/dist/lib/pattern-matcher.d.ts +5 -0
  102. package/dist/lib/pattern-matcher.d.ts.map +1 -0
  103. package/dist/lib/pattern-matcher.js +18 -0
  104. package/dist/lib/pattern-matcher.js.map +1 -0
  105. package/dist/lib/s3-key-loader.d.ts +33 -0
  106. package/dist/lib/s3-key-loader.d.ts.map +1 -0
  107. package/dist/lib/s3-key-loader.js +83 -0
  108. package/dist/lib/s3-key-loader.js.map +1 -0
  109. package/dist/lib/secret-patterns.d.ts +10 -0
  110. package/dist/lib/secret-patterns.d.ts.map +1 -0
  111. package/dist/lib/secret-patterns.js +27 -0
  112. package/dist/lib/secret-patterns.js.map +1 -0
  113. package/dist/load.d.ts +14 -0
  114. package/dist/load.d.ts.map +1 -0
  115. package/dist/load.js +15 -0
  116. package/dist/load.js.map +1 -0
  117. package/dist/loader.d.ts +63 -0
  118. package/dist/loader.d.ts.map +1 -0
  119. package/dist/loader.js +50 -0
  120. package/dist/loader.js.map +1 -0
  121. package/dist/mcp/index.d.ts +8 -0
  122. package/dist/mcp/index.d.ts.map +1 -0
  123. package/dist/mcp/index.js +14 -0
  124. package/dist/mcp/index.js.map +1 -0
  125. package/dist/mcp/preload.d.ts +6 -0
  126. package/dist/mcp/preload.d.ts.map +1 -0
  127. package/dist/mcp/preload.js +7 -0
  128. package/dist/mcp/preload.js.map +1 -0
  129. package/dist/mcp/resources.d.ts +23 -0
  130. package/dist/mcp/resources.d.ts.map +1 -0
  131. package/dist/mcp/resources.js +112 -0
  132. package/dist/mcp/resources.js.map +1 -0
  133. package/dist/mcp/server.d.ts +16 -0
  134. package/dist/mcp/server.d.ts.map +1 -0
  135. package/dist/mcp/server.js +81 -0
  136. package/dist/mcp/server.js.map +1 -0
  137. package/dist/mcp/tools.d.ts +20 -0
  138. package/dist/mcp/tools.d.ts.map +1 -0
  139. package/dist/mcp/tools.js +405 -0
  140. package/dist/mcp/tools.js.map +1 -0
  141. package/dist/types.d.ts +182 -0
  142. package/dist/types.d.ts.map +1 -0
  143. package/dist/types.js +37 -0
  144. package/dist/types.js.map +1 -0
  145. package/package.json +114 -0
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Shared helper for creating VaulterClient with fallback support
3
+ */
4
+ import type { CLIArgs, VaulterConfig } from '../../types.js';
5
+ import { VaulterClient } from '../../client.js';
6
+ export interface CreateClientOptions {
7
+ args: CLIArgs;
8
+ config: VaulterConfig | null;
9
+ verbose?: boolean;
10
+ }
11
+ /**
12
+ * Create a VaulterClient with proper fallback support
13
+ *
14
+ * Priority:
15
+ * 1. CLI --backend flag (single URL, no fallback)
16
+ * 2. Config backend.urls (multiple URLs with fallback)
17
+ * 3. Config backend.url (single URL)
18
+ * 4. Default filesystem backend
19
+ */
20
+ export declare function createClientFromConfig(options: CreateClientOptions): Promise<VaulterClient>;
21
+ //# sourceMappingURL=create-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-client.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/create-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAI/C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAiDjG"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Shared helper for creating VaulterClient with fallback support
3
+ */
4
+ import fs from 'node:fs';
5
+ import path from 'node:path';
6
+ import { VaulterClient } from '../../client.js';
7
+ import { loadEncryptionKey } from '../../lib/config-loader.js';
8
+ import { resolveBackendUrls } from '../../index.js';
9
+ /**
10
+ * Create a VaulterClient with proper fallback support
11
+ *
12
+ * Priority:
13
+ * 1. CLI --backend flag (single URL, no fallback)
14
+ * 2. Config backend.urls (multiple URLs with fallback)
15
+ * 3. Config backend.url (single URL)
16
+ * 4. Default filesystem backend
17
+ */
18
+ export async function createClientFromConfig(options) {
19
+ const { args, config, verbose = false } = options;
20
+ // CLI backend override takes precedence (no fallback)
21
+ const cliBackend = args.backend || args.b;
22
+ const cliKey = args.key || args.k;
23
+ let connectionStrings;
24
+ if (cliBackend) {
25
+ connectionStrings = [cliBackend];
26
+ }
27
+ else if (config) {
28
+ connectionStrings = resolveBackendUrls(config);
29
+ }
30
+ else {
31
+ connectionStrings = [];
32
+ }
33
+ // Load encryption key from CLI or config
34
+ let passphrase;
35
+ if (cliKey) {
36
+ const keyPath = path.resolve(cliKey);
37
+ if (fs.existsSync(keyPath)) {
38
+ const stat = fs.statSync(keyPath);
39
+ if (!stat.isFile()) {
40
+ throw new Error(`Encryption key path is not a file: ${keyPath}`);
41
+ }
42
+ passphrase = fs.readFileSync(keyPath, 'utf-8').trim() || undefined;
43
+ }
44
+ else {
45
+ passphrase = cliKey;
46
+ }
47
+ }
48
+ else {
49
+ passphrase = config ? (await loadEncryptionKey(config)) || undefined : undefined;
50
+ }
51
+ const hasRemoteBackend = connectionStrings.some(url => !isLocalBackend(url));
52
+ if (!passphrase && hasRemoteBackend) {
53
+ if (config?.security?.paranoid) {
54
+ throw new Error('No encryption key found. Set VAULTER_KEY or use --key.');
55
+ }
56
+ console.error('Warning: No encryption key found. Falling back to the default dev key. ' +
57
+ 'Set VAULTER_KEY or use --key to avoid insecure encryption.');
58
+ }
59
+ return new VaulterClient({
60
+ connectionStrings: connectionStrings.length > 0 ? connectionStrings : undefined,
61
+ passphrase: passphrase || undefined,
62
+ verbose
63
+ });
64
+ }
65
+ function isLocalBackend(url) {
66
+ return url.startsWith('file://') || url.startsWith('memory://');
67
+ }
68
+ //# sourceMappingURL=create-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-client.js","sourceRoot":"","sources":["../../../src/cli/lib/create-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAQnD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAA4B;IACvE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAEjD,sDAAsD;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAA;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAA;IAEjC,IAAI,iBAA2B,CAAA;IAC/B,IAAI,UAAU,EAAE,CAAC;QACf,iBAAiB,GAAG,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,iBAAiB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAChD,CAAC;SAAM,CAAC;QACN,iBAAiB,GAAG,EAAE,CAAA;IACxB,CAAC;IAED,yCAAyC;IACzC,IAAI,UAA8B,CAAA;IAClC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACpC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAA;YAClE,CAAC;YACD,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAA;QACpE,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,MAAM,CAAA;QACrB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;IAClF,CAAC;IAED,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;IAC5E,IAAI,CAAC,UAAU,IAAI,gBAAgB,EAAE,CAAC;QACpC,IAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;QAC3E,CAAC;QACD,OAAO,CAAC,KAAK,CACX,yEAAyE;YACzE,4DAA4D,CAC7D,CAAA;IACH,CAAC;IAED,OAAO,IAAI,aAAa,CAAC;QACvB,iBAAiB,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;QAC/E,UAAU,EAAE,UAAU,IAAI,SAAS;QACnC,OAAO;KACR,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;AACjE,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * CLI hook runner.
3
+ */
4
+ export declare function runHook(command: string | null | undefined, name: string, verbose: boolean): void;
5
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/hooks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAahG"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * CLI hook runner.
3
+ */
4
+ import { execSync } from 'node:child_process';
5
+ export function runHook(command, name, verbose) {
6
+ if (!command) {
7
+ return;
8
+ }
9
+ if (verbose) {
10
+ console.error(`Running ${name} hook: ${command}`);
11
+ }
12
+ execSync(command, {
13
+ stdio: 'inherit',
14
+ env: process.env
15
+ });
16
+ }
17
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/cli/lib/hooks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,MAAM,UAAU,OAAO,CAAC,OAAkC,EAAE,IAAY,EAAE,OAAgB;IACxF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAM;IACR,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,UAAU,OAAO,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,QAAQ,CAAC,OAAO,EAAE;QAChB,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Preload module - runs before any other imports
3
+ * Prevents MaxListenersExceededWarning from s3db.js dependencies
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=preload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../src/cli/preload.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Preload module - runs before any other imports
3
+ * Prevents MaxListenersExceededWarning from s3db.js dependencies
4
+ */
5
+ process.setMaxListeners(50);
6
+ export {};
7
+ //# sourceMappingURL=preload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.js","sourceRoot":"","sources":["../../src/cli/preload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Vaulter Client - s3db.js wrapper for environment variable storage
3
+ */
4
+ import type { EnvVar, EnvVarInput, Environment, ListOptions, VaulterClientOptions, SyncResult } from './types.js';
5
+ /**
6
+ * Vaulter Client
7
+ *
8
+ * Provides a high-level API for managing environment variables
9
+ * using s3db.js as the storage backend.
10
+ */
11
+ export declare class VaulterClient {
12
+ private db;
13
+ private resource;
14
+ private connectionStrings;
15
+ private activeConnectionString;
16
+ private passphrase;
17
+ private initialized;
18
+ private verbose;
19
+ constructor(options?: VaulterClientOptions);
20
+ /**
21
+ * Initialize the client and connect to the storage backend
22
+ * Tries each URL in order until one succeeds (fallback support)
23
+ */
24
+ connect(): Promise<void>;
25
+ /**
26
+ * Mask credentials in connection string for logging
27
+ */
28
+ private maskCredentials;
29
+ /**
30
+ * Ensure client is connected
31
+ */
32
+ private ensureConnected;
33
+ /**
34
+ * Get a single environment variable
35
+ */
36
+ get(key: string, project: string, environment: Environment, service?: string): Promise<EnvVar | null>;
37
+ /**
38
+ * Set an environment variable (create or update)
39
+ */
40
+ set(input: EnvVarInput): Promise<EnvVar>;
41
+ /**
42
+ * Delete an environment variable
43
+ */
44
+ delete(key: string, project: string, environment: Environment, service?: string): Promise<boolean>;
45
+ /**
46
+ * List environment variables
47
+ */
48
+ list(options?: ListOptions): Promise<EnvVar[]>;
49
+ /**
50
+ * Bulk insert environment variables
51
+ */
52
+ insertMany(inputs: EnvVarInput[]): Promise<EnvVar[]>;
53
+ /**
54
+ * Delete all variables for a project/environment
55
+ */
56
+ deleteAll(project: string, environment: Environment, service?: string): Promise<number>;
57
+ /**
58
+ * Export variables to a Record<string, string>
59
+ */
60
+ export(project: string, environment: Environment, service?: string): Promise<Record<string, string>>;
61
+ /**
62
+ * Sync variables from a Record<string, string>
63
+ * Returns sync statistics
64
+ * Optionally deletes remote keys that are missing from input
65
+ */
66
+ sync(vars: Record<string, string>, project: string, environment: Environment, service?: string, options?: {
67
+ source?: 'manual' | 'sync' | 'import';
68
+ deleteMissing?: boolean;
69
+ }): Promise<SyncResult>;
70
+ /**
71
+ * Close the connection
72
+ */
73
+ disconnect(): Promise<void>;
74
+ /**
75
+ * Check if client is connected
76
+ */
77
+ isConnected(): boolean;
78
+ /**
79
+ * Get the active connection string (the one that succeeded)
80
+ */
81
+ getConnectionString(): string;
82
+ /**
83
+ * Get all configured connection strings
84
+ */
85
+ getConnectionStrings(): string[];
86
+ }
87
+ export declare function createClient(options?: VaulterClientOptions): VaulterClient;
88
+ export default VaulterClient;
89
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,UAAU,EACX,MAAM,YAAY,CAAA;AAMnB;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,sBAAsB,CAAsB;IACpD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,oBAAyB;IAa9C;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyF9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACG,GAAG,CACP,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBzB;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAiC9C;;OAEG;IACG,MAAM,CACV,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;IAUnB;;OAEG;IACG,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA+BxD;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAW1D;;OAEG;IACG,SAAS,CACb,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;IAclB;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAWlC;;;;OAIG;IACG,IAAI,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAO,GAC/E,OAAO,CAAC,UAAU,CAAC;IA4DtB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;CAGjC;AAGD,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAE1E;AAGD,eAAe,aAAa,CAAA"}
package/dist/client.js ADDED
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Vaulter Client - s3db.js wrapper for environment variable storage
3
+ */
4
+ import { S3db } from 's3db.js';
5
+ // Default connection string for local development (FileSystem backend)
6
+ const DEFAULT_CONNECTION_STRING = `file://${process.env.HOME || '/tmp'}/.vaulter/store`;
7
+ const DEFAULT_PASSPHRASE = 'vaulter-default-dev-key';
8
+ /**
9
+ * Vaulter Client
10
+ *
11
+ * Provides a high-level API for managing environment variables
12
+ * using s3db.js as the storage backend.
13
+ */
14
+ export class VaulterClient {
15
+ db = null;
16
+ resource = null;
17
+ connectionStrings;
18
+ activeConnectionString = null;
19
+ passphrase;
20
+ initialized = false;
21
+ verbose;
22
+ constructor(options = {}) {
23
+ // Support single connectionString or array of connectionStrings
24
+ if (options.connectionStrings && options.connectionStrings.length > 0) {
25
+ this.connectionStrings = options.connectionStrings;
26
+ }
27
+ else if (options.connectionString) {
28
+ this.connectionStrings = [options.connectionString];
29
+ }
30
+ else {
31
+ this.connectionStrings = [DEFAULT_CONNECTION_STRING];
32
+ }
33
+ this.passphrase = options.passphrase || DEFAULT_PASSPHRASE;
34
+ this.verbose = options.verbose || false;
35
+ }
36
+ /**
37
+ * Initialize the client and connect to the storage backend
38
+ * Tries each URL in order until one succeeds (fallback support)
39
+ */
40
+ async connect() {
41
+ if (this.initialized)
42
+ return;
43
+ const errors = [];
44
+ for (const connectionString of this.connectionStrings) {
45
+ try {
46
+ if (this.verbose) {
47
+ console.error(`[vaulter] Trying backend: ${this.maskCredentials(connectionString)}`);
48
+ }
49
+ this.db = new S3db({
50
+ connectionString,
51
+ passphrase: this.passphrase
52
+ });
53
+ await this.db.connect();
54
+ // Create or get the environment-variables resource
55
+ this.resource = await this.db.createResource({
56
+ name: 'environment-variables',
57
+ attributes: {
58
+ key: 'string|required',
59
+ value: 'secret|required', // Auto-encrypted with AES-256-GCM
60
+ project: 'string|required',
61
+ service: 'string|optional',
62
+ environment: { type: 'string', enum: ['dev', 'stg', 'prd', 'sbx', 'dr'], required: true },
63
+ tags: 'array|items:string|optional',
64
+ metadata: {
65
+ description: 'string|optional',
66
+ owner: 'string|optional',
67
+ rotateAfter: 'date|optional',
68
+ source: { type: 'string', enum: ['manual', 'sync', 'import'], optional: true }
69
+ }
70
+ },
71
+ // Partitions for O(1) queries
72
+ partitions: {
73
+ byProject: {
74
+ fields: { project: 'string' }
75
+ },
76
+ byProjectEnv: {
77
+ fields: { project: 'string', environment: 'string' }
78
+ },
79
+ byProjectServiceEnv: {
80
+ fields: { project: 'string', service: 'string', environment: 'string' }
81
+ }
82
+ },
83
+ behavior: 'body-overflow', // Handle large values
84
+ timestamps: true,
85
+ asyncPartitions: true // Faster writes
86
+ });
87
+ // Success! Store the active connection string
88
+ this.activeConnectionString = connectionString;
89
+ this.initialized = true;
90
+ if (this.verbose) {
91
+ console.error(`[vaulter] Connected to: ${this.maskCredentials(connectionString)}`);
92
+ }
93
+ return; // Exit on first successful connection
94
+ }
95
+ catch (err) {
96
+ errors.push({ url: connectionString, error: err });
97
+ if (this.verbose) {
98
+ console.error(`[vaulter] Failed to connect to ${this.maskCredentials(connectionString)}: ${err.message}`);
99
+ }
100
+ // Clean up failed connection
101
+ if (this.db) {
102
+ try {
103
+ await this.db.disconnect();
104
+ }
105
+ catch {
106
+ // Ignore disconnect errors
107
+ }
108
+ this.db = null;
109
+ }
110
+ }
111
+ }
112
+ // All backends failed
113
+ const errorMessages = errors.map(e => ` - ${this.maskCredentials(e.url)}: ${e.error.message}`).join('\n');
114
+ throw new Error(`Failed to connect to any backend:\n${errorMessages}`);
115
+ }
116
+ /**
117
+ * Mask credentials in connection string for logging
118
+ */
119
+ maskCredentials(url) {
120
+ // Mask password in URLs like s3://key:secret@bucket or http://user:pass@host
121
+ return url.replace(/:([^:@/]+)@/, ':***@');
122
+ }
123
+ /**
124
+ * Ensure client is connected
125
+ */
126
+ ensureConnected() {
127
+ if (!this.initialized || !this.resource) {
128
+ throw new Error('VaulterClient not initialized. Call connect() first.');
129
+ }
130
+ }
131
+ /**
132
+ * Get a single environment variable
133
+ */
134
+ async get(key, project, environment, service) {
135
+ this.ensureConnected();
136
+ const partition = service ? 'byProjectServiceEnv' : 'byProjectEnv';
137
+ const partitionValues = service
138
+ ? { project, service, environment }
139
+ : { project, environment };
140
+ const results = await this.resource.list({
141
+ partition,
142
+ partitionValues
143
+ });
144
+ const found = results.find((item) => item.key === key);
145
+ return found || null;
146
+ }
147
+ /**
148
+ * Set an environment variable (create or update)
149
+ */
150
+ async set(input) {
151
+ this.ensureConnected();
152
+ const existing = await this.get(input.key, input.project, input.environment, input.service);
153
+ if (existing) {
154
+ // Update existing
155
+ return await this.resource.update(existing.id, {
156
+ value: input.value,
157
+ tags: input.tags,
158
+ metadata: {
159
+ ...existing.metadata,
160
+ ...input.metadata,
161
+ source: input.metadata?.source || 'manual'
162
+ }
163
+ });
164
+ }
165
+ else {
166
+ // Create new
167
+ return await this.resource.insert({
168
+ ...input,
169
+ metadata: {
170
+ ...input.metadata,
171
+ source: input.metadata?.source || 'manual'
172
+ }
173
+ });
174
+ }
175
+ }
176
+ /**
177
+ * Delete an environment variable
178
+ */
179
+ async delete(key, project, environment, service) {
180
+ this.ensureConnected();
181
+ const existing = await this.get(key, project, environment, service);
182
+ if (!existing)
183
+ return false;
184
+ await this.resource.delete(existing.id);
185
+ return true;
186
+ }
187
+ /**
188
+ * List environment variables
189
+ */
190
+ async list(options = {}) {
191
+ this.ensureConnected();
192
+ const { project, service, environment, limit, offset } = options;
193
+ // Determine partition based on provided filters
194
+ let partition;
195
+ let partitionValues;
196
+ if (project && service && environment) {
197
+ partition = 'byProjectServiceEnv';
198
+ partitionValues = { project, service, environment };
199
+ }
200
+ else if (project && environment) {
201
+ partition = 'byProjectEnv';
202
+ partitionValues = { project, environment };
203
+ }
204
+ else if (project) {
205
+ partition = 'byProject';
206
+ partitionValues = { project };
207
+ }
208
+ const listOptions = {};
209
+ if (partition && partitionValues) {
210
+ listOptions.partition = partition;
211
+ listOptions.partitionValues = partitionValues;
212
+ }
213
+ if (limit)
214
+ listOptions.limit = limit;
215
+ if (offset)
216
+ listOptions.offset = offset;
217
+ return await this.resource.list(listOptions);
218
+ }
219
+ /**
220
+ * Bulk insert environment variables
221
+ */
222
+ async insertMany(inputs) {
223
+ this.ensureConnected();
224
+ const results = [];
225
+ for (const input of inputs) {
226
+ const result = await this.set(input);
227
+ results.push(result);
228
+ }
229
+ return results;
230
+ }
231
+ /**
232
+ * Delete all variables for a project/environment
233
+ */
234
+ async deleteAll(project, environment, service) {
235
+ this.ensureConnected();
236
+ const vars = await this.list({ project, environment, service });
237
+ let deleted = 0;
238
+ for (const v of vars) {
239
+ await this.resource.delete(v.id);
240
+ deleted++;
241
+ }
242
+ return deleted;
243
+ }
244
+ /**
245
+ * Export variables to a Record<string, string>
246
+ */
247
+ async export(project, environment, service) {
248
+ const vars = await this.list({ project, environment, service });
249
+ const result = {};
250
+ for (const v of vars) {
251
+ result[v.key] = v.value;
252
+ }
253
+ return result;
254
+ }
255
+ /**
256
+ * Sync variables from a Record<string, string>
257
+ * Returns sync statistics
258
+ * Optionally deletes remote keys that are missing from input
259
+ */
260
+ async sync(vars, project, environment, service, options = {}) {
261
+ this.ensureConnected();
262
+ const existing = await this.list({ project, environment, service });
263
+ const existingMap = new Map(existing.map(v => [v.key, v]));
264
+ const deleteMissing = options.deleteMissing ?? false;
265
+ const result = {
266
+ added: [],
267
+ updated: [],
268
+ deleted: [],
269
+ unchanged: [],
270
+ conflicts: []
271
+ };
272
+ // Process new/updated vars
273
+ for (const [key, value] of Object.entries(vars)) {
274
+ const existingVar = existingMap.get(key);
275
+ if (!existingVar) {
276
+ // New variable
277
+ await this.set({
278
+ key,
279
+ value,
280
+ project,
281
+ environment,
282
+ service,
283
+ metadata: { source: options.source || 'sync' }
284
+ });
285
+ result.added.push(key);
286
+ }
287
+ else if (existingVar.value !== value) {
288
+ // Updated variable
289
+ await this.set({
290
+ key,
291
+ value,
292
+ project,
293
+ environment,
294
+ service,
295
+ metadata: { source: options.source || 'sync' }
296
+ });
297
+ result.updated.push(key);
298
+ }
299
+ else {
300
+ // Unchanged
301
+ result.unchanged.push(key);
302
+ }
303
+ existingMap.delete(key);
304
+ }
305
+ // Remaining are deleted (not in new vars)
306
+ if (deleteMissing) {
307
+ for (const [key, existingVar] of existingMap) {
308
+ await this.resource.delete(existingVar.id);
309
+ result.deleted.push(key);
310
+ }
311
+ }
312
+ return result;
313
+ }
314
+ /**
315
+ * Close the connection
316
+ */
317
+ async disconnect() {
318
+ if (this.db) {
319
+ await this.db.disconnect();
320
+ this.db = null;
321
+ this.resource = null;
322
+ this.initialized = false;
323
+ }
324
+ }
325
+ /**
326
+ * Check if client is connected
327
+ */
328
+ isConnected() {
329
+ return this.initialized;
330
+ }
331
+ /**
332
+ * Get the active connection string (the one that succeeded)
333
+ */
334
+ getConnectionString() {
335
+ return this.activeConnectionString || this.connectionStrings[0];
336
+ }
337
+ /**
338
+ * Get all configured connection strings
339
+ */
340
+ getConnectionStrings() {
341
+ return this.connectionStrings;
342
+ }
343
+ }
344
+ // Factory function for creating clients
345
+ export function createClient(options) {
346
+ return new VaulterClient(options);
347
+ }
348
+ // Default export
349
+ export default VaulterClient;
350
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAU9B,uEAAuE;AACvE,MAAM,yBAAyB,GAAG,UAAU,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,iBAAiB,CAAA;AACvF,MAAM,kBAAkB,GAAG,yBAAyB,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IAChB,EAAE,GAAgB,IAAI,CAAA;IACtB,QAAQ,GAAQ,IAAI,CAAA;IACpB,iBAAiB,CAAU;IAC3B,sBAAsB,GAAkB,IAAI,CAAA;IAC5C,UAAU,CAAQ;IAClB,WAAW,GAAG,KAAK,CAAA;IACnB,OAAO,CAAS;IAExB,YAAY,UAAgC,EAAE;QAC5C,gEAAgE;QAChE,IAAI,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAA;QACpD,CAAC;aAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACpC,IAAI,CAAC,iBAAiB,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QACrD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,iBAAiB,GAAG,CAAC,yBAAyB,CAAC,CAAA;QACtD,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,kBAAkB,CAAA;QAC1D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAA;IACzC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,WAAW;YAAE,OAAM;QAE5B,MAAM,MAAM,GAAyC,EAAE,CAAA;QAEvD,KAAK,MAAM,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,CAAC,KAAK,CAAC,6BAA6B,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;gBACtF,CAAC;gBAED,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;oBACjB,gBAAgB;oBAChB,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B,CAAC,CAAA;gBAEF,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAA;gBAEvB,mDAAmD;gBACnD,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;oBAC3C,IAAI,EAAE,uBAAuB;oBAE7B,UAAU,EAAE;wBACV,GAAG,EAAE,iBAAiB;wBACtB,KAAK,EAAE,iBAAiB,EAAE,kCAAkC;wBAC5D,OAAO,EAAE,iBAAiB;wBAC1B,OAAO,EAAE,iBAAiB;wBAC1B,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;wBACzF,IAAI,EAAE,6BAA6B;wBACnC,QAAQ,EAAE;4BACR,WAAW,EAAE,iBAAiB;4BAC9B,KAAK,EAAE,iBAAiB;4BACxB,WAAW,EAAE,eAAe;4BAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;yBAC/E;qBACF;oBAED,8BAA8B;oBAC9B,UAAU,EAAE;wBACV,SAAS,EAAE;4BACT,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;yBAC9B;wBACD,YAAY,EAAE;4BACZ,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;yBACrD;wBACD,mBAAmB,EAAE;4BACnB,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;yBACxE;qBACF;oBAED,QAAQ,EAAE,eAAe,EAAE,sBAAsB;oBACjD,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,IAAI,CAAC,gBAAgB;iBACvC,CAAC,CAAA;gBAEF,8CAA8C;gBAC9C,IAAI,CAAC,sBAAsB,GAAG,gBAAgB,CAAA;gBAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;gBAEvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;gBACpF,CAAC;gBAED,OAAM,CAAC,sCAAsC;YAE/C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAY,EAAE,CAAC,CAAA;gBAE3D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,CAAC,KAAK,CAAC,kCAAkC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;gBACtH,CAAC;gBAED,6BAA6B;gBAC7B,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;oBACZ,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAA;oBAC5B,CAAC;oBAAC,MAAM,CAAC;wBACP,2BAA2B;oBAC7B,CAAC;oBACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1G,MAAM,IAAI,KAAK,CAAC,sCAAsC,aAAa,EAAE,CAAC,CAAA;IACxE,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,GAAW;QACjC,6EAA6E;QAC7E,OAAO,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;QACzE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,GAAW,EACX,OAAe,EACf,WAAwB,EACxB,OAAgB;QAEhB,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc,CAAA;QAClE,MAAM,eAAe,GAAG,OAAO;YAC7B,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE;YACnC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAE5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvC,SAAS;YACT,eAAe;SAChB,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA;QAC9D,OAAO,KAAK,IAAI,IAAI,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,KAAkB;QAC1B,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAC7B,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,OAAO,CACd,CAAA;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,kBAAkB;YAClB,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAC7C,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE;oBACR,GAAG,QAAQ,CAAC,QAAQ;oBACpB,GAAG,KAAK,CAAC,QAAQ;oBACjB,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,QAAQ;iBAC3C;aACF,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,aAAa;YACb,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAChC,GAAG,KAAK;gBACR,QAAQ,EAAE;oBACR,GAAG,KAAK,CAAC,QAAQ;oBACjB,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,QAAQ;iBAC3C;aACF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,GAAW,EACX,OAAe,EACf,WAAwB,EACxB,OAAgB;QAEhB,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;QACnE,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAA;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACvC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,UAAuB,EAAE;QAClC,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QAEhE,gDAAgD;QAChD,IAAI,SAA6B,CAAA;QACjC,IAAI,eAAmD,CAAA;QAEvD,IAAI,OAAO,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;YACtC,SAAS,GAAG,qBAAqB,CAAA;YACjC,eAAe,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QACrD,CAAC;aAAM,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,SAAS,GAAG,cAAc,CAAA;YAC1B,eAAe,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QAC5C,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,SAAS,GAAG,WAAW,CAAA;YACvB,eAAe,GAAG,EAAE,OAAO,EAAE,CAAA;QAC/B,CAAC;QAED,MAAM,WAAW,GAAQ,EAAE,CAAA;QAC3B,IAAI,SAAS,IAAI,eAAe,EAAE,CAAC;YACjC,WAAW,CAAC,SAAS,GAAG,SAAS,CAAA;YACjC,WAAW,CAAC,eAAe,GAAG,eAAe,CAAA;QAC/C,CAAC;QACD,IAAI,KAAK;YAAE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAA;QACpC,IAAI,MAAM;YAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAA;QAEvC,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAqB;QACpC,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACpC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtB,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,OAAe,EACf,WAAwB,EACxB,OAAgB;QAEhB,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAA;QAC/D,IAAI,OAAO,GAAG,CAAC,CAAA;QAEf,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAChC,OAAO,EAAE,CAAA;QACX,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,OAAe,EACf,WAAwB,EACxB,OAAgB;QAEhB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAA;QAC/D,MAAM,MAAM,GAA2B,EAAE,CAAA;QAEzC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAA;QACzB,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CACR,IAA4B,EAC5B,OAAe,EACf,WAAwB,EACxB,OAAgB,EAChB,UAA8E,EAAE;QAEhF,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAA;QACnE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK,CAAA;QAEpD,MAAM,MAAM,GAAe;YACzB,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;SACd,CAAA;QAED,2BAA2B;QAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAExC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,eAAe;gBACf,MAAM,IAAI,CAAC,GAAG,CAAC;oBACb,GAAG;oBACH,KAAK;oBACL,OAAO;oBACP,WAAW;oBACX,OAAO;oBACP,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE;iBAC/C,CAAC,CAAA;gBACF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;iBAAM,IAAI,WAAW,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACvC,mBAAmB;gBACnB,MAAM,IAAI,CAAC,GAAG,CAAC;oBACb,GAAG;oBACH,KAAK;oBACL,OAAO;oBACP,WAAW;oBACX,OAAO;oBACP,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,EAAE;iBAC/C,CAAC,CAAA;gBACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC1B,CAAC;iBAAM,CAAC;gBACN,YAAY;gBACZ,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC5B,CAAC;YAED,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;QAED,0CAA0C;QAC1C,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC7C,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;gBAC1C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAA;YAC1B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;YACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;YACpB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;IACjE,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAA;IAC/B,CAAC;CACF;AAED,wCAAwC;AACxC,MAAM,UAAU,YAAY,CAAC,OAA8B;IACzD,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC;AAED,iBAAiB;AACjB,eAAe,aAAa,CAAA"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Vaulter - Multi-backend environment variable and secrets manager
3
+ *
4
+ * Main library exports for programmatic usage
5
+ */
6
+ export { VaulterClient, createClient } from './client.js';
7
+ export type { VaulterClientOptions, ListOptions, SyncResult } from './types.js';
8
+ export type { Environment, EnvVar, EnvVarInput, EnvVarMetadata, VaulterConfig, ExportFormat } from './types.js';
9
+ export { ENVIRONMENTS, ENVIRONMENT_NAMES, EXPORT_FORMATS, DEFAULT_SECRET_PATTERNS } from './types.js';
10
+ export { loadConfig, findConfigDir, getProjectName, configExists, loadEncryptionKey, createDefaultConfig } from './lib/config-loader.js';
11
+ import type { VaulterConfig } from './types.js';
12
+ /**
13
+ * Resolve backend URLs from config
14
+ * Supports both single `url` and multiple `urls` with fallback
15
+ */
16
+ export declare function resolveBackendUrls(config: VaulterConfig): string[];
17
+ export { parseEnvFile, parseEnvString, serializeEnv, hasStdinData, parseEnvFromStdin } from './lib/env-parser.js';
18
+ export { loader, parse } from './loader.js';
19
+ export type { LoaderOptions } from './loader.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACzD,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG/E,YAAY,EACV,WAAW,EACX,MAAM,EACN,WAAW,EACX,cAAc,EACd,aAAa,EACb,YAAY,EACb,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAGrG,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAgBlE;AAGD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,iBAAiB,EAClB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC3C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA"}