@vessl-ai/mcpctl-control-plane
Version:
Vessl MCP Control Plane service for managing distributed jobs.
85 lines • 3.44 kB
JavaScript
;
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