voltenv-sdk 1.0.0 → 1.1.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/README.md +62 -0
- package/dist/index.d.ts +96 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +283 -11
- package/dist/index.js.map +1 -1
- package/dist/utilities/cacheService.d.ts +21 -6
- package/dist/utilities/cacheService.d.ts.map +1 -1
- package/dist/utilities/cacheService.js +36 -9
- package/dist/utilities/cacheService.js.map +1 -1
- package/dist/utilities/errorHandler.d.ts +2 -0
- package/dist/utilities/errorHandler.d.ts.map +1 -1
- package/dist/utilities/errorHandler.js.map +1 -1
- package/index.ts +292 -11
- package/jest.config.js +9 -0
- package/package.json +36 -29
- package/utilities/cacheService.ts +49 -12
- package/utilities/errorHandler.ts +3 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/verify.ts +0 -18
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# VoltEnv Node.js SDK
|
|
2
|
+
|
|
3
|
+
TypeScript SDK for VoltEnv - The Environment Variable Management System.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install voltenv-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
### Initialization
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import VoltEnv from 'voltenv-sdk';
|
|
17
|
+
|
|
18
|
+
const voltenv = new VoltEnv({
|
|
19
|
+
apiKey: 'your_api_key',
|
|
20
|
+
// Optional
|
|
21
|
+
baseURL: 'https://api.voltenv.com', // Defaults to official API
|
|
22
|
+
cache: true, // Enable local caching (default: true)
|
|
23
|
+
timeout: 5000 // Request timeout in ms
|
|
24
|
+
});
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Get a Variable
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
// Get a specific variable from an environment
|
|
31
|
+
const port = await voltenv.get('development', 'PORT', '3000');
|
|
32
|
+
console.log(port); // Returns value or default '3000'
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Get All Variables
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
// Get all variables for an environment
|
|
39
|
+
const variables = await voltenv.all('development');
|
|
40
|
+
console.log(variables);
|
|
41
|
+
// { PORT: "3000", DB_HOST: "localhost", ... }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Set a Variable
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
await voltenv.set('development', 'API_KEY', 'secret-value');
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Delete a Variable
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
await voltenv.delete('development', 'API_KEY');
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Caching
|
|
57
|
+
The SDK includes a built-in LRU cache to minimize API requests. You can manually sync/refresh the cache:
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
// Force refresh all variables for an environment from the server
|
|
61
|
+
await voltenv.sync('development');
|
|
62
|
+
```
|
package/dist/index.d.ts
CHANGED
|
@@ -2,11 +2,24 @@ import { VoltEnvOptions } from './utilities/errorHandler';
|
|
|
2
2
|
export declare class VoltEnv {
|
|
3
3
|
private httpClient;
|
|
4
4
|
private cacheService;
|
|
5
|
+
private resolvedPrefix;
|
|
5
6
|
/**
|
|
6
7
|
* Initialize the VoltEnv SDK
|
|
7
8
|
* @param options Configuration options or API key string
|
|
8
9
|
*/
|
|
9
10
|
constructor(options: VoltEnvOptions | string);
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the prefix based on framework or explicit option
|
|
13
|
+
*/
|
|
14
|
+
private resolvePrefix;
|
|
15
|
+
/**
|
|
16
|
+
* Try to detect the framework from package.json
|
|
17
|
+
*/
|
|
18
|
+
private detectFramework;
|
|
19
|
+
/**
|
|
20
|
+
* Apply prefix to a key if it's missing
|
|
21
|
+
*/
|
|
22
|
+
private applyPrefix;
|
|
10
23
|
/**
|
|
11
24
|
* Get a variable from a specific environment
|
|
12
25
|
* @param environment The environment name (e.g., 'production', 'development')
|
|
@@ -28,6 +41,21 @@ export declare class VoltEnv {
|
|
|
28
41
|
* @param value The variable value
|
|
29
42
|
*/
|
|
30
43
|
set(environment: string, key: string, value: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Set a secret variable in a specific environment
|
|
46
|
+
* @param environment The environment name
|
|
47
|
+
* @param key The variable key
|
|
48
|
+
* @param value The secret value
|
|
49
|
+
*/
|
|
50
|
+
setSecret(environment: string, key: string, value: string): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Watch for changes in an environment
|
|
53
|
+
* @param environment The environment name
|
|
54
|
+
* @param callback Function to call when changes occur
|
|
55
|
+
* @param interval Polling interval in milliseconds (default: 30000)
|
|
56
|
+
* @returns A function to stop watching
|
|
57
|
+
*/
|
|
58
|
+
watch(environment: string, callback: (variables: Record<string, string>) => void, interval?: number): () => void;
|
|
31
59
|
/**
|
|
32
60
|
* Set multiple variables at once
|
|
33
61
|
* @param environment The environment name
|
|
@@ -46,11 +74,68 @@ export declare class VoltEnv {
|
|
|
46
74
|
* @param keys Array of keys to delete
|
|
47
75
|
*/
|
|
48
76
|
deleteMany(environment: string, keys: string[]): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Get metadata for a specific variable
|
|
79
|
+
* @param environment The environment name
|
|
80
|
+
* @param key The variable key
|
|
81
|
+
*/
|
|
82
|
+
getMetadata(environment: string, key: string): Promise<Record<string, any>>;
|
|
83
|
+
/**
|
|
84
|
+
* Get the audit history of a variable
|
|
85
|
+
* @param environment The environment name
|
|
86
|
+
* @param key The variable key
|
|
87
|
+
*/
|
|
88
|
+
getHistory(environment: string, key: string): Promise<any[]>;
|
|
89
|
+
/**
|
|
90
|
+
* Export all variables in an environment to a .env file
|
|
91
|
+
* @param environment The environment name
|
|
92
|
+
* @param filePath Path to the .env file to create/overwrite
|
|
93
|
+
*/
|
|
94
|
+
exportToEnvFile(environment: string, filePath: string): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Load variables from a .env file and set them in an environment
|
|
97
|
+
* @param environment The environment name
|
|
98
|
+
* @param filePath Path to the .env file to read from
|
|
99
|
+
*/
|
|
100
|
+
loadFromEnvFile(environment: string, filePath: string): Promise<void>;
|
|
49
101
|
/**
|
|
50
102
|
* List all environments accessible by this API key
|
|
51
103
|
* @returns Array of environment names
|
|
52
104
|
*/
|
|
53
105
|
listEnvironments(): Promise<string[]>;
|
|
106
|
+
/**
|
|
107
|
+
* Create a new environment
|
|
108
|
+
* @param name The name of the environment
|
|
109
|
+
* @param options Optional configuration for the environment
|
|
110
|
+
*/
|
|
111
|
+
createEnvironment(name: string, options?: Record<string, any>): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Update an existing environment
|
|
114
|
+
* @param name The current name of the environment
|
|
115
|
+
* @param update Data to update (e.g., { name: 'new-name' })
|
|
116
|
+
*/
|
|
117
|
+
updateEnvironment(name: string, update: Record<string, any>): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Delete an environment
|
|
120
|
+
* @param name The name of the environment to delete
|
|
121
|
+
*/
|
|
122
|
+
deleteEnvironment(name: string): Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* List all team members in the project
|
|
125
|
+
* @returns Array of team member objects
|
|
126
|
+
*/
|
|
127
|
+
listTeamMembers(): Promise<any[]>;
|
|
128
|
+
/**
|
|
129
|
+
* Invite a new team member
|
|
130
|
+
* @param email The email address of the person to invite
|
|
131
|
+
* @param role The role to assign (e.g., 'admin', 'viewer')
|
|
132
|
+
*/
|
|
133
|
+
inviteTeamMember(email: string, role: string): Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* Remove a team member
|
|
136
|
+
* @param email The email address of the person to remove
|
|
137
|
+
*/
|
|
138
|
+
removeTeamMember(email: string): Promise<void>;
|
|
54
139
|
/**
|
|
55
140
|
* Sync/refresh variables from server (bypassing cache)
|
|
56
141
|
*If an environment is provided, it only syncs that environment.
|
|
@@ -58,6 +143,17 @@ export declare class VoltEnv {
|
|
|
58
143
|
* @param environment Optional environment to sync
|
|
59
144
|
*/
|
|
60
145
|
sync(environment?: string): Promise<void>;
|
|
146
|
+
/**
|
|
147
|
+
* Get all cached keys (for debugging)
|
|
148
|
+
*/
|
|
149
|
+
getCacheKeys(): string[];
|
|
150
|
+
/**
|
|
151
|
+
* Get cache statistics
|
|
152
|
+
*/
|
|
153
|
+
getCacheStats(): {
|
|
154
|
+
size: number;
|
|
155
|
+
keys: string[];
|
|
156
|
+
};
|
|
61
157
|
}
|
|
62
158
|
export default VoltEnv;
|
|
63
159
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.VoltEnv = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
4
39
|
const errorHandler_1 = require("./utilities/errorHandler");
|
|
5
40
|
const httpClient_1 = require("./utilities/httpClient");
|
|
6
41
|
const cacheService_1 = require("./utilities/cacheService");
|
|
@@ -10,10 +45,11 @@ class VoltEnv {
|
|
|
10
45
|
* @param options Configuration options or API key string
|
|
11
46
|
*/
|
|
12
47
|
constructor(options) {
|
|
48
|
+
this.resolvedPrefix = '';
|
|
13
49
|
const config = typeof options === 'string'
|
|
14
50
|
? { apiKey: options }
|
|
15
51
|
: options;
|
|
16
|
-
const { apiKey, baseURL = 'https://api.voltenv.com', timeout = 5000, cache = true, onError } = config;
|
|
52
|
+
const { apiKey, baseURL = 'https://api.voltenv.com', timeout = 5000, cache = true, onError, framework, prefix } = config;
|
|
17
53
|
this.httpClient = new httpClient_1.HttpClient({
|
|
18
54
|
apiKey,
|
|
19
55
|
baseURL,
|
|
@@ -21,6 +57,53 @@ class VoltEnv {
|
|
|
21
57
|
onError
|
|
22
58
|
});
|
|
23
59
|
this.cacheService = cache ? new cacheService_1.CacheService() : null;
|
|
60
|
+
this.resolvedPrefix = this.resolvePrefix(framework, prefix);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Resolve the prefix based on framework or explicit option
|
|
64
|
+
*/
|
|
65
|
+
resolvePrefix(framework, explicitPrefix) {
|
|
66
|
+
if (explicitPrefix !== undefined)
|
|
67
|
+
return explicitPrefix;
|
|
68
|
+
const fw = framework || this.detectFramework();
|
|
69
|
+
switch (fw) {
|
|
70
|
+
case 'vite': return 'VITE_';
|
|
71
|
+
case 'nextjs': return 'NEXT_PUBLIC_';
|
|
72
|
+
case 'cra': return 'REACT_APP_';
|
|
73
|
+
default: return '';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Try to detect the framework from package.json
|
|
78
|
+
*/
|
|
79
|
+
detectFramework() {
|
|
80
|
+
try {
|
|
81
|
+
const packageJsonPath = path.join(process.cwd(), 'package.json');
|
|
82
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
83
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
84
|
+
const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
|
|
85
|
+
if (deps['vite'])
|
|
86
|
+
return 'vite';
|
|
87
|
+
if (deps['next'])
|
|
88
|
+
return 'nextjs';
|
|
89
|
+
if (deps['react-scripts'])
|
|
90
|
+
return 'cra';
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
// Silently fail and return empty string if package.json cannot be read/parsed
|
|
95
|
+
}
|
|
96
|
+
return '';
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Apply prefix to a key if it's missing
|
|
100
|
+
*/
|
|
101
|
+
applyPrefix(key) {
|
|
102
|
+
if (!this.resolvedPrefix)
|
|
103
|
+
return key;
|
|
104
|
+
if (key.startsWith(this.resolvedPrefix))
|
|
105
|
+
return key;
|
|
106
|
+
return `${this.resolvedPrefix}${key}`;
|
|
24
107
|
}
|
|
25
108
|
/**
|
|
26
109
|
* Get a variable from a specific environment
|
|
@@ -30,12 +113,13 @@ class VoltEnv {
|
|
|
30
113
|
* @returns The variable value or the default value
|
|
31
114
|
*/
|
|
32
115
|
async get(environment, key, defaultValue) {
|
|
33
|
-
const
|
|
116
|
+
const prefixedKey = this.applyPrefix(key);
|
|
117
|
+
const cacheKey = `${environment}:${prefixedKey}`;
|
|
34
118
|
if (this.cacheService?.has(cacheKey)) {
|
|
35
119
|
return this.cacheService.get(cacheKey);
|
|
36
120
|
}
|
|
37
121
|
try {
|
|
38
|
-
const data = await this.httpClient.get(`/v1/variables/${environment}/${
|
|
122
|
+
const data = await this.httpClient.get(`/v1/variables/${environment}/${prefixedKey}`);
|
|
39
123
|
const value = data.value;
|
|
40
124
|
if (value && this.cacheService) {
|
|
41
125
|
this.cacheService.set(cacheKey, value);
|
|
@@ -71,24 +155,72 @@ class VoltEnv {
|
|
|
71
155
|
* @param value The variable value
|
|
72
156
|
*/
|
|
73
157
|
async set(environment, key, value) {
|
|
74
|
-
|
|
158
|
+
const prefixedKey = this.applyPrefix(key);
|
|
159
|
+
await this.httpClient.put(`/v1/variables/${environment}/${prefixedKey}`, {
|
|
75
160
|
value,
|
|
76
161
|
});
|
|
77
162
|
if (this.cacheService) {
|
|
78
|
-
this.cacheService.set(`${environment}:${
|
|
163
|
+
this.cacheService.set(`${environment}:${prefixedKey}`, value);
|
|
79
164
|
}
|
|
80
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* Set a secret variable in a specific environment
|
|
168
|
+
* @param environment The environment name
|
|
169
|
+
* @param key The variable key
|
|
170
|
+
* @param value The secret value
|
|
171
|
+
*/
|
|
172
|
+
async setSecret(environment, key, value) {
|
|
173
|
+
const prefixedKey = this.applyPrefix(key);
|
|
174
|
+
await this.httpClient.put(`/v1/variables/${environment}/${prefixedKey}`, {
|
|
175
|
+
value,
|
|
176
|
+
isSecret: true
|
|
177
|
+
});
|
|
178
|
+
if (this.cacheService) {
|
|
179
|
+
this.cacheService.set(`${environment}:${prefixedKey}`, value);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Watch for changes in an environment
|
|
184
|
+
* @param environment The environment name
|
|
185
|
+
* @param callback Function to call when changes occur
|
|
186
|
+
* @param interval Polling interval in milliseconds (default: 30000)
|
|
187
|
+
* @returns A function to stop watching
|
|
188
|
+
*/
|
|
189
|
+
watch(environment, callback, interval = 30000) {
|
|
190
|
+
let previousVariables = '';
|
|
191
|
+
const fetchAndCompare = async () => {
|
|
192
|
+
try {
|
|
193
|
+
const variables = await this.getAll(environment);
|
|
194
|
+
const currentVariables = JSON.stringify(variables);
|
|
195
|
+
if (currentVariables !== previousVariables) {
|
|
196
|
+
previousVariables = currentVariables;
|
|
197
|
+
callback(variables);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
console.error(`Error in VoltEnv watcher for ${environment}:`, error);
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
// Initial fetch
|
|
205
|
+
fetchAndCompare();
|
|
206
|
+
const timer = setInterval(fetchAndCompare, interval);
|
|
207
|
+
return () => clearInterval(timer);
|
|
208
|
+
}
|
|
81
209
|
/**
|
|
82
210
|
* Set multiple variables at once
|
|
83
211
|
* @param environment The environment name
|
|
84
212
|
* @param variables A record of key-value pairs to set
|
|
85
213
|
*/
|
|
86
214
|
async setMany(environment, variables) {
|
|
215
|
+
const prefixedVariables = {};
|
|
216
|
+
Object.entries(variables).forEach(([key, value]) => {
|
|
217
|
+
prefixedVariables[this.applyPrefix(key)] = value;
|
|
218
|
+
});
|
|
87
219
|
await this.httpClient.post(`/v1/variables/${environment}/batch`, {
|
|
88
|
-
variables,
|
|
220
|
+
variables: prefixedVariables,
|
|
89
221
|
});
|
|
90
222
|
if (this.cacheService) {
|
|
91
|
-
Object.entries(
|
|
223
|
+
Object.entries(prefixedVariables).forEach(([key, value]) => {
|
|
92
224
|
this.cacheService.set(`${environment}:${key}`, value);
|
|
93
225
|
});
|
|
94
226
|
}
|
|
@@ -99,9 +231,10 @@ class VoltEnv {
|
|
|
99
231
|
* @param key The variable key
|
|
100
232
|
*/
|
|
101
233
|
async delete(environment, key) {
|
|
102
|
-
|
|
234
|
+
const prefixedKey = this.applyPrefix(key);
|
|
235
|
+
await this.httpClient.delete(`/v1/variables/${environment}/${prefixedKey}`);
|
|
103
236
|
if (this.cacheService) {
|
|
104
|
-
this.cacheService.delete(`${environment}:${
|
|
237
|
+
this.cacheService.delete(`${environment}:${prefixedKey}`);
|
|
105
238
|
}
|
|
106
239
|
}
|
|
107
240
|
/**
|
|
@@ -110,15 +243,78 @@ class VoltEnv {
|
|
|
110
243
|
* @param keys Array of keys to delete
|
|
111
244
|
*/
|
|
112
245
|
async deleteMany(environment, keys) {
|
|
246
|
+
const prefixedKeys = keys.map(k => this.applyPrefix(k));
|
|
113
247
|
await this.httpClient.post(`/v1/variables/${environment}/batch-delete`, {
|
|
114
|
-
keys,
|
|
248
|
+
keys: prefixedKeys,
|
|
115
249
|
});
|
|
116
250
|
if (this.cacheService) {
|
|
117
|
-
|
|
251
|
+
prefixedKeys.forEach(key => {
|
|
118
252
|
this.cacheService.delete(`${environment}:${key}`);
|
|
119
253
|
});
|
|
120
254
|
}
|
|
121
255
|
}
|
|
256
|
+
/**
|
|
257
|
+
* Get metadata for a specific variable
|
|
258
|
+
* @param environment The environment name
|
|
259
|
+
* @param key The variable key
|
|
260
|
+
*/
|
|
261
|
+
async getMetadata(environment, key) {
|
|
262
|
+
const prefixedKey = this.applyPrefix(key);
|
|
263
|
+
const data = await this.httpClient.get(`/v1/variables/${environment}/${prefixedKey}/metadata`);
|
|
264
|
+
return data;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get the audit history of a variable
|
|
268
|
+
* @param environment The environment name
|
|
269
|
+
* @param key The variable key
|
|
270
|
+
*/
|
|
271
|
+
async getHistory(environment, key) {
|
|
272
|
+
const prefixedKey = this.applyPrefix(key);
|
|
273
|
+
const data = await this.httpClient.get(`/v1/variables/${environment}/${prefixedKey}/history`);
|
|
274
|
+
return data.history;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Export all variables in an environment to a .env file
|
|
278
|
+
* @param environment The environment name
|
|
279
|
+
* @param filePath Path to the .env file to create/overwrite
|
|
280
|
+
*/
|
|
281
|
+
async exportToEnvFile(environment, filePath) {
|
|
282
|
+
const variables = await this.getAll(environment);
|
|
283
|
+
const content = Object.entries(variables)
|
|
284
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
285
|
+
.join('\n');
|
|
286
|
+
const absolutePath = path.isAbsolute(filePath)
|
|
287
|
+
? filePath
|
|
288
|
+
: path.join(process.cwd(), filePath);
|
|
289
|
+
fs.writeFileSync(absolutePath, content, 'utf8');
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Load variables from a .env file and set them in an environment
|
|
293
|
+
* @param environment The environment name
|
|
294
|
+
* @param filePath Path to the .env file to read from
|
|
295
|
+
*/
|
|
296
|
+
async loadFromEnvFile(environment, filePath) {
|
|
297
|
+
const absolutePath = path.isAbsolute(filePath)
|
|
298
|
+
? filePath
|
|
299
|
+
: path.join(process.cwd(), filePath);
|
|
300
|
+
if (!fs.existsSync(absolutePath)) {
|
|
301
|
+
throw new Error(`File not found: ${absolutePath}`);
|
|
302
|
+
}
|
|
303
|
+
const content = fs.readFileSync(absolutePath, 'utf8');
|
|
304
|
+
const variables = {};
|
|
305
|
+
content.split(/\r?\n/).forEach(line => {
|
|
306
|
+
const trimmedLine = line.trim();
|
|
307
|
+
if (trimmedLine && !trimmedLine.startsWith('#')) {
|
|
308
|
+
const [key, ...valueParts] = trimmedLine.split('=');
|
|
309
|
+
if (key) {
|
|
310
|
+
variables[key.trim()] = valueParts.join('=').trim();
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
if (Object.keys(variables).length > 0) {
|
|
315
|
+
await this.setMany(environment, variables);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
122
318
|
/**
|
|
123
319
|
* List all environments accessible by this API key
|
|
124
320
|
* @returns Array of environment names
|
|
@@ -127,6 +323,61 @@ class VoltEnv {
|
|
|
127
323
|
const data = await this.httpClient.get('/v1/environments');
|
|
128
324
|
return data.environments;
|
|
129
325
|
}
|
|
326
|
+
/**
|
|
327
|
+
* Create a new environment
|
|
328
|
+
* @param name The name of the environment
|
|
329
|
+
* @param options Optional configuration for the environment
|
|
330
|
+
*/
|
|
331
|
+
async createEnvironment(name, options) {
|
|
332
|
+
await this.httpClient.post('/v1/environments', {
|
|
333
|
+
name,
|
|
334
|
+
...options
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Update an existing environment
|
|
339
|
+
* @param name The current name of the environment
|
|
340
|
+
* @param update Data to update (e.g., { name: 'new-name' })
|
|
341
|
+
*/
|
|
342
|
+
async updateEnvironment(name, update) {
|
|
343
|
+
await this.httpClient.put(`/v1/environments/${name}`, update);
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Delete an environment
|
|
347
|
+
* @param name The name of the environment to delete
|
|
348
|
+
*/
|
|
349
|
+
async deleteEnvironment(name) {
|
|
350
|
+
await this.httpClient.delete(`/v1/environments/${name}`);
|
|
351
|
+
if (this.cacheService) {
|
|
352
|
+
this.cacheService.deleteByPrefix(`${name}:`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* List all team members in the project
|
|
357
|
+
* @returns Array of team member objects
|
|
358
|
+
*/
|
|
359
|
+
async listTeamMembers() {
|
|
360
|
+
const data = await this.httpClient.get('/v1/team/members');
|
|
361
|
+
return data.members;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Invite a new team member
|
|
365
|
+
* @param email The email address of the person to invite
|
|
366
|
+
* @param role The role to assign (e.g., 'admin', 'viewer')
|
|
367
|
+
*/
|
|
368
|
+
async inviteTeamMember(email, role) {
|
|
369
|
+
await this.httpClient.post('/v1/team/invite', {
|
|
370
|
+
email,
|
|
371
|
+
role
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Remove a team member
|
|
376
|
+
* @param email The email address of the person to remove
|
|
377
|
+
*/
|
|
378
|
+
async removeTeamMember(email) {
|
|
379
|
+
await this.httpClient.delete(`/v1/team/members/${email}`);
|
|
380
|
+
}
|
|
130
381
|
/**
|
|
131
382
|
* Sync/refresh variables from server (bypassing cache)
|
|
132
383
|
*If an environment is provided, it only syncs that environment.
|
|
@@ -150,6 +401,27 @@ class VoltEnv {
|
|
|
150
401
|
}
|
|
151
402
|
}
|
|
152
403
|
}
|
|
404
|
+
/**
|
|
405
|
+
* Get all cached keys (for debugging)
|
|
406
|
+
*/
|
|
407
|
+
getCacheKeys() {
|
|
408
|
+
if (!this.cacheService) {
|
|
409
|
+
return [];
|
|
410
|
+
}
|
|
411
|
+
return Array.from(this.cacheService.keys());
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Get cache statistics
|
|
415
|
+
*/
|
|
416
|
+
getCacheStats() {
|
|
417
|
+
if (!this.cacheService) {
|
|
418
|
+
return { size: 0, keys: [] };
|
|
419
|
+
}
|
|
420
|
+
return {
|
|
421
|
+
size: this.cacheService.size,
|
|
422
|
+
keys: Array.from(this.cacheService.keys())
|
|
423
|
+
};
|
|
424
|
+
}
|
|
153
425
|
}
|
|
154
426
|
exports.VoltEnv = VoltEnv;
|
|
155
427
|
exports.default = VoltEnv;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export interface CacheServiceOptions {
|
|
2
|
+
max?: number;
|
|
3
|
+
ttl?: number;
|
|
4
|
+
maxSize?: number;
|
|
5
|
+
sizeCalculation?: (value: any, key: string) => number;
|
|
6
|
+
}
|
|
4
7
|
export declare class CacheService {
|
|
5
8
|
private cache;
|
|
6
|
-
constructor();
|
|
9
|
+
constructor(options?: CacheServiceOptions);
|
|
7
10
|
/**
|
|
8
11
|
* Get a value from the cache
|
|
9
12
|
*/
|
|
@@ -11,7 +14,7 @@ export declare class CacheService {
|
|
|
11
14
|
/**
|
|
12
15
|
* Set a value in the cache
|
|
13
16
|
*/
|
|
14
|
-
set(key: string, value: any): void;
|
|
17
|
+
set(key: string, value: any, ttl?: number): void;
|
|
15
18
|
/**
|
|
16
19
|
* Check if a key exists in the cache
|
|
17
20
|
*/
|
|
@@ -19,7 +22,7 @@ export declare class CacheService {
|
|
|
19
22
|
/**
|
|
20
23
|
* Delete a value from the cache
|
|
21
24
|
*/
|
|
22
|
-
delete(key: string):
|
|
25
|
+
delete(key: string): boolean;
|
|
23
26
|
/**
|
|
24
27
|
* Clear all values from the cache
|
|
25
28
|
*/
|
|
@@ -28,5 +31,17 @@ export declare class CacheService {
|
|
|
28
31
|
* Delete all keys starting with a prefix
|
|
29
32
|
*/
|
|
30
33
|
deleteByPrefix(prefix: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Get the current size of the cache
|
|
36
|
+
*/
|
|
37
|
+
get size(): number;
|
|
38
|
+
/**
|
|
39
|
+
* Get all keys in the cache
|
|
40
|
+
*/
|
|
41
|
+
keys(): IterableIterator<string>;
|
|
42
|
+
/**
|
|
43
|
+
* Get all values in the cache
|
|
44
|
+
*/
|
|
45
|
+
values(): IterableIterator<any>;
|
|
31
46
|
}
|
|
32
47
|
//# sourceMappingURL=cacheService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cacheService.d.ts","sourceRoot":"","sources":["../../utilities/cacheService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cacheService.d.ts","sourceRoot":"","sources":["../../utilities/cacheService.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACzD;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,KAAK,CAAwB;gBAEzB,OAAO,GAAE,mBAAwB;IAS7C;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIlC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAQhD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASpC;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAIhC;;OAEG;IACH,MAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC;CAGlC"}
|