UNPKG

@kakaopay-develop/agent-toolkit

Version:
501 lines (477 loc) 18.3 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/ai-sdk/index.ts var index_exports = {}; __export(index_exports, { KakaoPayAgentToolkit: () => toolkit_default }); module.exports = __toCommonJS(index_exports); // src/shared/payment/demoPayment.ts var import_zod = require("zod"); // src/shared/client.ts var import_axios = __toESM(require("axios")); var KakaoPayClient = class { constructor(secretKey) { const baseURL = "https://open-api.kakaopay.com"; this.client = import_axios.default.create({ baseURL: `${baseURL}`, headers: { Authorization: `SECRET_KEY ${secretKey}`, "Content-Type": "application/json" } }); } async post(url, data) { return await this.client.post(url, data); } }; var KAKAO_PAY_API_ENDPOINTS = { PAYMENT_READY: "/online/v1/payment/ready", PAYMENT_APPROVE: "/online/v1/payment/approve", PAYMENT_ORDER: "/online/v1/payment/order", PAYMENT_CANCEL: "/online/v1/payment/cancel", SUBSCRIPTION_REQUEST: "/online/v1/payment/subscription", SUBSCRIPTION_INACTIVE: "/online/v1/payment/manage/subscription/inactive", SUBSCRIPTION_GET: "/online/v1/payment/manage/subscription/status" }; // src/shared/payment/demoPayment.ts var demoPaymentPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uB370\uBAA8 \uACB0\uC81C \uB9C1\uD06C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - item_name (string): \uC0C1\uD488\uBA85 - total_amount (number): \uC0C1\uD488 \uCD1D\uC561 - link_type (string): \uB9C1\uD06C \uC720\uD615 (PC \uB610\uB294 MOBILE) `; var demoPaymentParameters = (_context = {}) => import_zod.z.object({ item_name: import_zod.z.string().default("\uD14C\uC2A4\uD2B8 \uC0C1\uD488\uBA85").describe("\uC0C1\uD488\uBA85 (\uCD5C\uB300 100\uC790)"), total_amount: import_zod.z.number().int().positive().default(1e3).describe("\uC0C1\uD488 \uCD1D\uC561"), link_type: import_zod.z.enum(["PC", "MOBILE"]).default("PC").describe("\uB9C1\uD06C \uC720\uD615") }); var demoPayment = async (client, context, params) => { const apiParams = { partner_order_id: "partner_order_id", partner_user_id: "partner_user_id", item_name: params.item_name, quantity: 1, total_amount: params.total_amount, tax_free_amount: 0, approval_url: "https://payment-demo.kakaopay.com/online/approval", cancel_url: "https://payment-demo.kakaopay.com/online/cancel", fail_url: "https://payment-demo.kakaopay.com/online/fail" }; const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_READY, { cid: context.cid, ...apiParams }); const responseData = response.data; const link = params.link_type === "PC" ? responseData.next_redirect_pc_url : responseData.next_redirect_mobile_url; return { demo_link: `${link}?kpayTid=${responseData.tid}`, tid: responseData.tid }; }; var tool = (context) => ({ method: "demo_payment", name: "Demo Payment", description: demoPaymentPrompt(context), parameters: demoPaymentParameters(context), actions: { payment: { demo: true } }, execute: demoPayment }); var demoPayment_default = tool; // src/shared/payment/getPayment.ts var import_zod2 = require("zod"); var getPaymentPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uC8FC\uBB38 \uC0C1\uD0DC\uB97C \uC870\uD68C\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - tid (string): \uACB0\uC81C \uACE0\uC720\uBC88\uD638 `; var getPaymentParameters = (_context = {}) => import_zod2.z.object({ tid: import_zod2.z.string().describe("\uACB0\uC81C \uACE0\uC720\uBC88\uD638") }); var getPayment = async (client, context, params) => { const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_ORDER, { cid: context.cid, ...params }); return response.data; }; var tool2 = (context) => ({ method: "get_payment", name: "Get Payment", description: getPaymentPrompt(context), parameters: getPaymentParameters(context), actions: { payment: { get: true } }, execute: getPayment }); var getPayment_default = tool2; // src/shared/payment/readyPayment.ts var import_zod3 = require("zod"); var readyPaymentPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uACB0\uC81C\uB97C \uC900\uBE44\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - partner_order_id (string): \uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 - partner_user_id (string): \uAC00\uB9F9\uC810 \uD68C\uC6D0 ID - item_name (string): \uC0C1\uD488\uBA85 - quantity (number): \uC0C1\uD488 \uC218\uB7C9 - total_amount (number): \uC0C1\uD488 \uCD1D\uC561 - tax_free_amount (number): \uC0C1\uD488 \uBE44\uACFC\uC138 \uAE08\uC561 - approval_url (string): \uACB0\uC81C \uC131\uACF5 \uC2DC redirect url - cancel_url (string): \uACB0\uC81C \uCDE8\uC18C \uC2DC redirect url - fail_url (string): \uACB0\uC81C \uC2E4\uD328 \uC2DC redirect url `; var ReadyPaymentSchema = import_zod3.z.object({ partner_order_id: import_zod3.z.string().describe("\uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 (\uCD5C\uB300 100\uC790)"), partner_user_id: import_zod3.z.string().describe("\uAC00\uB9F9\uC810 \uD68C\uC6D0 ID (\uCD5C\uB300 100\uC790)"), item_name: import_zod3.z.string().describe("\uC0C1\uD488\uBA85 (\uCD5C\uB300 100\uC790)"), quantity: import_zod3.z.number().int().positive().describe("\uC0C1\uD488 \uC218\uB7C9"), total_amount: import_zod3.z.number().int().positive().describe("\uC0C1\uD488 \uCD1D\uC561"), tax_free_amount: import_zod3.z.number().int().min(0).describe("\uC0C1\uD488 \uBE44\uACFC\uC138 \uAE08\uC561"), approval_url: import_zod3.z.string().url().describe("\uACB0\uC81C \uC131\uACF5 \uC2DC redirect url"), cancel_url: import_zod3.z.string().url().describe("\uACB0\uC81C \uCDE8\uC18C \uC2DC redirect url"), fail_url: import_zod3.z.string().url().describe("\uACB0\uC81C \uC2E4\uD328 \uC2DC redirect url") }); var readyPaymentParameters = (_context = {}) => ReadyPaymentSchema; var readyPayment = async (client, context, params) => { const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_READY, { cid: context.cid, ...params }); return response.data; }; var tool3 = (context) => ({ method: "ready_payment", name: "Ready Payment", description: readyPaymentPrompt(context), parameters: readyPaymentParameters(context), actions: { payment: { ready: true } }, execute: readyPayment }); var readyPayment_default = tool3; // src/shared/payment/approvePayment.ts var import_zod4 = require("zod"); var approvePaymentPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uB2E8\uAC74 \uACB0\uC81C\uB97C \uC2B9\uC778\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - tid (string): \uACB0\uC81C \uACE0\uC720\uBC88\uD638 - partner_order_id (string): \uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 - partner_user_id (string): \uAC00\uB9F9\uC810 \uD68C\uC6D0 ID - pg_token (string): \uACB0\uC81C\uC2B9\uC778 \uC694\uCCAD\uC744 \uC778\uC99D\uD558\uB294 \uD1A0\uD070 `; var approvePaymentParameters = (_context = {}) => import_zod4.z.object({ tid: import_zod4.z.string().describe("\uACB0\uC81C \uACE0\uC720\uBC88\uD638 (\uACB0\uC81C \uC900\uBE44\uC5D0\uC11C \uBC1B\uC740 tid)"), partner_order_id: import_zod4.z.string().describe("\uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 (\uACB0\uC81C \uC900\uBE44 API \uC694\uCCAD\uACFC \uC77C\uCE58)"), partner_user_id: import_zod4.z.string().describe("\uAC00\uB9F9\uC810 \uD68C\uC6D0 ID (\uACB0\uC81C \uC900\uBE44 API \uC694\uCCAD\uACFC \uC77C\uCE58)"), pg_token: import_zod4.z.string().describe( "\uACB0\uC81C\uC2B9\uC778 \uC694\uCCAD\uC744 \uC778\uC99D\uD558\uB294 \uD1A0\uD070 (\uACB0\uC81C \uC218\uB2E8 \uC120\uD0DD \uC644\uB8CC \uD6C4 \uB9AC\uB2E4\uC774\uB809\uD2B8\uC5D0\uC11C \uBC1B\uC74C)" ) }); var approvePayment = async (client, context, params) => { const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_APPROVE, { cid: context.cid, ...params }); return response.data; }; var tool4 = (context) => ({ method: "approve_payment", name: "Approve Payment", description: approvePaymentPrompt(context), parameters: approvePaymentParameters(context), actions: { payment: { approve: true } }, execute: approvePayment }); var approvePayment_default = tool4; // src/shared/payment/cancelPayment.ts var import_zod5 = require("zod"); var cancelPaymentPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uACB0\uC81C\uB97C \uCDE8\uC18C\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - tid (string): \uACB0\uC81C \uACE0\uC720\uBC88\uD638 - cancel_amount (number): \uCDE8\uC18C \uAE08\uC561 - cancel_tax_free_amount (number): \uCDE8\uC18C \uBE44\uACFC\uC138 \uAE08\uC561 `; var cancelPaymentParameters = (_context = {}) => import_zod5.z.object({ tid: import_zod5.z.string().describe("\uACB0\uC81C \uACE0\uC720\uBC88\uD638 (20\uC790)"), cancel_amount: import_zod5.z.number().int().positive().describe("\uCDE8\uC18C \uAE08\uC561"), cancel_tax_free_amount: import_zod5.z.number().int().min(0).describe("\uCDE8\uC18C \uBE44\uACFC\uC138 \uAE08\uC561") }); var cancelPayment = async (client, context, params) => { const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_CANCEL, { cid: context.cid, ...params }); return response.data; }; var tool5 = (context) => ({ method: "cancel_payment", name: "Cancel Payment", description: cancelPaymentPrompt(context), parameters: cancelPaymentParameters(context), actions: { payment: { cancel: true } }, execute: cancelPayment }); var cancelPayment_default = tool5; // src/shared/subscription/requestSubscription.ts var import_zod6 = require("zod"); var requestSubscriptionPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uC815\uAE30 \uACB0\uC81C\uB97C \uC694\uCCAD\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - sid (string): \uC815\uAE30 \uACB0\uC81C \uD0A4 - partner_order_id (string): \uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 - partner_user_id (string): \uAC00\uB9F9\uC810 \uD68C\uC6D0 ID - item_name (string): \uC0C1\uD488\uBA85 - quantity (number): \uC0C1\uD488 \uC218\uB7C9 - total_amount (number): \uC0C1\uD488 \uCD1D\uC561 - tax_free_amount (number): \uC0C1\uD488 \uBE44\uACFC\uC138 \uAE08\uC561 `; var requestSubscriptionParameters = (_context = {}) => import_zod6.z.object({ sid: import_zod6.z.string().describe("\uC815\uAE30 \uACB0\uC81C \uD0A4 (20\uC790)"), partner_order_id: import_zod6.z.string().describe("\uAC00\uB9F9\uC810 \uC8FC\uBB38\uBC88\uD638 (\uCD5C\uB300 100\uC790)"), partner_user_id: import_zod6.z.string().describe("\uAC00\uB9F9\uC810 \uD68C\uC6D0 ID (\uCD5C\uB300 100\uC790)"), item_name: import_zod6.z.string().describe("\uC0C1\uD488\uBA85 (\uCD5C\uB300 100\uC790)"), quantity: import_zod6.z.number().int().positive().describe("\uC0C1\uD488 \uC218\uB7C9"), total_amount: import_zod6.z.number().int().positive().describe("\uC0C1\uD488 \uCD1D\uC561"), tax_free_amount: import_zod6.z.number().int().min(0).describe("\uC0C1\uD488 \uBE44\uACFC\uC138 \uAE08\uC561") }); var requestSubscription = async (client, context, params) => { const response = await client.post( KAKAO_PAY_API_ENDPOINTS.SUBSCRIPTION_REQUEST, { cid: context.cid, ...params } ); return response.data; }; var tool6 = (context) => ({ method: "request_subscription", name: "Request Subscription", description: requestSubscriptionPrompt(context), parameters: requestSubscriptionParameters(context), actions: { subscription: { request: true } }, execute: requestSubscription }); var requestSubscription_default = tool6; // src/shared/subscription/inactiveSubscription.ts var import_zod7 = require("zod"); var inactiveSubscriptionPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uC815\uAE30 \uACB0\uC81C\uB97C \uBE44\uD65C\uC131\uD654\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - sid (string): \uC815\uAE30 \uACB0\uC81C \uACE0\uC720\uBC88\uD638 `; var inactiveSubscriptionParameters = (_context = {}) => import_zod7.z.object({ sid: import_zod7.z.string().describe("\uC815\uAE30 \uACB0\uC81C \uACE0\uC720\uBC88\uD638 (20\uC790)") }); var inactiveSubscription = async (client, context, params) => { const response = await client.post( KAKAO_PAY_API_ENDPOINTS.SUBSCRIPTION_INACTIVE, { cid: context.cid, ...params } ); return response.data; }; var tool7 = (context) => ({ method: "inactive_subscription", name: "Inactive Subscription", description: inactiveSubscriptionPrompt(context), parameters: inactiveSubscriptionParameters(context), actions: { subscription: { inactive: true } }, execute: inactiveSubscription }); var inactiveSubscription_default = tool7; // src/shared/subscription/getSubscription.ts var import_zod8 = require("zod"); var getSubscriptionPrompt = (_context = {}) => ` \uC774 \uB3C4\uAD6C\uB294 \uCE74\uCE74\uC624\uD398\uC774 \uC815\uAE30 \uACB0\uC81C\uB97C \uC2B9\uC778\uD569\uB2C8\uB2E4. \uD544\uC694\uD55C \uC778\uC218: - sid (string): \uC815\uAE30 \uACB0\uC81C \uACE0\uC720\uBC88\uD638 `; var getSubscriptionParameters = (_context = {}) => import_zod8.z.object({ sid: import_zod8.z.string().describe("\uC815\uAE30 \uACB0\uC81C \uACE0\uC720\uBC88\uD638 (20\uC790)") }); var getSubscription = async (client, context, params) => { const response = await client.post(KAKAO_PAY_API_ENDPOINTS.SUBSCRIPTION_GET, { cid: context.cid, ...params }); return response.data; }; var tool8 = (context) => ({ method: "get_subscription", name: "Get Subscription", description: getSubscriptionPrompt(context), parameters: getSubscriptionParameters(context), actions: { subscription: { get: true } }, execute: getSubscription }); var getSubscription_default = tool8; // src/shared/tools.ts var tools = (context) => [ demoPayment_default(context), getPayment_default(context), readyPayment_default(context), approvePayment_default(context), cancelPayment_default(context), requestSubscription_default(context), inactiveSubscription_default(context), getSubscription_default(context) ]; var tools_default = tools; // src/shared/api.ts var KakaoPayAPI = class { constructor(secretKey, context) { this.context = context || {}; this.kakaoPayClient = new KakaoPayClient(secretKey); this.tools = tools_default(this.context); } async run(method, arg) { try { const tool10 = this.tools.find((t) => t.method === method); if (!tool10) { throw new Error(`Invalid MCP method: ${method}`); } const output = await tool10.execute(this.kakaoPayClient, this.context, arg); return JSON.stringify(output); } catch (error) { if (error.response) { return JSON.stringify({ error: { http_status: error.response.status, ...error.response.data } }); } const errorMessage = error.message || "Unknown error"; return JSON.stringify({ error: { error_message: errorMessage } }); } } }; var api_default = KakaoPayAPI; // src/shared/configuration.ts function isToolAllowed(tool10, configuration) { if (!configuration.actions) { return true; } const toolActions = tool10.actions; if (!toolActions) { return true; } for (const [product, actions] of Object.entries( toolActions )) { if (configuration.actions[product]) { for (const [action, allowed] of Object.entries( actions )) { if (allowed && configuration.actions[product][action]) { return true; } } } } return false; } // src/ai-sdk/tool.ts var import_ai = require("ai"); function KakaoPayTool(kakaopayAPI, method, description, schema) { return (0, import_ai.tool)({ description, parameters: schema, execute: (arg) => { return kakaopayAPI.run(method, arg); } }); } // src/ai-sdk/toolkit.ts var KakaoPayAgentToolkit = class { constructor({ secretKey, configuration }) { this._kakaopay = new api_default(secretKey, configuration.context); this.tools = {}; const context = configuration.context || {}; const filteredTools = tools_default(context).filter( (tool10) => isToolAllowed(tool10, configuration) ); filteredTools.forEach((tool10) => { this.tools[tool10.method] = KakaoPayTool( this._kakaopay, tool10.method, tool10.description, tool10.parameters ); }); } getTools() { return this.tools; } /** * Get KakaoPay API instance for direct access */ getKakaoPayAPI() { return this._kakaopay; } }; var toolkit_default = KakaoPayAgentToolkit; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { KakaoPayAgentToolkit }); //# sourceMappingURL=index.js.map