@pcircle/memesh 2.8.0 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -27
- package/README.zh-TW.md +2 -23
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +0 -7
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +0 -7
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
- package/dist/i18n/locales/zh-CN.js +0 -7
- package/dist/i18n/locales/zh-CN.js.map +1 -1
- package/dist/i18n/locales/zh-TW.d.ts.map +1 -1
- package/dist/i18n/locales/zh-TW.js +0 -7
- package/dist/i18n/locales/zh-TW.js.map +1 -1
- package/dist/mcp/BuddyCommands.d.ts +0 -1
- package/dist/mcp/BuddyCommands.d.ts.map +1 -1
- package/dist/mcp/BuddyCommands.js +1 -105
- package/dist/mcp/BuddyCommands.js.map +1 -1
- package/dist/mcp/ServerInitializer.d.ts +0 -2
- package/dist/mcp/ServerInitializer.d.ts.map +1 -1
- package/dist/mcp/ServerInitializer.js +0 -13
- package/dist/mcp/ServerInitializer.js.map +1 -1
- package/dist/mcp/ToolDefinitions.d.ts.map +1 -1
- package/dist/mcp/ToolDefinitions.js +0 -114
- package/dist/mcp/ToolDefinitions.js.map +1 -1
- package/dist/mcp/ToolRouter.d.ts +0 -3
- package/dist/mcp/ToolRouter.d.ts.map +1 -1
- package/dist/mcp/ToolRouter.js +1 -48
- package/dist/mcp/ToolRouter.js.map +1 -1
- package/dist/mcp/handlers/index.d.ts +0 -1
- package/dist/mcp/handlers/index.d.ts.map +1 -1
- package/dist/mcp/handlers/index.js +0 -1
- package/dist/mcp/handlers/index.js.map +1 -1
- package/dist/mcp/resources/best-practices.md +0 -14
- package/dist/mcp/resources/buddy-do-skill.md +0 -1
- package/dist/mcp/resources/ccb-complete-guide.md +1 -91
- package/dist/mcp/resources/examples.md +0 -9
- package/dist/mcp/resources/quick-reference.md +0 -2
- package/dist/mcp/resources/usage-guide.md +0 -18
- package/dist/mcp/server-bootstrap.js +0 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +0 -15
- package/dist/mcp/server.js.map +1 -1
- package/dist/memory/index.d.ts +0 -3
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +0 -2
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/types/index.d.ts +0 -2
- package/dist/memory/types/index.d.ts.map +1 -1
- package/dist/memory/types/index.js +0 -1
- package/dist/memory/types/index.js.map +1 -1
- package/dist/ui/design-tokens.d.ts +0 -1
- package/dist/ui/design-tokens.d.ts.map +1 -1
- package/dist/ui/design-tokens.js +0 -10
- package/dist/ui/design-tokens.js.map +1 -1
- package/package.json +3 -3
- package/scripts/postinstall.js +1 -1
- package/dist/mcp/handlers/SecretHandlers.d.ts +0 -23
- package/dist/mcp/handlers/SecretHandlers.d.ts.map +0 -1
- package/dist/mcp/handlers/SecretHandlers.js +0 -277
- package/dist/mcp/handlers/SecretHandlers.js.map +0 -1
- package/dist/memory/SecretManager.d.ts +0 -41
- package/dist/memory/SecretManager.d.ts.map +0 -1
- package/dist/memory/SecretManager.js +0 -346
- package/dist/memory/SecretManager.js.map +0 -1
- package/dist/memory/types/secret-types.d.ts +0 -43
- package/dist/memory/types/secret-types.d.ts.map +0 -1
- package/dist/memory/types/secret-types.js +0 -51
- package/dist/memory/types/secret-types.js.map +0 -1
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
import Database from 'better-sqlite3';
|
|
2
|
-
import { randomBytes, createCipheriv, createDecipheriv } from 'crypto';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
import { promises as fsPromises } from 'fs';
|
|
5
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
6
|
-
import { getDataPath, getDataDirectory } from '../utils/PathResolver.js';
|
|
7
|
-
import { logger } from '../utils/logger.js';
|
|
8
|
-
import { DEFAULT_SECRET_PATTERNS } from './types/secret-types.js';
|
|
9
|
-
const ENCRYPTION_ALGORITHM = 'aes-256-gcm';
|
|
10
|
-
const IV_LENGTH = 16;
|
|
11
|
-
const _AUTH_TAG_LENGTH = 16;
|
|
12
|
-
const DEFAULT_EXPIRATION_SECONDS = 30 * 24 * 60 * 60;
|
|
13
|
-
export class SecretManager {
|
|
14
|
-
db;
|
|
15
|
-
dbPath;
|
|
16
|
-
encryptionKey;
|
|
17
|
-
secretPatterns;
|
|
18
|
-
constructor(dbPath, db, encryptionKey) {
|
|
19
|
-
this.dbPath = dbPath;
|
|
20
|
-
this.db = db;
|
|
21
|
-
this.encryptionKey = encryptionKey;
|
|
22
|
-
this.secretPatterns = DEFAULT_SECRET_PATTERNS.map(p => ({
|
|
23
|
-
...p,
|
|
24
|
-
pattern: new RegExp(p.pattern.source, p.pattern.flags),
|
|
25
|
-
}));
|
|
26
|
-
}
|
|
27
|
-
static async create(dbPath) {
|
|
28
|
-
const defaultPath = getDataPath('secrets.db');
|
|
29
|
-
const resolvedPath = dbPath || defaultPath;
|
|
30
|
-
const dataDir = getDataDirectory();
|
|
31
|
-
try {
|
|
32
|
-
await fsPromises.access(dataDir);
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
await fsPromises.mkdir(dataDir, { recursive: true });
|
|
36
|
-
}
|
|
37
|
-
const db = new Database(resolvedPath);
|
|
38
|
-
const encryptionKey = await SecretManager.getEncryptionKey(dataDir);
|
|
39
|
-
const instance = new SecretManager(resolvedPath, db, encryptionKey);
|
|
40
|
-
instance.initialize();
|
|
41
|
-
logger.info(`[SecretManager] Initialized at: ${resolvedPath}`);
|
|
42
|
-
return instance;
|
|
43
|
-
}
|
|
44
|
-
static async getEncryptionKey(dataDir) {
|
|
45
|
-
const keyPath = join(dataDir, '.secret-key');
|
|
46
|
-
try {
|
|
47
|
-
const keyData = await fsPromises.readFile(keyPath);
|
|
48
|
-
return keyData;
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
const newKey = randomBytes(32);
|
|
52
|
-
await fsPromises.writeFile(keyPath, newKey, { mode: 0o600 });
|
|
53
|
-
return newKey;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
initialize() {
|
|
57
|
-
const schema = `
|
|
58
|
-
CREATE TABLE IF NOT EXISTS secrets (
|
|
59
|
-
id TEXT PRIMARY KEY,
|
|
60
|
-
name TEXT NOT NULL UNIQUE,
|
|
61
|
-
secret_type TEXT NOT NULL DEFAULT 'generic',
|
|
62
|
-
encrypted_value TEXT NOT NULL,
|
|
63
|
-
iv TEXT NOT NULL,
|
|
64
|
-
auth_tag TEXT NOT NULL,
|
|
65
|
-
created_at TEXT NOT NULL,
|
|
66
|
-
updated_at TEXT NOT NULL,
|
|
67
|
-
expires_at TEXT,
|
|
68
|
-
metadata TEXT
|
|
69
|
-
);
|
|
70
|
-
|
|
71
|
-
CREATE INDEX IF NOT EXISTS idx_secrets_name ON secrets(name);
|
|
72
|
-
CREATE INDEX IF NOT EXISTS idx_secrets_type ON secrets(secret_type);
|
|
73
|
-
CREATE INDEX IF NOT EXISTS idx_secrets_expires ON secrets(expires_at);
|
|
74
|
-
`;
|
|
75
|
-
this.db.exec(schema);
|
|
76
|
-
}
|
|
77
|
-
detectSecrets(content) {
|
|
78
|
-
const detectedSecrets = [];
|
|
79
|
-
for (const pattern of this.secretPatterns) {
|
|
80
|
-
pattern.pattern.lastIndex = 0;
|
|
81
|
-
let match;
|
|
82
|
-
while ((match = pattern.pattern.exec(content)) !== null) {
|
|
83
|
-
detectedSecrets.push({
|
|
84
|
-
type: pattern.type,
|
|
85
|
-
value: match[0],
|
|
86
|
-
startIndex: match.index,
|
|
87
|
-
endIndex: match.index + match[0].length,
|
|
88
|
-
confidence: pattern.confidence,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
const uniqueSecrets = detectedSecrets.filter((secret, index, self) => index ===
|
|
93
|
-
self.findIndex((s) => s.startIndex === secret.startIndex && s.endIndex === secret.endIndex));
|
|
94
|
-
return uniqueSecrets.sort((a, b) => a.startIndex - b.startIndex);
|
|
95
|
-
}
|
|
96
|
-
maskValue(value) {
|
|
97
|
-
if (!value || value.length === 0) {
|
|
98
|
-
return '';
|
|
99
|
-
}
|
|
100
|
-
if (value.length <= 4) {
|
|
101
|
-
return '*'.repeat(value.length);
|
|
102
|
-
}
|
|
103
|
-
if (value.length <= 8) {
|
|
104
|
-
return value[0] + '*'.repeat(value.length - 2) + value[value.length - 1];
|
|
105
|
-
}
|
|
106
|
-
return value.slice(0, 4) + '****' + value.slice(-4);
|
|
107
|
-
}
|
|
108
|
-
async store(value, options) {
|
|
109
|
-
const existing = this.db
|
|
110
|
-
.prepare('SELECT id FROM secrets WHERE name = ?')
|
|
111
|
-
.get(options.name);
|
|
112
|
-
if (existing) {
|
|
113
|
-
throw new Error(`Secret with name '${options.name}' already exists`);
|
|
114
|
-
}
|
|
115
|
-
const id = uuidv4();
|
|
116
|
-
const { encryptedValue, iv, authTag } = this.encrypt(value);
|
|
117
|
-
const now = new Date();
|
|
118
|
-
const expiresInSeconds = options.expiresInSeconds ?? DEFAULT_EXPIRATION_SECONDS;
|
|
119
|
-
const expiresAt = new Date(now.getTime() + expiresInSeconds * 1000);
|
|
120
|
-
const stmt = this.db.prepare(`
|
|
121
|
-
INSERT INTO secrets (id, name, secret_type, encrypted_value, iv, auth_tag, created_at, updated_at, expires_at, metadata)
|
|
122
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
123
|
-
`);
|
|
124
|
-
stmt.run(id, options.name, options.secretType || 'generic', encryptedValue, iv, authTag, now.toISOString(), now.toISOString(), expiresAt.toISOString(), options.metadata ? JSON.stringify(options.metadata) : null);
|
|
125
|
-
logger.info(`[SecretManager] Stored secret: ${options.name} (id: ${id})`);
|
|
126
|
-
return id;
|
|
127
|
-
}
|
|
128
|
-
async get(id) {
|
|
129
|
-
const row = this.db
|
|
130
|
-
.prepare('SELECT * FROM secrets WHERE id = ?')
|
|
131
|
-
.get(id);
|
|
132
|
-
if (!row) {
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
if (row.expires_at) {
|
|
136
|
-
const now = new Date();
|
|
137
|
-
const expiresAt = new Date(row.expires_at);
|
|
138
|
-
if (expiresAt < now) {
|
|
139
|
-
try {
|
|
140
|
-
this.db
|
|
141
|
-
.prepare('DELETE FROM secrets WHERE id = ? AND expires_at IS NOT NULL AND expires_at < ?')
|
|
142
|
-
.run(id, now.toISOString());
|
|
143
|
-
}
|
|
144
|
-
catch (error) {
|
|
145
|
-
logger.warn(`[SecretManager] Failed to delete expired secret ${id}: ${error instanceof Error ? error.message : String(error)}`);
|
|
146
|
-
}
|
|
147
|
-
return null;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return this.decrypt(row.encrypted_value, row.iv, row.auth_tag);
|
|
151
|
-
}
|
|
152
|
-
async getByName(name) {
|
|
153
|
-
const row = this.db
|
|
154
|
-
.prepare('SELECT id FROM secrets WHERE name = ?')
|
|
155
|
-
.get(name);
|
|
156
|
-
if (!row) {
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
return this.get(row.id);
|
|
160
|
-
}
|
|
161
|
-
getStoredData(id) {
|
|
162
|
-
const row = this.db
|
|
163
|
-
.prepare('SELECT * FROM secrets WHERE id = ?')
|
|
164
|
-
.get(id);
|
|
165
|
-
if (!row) {
|
|
166
|
-
return null;
|
|
167
|
-
}
|
|
168
|
-
let parsedMetadata;
|
|
169
|
-
if (row.metadata) {
|
|
170
|
-
try {
|
|
171
|
-
parsedMetadata = JSON.parse(row.metadata);
|
|
172
|
-
}
|
|
173
|
-
catch (parseError) {
|
|
174
|
-
logger.warn(`[SecretManager] Failed to parse metadata for secret ${id}: ${parseError instanceof Error ? parseError.message : String(parseError)}`);
|
|
175
|
-
parsedMetadata = undefined;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
return {
|
|
179
|
-
id: row.id,
|
|
180
|
-
name: row.name,
|
|
181
|
-
secretType: row.secret_type,
|
|
182
|
-
encryptedValue: row.encrypted_value,
|
|
183
|
-
iv: row.iv,
|
|
184
|
-
authTag: row.auth_tag,
|
|
185
|
-
createdAt: new Date(row.created_at),
|
|
186
|
-
updatedAt: new Date(row.updated_at),
|
|
187
|
-
expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,
|
|
188
|
-
metadata: parsedMetadata,
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
async update(id, newValue) {
|
|
192
|
-
const existing = this.db
|
|
193
|
-
.prepare('SELECT id FROM secrets WHERE id = ?')
|
|
194
|
-
.get(id);
|
|
195
|
-
if (!existing) {
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
const { encryptedValue, iv, authTag } = this.encrypt(newValue);
|
|
199
|
-
const stmt = this.db.prepare(`
|
|
200
|
-
UPDATE secrets
|
|
201
|
-
SET encrypted_value = ?, iv = ?, auth_tag = ?, updated_at = ?
|
|
202
|
-
WHERE id = ?
|
|
203
|
-
`);
|
|
204
|
-
stmt.run(encryptedValue, iv, authTag, new Date().toISOString(), id);
|
|
205
|
-
logger.info(`[SecretManager] Updated secret: ${id}`);
|
|
206
|
-
return true;
|
|
207
|
-
}
|
|
208
|
-
async updateMetadata(id, metadata) {
|
|
209
|
-
const existing = this.db
|
|
210
|
-
.prepare('SELECT id FROM secrets WHERE id = ?')
|
|
211
|
-
.get(id);
|
|
212
|
-
if (!existing) {
|
|
213
|
-
return false;
|
|
214
|
-
}
|
|
215
|
-
const stmt = this.db.prepare(`
|
|
216
|
-
UPDATE secrets
|
|
217
|
-
SET metadata = ?, updated_at = ?
|
|
218
|
-
WHERE id = ?
|
|
219
|
-
`);
|
|
220
|
-
stmt.run(JSON.stringify(metadata), new Date().toISOString(), id);
|
|
221
|
-
return true;
|
|
222
|
-
}
|
|
223
|
-
async delete(id) {
|
|
224
|
-
const result = this.db.prepare('DELETE FROM secrets WHERE id = ?').run(id);
|
|
225
|
-
if (result.changes > 0) {
|
|
226
|
-
logger.info(`[SecretManager] Deleted secret: ${id}`);
|
|
227
|
-
return true;
|
|
228
|
-
}
|
|
229
|
-
return false;
|
|
230
|
-
}
|
|
231
|
-
async deleteByName(name) {
|
|
232
|
-
const result = this.db
|
|
233
|
-
.prepare('DELETE FROM secrets WHERE name = ?')
|
|
234
|
-
.run(name);
|
|
235
|
-
if (result.changes > 0) {
|
|
236
|
-
logger.info(`[SecretManager] Deleted secret by name: ${name}`);
|
|
237
|
-
return true;
|
|
238
|
-
}
|
|
239
|
-
return false;
|
|
240
|
-
}
|
|
241
|
-
async list(filter) {
|
|
242
|
-
let sql = 'SELECT id, name, secret_type, created_at, updated_at, expires_at, metadata FROM secrets';
|
|
243
|
-
const params = [];
|
|
244
|
-
if (filter?.secretType) {
|
|
245
|
-
sql += ' WHERE secret_type = ?';
|
|
246
|
-
params.push(filter.secretType);
|
|
247
|
-
}
|
|
248
|
-
sql += ' ORDER BY created_at DESC';
|
|
249
|
-
const rows = this.db.prepare(sql).all(...params);
|
|
250
|
-
return rows.map((row) => {
|
|
251
|
-
let parsedMetadata;
|
|
252
|
-
if (row.metadata) {
|
|
253
|
-
try {
|
|
254
|
-
parsedMetadata = JSON.parse(row.metadata);
|
|
255
|
-
}
|
|
256
|
-
catch (parseError) {
|
|
257
|
-
logger.warn(`[SecretManager] Failed to parse metadata for secret ${row.id}: ${parseError instanceof Error ? parseError.message : String(parseError)}`);
|
|
258
|
-
parsedMetadata = undefined;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return {
|
|
262
|
-
id: row.id,
|
|
263
|
-
name: row.name,
|
|
264
|
-
secretType: row.secret_type,
|
|
265
|
-
createdAt: new Date(row.created_at),
|
|
266
|
-
updatedAt: new Date(row.updated_at),
|
|
267
|
-
expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,
|
|
268
|
-
metadata: parsedMetadata,
|
|
269
|
-
};
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
requestConfirmation(secretName, value, expiresInSeconds) {
|
|
273
|
-
const expSeconds = expiresInSeconds ?? DEFAULT_EXPIRATION_SECONDS;
|
|
274
|
-
const expiresIn = this.formatExpiration(expSeconds);
|
|
275
|
-
return {
|
|
276
|
-
messageKey: 'ccb.secret.confirmation',
|
|
277
|
-
params: {
|
|
278
|
-
secretName,
|
|
279
|
-
maskedValue: this.maskValue(value),
|
|
280
|
-
expiresIn,
|
|
281
|
-
},
|
|
282
|
-
privacyNoticeKey: 'ccb.secret.privacyNotice',
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
formatExpiration(seconds) {
|
|
286
|
-
const days = Math.floor(seconds / (24 * 60 * 60));
|
|
287
|
-
const hours = Math.floor((seconds % (24 * 60 * 60)) / (60 * 60));
|
|
288
|
-
const minutes = Math.floor((seconds % (60 * 60)) / 60);
|
|
289
|
-
if (days > 0) {
|
|
290
|
-
return days === 1 ? '1 day' : `${days} days`;
|
|
291
|
-
}
|
|
292
|
-
if (hours > 0) {
|
|
293
|
-
return hours === 1 ? '1 hour' : `${hours} hours`;
|
|
294
|
-
}
|
|
295
|
-
if (minutes > 0) {
|
|
296
|
-
return minutes === 1 ? '1 minute' : `${minutes} minutes`;
|
|
297
|
-
}
|
|
298
|
-
return `${seconds} seconds`;
|
|
299
|
-
}
|
|
300
|
-
encrypt(value) {
|
|
301
|
-
const iv = randomBytes(IV_LENGTH);
|
|
302
|
-
const cipher = createCipheriv(ENCRYPTION_ALGORITHM, this.encryptionKey, iv);
|
|
303
|
-
let encrypted = cipher.update(value, 'utf8', 'hex');
|
|
304
|
-
encrypted += cipher.final('hex');
|
|
305
|
-
const authTag = cipher.getAuthTag();
|
|
306
|
-
return {
|
|
307
|
-
encryptedValue: encrypted,
|
|
308
|
-
iv: iv.toString('hex'),
|
|
309
|
-
authTag: authTag.toString('hex'),
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
decrypt(encryptedValue, iv, authTag) {
|
|
313
|
-
const ivBuffer = Buffer.from(iv, 'hex');
|
|
314
|
-
const authTagBuffer = Buffer.from(authTag, 'hex');
|
|
315
|
-
const decipher = createDecipheriv(ENCRYPTION_ALGORITHM, this.encryptionKey, ivBuffer);
|
|
316
|
-
decipher.setAuthTag(authTagBuffer);
|
|
317
|
-
let decrypted = decipher.update(encryptedValue, 'hex', 'utf8');
|
|
318
|
-
decrypted += decipher.final('utf8');
|
|
319
|
-
return decrypted;
|
|
320
|
-
}
|
|
321
|
-
addSecretPatterns(patterns) {
|
|
322
|
-
this.secretPatterns.push(...patterns);
|
|
323
|
-
}
|
|
324
|
-
async cleanupExpired() {
|
|
325
|
-
const now = new Date().toISOString();
|
|
326
|
-
const result = this.db
|
|
327
|
-
.prepare('DELETE FROM secrets WHERE expires_at IS NOT NULL AND expires_at < ?')
|
|
328
|
-
.run(now);
|
|
329
|
-
if (result.changes > 0) {
|
|
330
|
-
logger.info(`[SecretManager] Cleaned up ${result.changes} expired secrets`);
|
|
331
|
-
}
|
|
332
|
-
return result.changes;
|
|
333
|
-
}
|
|
334
|
-
async countExpired() {
|
|
335
|
-
const now = new Date().toISOString();
|
|
336
|
-
const result = this.db
|
|
337
|
-
.prepare('SELECT COUNT(*) as count FROM secrets WHERE expires_at IS NOT NULL AND expires_at < ?')
|
|
338
|
-
.get(now);
|
|
339
|
-
return result.count;
|
|
340
|
-
}
|
|
341
|
-
close() {
|
|
342
|
-
this.db.close();
|
|
343
|
-
logger.info('[SecretManager] Database connection closed');
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
//# sourceMappingURL=SecretManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SecretManager.js","sourceRoot":"","sources":["../../src/memory/SecretManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
export type SecretType = 'api_key' | 'bearer_token' | 'jwt' | 'password' | 'oauth_token' | 'generic';
|
|
2
|
-
export interface DetectedSecret {
|
|
3
|
-
type: SecretType;
|
|
4
|
-
value: string;
|
|
5
|
-
startIndex: number;
|
|
6
|
-
endIndex: number;
|
|
7
|
-
confidence: number;
|
|
8
|
-
}
|
|
9
|
-
export interface StoredSecret {
|
|
10
|
-
id: string;
|
|
11
|
-
name: string;
|
|
12
|
-
secretType: SecretType;
|
|
13
|
-
encryptedValue: string;
|
|
14
|
-
iv: string;
|
|
15
|
-
authTag: string;
|
|
16
|
-
createdAt: Date;
|
|
17
|
-
updatedAt: Date;
|
|
18
|
-
expiresAt?: Date;
|
|
19
|
-
metadata?: Record<string, unknown>;
|
|
20
|
-
}
|
|
21
|
-
export interface SecretStoreOptions {
|
|
22
|
-
name: string;
|
|
23
|
-
secretType?: SecretType;
|
|
24
|
-
expiresInSeconds?: number;
|
|
25
|
-
metadata?: Record<string, unknown>;
|
|
26
|
-
}
|
|
27
|
-
export interface SecretConfirmationRequest {
|
|
28
|
-
messageKey: string;
|
|
29
|
-
params: {
|
|
30
|
-
secretName: string;
|
|
31
|
-
maskedValue: string;
|
|
32
|
-
expiresIn: string;
|
|
33
|
-
};
|
|
34
|
-
privacyNoticeKey: string;
|
|
35
|
-
}
|
|
36
|
-
export interface SecretPattern {
|
|
37
|
-
name: string;
|
|
38
|
-
type: SecretType;
|
|
39
|
-
pattern: RegExp;
|
|
40
|
-
confidence: number;
|
|
41
|
-
}
|
|
42
|
-
export declare const DEFAULT_SECRET_PATTERNS: SecretPattern[];
|
|
43
|
-
//# sourceMappingURL=secret-types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"secret-types.d.ts","sourceRoot":"","sources":["../../../src/memory/types/secret-types.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,cAAc,GACd,KAAK,GACL,UAAU,GACV,aAAa,GACb,SAAS,CAAC;AAKd,MAAM,WAAW,cAAc;IAE7B,IAAI,EAAE,UAAU,CAAC;IAEjB,KAAK,EAAE,MAAM,CAAC;IAEd,UAAU,EAAE,MAAM,CAAC;IAEnB,QAAQ,EAAE,MAAM,CAAC;IAEjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,MAAM,WAAW,YAAY;IAE3B,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,EAAE,MAAM,CAAC;IAEb,UAAU,EAAE,UAAU,CAAC;IAEvB,cAAc,EAAE,MAAM,CAAC;IAEvB,EAAE,EAAE,MAAM,CAAC;IAEX,OAAO,EAAE,MAAM,CAAC;IAEhB,SAAS,EAAE,IAAI,CAAC;IAEhB,SAAS,EAAE,IAAI,CAAC;IAEhB,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAKD,MAAM,WAAW,kBAAkB;IAEjC,IAAI,EAAE,MAAM,CAAC;IAEb,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAKD,MAAM,WAAW,yBAAyB;IAExC,UAAU,EAAE,MAAM,CAAC;IAEnB,MAAM,EAAE;QAEN,UAAU,EAAE,MAAM,CAAC;QAEnB,WAAW,EAAE,MAAM,CAAC;QAEpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAKD,MAAM,WAAW,aAAa;IAE5B,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,UAAU,CAAC;IAEjB,OAAO,EAAE,MAAM,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,eAAO,MAAM,uBAAuB,EAAE,aAAa,EAyDlD,CAAC"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
export const DEFAULT_SECRET_PATTERNS = [
|
|
2
|
-
{
|
|
3
|
-
name: 'OpenAI API Key',
|
|
4
|
-
type: 'api_key',
|
|
5
|
-
pattern: /sk-[a-zA-Z0-9]{20,}/g,
|
|
6
|
-
confidence: 0.95,
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
name: 'GitHub PAT',
|
|
10
|
-
type: 'api_key',
|
|
11
|
-
pattern: /ghp_[a-zA-Z0-9]{36,}/g,
|
|
12
|
-
confidence: 0.95,
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
name: 'GitHub OAuth',
|
|
16
|
-
type: 'oauth_token',
|
|
17
|
-
pattern: /gho_[a-zA-Z0-9]{36,}/g,
|
|
18
|
-
confidence: 0.95,
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
name: 'AWS Access Key',
|
|
22
|
-
type: 'api_key',
|
|
23
|
-
pattern: /AKIA[0-9A-Z]{16}/g,
|
|
24
|
-
confidence: 0.95,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
name: 'Bearer Token',
|
|
28
|
-
type: 'bearer_token',
|
|
29
|
-
pattern: /Bearer\s+[a-zA-Z0-9\-._~+/]+=*/gi,
|
|
30
|
-
confidence: 0.85,
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
name: 'JWT',
|
|
34
|
-
type: 'jwt',
|
|
35
|
-
pattern: /eyJ[a-zA-Z0-9\-_]+\.eyJ[a-zA-Z0-9\-_]+\.[a-zA-Z0-9\-_]+/g,
|
|
36
|
-
confidence: 0.9,
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
name: 'Password Assignment',
|
|
40
|
-
type: 'password',
|
|
41
|
-
pattern: /(?:password|passwd|pwd|secret|token)\s*[:=]\s*["']?([^"'\s]{8,})["']?/gi,
|
|
42
|
-
confidence: 0.7,
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
name: 'Anthropic API Key',
|
|
46
|
-
type: 'api_key',
|
|
47
|
-
pattern: /sk-ant-[a-zA-Z0-9\-]{20,}/g,
|
|
48
|
-
confidence: 0.95,
|
|
49
|
-
},
|
|
50
|
-
];
|
|
51
|
-
//# sourceMappingURL=secret-types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"secret-types.js","sourceRoot":"","sources":["../../../src/memory/types/secret-types.ts"],"names":[],"mappings":"AAgHA,MAAM,CAAC,MAAM,uBAAuB,GAAoB;IAEtD;QACE,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,sBAAsB;QAC/B,UAAU,EAAE,IAAI;KACjB;IAED;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,uBAAuB;QAChC,UAAU,EAAE,IAAI;KACjB;IAED;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,uBAAuB;QAChC,UAAU,EAAE,IAAI;KACjB;IAED;QACE,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,mBAAmB;QAC5B,UAAU,EAAE,IAAI;KACjB;IAED;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,kCAAkC;QAC3C,UAAU,EAAE,IAAI;KACjB;IAED;QACE,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,0DAA0D;QACnE,UAAU,EAAE,GAAG;KAChB;IAED;QACE,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,yEAAyE;QAClF,UAAU,EAAE,GAAG;KAChB;IAED;QACE,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,4BAA4B;QACrC,UAAU,EAAE,IAAI;KACjB;CACF,CAAC"}
|