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.
- package/LICENSE +21 -0
- package/README.md +490 -0
- package/dist/bin/minienv-mcp.cjs +17 -0
- package/dist/bin/minienv.cjs +146 -0
- package/dist/cli/commands/delete.d.ts +22 -0
- package/dist/cli/commands/delete.d.ts.map +1 -0
- package/dist/cli/commands/delete.js +85 -0
- package/dist/cli/commands/delete.js.map +1 -0
- package/dist/cli/commands/export.d.ts +21 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +126 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/get.d.ts +21 -0
- package/dist/cli/commands/get.d.ts.map +1 -0
- package/dist/cli/commands/get.js +62 -0
- package/dist/cli/commands/get.js.map +1 -0
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +98 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/integrations/helm.d.ts +21 -0
- package/dist/cli/commands/integrations/helm.d.ts.map +1 -0
- package/dist/cli/commands/integrations/helm.js +113 -0
- package/dist/cli/commands/integrations/helm.js.map +1 -0
- package/dist/cli/commands/integrations/kubernetes.d.ts +25 -0
- package/dist/cli/commands/integrations/kubernetes.d.ts.map +1 -0
- package/dist/cli/commands/integrations/kubernetes.js +199 -0
- package/dist/cli/commands/integrations/kubernetes.js.map +1 -0
- package/dist/cli/commands/integrations/terraform.d.ts +25 -0
- package/dist/cli/commands/integrations/terraform.d.ts.map +1 -0
- package/dist/cli/commands/integrations/terraform.js +131 -0
- package/dist/cli/commands/integrations/terraform.js.map +1 -0
- package/dist/cli/commands/key.d.ts +19 -0
- package/dist/cli/commands/key.d.ts.map +1 -0
- package/dist/cli/commands/key.js +247 -0
- package/dist/cli/commands/key.js.map +1 -0
- package/dist/cli/commands/list.d.ts +21 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +94 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/pull.d.ts +22 -0
- package/dist/cli/commands/pull.d.ts.map +1 -0
- package/dist/cli/commands/pull.js +142 -0
- package/dist/cli/commands/pull.js.map +1 -0
- package/dist/cli/commands/push.d.ts +22 -0
- package/dist/cli/commands/push.d.ts.map +1 -0
- package/dist/cli/commands/push.js +181 -0
- package/dist/cli/commands/push.js.map +1 -0
- package/dist/cli/commands/services.d.ts +18 -0
- package/dist/cli/commands/services.d.ts.map +1 -0
- package/dist/cli/commands/services.js +92 -0
- package/dist/cli/commands/services.js.map +1 -0
- package/dist/cli/commands/set.d.ts +22 -0
- package/dist/cli/commands/set.d.ts.map +1 -0
- package/dist/cli/commands/set.js +93 -0
- package/dist/cli/commands/set.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +23 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +362 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +266 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/lib/create-client.d.ts +21 -0
- package/dist/cli/lib/create-client.d.ts.map +1 -0
- package/dist/cli/lib/create-client.js +68 -0
- package/dist/cli/lib/create-client.js.map +1 -0
- package/dist/cli/lib/hooks.d.ts +5 -0
- package/dist/cli/lib/hooks.d.ts.map +1 -0
- package/dist/cli/lib/hooks.js +17 -0
- package/dist/cli/lib/hooks.js.map +1 -0
- package/dist/cli/preload.d.ts +6 -0
- package/dist/cli/preload.d.ts.map +1 -0
- package/dist/cli/preload.js +7 -0
- package/dist/cli/preload.js.map +1 -0
- package/dist/client.d.ts +89 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +350 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/batch-runner.d.ts +39 -0
- package/dist/lib/batch-runner.d.ts.map +1 -0
- package/dist/lib/batch-runner.js +117 -0
- package/dist/lib/batch-runner.js.map +1 -0
- package/dist/lib/config-loader.d.ts +45 -0
- package/dist/lib/config-loader.d.ts.map +1 -0
- package/dist/lib/config-loader.js +357 -0
- package/dist/lib/config-loader.js.map +1 -0
- package/dist/lib/env-parser.d.ts +38 -0
- package/dist/lib/env-parser.d.ts.map +1 -0
- package/dist/lib/env-parser.js +281 -0
- package/dist/lib/env-parser.js.map +1 -0
- package/dist/lib/monorepo.d.ts +39 -0
- package/dist/lib/monorepo.d.ts.map +1 -0
- package/dist/lib/monorepo.js +181 -0
- package/dist/lib/monorepo.js.map +1 -0
- package/dist/lib/pattern-matcher.d.ts +5 -0
- package/dist/lib/pattern-matcher.d.ts.map +1 -0
- package/dist/lib/pattern-matcher.js +18 -0
- package/dist/lib/pattern-matcher.js.map +1 -0
- package/dist/lib/s3-key-loader.d.ts +33 -0
- package/dist/lib/s3-key-loader.d.ts.map +1 -0
- package/dist/lib/s3-key-loader.js +83 -0
- package/dist/lib/s3-key-loader.js.map +1 -0
- package/dist/lib/secret-patterns.d.ts +10 -0
- package/dist/lib/secret-patterns.d.ts.map +1 -0
- package/dist/lib/secret-patterns.js +27 -0
- package/dist/lib/secret-patterns.js.map +1 -0
- package/dist/load.d.ts +14 -0
- package/dist/load.d.ts.map +1 -0
- package/dist/load.js +15 -0
- package/dist/load.js.map +1 -0
- package/dist/loader.d.ts +63 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +50 -0
- package/dist/loader.js.map +1 -0
- package/dist/mcp/index.d.ts +8 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +14 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/preload.d.ts +6 -0
- package/dist/mcp/preload.d.ts.map +1 -0
- package/dist/mcp/preload.js +7 -0
- package/dist/mcp/preload.js.map +1 -0
- package/dist/mcp/resources.d.ts +23 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +112 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +16 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +81 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +20 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +405 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/types.d.ts +182 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +37 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../src/cli/preload.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -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"}
|
package/dist/client.d.ts
ADDED
|
@@ -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":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|