@kya-os/mcp-i
Version:
The TypeScript MCP framework with identity features built-in
119 lines (118 loc) • 4.76 kB
JavaScript
;
/**
* MCPINodeRuntimeWrapper
*
* Node.js-specific runtime that extends the core runtime with Node.js providers.
* Provides backward compatibility by accepting legacy configuration format.
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MCPIRuntimeWrapper = exports.MCPINodeRuntimeWrapper = void 0;
exports.createMCPIRuntime = createMCPIRuntime;
const mcp_i_core_1 = require("@kya-os/mcp-i-core");
const node_providers_1 = require("../providers/node-providers");
const path_1 = __importDefault(require("path"));
/**
* Convert legacy config to provider-based config
*/
function createProvidersFromConfig(config) {
const cryptoProvider = new node_providers_1.NodeCryptoProvider();
const clockProvider = new node_providers_1.NodeClockProvider();
const fetchProvider = new node_providers_1.NodeFetchProvider();
const identityPath = config.identity?.devIdentityPath || path_1.default.join(process.cwd(), ".mcp-i");
const storageProvider = new node_providers_1.FileStorageProvider(identityPath);
const identityProvider = new node_providers_1.FileIdentityProvider(identityPath, cryptoProvider);
const nonceCacheProvider = (0, node_providers_1.getNonceCacheProvider)();
return {
cryptoProvider,
clockProvider,
fetchProvider,
storageProvider,
nonceCacheProvider,
identityProvider,
environment: config.identity?.environment || "development",
session: {
timestampSkewSeconds: config.session?.timestampSkewSeconds || 120,
ttlMinutes: config.session?.sessionTtlMinutes || 30,
},
audit: config.audit
? {
enabled: config.audit.enabled !== false,
logFunction: config.audit.logFunction,
includePayloads: config.audit.includePayloads,
includeProofHashes: config.audit.includeProofHashes,
}
: undefined,
wellKnown: config.wellKnown
? {
enabled: true,
serviceName: config.wellKnown.agentMetadata?.name,
}
: undefined,
};
}
/**
* Node.js-specific runtime implementation
*/
class MCPINodeRuntimeWrapper extends mcp_i_core_1.MCPIRuntimeBase {
legacyConfig;
// accessControlService is inherited from MCPIRuntimeBase (protected), no need to redeclare
// proofVerifier is inherited from MCPIRuntimeBase (protected), no need to redeclare
constructor(config = {}) {
const coreConfig = createProvidersFromConfig(config);
super(coreConfig);
this.legacyConfig = config;
// Instantiate ProofVerifier
// Access protected property from base class using type assertion
this.proofVerifier = new mcp_i_core_1.ProofVerifier({
cryptoProvider: coreConfig.cryptoProvider,
clockProvider: coreConfig.clockProvider,
nonceCacheProvider: coreConfig.nonceCacheProvider,
fetchProvider: coreConfig.fetchProvider,
timestampSkewSeconds: coreConfig.session?.timestampSkewSeconds || 120,
});
// Instantiate AccessControlApiService if API key is available
const apiKey = process.env.AGENTSHIELD_API_KEY;
const apiUrl = process.env.AGENTSHIELD_API_URL || "https://kya.vouched.id";
if (apiKey) {
this.accessControlService = new mcp_i_core_1.AccessControlApiService({
baseUrl: apiUrl,
apiKey,
fetchProvider: coreConfig.fetchProvider,
logger: (msg, data) => {
if (coreConfig.environment === "development") {
console.log(`[AccessControl] ${msg}`, data);
}
},
});
}
}
/**
* Set AccessControlApiService (for testing or manual injection)
*/
setAccessControlService(service) {
this.accessControlService = service;
}
/**
* Set ProofVerifier (for testing or manual injection)
*/
setProofVerifier(verifier) {
// Set the base class protected property directly
// Use type assertion to access protected property from base class
this.proofVerifier = verifier;
}
}
exports.MCPINodeRuntimeWrapper = MCPINodeRuntimeWrapper;
/**
* Factory function for creating Node.js runtime
*/
function createMCPIRuntime(config) {
return new MCPINodeRuntimeWrapper(config);
}
/**
* Alias for backward compatibility
* @deprecated Use MCPINodeRuntimeWrapper
*/
exports.MCPIRuntimeWrapper = MCPINodeRuntimeWrapper;