@autonomaai/security-utils 1.0.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/dist/auth-manager.d.ts +132 -0
- package/dist/auth-manager.d.ts.map +1 -0
- package/dist/auth-manager.js +316 -0
- package/dist/auth-manager.js.map +1 -0
- package/dist/credential-manager.d.ts +87 -0
- package/dist/credential-manager.d.ts.map +1 -0
- package/dist/credential-manager.js +300 -0
- package/dist/credential-manager.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/secret-manager.d.ts +114 -0
- package/dist/secret-manager.d.ts.map +1 -0
- package/dist/secret-manager.js +312 -0
- package/dist/secret-manager.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret Management System for autonoma
|
|
3
|
+
*
|
|
4
|
+
* Provides secure secret storage, runtime injection, and rotation capabilities
|
|
5
|
+
* for sensitive configuration values like API keys and database credentials.
|
|
6
|
+
*/
|
|
7
|
+
import { CredentialManager } from './credential-manager.js';
|
|
8
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { randomBytes } from 'crypto';
|
|
11
|
+
export class SecretManager {
|
|
12
|
+
credentialManager;
|
|
13
|
+
secrets = new Map();
|
|
14
|
+
secretsFile;
|
|
15
|
+
constructor(encryptionKey, secretsFile) {
|
|
16
|
+
this.credentialManager = new CredentialManager({
|
|
17
|
+
encryptionKey,
|
|
18
|
+
environment: process.env.NODE_ENV || 'development'
|
|
19
|
+
});
|
|
20
|
+
this.secretsFile = secretsFile || join(process.cwd(), '.secrets.enc');
|
|
21
|
+
this.loadSecrets();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Store a secret with optional rotation policy
|
|
25
|
+
*/
|
|
26
|
+
async setSecret(name, value, options) {
|
|
27
|
+
const secret = {
|
|
28
|
+
name,
|
|
29
|
+
value,
|
|
30
|
+
description: options?.description,
|
|
31
|
+
rotationPolicy: options?.rotationPolicy,
|
|
32
|
+
tags: options?.tags || [],
|
|
33
|
+
createdAt: new Date(),
|
|
34
|
+
updatedAt: new Date(),
|
|
35
|
+
expiresAt: options?.expiresAt
|
|
36
|
+
};
|
|
37
|
+
this.secrets.set(name, secret);
|
|
38
|
+
await this.saveSecrets();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Retrieve a secret value
|
|
42
|
+
*/
|
|
43
|
+
async getSecret(name) {
|
|
44
|
+
const secret = this.secrets.get(name);
|
|
45
|
+
if (!secret) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
// Check if secret has expired
|
|
49
|
+
if (secret.expiresAt && secret.expiresAt < new Date()) {
|
|
50
|
+
console.warn(`Secret '${name}' has expired`);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return secret.value;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get secret metadata without exposing the value
|
|
57
|
+
*/
|
|
58
|
+
getSecretMetadata(name) {
|
|
59
|
+
const secret = this.secrets.get(name);
|
|
60
|
+
if (!secret) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
name: secret.name,
|
|
65
|
+
description: secret.description,
|
|
66
|
+
tags: secret.tags,
|
|
67
|
+
createdAt: secret.createdAt,
|
|
68
|
+
updatedAt: secret.updatedAt,
|
|
69
|
+
expiresAt: secret.expiresAt,
|
|
70
|
+
rotationPolicy: secret.rotationPolicy
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* List all secret names and metadata
|
|
75
|
+
*/
|
|
76
|
+
listSecrets() {
|
|
77
|
+
return Array.from(this.secrets.values()).map(secret => ({
|
|
78
|
+
name: secret.name,
|
|
79
|
+
description: secret.description,
|
|
80
|
+
tags: secret.tags,
|
|
81
|
+
createdAt: secret.createdAt,
|
|
82
|
+
updatedAt: secret.updatedAt,
|
|
83
|
+
expiresAt: secret.expiresAt,
|
|
84
|
+
rotationPolicy: secret.rotationPolicy
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Rotate a secret value
|
|
89
|
+
*/
|
|
90
|
+
async rotateSecret(name, newValue) {
|
|
91
|
+
const secret = this.secrets.get(name);
|
|
92
|
+
if (!secret) {
|
|
93
|
+
throw new Error(`Secret '${name}' not found`);
|
|
94
|
+
}
|
|
95
|
+
secret.value = newValue;
|
|
96
|
+
secret.updatedAt = new Date();
|
|
97
|
+
// Update expiry based on rotation policy
|
|
98
|
+
if (secret.rotationPolicy?.enabled && secret.rotationPolicy.intervalDays > 0) {
|
|
99
|
+
secret.expiresAt = new Date(Date.now() + secret.rotationPolicy.intervalDays * 24 * 60 * 60 * 1000);
|
|
100
|
+
}
|
|
101
|
+
await this.saveSecrets();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Delete a secret
|
|
105
|
+
*/
|
|
106
|
+
async deleteSecret(name) {
|
|
107
|
+
const deleted = this.secrets.delete(name);
|
|
108
|
+
if (deleted) {
|
|
109
|
+
await this.saveSecrets();
|
|
110
|
+
}
|
|
111
|
+
return deleted;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get secrets that need rotation
|
|
115
|
+
*/
|
|
116
|
+
getSecretsNeedingRotation() {
|
|
117
|
+
const now = new Date();
|
|
118
|
+
return this.listSecrets().filter(secret => {
|
|
119
|
+
if (!secret.rotationPolicy?.enabled)
|
|
120
|
+
return false;
|
|
121
|
+
if (!secret.expiresAt)
|
|
122
|
+
return false;
|
|
123
|
+
const notifyDate = new Date(secret.expiresAt.getTime() -
|
|
124
|
+
(secret.rotationPolicy.notifyBeforeExpiry * 24 * 60 * 60 * 1000));
|
|
125
|
+
return now >= notifyDate;
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Inject secrets into environment variables
|
|
130
|
+
*/
|
|
131
|
+
async injectSecretsIntoEnv() {
|
|
132
|
+
for (const [name, secret] of this.secrets) {
|
|
133
|
+
// Only inject if environment variable is not already set
|
|
134
|
+
if (!process.env[name]) {
|
|
135
|
+
process.env[name] = secret.value;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Generate secure random secret value
|
|
141
|
+
*/
|
|
142
|
+
generateSecretValue(length = 32) {
|
|
143
|
+
return randomBytes(length).toString('hex');
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Validate secret strength
|
|
147
|
+
*/
|
|
148
|
+
validateSecretStrength(value) {
|
|
149
|
+
const feedback = [];
|
|
150
|
+
let score = 0;
|
|
151
|
+
// Length check
|
|
152
|
+
if (value.length >= 32) {
|
|
153
|
+
score += 25;
|
|
154
|
+
}
|
|
155
|
+
else if (value.length >= 16) {
|
|
156
|
+
score += 15;
|
|
157
|
+
feedback.push('Consider using a longer secret (32+ characters)');
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
feedback.push('Secret should be at least 16 characters long');
|
|
161
|
+
}
|
|
162
|
+
// Character variety
|
|
163
|
+
const hasUpper = /[A-Z]/.test(value);
|
|
164
|
+
const hasLower = /[a-z]/.test(value);
|
|
165
|
+
const hasNumbers = /\d/.test(value);
|
|
166
|
+
const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(value);
|
|
167
|
+
const varietyCount = [hasUpper, hasLower, hasNumbers, hasSpecial].filter(Boolean).length;
|
|
168
|
+
score += varietyCount * 10;
|
|
169
|
+
if (varietyCount < 3) {
|
|
170
|
+
feedback.push('Secret should include uppercase, lowercase, numbers, and special characters');
|
|
171
|
+
}
|
|
172
|
+
// Entropy check (simplified)
|
|
173
|
+
const uniqueChars = new Set(value).size;
|
|
174
|
+
const entropyScore = (uniqueChars / value.length) * 25;
|
|
175
|
+
score += entropyScore;
|
|
176
|
+
if (uniqueChars < value.length * 0.5) {
|
|
177
|
+
feedback.push('Secret has too many repeated characters');
|
|
178
|
+
}
|
|
179
|
+
// Common patterns check
|
|
180
|
+
const commonPatterns = [
|
|
181
|
+
/123456/,
|
|
182
|
+
/password/i,
|
|
183
|
+
/admin/i,
|
|
184
|
+
/qwerty/i,
|
|
185
|
+
/(.)\1{3,}/ // 4+ repeated characters
|
|
186
|
+
];
|
|
187
|
+
let hasCommonPattern = false;
|
|
188
|
+
for (const pattern of commonPatterns) {
|
|
189
|
+
if (pattern.test(value)) {
|
|
190
|
+
hasCommonPattern = true;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (hasCommonPattern) {
|
|
195
|
+
score -= 20;
|
|
196
|
+
feedback.push('Secret contains common patterns that should be avoided');
|
|
197
|
+
}
|
|
198
|
+
const isStrong = score >= 70 && !hasCommonPattern;
|
|
199
|
+
return {
|
|
200
|
+
isStrong,
|
|
201
|
+
score: Math.max(0, Math.min(100, score)),
|
|
202
|
+
feedback: feedback.length > 0 ? feedback : ['Secret strength is good']
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Load secrets from encrypted file
|
|
207
|
+
*/
|
|
208
|
+
loadSecrets() {
|
|
209
|
+
if (!existsSync(this.secretsFile)) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
const encryptedData = readFileSync(this.secretsFile, 'utf8');
|
|
214
|
+
const decryptedData = this.credentialManager['decrypt'](encryptedData);
|
|
215
|
+
const secretsData = JSON.parse(decryptedData);
|
|
216
|
+
for (const secretData of secretsData) {
|
|
217
|
+
this.secrets.set(secretData.name, {
|
|
218
|
+
...secretData,
|
|
219
|
+
createdAt: new Date(secretData.createdAt),
|
|
220
|
+
updatedAt: new Date(secretData.updatedAt),
|
|
221
|
+
expiresAt: secretData.expiresAt ? new Date(secretData.expiresAt) : undefined
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
console.warn(`Failed to load secrets: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Save secrets to encrypted file
|
|
231
|
+
*/
|
|
232
|
+
async saveSecrets() {
|
|
233
|
+
try {
|
|
234
|
+
const secretsArray = Array.from(this.secrets.values());
|
|
235
|
+
const jsonData = JSON.stringify(secretsArray, null, 2);
|
|
236
|
+
const encryptedData = this.credentialManager['encrypt'](jsonData);
|
|
237
|
+
writeFileSync(this.secretsFile, encryptedData, 'utf8');
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
throw new Error(`Failed to save secrets: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Runtime secret injection utility
|
|
246
|
+
*/
|
|
247
|
+
export class RuntimeSecretInjector {
|
|
248
|
+
secretManager;
|
|
249
|
+
constructor(secretManager) {
|
|
250
|
+
this.secretManager = secretManager;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Replace placeholders in configuration with actual secret values
|
|
254
|
+
*/
|
|
255
|
+
async injectSecrets(config) {
|
|
256
|
+
const injectedConfig = JSON.parse(JSON.stringify(config)); // Deep clone
|
|
257
|
+
await this.recursivelyInjectSecrets(injectedConfig);
|
|
258
|
+
return injectedConfig;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Recursively find and replace secret placeholders
|
|
262
|
+
*/
|
|
263
|
+
async recursivelyInjectSecrets(obj) {
|
|
264
|
+
if (typeof obj === 'string') {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
if (Array.isArray(obj)) {
|
|
268
|
+
for (let i = 0; i < obj.length; i++) {
|
|
269
|
+
if (typeof obj[i] === 'string' && obj[i].startsWith('{{') && obj[i].endsWith('}}')) {
|
|
270
|
+
const secretName = obj[i].slice(2, -2).trim();
|
|
271
|
+
const secretValue = await this.secretManager.getSecret(secretName);
|
|
272
|
+
if (secretValue !== null) {
|
|
273
|
+
obj[i] = secretValue;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else if (typeof obj[i] === 'object') {
|
|
277
|
+
await this.recursivelyInjectSecrets(obj[i]);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
283
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
284
|
+
if (typeof value === 'string' && value.startsWith('{{') && value.endsWith('}}')) {
|
|
285
|
+
const secretName = value.slice(2, -2).trim();
|
|
286
|
+
const secretValue = await this.secretManager.getSecret(secretName);
|
|
287
|
+
if (secretValue !== null) {
|
|
288
|
+
obj[key] = secretValue;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
else if (typeof value === 'object') {
|
|
292
|
+
await this.recursivelyInjectSecrets(value);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Create environment variable mapping from secrets
|
|
299
|
+
*/
|
|
300
|
+
async createEnvMapping() {
|
|
301
|
+
const secrets = this.secretManager.listSecrets();
|
|
302
|
+
const mapping = {};
|
|
303
|
+
for (const secretMeta of secrets) {
|
|
304
|
+
const value = await this.secretManager.getSecret(secretMeta.name);
|
|
305
|
+
if (value !== null) {
|
|
306
|
+
mapping[secretMeta.name] = value;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return mapping;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=secret-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-manager.js","sourceRoot":"","sources":["../src/secret-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@autonomaai/security-utils",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Security utilities for credential management and encryption",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"dev": "tsc --watch",
|
|
10
|
+
"test": "jest",
|
|
11
|
+
"clean": "rm -rf dist",
|
|
12
|
+
"lint": "eslint src/**/*.ts",
|
|
13
|
+
"format": "prettier --write src/**/*.ts"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"dotenv": "^16.0.3",
|
|
17
|
+
"jsonwebtoken": "^9.0.2",
|
|
18
|
+
"bcrypt": "^5.1.1"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@types/node": "^18.0.0",
|
|
22
|
+
"@types/jsonwebtoken": "^9.0.3",
|
|
23
|
+
"@types/bcrypt": "^5.0.0",
|
|
24
|
+
"typescript": "^4.9.5",
|
|
25
|
+
"eslint": "^8.57.1",
|
|
26
|
+
"prettier": "^3.0.0",
|
|
27
|
+
"jest": "^29.0.0",
|
|
28
|
+
"@types/jest": "^29.0.0"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"security",
|
|
32
|
+
"encryption",
|
|
33
|
+
"credentials",
|
|
34
|
+
"environment",
|
|
35
|
+
"authentication",
|
|
36
|
+
"authorization",
|
|
37
|
+
"jwt"
|
|
38
|
+
],
|
|
39
|
+
"author": "autonoma Team",
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"files": [
|
|
42
|
+
"dist/**/*",
|
|
43
|
+
"README.md"
|
|
44
|
+
],
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "https://github.com/Stack3Labs/autonoma-typescript-packages"
|
|
48
|
+
},
|
|
49
|
+
"publishConfig": {
|
|
50
|
+
"access": "public"
|
|
51
|
+
}
|
|
52
|
+
}
|