@memberjunction/a2aserver
Version:
MemberJunction Agent-To-Agent (A2A) Server Implementation
66 lines • 2.93 kB
JavaScript
import * as dotenv from 'dotenv';
dotenv.config();
import { z } from 'zod';
import { cosmiconfigSync } from 'cosmiconfig';
import { LogError } from '@memberjunction/core';
const explorer = cosmiconfigSync('mj');
const databaseSettingsInfoSchema = z.object({
connectionTimeout: z.number(),
requestTimeout: z.number(),
dbReadOnlyUsername: z.string().optional(),
dbReadOnlyPassword: z.string().optional(),
});
const a2aServerEntityCapabilitySchema = z.object({
entityName: z.string().optional(),
schemaName: z.string().optional(),
get: z.boolean().optional().default(false),
create: z.boolean().optional().default(false),
update: z.boolean().optional().default(false),
delete: z.boolean().optional().default(false),
runView: z.boolean().optional().default(false),
});
const a2aServerInfoSchema = z.object({
port: z.coerce.number().optional().default(3200),
entityCapabilities: z.array(a2aServerEntityCapabilitySchema).optional(),
enableA2AServer: z.boolean().optional().default(false),
agentName: z.string().optional().default("MemberJunction"),
agentDescription: z.string().optional().default("MemberJunction A2A Agent"),
streamingEnabled: z.boolean().optional().default(true),
userEmail: z.string().optional().describe("Email address of the user to use for entity operations"),
});
const configInfoSchema = z.object({
databaseSettings: databaseSettingsInfoSchema,
dbHost: z.string().default('localhost'),
dbDatabase: z.string(),
dbPort: z.number({ coerce: true }).default(1433),
dbUsername: z.string(),
dbPassword: z.string(),
dbReadOnlyUsername: z.string().optional(),
dbReadOnlyPassword: z.string().optional(),
dbTrustServerCertificate: z.coerce
.boolean()
.default(false)
.transform((v) => (v ? 'Y' : 'N')),
dbInstanceName: z.string().optional(),
// A2A Server settings
a2aServerSettings: a2aServerInfoSchema.optional(),
mjCoreSchema: z.string(),
});
export const configInfo = loadConfig();
export const { dbUsername, dbPassword, dbHost, dbDatabase, dbPort, dbTrustServerCertificate, dbInstanceName, a2aServerSettings, mjCoreSchema: mj_core_schema, dbReadOnlyUsername, dbReadOnlyPassword, } = configInfo;
export function loadConfig() {
const configSearchResult = explorer.search(process.cwd());
if (!configSearchResult) {
throw new Error('Config file not found.');
}
if (configSearchResult.isEmpty) {
throw new Error(`Config file ${configSearchResult.filepath} is empty or does not exist.`);
}
const configParsing = configInfoSchema.safeParse(configSearchResult.config);
if (!configParsing.success) {
LogError('Error parsing config file', '', JSON.stringify(configParsing.error.issues, null, 2));
throw new Error('Error parsing config file');
}
return configParsing.data;
}
//# sourceMappingURL=config.js.map