@kya-os/mcp-i
Version:
The TypeScript MCP framework with identity features built-in
123 lines (122 loc) • 4.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.injectHttpVariables = injectHttpVariables;
exports.injectCorsVariables = injectCorsVariables;
exports.injectOAuthVariables = injectOAuthVariables;
exports.injectPathsVariables = injectPathsVariables;
exports.injectStdioVariables = injectStdioVariables;
exports.injectIdentityVariables = injectIdentityVariables;
exports.injectRuntimeConfigPath = injectRuntimeConfigPath;
const utils_1 = require("./utils");
function injectHttpVariables(httpConfig, mode) {
const resolvedConfig = (0, utils_1.getResolvedHttpConfig)(httpConfig);
if (!resolvedConfig)
return {};
// Double-stringify for webpack DefinePlugin - it replaces the variable with the raw value,
// so we need to stringify twice to inject an actual string literal
return {
HTTP_CONFIG: JSON.stringify(JSON.stringify({
port: resolvedConfig.port,
host: resolvedConfig.host,
bodySizeLimit: resolvedConfig.bodySizeLimit,
endpoint: resolvedConfig.endpoint,
stateless: true,
debug: mode === "development",
})),
};
}
function injectCorsVariables(httpConfig) {
const corsConfig = (0, utils_1.getResolvedCorsConfig)(httpConfig);
// Double-stringify for webpack DefinePlugin
return {
HTTP_CORS_CONFIG: JSON.stringify(JSON.stringify({
origin: corsConfig.origin ?? "",
methods: corsConfig.methods ?? "",
allowedHeaders: corsConfig.allowedHeaders ?? "",
exposedHeaders: corsConfig.exposedHeaders ?? "",
credentials: corsConfig.credentials ?? false,
maxAge: corsConfig.maxAge ?? 0,
})),
};
}
function injectOAuthVariables(userConfig) {
const oauthConfig = (0, utils_1.getResolvedOAuthConfig)(userConfig);
// Double-stringify for webpack DefinePlugin
return {
OAUTH_CONFIG: JSON.stringify(JSON.stringify(oauthConfig)),
};
}
function injectPathsVariables(userConfig) {
const pathsConfig = (0, utils_1.getResolvedPathsConfig)(userConfig);
// Double-stringify for webpack DefinePlugin
return {
TOOLS_PATH: JSON.stringify(JSON.stringify(pathsConfig.tools)),
};
}
function injectStdioVariables(stdioConfig) {
if (!stdioConfig)
return {};
const debug = typeof stdioConfig === "object" ? stdioConfig.debug : false;
// Double-stringify for webpack DefinePlugin
return {
STDIO_CONFIG: JSON.stringify(JSON.stringify({
debug,
})),
};
}
function injectIdentityVariables(identityConfig, mode, projectRoot) {
if (!identityConfig || !identityConfig.enabled) {
// Double-stringify for webpack DefinePlugin
return {
IDENTITY_CONFIG: JSON.stringify(JSON.stringify({
enabled: false,
})),
};
}
// Resolve devIdentityPath to absolute path at compile time
// This ensures the bundle can find the identity file regardless of CWD at runtime
const path = require("path");
const devIdentityPath = identityConfig.devIdentityPath || ".mcpi/identity.json";
const absoluteIdentityPath = path.isAbsolute(devIdentityPath)
? devIdentityPath
: path.join(projectRoot, devIdentityPath);
// Debug: log the resolved path
console.log("[COMPILER] Identity path resolution:");
console.log(" projectRoot:", projectRoot);
console.log(" devIdentityPath:", devIdentityPath);
console.log(" absoluteIdentityPath:", absoluteIdentityPath);
// Double-stringify for webpack DefinePlugin
return {
IDENTITY_CONFIG: JSON.stringify(JSON.stringify({
enabled: true,
environment: identityConfig.environment || mode,
devIdentityPath: absoluteIdentityPath,
privacyMode: identityConfig.privacyMode || false,
debug: identityConfig.debug || mode === "development",
})),
};
}
function injectRuntimeConfigPath(projectRoot) {
// Check if mcpi-runtime-config.ts exists in the project
const fs = require("fs");
const path = require("path");
// Try multiple possible locations
const possiblePaths = [
path.join(projectRoot, "src/mcpi-runtime-config.ts"),
path.join(projectRoot, "src/mcpi-runtime-config.js"),
path.join(projectRoot, "mcpi-runtime-config.ts"),
path.join(projectRoot, "mcpi-runtime-config.js"),
];
let runtimeConfigPath = null;
for (const p of possiblePaths) {
if (fs.existsSync(p)) {
runtimeConfigPath = p;
console.log("[COMPILER] Found runtime config at:", p);
break;
}
}
// Single-stringify for webpack DefinePlugin (path strings don't need double-stringify)
return {
RUNTIME_CONFIG_PATH: JSON.stringify(runtimeConfigPath),
};
}