UNPKG

@vessl-ai/mcpctl-control-plane

Version:

Vessl MCP Control Plane service for managing distributed jobs.

85 lines 3.44 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SecretStoreFactory = exports.VaultSecretStore = exports.KeychainSecretStore = void 0; const common_1 = require("@nestjs/common"); const config_1 = require("@nestjs/config"); const secret_1 = require("@vessl-ai/mcpctl-shared/types/domain/secret"); const keytar_1 = require("keytar"); class KeychainSecretStore { KEYCHAIN_SERVICE_PREFIX = 'mcpctl'; sanitizeKey(key) { return key.replace(/[^a-zA-Z0-9\.-_]/g, '-'); } async set(key, value) { const sanitizedKey = this.sanitizeKey(key); await (0, keytar_1.setPassword)(this.KEYCHAIN_SERVICE_PREFIX, sanitizedKey, value); return sanitizedKey; } async get(key) { return (0, keytar_1.getPassword)(this.KEYCHAIN_SERVICE_PREFIX, this.sanitizeKey(key)); } async list() { const allCredentials = await (0, keytar_1.findCredentials)(this.KEYCHAIN_SERVICE_PREFIX); return allCredentials.map((credential) => credential.account); } async delete(key) { await (0, keytar_1.deletePassword)(this.KEYCHAIN_SERVICE_PREFIX, this.sanitizeKey(key)); } } exports.KeychainSecretStore = KeychainSecretStore; class VaultSecretStore { async set(key, value) { throw new Error('Not implemented'); } async get(key) { throw new Error('Not implemented'); } async list() { throw new Error('Not implemented'); } async delete(key) { throw new Error('Not implemented'); } } exports.VaultSecretStore = VaultSecretStore; let SecretStoreFactory = class SecretStoreFactory { configService; secretStores; constructor(configService) { this.configService = configService; const secretConfig = configService.get('secret'); if (!secretConfig) { throw new Error('Secret config not found'); } this.secretStores = secretConfig.storeTypes.reduce((acc, type) => { acc[type] = this.createSecretStore(type); return acc; }, {}); } createSecretStore(type) { switch (type) { case secret_1.SecretRefSource.Keychain: return new KeychainSecretStore(); case secret_1.SecretRefSource.Vault: return new VaultSecretStore(); } } getSecretStore(type) { return this.secretStores[type]; } }; exports.SecretStoreFactory = SecretStoreFactory; exports.SecretStoreFactory = SecretStoreFactory = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [config_1.ConfigService]) ], SecretStoreFactory); //# sourceMappingURL=secret.store.js.map