langmart-gateway-type3 3.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.
Files changed (75) hide show
  1. package/.env.example +29 -0
  2. package/README.md +480 -0
  3. package/dist/bash-tools.d.ts +56 -0
  4. package/dist/bash-tools.d.ts.map +1 -0
  5. package/dist/bash-tools.js +188 -0
  6. package/dist/bash-tools.js.map +1 -0
  7. package/dist/core-tools.d.ts +94 -0
  8. package/dist/core-tools.d.ts.map +1 -0
  9. package/dist/core-tools.js +694 -0
  10. package/dist/core-tools.js.map +1 -0
  11. package/dist/debug-utils.d.ts +22 -0
  12. package/dist/debug-utils.d.ts.map +1 -0
  13. package/dist/debug-utils.js +37 -0
  14. package/dist/debug-utils.js.map +1 -0
  15. package/dist/devops-tools.d.ts +147 -0
  16. package/dist/devops-tools.d.ts.map +1 -0
  17. package/dist/devops-tools.js +718 -0
  18. package/dist/devops-tools.js.map +1 -0
  19. package/dist/gateway-config.d.ts +56 -0
  20. package/dist/gateway-config.d.ts.map +1 -0
  21. package/dist/gateway-config.js +198 -0
  22. package/dist/gateway-config.js.map +1 -0
  23. package/dist/gateway-mode.d.ts +58 -0
  24. package/dist/gateway-mode.d.ts.map +1 -0
  25. package/dist/gateway-mode.js +240 -0
  26. package/dist/gateway-mode.js.map +1 -0
  27. package/dist/gateway-server.d.ts +208 -0
  28. package/dist/gateway-server.d.ts.map +1 -0
  29. package/dist/gateway-server.js +1811 -0
  30. package/dist/gateway-server.js.map +1 -0
  31. package/dist/headless-session.d.ts +192 -0
  32. package/dist/headless-session.d.ts.map +1 -0
  33. package/dist/headless-session.js +584 -0
  34. package/dist/headless-session.js.map +1 -0
  35. package/dist/index-server.d.ts +4 -0
  36. package/dist/index-server.d.ts.map +1 -0
  37. package/dist/index-server.js +129 -0
  38. package/dist/index-server.js.map +1 -0
  39. package/dist/index.d.ts +6 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +101 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/key-vault.d.ts +102 -0
  44. package/dist/key-vault.d.ts.map +1 -0
  45. package/dist/key-vault.js +365 -0
  46. package/dist/key-vault.js.map +1 -0
  47. package/dist/local-vault.d.ts +195 -0
  48. package/dist/local-vault.d.ts.map +1 -0
  49. package/dist/local-vault.js +571 -0
  50. package/dist/local-vault.js.map +1 -0
  51. package/dist/marketplace-tools.d.ts +104 -0
  52. package/dist/marketplace-tools.d.ts.map +1 -0
  53. package/dist/marketplace-tools.js +2846 -0
  54. package/dist/marketplace-tools.js.map +1 -0
  55. package/dist/mcp-manager.d.ts +114 -0
  56. package/dist/mcp-manager.d.ts.map +1 -0
  57. package/dist/mcp-manager.js +338 -0
  58. package/dist/mcp-manager.js.map +1 -0
  59. package/dist/web-tools.d.ts +86 -0
  60. package/dist/web-tools.d.ts.map +1 -0
  61. package/dist/web-tools.js +431 -0
  62. package/dist/web-tools.js.map +1 -0
  63. package/dist/websocket-handler.d.ts +131 -0
  64. package/dist/websocket-handler.d.ts.map +1 -0
  65. package/dist/websocket-handler.js +596 -0
  66. package/dist/websocket-handler.js.map +1 -0
  67. package/dist/welcome-pages.d.ts +6 -0
  68. package/dist/welcome-pages.d.ts.map +1 -0
  69. package/dist/welcome-pages.js +200 -0
  70. package/dist/welcome-pages.js.map +1 -0
  71. package/package.json +168 -0
  72. package/scripts/install-remote.sh +282 -0
  73. package/scripts/start.sh +85 -0
  74. package/scripts/status.sh +79 -0
  75. package/scripts/stop.sh +67 -0
@@ -0,0 +1,571 @@
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
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.LocalVault = void 0;
37
+ const debug_utils_1 = require("./debug-utils");
38
+ // File: gateway-type3/local-vault.ts
39
+ // Local vault for storing access point API keys securely
40
+ // Type 3 gateways manage their own credentials locally
41
+ // Keys are stored by connection_id, not provider name
42
+ const crypto_1 = require("crypto");
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ /**
46
+ * Local Vault for Gateway Type 3
47
+ *
48
+ * TWO-PART ARCHITECTURE:
49
+ *
50
+ * Part 1: Clear Text Configuration (.vault/config.json)
51
+ * - Human-readable JSON
52
+ * - Maps provider names to connection_id UUIDs
53
+ * - Editable by users
54
+ * - NOT encrypted
55
+ *
56
+ * Part 2: Encrypted Keystore (.vault/keystore.enc)
57
+ * - AES-256-GCM encrypted credentials
58
+ * - Base64-encoded for readability
59
+ * - Header with DO NOT EDIT warnings
60
+ * - Maps connection_id to API keys
61
+ *
62
+ * Key Features:
63
+ * - Separation of configuration and secrets
64
+ * - Clear warnings against manual keystore edits
65
+ * - User-friendly configuration editing
66
+ * - Secure credential storage
67
+ */
68
+ class LocalVault {
69
+ constructor(config) {
70
+ this.cache = new Map();
71
+ this.algorithm = 'aes-256-gcm';
72
+ this.userId = config.userId;
73
+ // If userId provided, use user-specific path: ~/.langmart/users/<userId>/
74
+ // Otherwise, use legacy path: ~/.langmart/
75
+ if (config.userId) {
76
+ const os = require('os');
77
+ const homeDir = os.homedir();
78
+ const basePath = path.join(homeDir, '.langmart', 'users', config.userId);
79
+ this.vaultDir = config.vaultPath || basePath;
80
+ }
81
+ else {
82
+ this.vaultDir = config.vaultPath || path.join(process.cwd(), '.vault');
83
+ }
84
+ this.configPath = path.join(this.vaultDir, 'config.json');
85
+ this.keystorePath = path.join(this.vaultDir, 'keystore.enc');
86
+ // Derive master key from password
87
+ const password = config.masterPassword || process.env.VAULT_MASTER_PASSWORD || 'default-dev-password';
88
+ const salt = Buffer.from('langmart-type3-salt', 'utf8'); // In production, use random salt
89
+ this.masterKey = (0, crypto_1.scryptSync)(password, salt, 32);
90
+ // Ensure vault directory exists
91
+ (0, debug_utils_1.debugLog)(`[LocalVault] Constructor called for path: ${this.vaultDir}`);
92
+ (0, debug_utils_1.debugLog)(`[LocalVault] Directory exists: ${fs.existsSync(this.vaultDir)}`);
93
+ if (!fs.existsSync(this.vaultDir)) {
94
+ (0, debug_utils_1.debugLog)(`[LocalVault] Creating directory: ${this.vaultDir}`);
95
+ try {
96
+ fs.mkdirSync(this.vaultDir, { recursive: true });
97
+ (0, debug_utils_1.debugLog)(`[LocalVault] Directory created successfully`);
98
+ }
99
+ catch (error) {
100
+ console.error(`[LocalVault] Failed to create directory:`, error.message);
101
+ throw error;
102
+ }
103
+ }
104
+ else {
105
+ (0, debug_utils_1.debugLog)(`[LocalVault] Directory already exists`);
106
+ }
107
+ // Initialize empty config
108
+ this.config = {
109
+ version: '1.0',
110
+ comment: 'Editable configuration mapping provider names to access point IDs',
111
+ connections: {}
112
+ };
113
+ // Load existing configuration and credentials
114
+ this.loadConfig();
115
+ this.loadKeystore();
116
+ }
117
+ /**
118
+ * Get singleton instance for a specific user
119
+ * Uses ~/.langmart/users/<userId> as vault directory for user-specific storage
120
+ *
121
+ * @param userId - User ID (optional for backward compatibility)
122
+ */
123
+ static getInstance(userId) {
124
+ const key = userId || 'default';
125
+ (0, debug_utils_1.debugLog)(`[LocalVault] getInstance called with key: ${key}`);
126
+ if (!LocalVault.instances.has(key)) {
127
+ (0, debug_utils_1.debugLog)(`[LocalVault] Creating NEW instance for key: ${key}`);
128
+ const os = require('os');
129
+ const homeDir = os.homedir();
130
+ let vaultPath;
131
+ if (userId) {
132
+ vaultPath = path.join(homeDir, '.langmart', 'users', userId);
133
+ }
134
+ else {
135
+ // Legacy path for backward compatibility
136
+ vaultPath = path.join(homeDir, '.langmart');
137
+ }
138
+ (0, debug_utils_1.debugLog)(`[LocalVault] Vault path will be: ${vaultPath}`);
139
+ LocalVault.instances.set(key, new LocalVault({
140
+ vaultPath,
141
+ masterPassword: process.env.VAULT_MASTER_PASSWORD || 'default-dev-password',
142
+ userId
143
+ }));
144
+ }
145
+ else {
146
+ (0, debug_utils_1.debugLog)(`[LocalVault] Returning CACHED instance for key: ${key}`);
147
+ }
148
+ return LocalVault.instances.get(key);
149
+ }
150
+ /**
151
+ * Reset singleton instance (for testing)
152
+ */
153
+ static resetInstance(userId) {
154
+ const key = userId || 'default';
155
+ LocalVault.instances.delete(key);
156
+ }
157
+ /**
158
+ * Reset all singleton instances (for testing)
159
+ */
160
+ static resetAllInstances() {
161
+ LocalVault.instances.clear();
162
+ }
163
+ /**
164
+ * Get the user ID associated with this vault
165
+ */
166
+ getUserId() {
167
+ return this.userId;
168
+ }
169
+ /**
170
+ * Get the vault directory path
171
+ */
172
+ getVaultPath() {
173
+ return this.vaultDir;
174
+ }
175
+ /**
176
+ * Check if legacy vault exists (data in ~/.langmart/ instead of ~/.langmart/users/<userId>/)
177
+ */
178
+ static hasLegacyVault() {
179
+ const os = require('os');
180
+ const homeDir = os.homedir();
181
+ const legacyPath = path.join(homeDir, '.langmart');
182
+ const legacyKeystore = path.join(legacyPath, 'keystore.enc');
183
+ return fs.existsSync(legacyKeystore);
184
+ }
185
+ /**
186
+ * Migrate legacy vault data to user-specific vault
187
+ * Call this after validating the API key to get the user ID
188
+ *
189
+ * @param userId - User ID to migrate data to
190
+ * @returns true if migration was successful, false if no legacy data found
191
+ */
192
+ static async migrateLegacyVault(userId) {
193
+ const os = require('os');
194
+ const homeDir = os.homedir();
195
+ const legacyPath = path.join(homeDir, '.langmart');
196
+ const legacyKeystore = path.join(legacyPath, 'keystore.enc');
197
+ const legacyConfig = path.join(legacyPath, 'config.json');
198
+ // Check if legacy vault exists
199
+ if (!fs.existsSync(legacyKeystore)) {
200
+ (0, debug_utils_1.debugLog)('[LocalVault] No legacy vault found, skipping migration');
201
+ return false;
202
+ }
203
+ (0, debug_utils_1.debugLog)(`[LocalVault] 🔄 Migrating legacy vault to user-specific vault for user: ${userId}`);
204
+ try {
205
+ // Load legacy vault
206
+ const legacyVault = new LocalVault({
207
+ vaultPath: legacyPath,
208
+ masterPassword: process.env.VAULT_MASTER_PASSWORD || 'default-dev-password'
209
+ });
210
+ // Create new user-specific vault
211
+ const newVault = LocalVault.getInstance(userId);
212
+ // Export credentials from legacy vault
213
+ const credentials = legacyVault.export();
214
+ // Import into new vault
215
+ for (const [accessPointId, apiKey] of Object.entries(credentials)) {
216
+ await newVault.setCredential(accessPointId, apiKey);
217
+ }
218
+ // Copy config if it exists
219
+ if (fs.existsSync(legacyConfig)) {
220
+ const configData = fs.readFileSync(legacyConfig, 'utf8');
221
+ const config = JSON.parse(configData);
222
+ // Copy connection mappings to new vault
223
+ for (const [providerName, apConfig] of Object.entries(config.connections || {})) {
224
+ const ap = apConfig;
225
+ newVault.config.connections[providerName] = ap;
226
+ }
227
+ await newVault.saveConfig();
228
+ }
229
+ (0, debug_utils_1.debugLog)(`[LocalVault] ✅ Migrated ${Object.keys(credentials).length} credentials to user vault`);
230
+ // Rename legacy vault to .langmart.backup
231
+ const backupPath = path.join(homeDir, '.langmart.backup');
232
+ if (fs.existsSync(backupPath)) {
233
+ // If backup already exists, append timestamp
234
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
235
+ const timestampedBackup = path.join(homeDir, `.langmart.backup-${timestamp}`);
236
+ fs.renameSync(legacyPath, timestampedBackup);
237
+ (0, debug_utils_1.debugLog)(`[LocalVault] 📦 Legacy vault backed up to: ${timestampedBackup}`);
238
+ }
239
+ else {
240
+ fs.renameSync(legacyPath, backupPath);
241
+ (0, debug_utils_1.debugLog)(`[LocalVault] 📦 Legacy vault backed up to: ${backupPath}`);
242
+ }
243
+ return true;
244
+ }
245
+ catch (error) {
246
+ console.error(`[LocalVault] ❌ Migration failed:`, error.message);
247
+ console.error(`[LocalVault] Legacy vault preserved at: ${legacyPath}`);
248
+ return false;
249
+ }
250
+ }
251
+ /**
252
+ * Store API key for an access point
253
+ * @param accessPointId - UUID of the access point
254
+ * @param apiKey - Provider API key
255
+ * @param provider - Optional provider name for config mapping
256
+ * @param description - Optional description for config
257
+ */
258
+ async setCredential(accessPointId, apiKey, provider, description) {
259
+ (0, debug_utils_1.debugLog)(`[LocalVault] Storing credential for connection_id: ${accessPointId}`);
260
+ // Update cache
261
+ this.cache.set(accessPointId, apiKey);
262
+ // Update config if provider name provided
263
+ if (provider) {
264
+ this.config.connections[provider] = {
265
+ connection_id: accessPointId,
266
+ provider: provider,
267
+ description: description || `${provider} access point`
268
+ };
269
+ }
270
+ // Save both files to disk
271
+ await this.saveConfig();
272
+ await this.saveKeystore();
273
+ }
274
+ /**
275
+ * Get API key for an access point
276
+ * @param accessPointId - UUID of the access point
277
+ */
278
+ getCredential(accessPointId) {
279
+ return this.cache.get(accessPointId);
280
+ }
281
+ /**
282
+ * Check if access point has credential
283
+ * @param accessPointId - UUID of the access point
284
+ */
285
+ hasCredential(accessPointId) {
286
+ return this.cache.has(accessPointId);
287
+ }
288
+ /**
289
+ * List all access point IDs with credentials
290
+ */
291
+ listAccessPoints() {
292
+ return Array.from(this.cache.keys());
293
+ }
294
+ /**
295
+ * Remove credential for an access point
296
+ * @param accessPointId - UUID of the access point
297
+ */
298
+ async removeCredential(accessPointId) {
299
+ (0, debug_utils_1.debugLog)(`[LocalVault] Removing credential for connection_id: ${accessPointId}`);
300
+ this.cache.delete(accessPointId);
301
+ // Remove from config as well
302
+ for (const [providerName, apConfig] of Object.entries(this.config.connections)) {
303
+ if (apConfig.connection_id === accessPointId) {
304
+ delete this.config.connections[providerName];
305
+ break;
306
+ }
307
+ }
308
+ await this.saveConfig();
309
+ await this.saveKeystore();
310
+ }
311
+ /**
312
+ * Clear all credentials
313
+ */
314
+ async clearAll() {
315
+ (0, debug_utils_1.debugLog)(`[LocalVault] Clearing all credentials`);
316
+ this.cache.clear();
317
+ this.config.connections = {};
318
+ await this.saveConfig();
319
+ await this.saveKeystore();
320
+ }
321
+ /**
322
+ * Store gateway authentication API key
323
+ * Special key stored with reserved ID '__gateway_auth__'
324
+ */
325
+ async setAuthKey(apiKey) {
326
+ (0, debug_utils_1.debugLog)(`[LocalVault] Storing gateway authentication key`);
327
+ (0, debug_utils_1.debugLog)(`[LocalVault] Vault directory: ${this.vaultDir}`);
328
+ (0, debug_utils_1.debugLog)(`[LocalVault] Keystore path: ${this.keystorePath}`);
329
+ (0, debug_utils_1.debugLog)(`[LocalVault] User ID: ${this.userId || 'undefined'}`);
330
+ // Ensure directory exists before saving (in case constructor didn't run)
331
+ if (!fs.existsSync(this.vaultDir)) {
332
+ (0, debug_utils_1.debugLog)(`[LocalVault] Directory doesn't exist, creating: ${this.vaultDir}`);
333
+ fs.mkdirSync(this.vaultDir, { recursive: true });
334
+ (0, debug_utils_1.debugLog)(`[LocalVault] Directory created successfully`);
335
+ }
336
+ this.cache.set('__gateway_auth__', apiKey);
337
+ await this.saveKeystore();
338
+ }
339
+ /**
340
+ * Get gateway authentication API key
341
+ */
342
+ getAuthKey() {
343
+ return this.cache.get('__gateway_auth__');
344
+ }
345
+ /**
346
+ * Check if gateway authentication key is stored
347
+ */
348
+ hasAuthKey() {
349
+ return this.cache.has('__gateway_auth__');
350
+ }
351
+ /**
352
+ * Remove gateway authentication key (logout)
353
+ */
354
+ async removeAuthKey() {
355
+ (0, debug_utils_1.debugLog)(`[LocalVault] Removing gateway authentication key`);
356
+ this.cache.delete('__gateway_auth__');
357
+ await this.saveKeystore();
358
+ }
359
+ /**
360
+ * Load clear text configuration
361
+ */
362
+ loadConfig() {
363
+ try {
364
+ if (!fs.existsSync(this.configPath)) {
365
+ (0, debug_utils_1.debugLog)(`[LocalVault] No existing config found at ${this.configPath}`);
366
+ return;
367
+ }
368
+ const configData = fs.readFileSync(this.configPath, 'utf8');
369
+ this.config = JSON.parse(configData);
370
+ (0, debug_utils_1.debugLog)(`[LocalVault] Loaded config with ${Object.keys(this.config.connections).length} access point mappings`);
371
+ }
372
+ catch (error) {
373
+ console.error(`[LocalVault] Failed to load config:`, error.message);
374
+ // Keep default empty config
375
+ }
376
+ }
377
+ /**
378
+ * Save clear text configuration
379
+ */
380
+ async saveConfig() {
381
+ try {
382
+ const configJson = JSON.stringify(this.config, null, 2);
383
+ fs.writeFileSync(this.configPath, configJson);
384
+ (0, debug_utils_1.debugLog)(`[LocalVault] Saved config with ${Object.keys(this.config.connections).length} access point mappings`);
385
+ }
386
+ catch (error) {
387
+ console.error(`[LocalVault] Failed to save config:`, error.message);
388
+ throw error;
389
+ }
390
+ }
391
+ /**
392
+ * Load encrypted keystore
393
+ */
394
+ loadKeystore() {
395
+ try {
396
+ if (!fs.existsSync(this.keystorePath)) {
397
+ (0, debug_utils_1.debugLog)(`[LocalVault] No existing keystore found at ${this.keystorePath}`);
398
+ return;
399
+ }
400
+ // Read file and skip header comments (lines starting with #)
401
+ const fileContent = fs.readFileSync(this.keystorePath, 'utf8');
402
+ const lines = fileContent.split('\n');
403
+ const base64Data = lines
404
+ .filter(line => line.trim() && !line.trim().startsWith('#'))
405
+ .join('');
406
+ // Decode base64 to get encrypted binary
407
+ const encrypted = Buffer.from(base64Data, 'base64');
408
+ // Decrypt
409
+ const decrypted = this.decrypt(encrypted);
410
+ const data = JSON.parse(decrypted);
411
+ // Load into cache (keys are connection_id UUIDs)
412
+ Object.entries(data.credentials || {}).forEach(([accessPointId, apiKey]) => {
413
+ this.cache.set(accessPointId, apiKey);
414
+ });
415
+ (0, debug_utils_1.debugLog)(`[LocalVault] Loaded ${this.cache.size} credentials from keystore`);
416
+ }
417
+ catch (error) {
418
+ console.error(`[LocalVault] Failed to load keystore:`, error.message);
419
+ // If decryption fails, start with empty vault
420
+ this.cache.clear();
421
+ }
422
+ }
423
+ /**
424
+ * Save encrypted keystore with header warnings
425
+ */
426
+ async saveKeystore() {
427
+ try {
428
+ const data = {
429
+ version: '1.0',
430
+ created_at: new Date().toISOString(),
431
+ credentials: Object.fromEntries(this.cache)
432
+ };
433
+ const json = JSON.stringify(data);
434
+ const encrypted = this.encrypt(json);
435
+ // Convert to base64 for readable encoding
436
+ const base64 = encrypted.toString('base64');
437
+ // Split into 64-character lines for readability
438
+ const lines = [];
439
+ for (let i = 0; i < base64.length; i += 64) {
440
+ lines.push(base64.substring(i, Math.min(i + 64, base64.length)));
441
+ }
442
+ // Create file with header warnings
443
+ const header = `# ===================================================================
444
+ # GATEWAY TYPE 3 ENCRYPTED KEYSTORE
445
+ # ===================================================================
446
+ #
447
+ # ⚠️ DO NOT EDIT THIS FILE MANUALLY ⚠️
448
+ #
449
+ # This file contains AES-256-GCM encrypted API credentials.
450
+ # The encrypted data is base64-encoded for readability but remains
451
+ # cryptographically secure.
452
+ #
453
+ # To add, update, or remove credentials:
454
+ # 1. Use the Gateway Type 3 management CLI
455
+ # 2. Or restart the gateway with new environment variables
456
+ #
457
+ # Manual edits will corrupt the encryption and cause failures.
458
+ #
459
+ # Format: Base64-encoded encrypted binary data
460
+ # Encryption: AES-256-GCM with scrypt-derived key
461
+ # Stored credentials: ${this.cache.size}
462
+ # Last updated: ${new Date().toISOString()}
463
+ # ===================================================================
464
+
465
+ `;
466
+ const content = header + lines.join('\n') + '\n';
467
+ fs.writeFileSync(this.keystorePath, content);
468
+ (0, debug_utils_1.debugLog)(`[LocalVault] Saved ${this.cache.size} credentials to keystore`);
469
+ }
470
+ catch (error) {
471
+ console.error(`[LocalVault] Failed to save keystore:`, error.message);
472
+ throw error;
473
+ }
474
+ }
475
+ /**
476
+ * Encrypt data using AES-256-GCM
477
+ */
478
+ encrypt(plaintext) {
479
+ const iv = (0, crypto_1.randomBytes)(16);
480
+ const cipher = (0, crypto_1.createCipheriv)(this.algorithm, this.masterKey, iv);
481
+ let encrypted = cipher.update(plaintext, 'utf8');
482
+ encrypted = Buffer.concat([encrypted, cipher.final()]);
483
+ const authTag = cipher.getAuthTag();
484
+ // Return: iv + authTag + encrypted
485
+ return Buffer.concat([iv, authTag, encrypted]);
486
+ }
487
+ /**
488
+ * Decrypt data using AES-256-GCM
489
+ */
490
+ decrypt(encrypted) {
491
+ const iv = encrypted.subarray(0, 16);
492
+ const authTag = encrypted.subarray(16, 32);
493
+ const ciphertext = encrypted.subarray(32);
494
+ const decipher = (0, crypto_1.createDecipheriv)(this.algorithm, this.masterKey, iv);
495
+ decipher.setAuthTag(authTag);
496
+ let decrypted = decipher.update(ciphertext);
497
+ decrypted = Buffer.concat([decrypted, decipher.final()]);
498
+ return decrypted.toString('utf8');
499
+ }
500
+ /**
501
+ * Initialize vault with credentials from environment variables
502
+ * NOTE: This is for backward compatibility only
503
+ * In production, use connection_id as key, not provider names
504
+ * Example: vault.setCredential('uuid-of-connection', 'sk-...')
505
+ */
506
+ async initializeFromEnvironment() {
507
+ (0, debug_utils_1.debugLog)(`[LocalVault] Initializing from environment variables (legacy mode)`);
508
+ (0, debug_utils_1.debugLog)(`[LocalVault] WARNING: Using provider names as keys. In production, use connection_id UUIDs.`);
509
+ const providers = ['openai', 'anthropic', 'google', 'groq', 'deepseek', 'mistral'];
510
+ let count = 0;
511
+ for (const provider of providers) {
512
+ const envKey = `${provider.toUpperCase()}_API_KEY`;
513
+ const apiKey = process.env[envKey];
514
+ if (apiKey && !apiKey.includes('mock')) {
515
+ // LEGACY: Using provider name as key
516
+ // PRODUCTION: Should use connection_id UUID
517
+ await this.setCredential(provider, apiKey);
518
+ count++;
519
+ }
520
+ }
521
+ (0, debug_utils_1.debugLog)(`[LocalVault] Initialized ${count} credentials from environment (legacy provider name keys)`);
522
+ }
523
+ /**
524
+ * Export credentials (for backup - USE WITH CAUTION)
525
+ * Returns map of connection_id -> apiKey
526
+ */
527
+ export() {
528
+ console.warn(`[LocalVault] WARNING: Exporting credentials in plain text`);
529
+ return Object.fromEntries(this.cache);
530
+ }
531
+ /**
532
+ * Import credentials (for restore)
533
+ * @param credentials - Map of connection_id -> apiKey
534
+ */
535
+ async import(credentials) {
536
+ (0, debug_utils_1.debugLog)(`[LocalVault] Importing ${Object.keys(credentials).length} credentials`);
537
+ for (const [accessPointId, apiKey] of Object.entries(credentials)) {
538
+ await this.setCredential(accessPointId, apiKey);
539
+ }
540
+ }
541
+ }
542
+ exports.LocalVault = LocalVault;
543
+ LocalVault.instances = new Map();
544
+ /**
545
+ * Usage Example (PRODUCTION):
546
+ *
547
+ * const vault = new LocalVault({
548
+ * vaultPath: './.vault',
549
+ * masterPassword: 'my-secure-password'
550
+ * });
551
+ *
552
+ * // Store credential using connection_id (from database) with provider mapping
553
+ * await vault.setCredential(
554
+ * '12345678-1234-1234-1234-123456789abc', // connection_id
555
+ * 'sk-...', // API key
556
+ * 'groq', // provider name (optional, for config)
557
+ * 'Groq production endpoint' // description (optional)
558
+ * );
559
+ *
560
+ * // Retrieve credential using connection_id
561
+ * const apiKey = vault.getCredential('12345678-1234-1234-1234-123456789abc');
562
+ *
563
+ * // Check available access points
564
+ * const accessPoints = vault.listAccessPoints();
565
+ * debugLog('Stored credentials for:', accessPoints);
566
+ *
567
+ * // Files created:
568
+ * // .vault/config.json - Clear text, editable, maps provider names to UUIDs
569
+ * // .vault/keystore.enc - Encrypted, base64-encoded, with DO NOT EDIT warnings
570
+ */
571
+ //# sourceMappingURL=local-vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-vault.js","sourceRoot":"","sources":["../local-vault.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAyC;AACzC,qCAAqC;AACrC,yDAAyD;AACzD,uDAAuD;AACvD,sDAAsD;AAEtD,mCAAmF;AACnF,uCAAyB;AACzB,2CAA6B;AAsB7B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAa,UAAU;IAYnB,YAAY,MAIX;QATO,UAAK,GAAwB,IAAI,GAAG,EAAE,CAAC;QAEvC,cAAS,GAAG,aAAa,CAAC;QAQ9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE5B,0EAA0E;QAC1E,2CAA2C;QAC3C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC;QACjD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAE7D,kCAAkC;QAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,sBAAsB,CAAC;QACtG,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,iCAAiC;QAC1F,IAAI,CAAC,SAAS,GAAG,IAAA,mBAAU,EAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAEhD,gCAAgC;QAChC,IAAA,sBAAQ,EAAC,6CAA6C,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,IAAA,sBAAQ,EAAC,kCAAkC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,IAAA,sBAAQ,EAAC,oCAAoC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC;gBACD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjD,IAAA,sBAAQ,EAAC,6CAA6C,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzE,MAAM,KAAK,CAAC;YAChB,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAA,sBAAQ,EAAC,uCAAuC,CAAC,CAAC;QACtD,CAAC;QAED,0BAA0B;QAC1B,IAAI,CAAC,MAAM,GAAG;YACV,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,mEAAmE;YAC5E,WAAW,EAAE,EAAE;SAClB,CAAC;QAEF,8CAA8C;QAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,MAAe;QACrC,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,CAAC;QAChC,IAAA,sBAAQ,EAAC,6CAA6C,GAAG,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,IAAA,sBAAQ,EAAC,+CAA+C,GAAG,EAAE,CAAC,CAAC;YAC/D,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAE7B,IAAI,SAAiB,CAAC;YACtB,IAAI,MAAM,EAAE,CAAC;gBACT,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACJ,yCAAyC;gBACzC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAChD,CAAC;YAED,IAAA,sBAAQ,EAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;YAC1D,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC;gBACzC,SAAS;gBACT,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,sBAAsB;gBAC3E,MAAM;aACT,CAAC,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACJ,IAAA,sBAAQ,EAAC,mDAAmD,GAAG,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,aAAa,CAAC,MAAe;QACvC,MAAM,GAAG,GAAG,MAAM,IAAI,SAAS,CAAC;QAChC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,iBAAiB;QAC3B,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,SAAS;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,cAAc;QACxB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACnD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAE7D,OAAO,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAc;QACjD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACnD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAE1D,+BAA+B;QAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,IAAA,sBAAQ,EAAC,wDAAwD,CAAC,CAAC;YACnE,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAA,sBAAQ,EAAC,2EAA2E,MAAM,EAAE,CAAC,CAAC;QAE9F,IAAI,CAAC;YACD,oBAAoB;YACpB,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC;gBAC/B,SAAS,EAAE,UAAU;gBACrB,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,sBAAsB;aAC9E,CAAC,CAAC;YAEH,iCAAiC;YACjC,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAEhD,uCAAuC;YACvC,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;YAEzC,wBAAwB;YACxB,KAAK,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBAChE,MAAM,QAAQ,CAAC,aAAa,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YACxD,CAAC;YAED,2BAA2B;YAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9B,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBACzD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAEtC,wCAAwC;gBACxC,KAAK,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC9E,MAAM,EAAE,GAAG,QAA6B,CAAC;oBACzC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;gBACnD,CAAC;gBAED,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;YAChC,CAAC;YAED,IAAA,sBAAQ,EAAC,2BAA2B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,4BAA4B,CAAC,CAAC;YAEjG,0CAA0C;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YAC1D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,6CAA6C;gBAC7C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACjE,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,SAAS,EAAE,CAAC,CAAC;gBAC9E,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBAC7C,IAAA,sBAAQ,EAAC,8CAA8C,iBAAiB,EAAE,CAAC,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACJ,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACtC,IAAA,sBAAQ,EAAC,8CAA8C,UAAU,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,2CAA2C,UAAU,EAAE,CAAC,CAAC;YACvE,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,aAAa,CACtB,aAAqB,EACrB,MAAc,EACd,QAAiB,EACjB,WAAoB;QAEpB,IAAA,sBAAQ,EAAC,sDAAsD,aAAa,EAAE,CAAC,CAAC;QAEhF,eAAe;QACf,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAEtC,0CAA0C;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG;gBAChC,aAAa,EAAE,aAAa;gBAC5B,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,WAAW,IAAI,GAAG,QAAQ,eAAe;aACzD,CAAC;QACN,CAAC;QAED,0BAA0B;QAC1B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,aAAqB;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,aAAqB;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACI,gBAAgB;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,gBAAgB,CAAC,aAAqB;QAC/C,IAAA,sBAAQ,EAAC,uDAAuD,aAAa,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAEjC,6BAA6B;QAC7B,KAAK,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7E,IAAI,QAAQ,CAAC,aAAa,KAAK,aAAa,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC7C,MAAM;YACV,CAAC;QACL,CAAC;QAED,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ;QACjB,IAAA,sBAAQ,EAAC,uCAAuC,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,UAAU,CAAC,MAAc;QAClC,IAAA,sBAAQ,EAAC,iDAAiD,CAAC,CAAC;QAC5D,IAAA,sBAAQ,EAAC,iCAAiC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3D,IAAA,sBAAQ,EAAC,+BAA+B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC7D,IAAA,sBAAQ,EAAC,yBAAyB,IAAI,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC,CAAC;QAEhE,yEAAyE;QACzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,IAAA,sBAAQ,EAAC,mDAAmD,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7E,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACjD,IAAA,sBAAQ,EAAC,6CAA6C,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACI,UAAU;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACI,UAAU;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,aAAa;QACtB,IAAA,sBAAQ,EAAC,kDAAkD,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,UAAU;QACd,IAAI,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClC,IAAA,sBAAQ,EAAC,4CAA4C,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBACxE,OAAO;YACX,CAAC;YAED,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAErC,IAAA,sBAAQ,EAAC,mCAAmC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,wBAAwB,CAAC,CAAC;QACrH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACpE,4BAA4B;QAChC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU;QACpB,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC9C,IAAA,sBAAQ,EAAC,kCAAkC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,wBAAwB,CAAC,CAAC;QACpH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACpE,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;OAEG;IACK,YAAY;QAChB,IAAI,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACpC,IAAA,sBAAQ,EAAC,8CAA8C,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;gBAC5E,OAAO;YACX,CAAC;YAED,6DAA6D;YAC7D,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,KAAK;iBACnB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;iBAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;YAEd,wCAAwC;YACxC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEpD,UAAU;YACV,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEnC,iDAAiD;YACjD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,EAAE;gBACvE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,MAAgB,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,IAAA,sBAAQ,EAAC,uBAAuB,IAAI,CAAC,KAAK,CAAC,IAAI,4BAA4B,CAAC,CAAC;QACjF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACtE,8CAA8C;YAC9C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACtB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG;gBACT,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;aAC9C,CAAC;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAErC,0CAA0C;YAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAE5C,gDAAgD;YAChD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACrE,CAAC;YAED,mCAAmC;YACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;wBAkBH,IAAI,CAAC,KAAK,CAAC,IAAI;kBACrB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;CAGzC,CAAC;YAEU,MAAM,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACjD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAE7C,IAAA,sBAAQ,EAAC,sBAAsB,IAAI,CAAC,KAAK,CAAC,IAAI,0BAA0B,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACtE,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;OAEG;IACK,OAAO,CAAC,SAAiB;QAC7B,MAAM,EAAE,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAElE,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjD,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAI,MAAc,CAAC,UAAU,EAAE,CAAC;QAE7C,mCAAmC;QACnC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACK,OAAO,CAAC,SAAiB;QAC7B,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,IAAA,yBAAgB,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACrE,QAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEtC,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5C,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEzD,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,yBAAyB;QAClC,IAAA,sBAAQ,EAAC,oEAAoE,CAAC,CAAC;QAC/E,IAAA,sBAAQ,EAAC,6FAA6F,CAAC,CAAC;QAExG,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACnF,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;YACnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEnC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,qCAAqC;gBACrC,4CAA4C;gBAC5C,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC3C,KAAK,EAAE,CAAC;YACZ,CAAC;QACL,CAAC;QAED,IAAA,sBAAQ,EAAC,4BAA4B,KAAK,2DAA2D,CAAC,CAAC;IAC3G,CAAC;IAED;;;OAGG;IACI,MAAM;QACT,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,MAAM,CAAC,WAAgD;QAChE,IAAA,sBAAQ,EAAC,0BAA0B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,cAAc,CAAC,CAAC;QAElF,KAAK,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;;AA9iBL,gCA+iBC;AA9iBkB,oBAAS,GAA4B,IAAI,GAAG,EAAE,AAArC,CAAsC;AAgjBlE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG"}