UNPKG

@eggjs/controller-decorator

Version:

tegg controller decorator

145 lines 12.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AgentController = AgentController; const core_decorator_1 = require("@eggjs/core-decorator"); const tegg_common_util_1 = require("@eggjs/tegg-common-util"); const tegg_types_1 = require("@eggjs/tegg-types"); const AgentInfoUtil_1 = require("../../util/AgentInfoUtil"); const ControllerInfoUtil_1 = __importDefault(require("../../util/ControllerInfoUtil")); const HTTPInfoUtil_1 = __importDefault(require("../../util/HTTPInfoUtil")); const MethodInfoUtil_1 = __importDefault(require("../../util/MethodInfoUtil")); // Default implementations for unimplemented methods. // function.length must match the param count for framework param validation. // Stubs are marked with Symbol.for('AGENT_NOT_IMPLEMENTED') so agent-runtime // can distinguish them from user-defined methods at enhancement time. function createNotImplemented(methodName, paramCount) { let fn; if (paramCount >= 2) { // eslint-disable-next-line @typescript-eslint/no-unused-vars fn = async function (_a, _b) { throw new Error(`${methodName} not implemented`); }; } else if (paramCount === 1) { // eslint-disable-next-line @typescript-eslint/no-unused-vars fn = async function (_arg) { throw new Error(`${methodName} not implemented`); }; } else { fn = async function () { throw new Error(`${methodName} not implemented`); }; } AgentInfoUtil_1.AgentInfoUtil.setNotImplemented(fn); return fn; } const AGENT_ROUTES = [ { methodName: 'createThread', httpMethod: tegg_types_1.HTTPMethodEnum.POST, path: '/threads', params: [], }, { methodName: 'getThread', httpMethod: tegg_types_1.HTTPMethodEnum.GET, path: '/threads/:id', params: [{ index: 0, type: 'pathParam', name: 'id' }], }, { methodName: 'getLatestRunId', httpMethod: tegg_types_1.HTTPMethodEnum.GET, path: '/threads/:id/latest-run', params: [{ index: 0, type: 'pathParam', name: 'id' }], }, { methodName: 'asyncRun', httpMethod: tegg_types_1.HTTPMethodEnum.POST, path: '/runs', params: [{ index: 0, type: 'body' }], }, { methodName: 'streamRun', httpMethod: tegg_types_1.HTTPMethodEnum.POST, path: '/runs/stream', params: [{ index: 0, type: 'body' }], }, { methodName: 'getRunStream', httpMethod: tegg_types_1.HTTPMethodEnum.GET, path: '/runs/:id/stream', params: [ { index: 0, type: 'pathParam', name: 'id' }, { index: 1, type: 'query', name: 'lastSeq' }, ], }, { methodName: 'syncRun', httpMethod: tegg_types_1.HTTPMethodEnum.POST, path: '/runs/wait', params: [{ index: 0, type: 'body' }], }, { methodName: 'getRun', httpMethod: tegg_types_1.HTTPMethodEnum.GET, path: '/runs/:id', params: [{ index: 0, type: 'pathParam', name: 'id' }], }, { methodName: 'cancelRun', httpMethod: tegg_types_1.HTTPMethodEnum.POST, path: '/runs/:id/cancel', params: [{ index: 0, type: 'pathParam', name: 'id' }], }, ]; function AgentController() { return function (constructor) { // Set controller type as HTTP so existing infrastructure handles it ControllerInfoUtil_1.default.setControllerType(constructor, tegg_types_1.ControllerType.HTTP); // Set the fixed base HTTP path HTTPInfoUtil_1.default.setHTTPPath('/api/v1', constructor); // Apply SingletonProto with custom proto impl type const func = (0, core_decorator_1.SingletonProto)({ accessLevel: tegg_types_1.AccessLevel.PUBLIC, protoImplType: tegg_types_1.AGENT_CONTROLLER_PROTO_IMPL_TYPE, }); func(constructor); // Set file path for prototype // Stack depth 5: [0] getCalleeFromStack → [1] decorator fn → [2-4] reflect/oxc runtime → [5] user source core_decorator_1.PrototypeUtil.setFilePath(constructor, tegg_common_util_1.StackUtil.getCalleeFromStack(false, 5)); // Register each agent route for (const route of AGENT_ROUTES) { // Inject default implementation if method not defined if (!constructor.prototype[route.methodName]) { constructor.prototype[route.methodName] = createNotImplemented(route.methodName, route.params.length); } // Set method controller type MethodInfoUtil_1.default.setMethodControllerType(constructor, route.methodName, tegg_types_1.ControllerType.HTTP); // Set HTTP method (GET/POST) HTTPInfoUtil_1.default.setHTTPMethodMethod(route.httpMethod, constructor, route.methodName); // Set HTTP path HTTPInfoUtil_1.default.setHTTPMethodPath(route.path, constructor, route.methodName); // Set parameter metadata for (const param of route.params) { if (param.type === 'body') { HTTPInfoUtil_1.default.setHTTPMethodParamType(tegg_types_1.HTTPParamType.BODY, param.index, constructor, route.methodName); } else if (param.type === 'pathParam') { HTTPInfoUtil_1.default.setHTTPMethodParamType(tegg_types_1.HTTPParamType.PARAM, param.index, constructor, route.methodName); HTTPInfoUtil_1.default.setHTTPMethodParamName(param.name, param.index, constructor, route.methodName); } else if (param.type === 'query') { HTTPInfoUtil_1.default.setHTTPMethodParamType(tegg_types_1.HTTPParamType.QUERY, param.index, constructor, route.methodName); HTTPInfoUtil_1.default.setHTTPMethodParamName(param.name, param.index, constructor, route.methodName); } } } // Mark the class as an AgentController for precise detection AgentInfoUtil_1.AgentInfoUtil.setAgentController(constructor); }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnRDb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RlY29yYXRvci9hZ2VudC9BZ2VudENvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFrSEEsMENBb0RDO0FBdEtELDBEQUFzRTtBQUN0RSw4REFBb0Q7QUFFcEQsa0RBTTJCO0FBRTNCLDREQUF5RDtBQUN6RCx1RkFBK0Q7QUFDL0QsMkVBQW1EO0FBQ25ELCtFQUF1RDtBQWV2RCxxREFBcUQ7QUFDckQsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSxzRUFBc0U7QUFDdEUsU0FBUyxvQkFBb0IsQ0FBQyxVQUFrQixFQUFFLFVBQWtCO0lBQ2xFLElBQUksRUFBRSxDQUFDO0lBQ1AsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEIsNkRBQTZEO1FBQzdELEVBQUUsR0FBRyxLQUFLLFdBQVUsRUFBVyxFQUFFLEVBQVc7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFVBQVUsa0JBQWtCLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUM7SUFDSixDQUFDO1NBQU0sSUFBSSxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIsNkRBQTZEO1FBQzdELEVBQUUsR0FBRyxLQUFLLFdBQVUsSUFBYTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsVUFBVSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQztJQUNKLENBQUM7U0FBTSxDQUFDO1FBQ04sRUFBRSxHQUFHLEtBQUs7WUFDUixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsVUFBVSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQztJQUNKLENBQUM7SUFDRCw2QkFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVELE1BQU0sWUFBWSxHQUEyQjtJQUMz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