@nutrient-sdk/dws-mcp-server
Version:
MCP server for Nutrient DWS Processor API
33 lines (32 loc) • 1.59 kB
JavaScript
import { z } from 'zod';
/** Trims whitespace and collapses an empty result to `undefined`, so a blank env var reads as unset. */
function trimmedOrUndefined(value) {
const trimmed = value?.trim();
return trimmed ? trimmed : undefined;
}
const RawEnvironmentSchema = z.object({
// A blank value must read as unset, or it is truthy enough to select static-key
// auth and suppress the OAuth flow, while being useless as a credential.
NUTRIENT_DWS_API_KEY: z.string().optional().transform(trimmedOrUndefined),
// Data Extraction is a separate product with its own tenant; a Processor
// static key is bound to the Processor tenant and is rejected at
// /extraction/parse, so it needs its own key when not using OAuth.
NUTRIENT_DWS_EXTRACTION_API_KEY: z.string().optional().transform(trimmedOrUndefined),
DWS_API_BASE_URL: z.string().url().default('https://api.nutrient.io'),
AUTH_SERVER_URL: z
.string()
.url()
.refine((u) => u.startsWith('https://') || u.startsWith('http://localhost'), 'AUTH_SERVER_URL must use https:// (except localhost for local development)')
.default('https://api.nutrient.io'),
CLIENT_ID: z.string().optional(),
});
export function getEnvironment(rawEnv = process.env) {
const raw = RawEnvironmentSchema.parse(rawEnv);
return {
nutrientApiKey: raw.NUTRIENT_DWS_API_KEY,
nutrientExtractionApiKey: raw.NUTRIENT_DWS_EXTRACTION_API_KEY,
dwsApiBaseUrl: raw.DWS_API_BASE_URL,
authServerUrl: raw.AUTH_SERVER_URL,
clientId: raw.CLIENT_ID,
};
}