UNPKG

n8n-nodes-tushare

Version:
132 lines 4.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TushareTool = void 0; const tools_1 = require("@langchain/core/tools"); const zod_1 = require("zod"); class TushareTool extends tools_1.Tool { constructor(fields) { const schema = TushareTool.generateSchema(fields.inputFields); super(); this.name = fields.name; this.description = fields.description; this.token = fields.token; this.timeout = fields.timeout || 30000; this.customSchema = schema; } static generateSchema(inputFields) { if (!inputFields || inputFields.length === 0) { return zod_1.z.object({ limit: zod_1.z.number().optional().default(10), offset: zod_1.z.number().optional().default(0), additionalFields: zod_1.z.record(zod_1.z.any()).optional(), }); } const schemaFields = {}; inputFields.forEach(field => { if (!field.fieldName || field.fieldName.trim() === '') { return; } let fieldSchema; switch (field.type) { case 'number': fieldSchema = zod_1.z.number(); break; case 'boolean': fieldSchema = zod_1.z.boolean(); break; case 'date': fieldSchema = zod_1.z.string().regex(/^\d{4}-\d{2}-\d{2}$/, '日期格式应为 YYYY-MM-DD'); break; case 'string': default: fieldSchema = zod_1.z.string(); break; } if (field.defaultValue !== undefined) { fieldSchema = fieldSchema.optional().default(field.defaultValue); } else if (!field.required) { fieldSchema = fieldSchema.optional(); } schemaFields[field.fieldName] = fieldSchema; }); schemaFields.limit = zod_1.z.number().optional().default(10); schemaFields.offset = zod_1.z.number().optional().default(0); schemaFields.additionalFields = zod_1.z.record(zod_1.z.any()).optional(); return zod_1.z.object(schemaFields); } getSchema() { return this.customSchema; } static lc_name() { return 'DataTool'; } get lc_namespace() { return ['data', 'tools']; } async _call(input) { let params = {}; try { params = JSON.parse(input); } catch { if (input.includes('=')) { const searchParams = new URLSearchParams(input); params = Object.fromEntries(searchParams.entries()); } else if (input.trim()) { params = { query: input }; } } return await this.processDataRequest(params); } async processDataRequest(params) { try { const escapePercentSigns = (value) => { if (typeof value === 'string') { return value.replace(/%/g, '%%'); } return value; }; const escapedParams = Object.fromEntries(Object.entries(params).map(([key, value]) => [ key, escapePercentSigns(value) ])); if (!escapedParams.limit) { escapedParams.limit = 10000; } if (!escapedParams.offset) { escapedParams.offset = 0; } const requestBody = { api_name: this.name, token: this.token, params: escapedParams, fields: '', }; console.log('requestBody', JSON.stringify(requestBody)); const response = await fetch('https://api.tushare.pro', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(requestBody), signal: AbortSignal.timeout(this.timeout), }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); console.log('data', data); return JSON.stringify(data, null, 2); } catch (error) { const errorMessage = error && typeof error === 'object' && error !== null && 'message' in error ? error.message : String(error || 'Unknown error'); return `Error: ${errorMessage}`; } } } exports.TushareTool = TushareTool; //# sourceMappingURL=TushareTool.js.map