@kakaopay-develop/agent-toolkit
Version:
KakaoPay Agent Toolkit
1 lines • 29.5 kB
Source Map (JSON)
{"version":3,"sources":["../src/shared/payment/demoPayment.ts","../src/shared/client.ts","../src/shared/payment/getPayment.ts","../src/shared/payment/readyPayment.ts","../src/shared/payment/approvePayment.ts","../src/shared/payment/cancelPayment.ts","../src/shared/subscription/requestSubscription.ts","../src/shared/subscription/inactiveSubscription.ts","../src/shared/subscription/getSubscription.ts","../src/shared/tools.ts","../src/shared/api.ts","../src/shared/configuration.ts","../src/ai-sdk/tool.ts","../src/ai-sdk/toolkit.ts"],"sourcesContent":["import { z } from 'zod';\nimport { KakaoPayClient } from '../api';\nimport type { Context } from '../configuration';\nimport type { Tool } from '../tools';\n\nimport { KAKAO_PAY_API_ENDPOINTS } from '../client';\nimport { ReadyPaymentSchema } from './readyPayment';\n\nexport const demoPaymentPrompt = (_context: Context = {}) => `\n이 도구는 카카오페이 데모 결제 링크를 생성합니다.\n\n필요한 인수:\n- item_name (string): 상품명\n- total_amount (number): 상품 총액\n- link_type (string): 링크 유형 (PC 또는 MOBILE)\n`;\n\nexport const demoPaymentParameters = (_context: Context = {}): z.AnyZodObject =>\n z.object({\n item_name: z\n .string()\n .default('테스트 상품명')\n .describe('상품명 (최대 100자)'),\n total_amount: z\n .number()\n .int()\n .positive()\n .default(1000)\n .describe('상품 총액'),\n link_type: z.enum(['PC', 'MOBILE']).default('PC').describe('링크 유형'),\n });\n\ntype ReadyPaymentType = z.infer<typeof ReadyPaymentSchema>;\n\n// 응답 타입 정의\ninterface PaymentReadyResponse {\n tid: string;\n next_redirect_pc_url: string;\n next_redirect_mobile_url: string;\n created_at: string;\n}\n\nexport const demoPayment = async (\n client: KakaoPayClient,\n context: Context,\n params: z.infer<ReturnType<typeof demoPaymentParameters>>\n) => {\n const apiParams: ReadyPaymentType = {\n partner_order_id: 'partner_order_id',\n partner_user_id: 'partner_user_id',\n item_name: params.item_name,\n quantity: 1,\n total_amount: params.total_amount,\n tax_free_amount: 0,\n approval_url: 'https://payment-demo.kakaopay.com/online/approval',\n cancel_url: 'https://payment-demo.kakaopay.com/online/cancel',\n fail_url: 'https://payment-demo.kakaopay.com/online/fail',\n };\n\n const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_READY, {\n cid: context.cid,\n ...apiParams,\n });\n const responseData = response.data as PaymentReadyResponse;\n const link =\n params.link_type === 'PC'\n ? responseData.next_redirect_pc_url\n : responseData.next_redirect_mobile_url;\n return {\n demo_link: `${link}?kpayTid=${responseData.tid}`,\n tid: responseData.tid,\n };\n};\n\nconst tool = (context: Context): Tool => ({\n method: 'demo_payment',\n name: 'Demo Payment',\n description: demoPaymentPrompt(context),\n parameters: demoPaymentParameters(context),\n actions: {\n payment: {\n demo: true,\n },\n },\n execute: demoPayment,\n});\n\nexport default tool;\n","import axios, { AxiosInstance } from 'axios';\n\nexport class KakaoPayClient {\n private client: AxiosInstance;\n\n constructor(secretKey: string) {\n const baseURL = 'https://open-api.kakaopay.com';\n\n this.client = axios.create({\n baseURL: `${baseURL}`,\n headers: {\n Authorization: `SECRET_KEY ${secretKey}`,\n 'Content-Type': 'application/json',\n },\n });\n }\n\n async post<T>(\n url: string,\n data?: any\n ): Promise<import('axios').AxiosResponse<T>> {\n return await this.client.post<T>(url, data);\n }\n}\n\nexport const KAKAO_PAY_API_ENDPOINTS = {\n PAYMENT_READY: '/online/v1/payment/ready',\n PAYMENT_APPROVE: '/online/v1/payment/approve',\n PAYMENT_ORDER: '/online/v1/payment/order',\n PAYMENT_CANCEL: '/online/v1/payment/cancel',\n SUBSCRIPTION_REQUEST: '/online/v1/payment/subscription',\n SUBSCRIPTION_INACTIVE: '/online/v1/payment/manage/subscription/inactive',\n SUBSCRIPTION_GET: '/online/v1/payment/manage/subscription/status',\n} as const;\n","import { z } from 'zod';\nimport { KakaoPayClient } from '../api';\nimport type { Context } from '../configuration';\nimport type { Tool } from '../tools';\n\nimport { KAKAO_PAY_API_ENDPOINTS } from '../client';\n\nexport const getPaymentPrompt = (_context: Context = {}) => `\n이 도구는 카카오페이 주문 상태를 조회합니다.\n\n필요한 인수:\n- tid (string): 결제 고유번호\n`;\n\nexport const getPaymentParameters = (_context: Context = {}): z.AnyZodObject =>\n z.object({\n tid: z.string().describe('결제 고유번호'),\n });\n\nexport const getPayment = async (\n client: KakaoPayClient,\n context: Context,\n params: z.infer<ReturnType<typeof getPaymentParameters>>\n) => {\n const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_ORDER, {\n cid: context.cid,\n ...params,\n });\n return response.data;\n};\n\nconst tool = (context: Context): Tool => ({\n method: 'get_payment',\n name: 'Get Payment',\n description: getPaymentPrompt(context),\n parameters: getPaymentParameters(context),\n actions: {\n payment: {\n get: true,\n },\n },\n execute: getPayment,\n});\n\nexport default tool;\n","import { z } from 'zod';\nimport { KAKAO_PAY_API_ENDPOINTS, KakaoPayClient } from '../client';\nimport type { Context } from '../configuration';\nimport type { Tool } from '../tools';\n\nexport const readyPaymentPrompt = (_context: Context = {}) => `\n이 도구는 카카오페이 결제를 준비합니다.\n\n필요한 인수:\n- partner_order_id (string): 가맹점 주문번호\n- partner_user_id (string): 가맹점 회원 ID\n- item_name (string): 상품명\n- quantity (number): 상품 수량\n- total_amount (number): 상품 총액\n- tax_free_amount (number): 상품 비과세 금액\n- approval_url (string): 결제 성공 시 redirect url\n- cancel_url (string): 결제 취소 시 redirect url\n- fail_url (string): 결제 실패 시 redirect url\n`;\n\nexport const ReadyPaymentSchema = z.object({\n partner_order_id: z.string().describe('가맹점 주문번호 (최대 100자)'),\n partner_user_id: z.string().describe('가맹점 회원 ID (최대 100자)'),\n item_name: z.string().describe('상품명 (최대 100자)'),\n quantity: z.number().int().positive().describe('상품 수량'),\n total_amount: z.number().int().positive().describe('상품 총액'),\n tax_free_amount: z.number().int().min(0).describe('상품 비과세 금액'),\n approval_url: z.string().url().describe('결제 성공 시 redirect url'),\n cancel_url: z.string().url().describe('결제 취소 시 redirect url'),\n fail_url: z.string().url().describe('결제 실패 시 redirect url'),\n});\n\nexport const readyPaymentParameters = (\n _context: Context = {}\n): z.AnyZodObject => ReadyPaymentSchema;\n\nexport const readyPayment = async (\n client: KakaoPayClient,\n context: Context,\n params: z.infer<ReturnType<typeof readyPaymentParameters>>\n) => {\n const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_READY, {\n cid: context.cid,\n ...params,\n });\n return response.data;\n};\n\nconst tool = (context: Context): Tool => ({\n method: 'ready_payment',\n name: 'Ready Payment',\n description: readyPaymentPrompt(context),\n parameters: readyPaymentParameters(context),\n actions: {\n payment: {\n ready: true,\n },\n },\n execute: readyPayment,\n});\n\nexport default tool;\n","import { z } from 'zod';\nimport { KakaoPayClient } from '../api';\nimport type { Context } from '../configuration';\nimport type { Tool } from '../tools';\n\nimport { KAKAO_PAY_API_ENDPOINTS } from '../client';\n\nexport const approvePaymentPrompt = (_context: Context = {}) => `\n이 도구는 카카오페이 단건 결제를 승인합니다.\n\n필요한 인수:\n- tid (string): 결제 고유번호\n- partner_order_id (string): 가맹점 주문번호\n- partner_user_id (string): 가맹점 회원 ID\n- pg_token (string): 결제승인 요청을 인증하는 토큰\n`;\n\nexport const approvePaymentParameters = (\n _context: Context = {}\n): z.AnyZodObject =>\n z.object({\n tid: z.string().describe('결제 고유번호 (결제 준비에서 받은 tid)'),\n partner_order_id: z\n .string()\n .describe('가맹점 주문번호 (결제 준비 API 요청과 일치)'),\n partner_user_id: z\n .string()\n .describe('가맹점 회원 ID (결제 준비 API 요청과 일치)'),\n pg_token: z\n .string()\n .describe(\n '결제승인 요청을 인증하는 토큰 (결제 수단 선택 완료 후 리다이렉트에서 받음)'\n ),\n });\n\nexport const approvePayment = async (\n client: KakaoPayClient,\n context: Context,\n params: z.infer<ReturnType<typeof approvePaymentParameters>>\n) => {\n const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_APPROVE, {\n cid: context.cid,\n ...params,\n });\n return response.data;\n};\n\nconst tool = (context: Context): Tool => ({\n method: 'approve_payment',\n name: 'Approve Payment',\n description: approvePaymentPrompt(context),\n parameters: approvePaymentParameters(context),\n actions: {\n payment: {\n approve: true,\n },\n },\n execute: approvePayment,\n});\n\nexport default tool;\n","import { z } from 'zod';\nimport { KakaoPayClient } from '../api';\nimport type { Context } from '../configuration';\nimport type { Tool } from '../tools';\n\nimport { KAKAO_PAY_API_ENDPOINTS } from '../client';\n\nexport const cancelPaymentPrompt = (_context: Context = {}) => `\n이 도구는 카카오페이 결제를 취소합니다.\n\n필요한 인수:\n- tid (string): 결제 고유번호\n- cancel_amount (number): 취소 금액\n- cancel_tax_free_amount (number): 취소 비과세 금액\n`;\n\nexport const cancelPaymentParameters = (\n _context: Context = {}\n): z.AnyZodObject =>\n z.object({\n tid: z.string().describe('결제 고유번호 (20자)'),\n cancel_amount: z.number().int().positive().describe('취소 금액'),\n cancel_tax_free_amount: z\n .number()\n .int()\n .min(0)\n .describe('취소 비과세 금액'),\n });\n\nexport const cancelPayment = async (\n client: KakaoPayClient,\n context: Context,\n params: z.infer<ReturnType<typeof cancelPaymentParameters>>\n) => {\n const response = await client.post(KAKAO_PAY_API_ENDPOINTS.PAYMENT_CANCEL, {\n cid: context.cid,\n ...params,\n });\n return response.data;\n};\n\nconst tool = (context: Context): Tool => ({\n method: 'cancel_payment',\n name: 'Cancel Payment',\n description: cancelPaymentPrompt(context),\n parameters: cancelPaymentParameters(context),\n actions: {\n payment: {\n cancel: true,\n },\n },\n execute: cancelPayment,\n});\n\nexport default tool;\n","import { z } from 'zod';\nimport { KakaoPayClient } from '../api';\nimport type { Context } from '../configuration';\nimport type { Tool } from '../tools';\n\nimport { KAKAO_PAY_API_ENDPOINTS } from '../client';\n\nexport const requestSubscriptionPrompt = (_context: Context = {}) => `\n이 도구는 카카오페이 정기 결제를 요청합니다.\n\n필요한 인수:\n- sid (string): 정기 결제 키\n- partner_order_id (string): 가맹점 주문번호\n- partner_user_id (string): 가맹점 회원 ID\n- item_name (string): 상품명\n- quantity (number): 상품 수량\n- total_amount (number): 상품 총액\n- tax_free_amount (number): 상품 비과세 금액\n`;\n\nexport const requestSubscriptionParameters = (\n _context: Context = {}\n): z.AnyZodObject =>\n z.object({\n sid: z.string().describe('정기 결제 키 (20자)'),\n partner_order_id: z.string().describe('가맹점 주문번호 (최대 100자)'),\n partner_user_id: z.string().describe('가맹점 회원 ID (최대 100자)'),\n item_name: z.string().describe('상품명 (최대 100자)'),\n quantity: z.number().int().positive().describe('상품 수량'),\n total_amount: z.number().int().positive().describe('상품 총액'),\n tax_free_amount: z.number().int().min(0).describe('상품 비과세 금액'),\n });\n\nexport const requestSubscription = async (\n client: KakaoPayClient,\n context: Context,\n params: z.infer<ReturnType<typeof requestSubscriptionParameters>>\n) => {\n const response = await client.post(\n KAKAO_PAY_API_ENDPOINTS.SUBSCRIPTION_REQUEST,\n { cid: context.cid, ...params }\n );\n return response.data;\n};\n\nconst tool = (context: Context): Tool => ({\n method: 'request_subscription',\n name: 'Request Subscription',\n description: requestSubscriptionPrompt(context),\n parameters: requestSubscriptionParameters(context),\n actions: {\n subscription: {\n request: true,\n },\n },\n execute: requestSubscription,\n});\n\nexport default tool;\n","import { z } from 'zod';\nimport { KakaoPayClient } from '../api';\nimport type { Context } from '../configuration';\nimport type { Tool } from '../tools';\n\nimport { KAKAO_PAY_API_ENDPOINTS } from '../client';\n\nexport const inactiveSubscriptionPrompt = (_context: Context = {}) => `\n이 도구는 카카오페이 정기 결제를 비활성화합니다.\n\n필요한 인수:\n- sid (string): 정기 결제 고유번호 \n`;\n\nexport const inactiveSubscriptionParameters = (\n _context: Context = {}\n): z.AnyZodObject =>\n z.object({\n sid: z.string().describe('정기 결제 고유번호 (20자)'),\n });\n\nexport const inactiveSubscription = async (\n client: KakaoPayClient,\n context: Context,\n params: z.infer<ReturnType<typeof inactiveSubscriptionParameters>>\n) => {\n const response = await client.post(\n KAKAO_PAY_API_ENDPOINTS.SUBSCRIPTION_INACTIVE,\n { cid: context.cid, ...params }\n );\n return response.data;\n};\n\nconst tool = (context: Context): Tool => ({\n method: 'inactive_subscription',\n name: 'Inactive Subscription',\n description: inactiveSubscriptionPrompt(context),\n parameters: inactiveSubscriptionParameters(context),\n actions: {\n subscription: {\n inactive: true,\n },\n },\n execute: inactiveSubscription,\n});\n\nexport default tool;\n","import { z } from 'zod';\nimport { KakaoPayClient } from '../api';\nimport type { Context } from '../configuration';\nimport type { Tool } from '../tools';\n\nimport { KAKAO_PAY_API_ENDPOINTS } from '../client';\n\nexport const getSubscriptionPrompt = (_context: Context = {}) => `\n이 도구는 카카오페이 정기 결제를 승인합니다.\n\n필요한 인수:\n- sid (string): 정기 결제 고유번호 \n`;\n\nexport const getSubscriptionParameters = (\n _context: Context = {}\n): z.AnyZodObject =>\n z.object({\n sid: z.string().describe('정기 결제 고유번호 (20자)'),\n });\n\nexport const getSubscription = async (\n client: KakaoPayClient,\n context: Context,\n params: z.infer<ReturnType<typeof getSubscriptionParameters>>\n) => {\n const response = await client.post(KAKAO_PAY_API_ENDPOINTS.SUBSCRIPTION_GET, {\n cid: context.cid,\n ...params,\n });\n return response.data;\n};\n\nconst tool = (context: Context): Tool => ({\n method: 'get_subscription',\n name: 'Get Subscription',\n description: getSubscriptionPrompt(context),\n parameters: getSubscriptionParameters(context),\n actions: {\n subscription: {\n get: true,\n },\n },\n execute: getSubscription,\n});\n\nexport default tool;\n","import { z } from 'zod';\nimport { KakaoPayClient } from './client';\nimport type { Context } from './configuration';\n\nimport demoPaymentTool from './payment/demoPayment';\nimport getPaymentTool from './payment/getPayment';\nimport readyPaymentTool from './payment/readyPayment';\nimport approvePaymentTool from './payment/approvePayment';\nimport cancelPaymentTool from './payment/cancelPayment';\nimport requestSubscriptionTool from './subscription/requestSubscription';\nimport inactiveSubscriptionTool from './subscription/inactiveSubscription';\nimport getSubscriptionTool from './subscription/getSubscription';\n\nexport type Tool = {\n method: string;\n name: string;\n description: string;\n parameters: z.ZodObject<any, any, any, any>;\n actions: {\n [key: string]: {\n [action: string]: boolean;\n };\n };\n execute: (\n _client: KakaoPayClient,\n _context: Context,\n _params: any\n ) => Promise<any>;\n};\n\nconst tools = (context: Context): Tool[] => [\n demoPaymentTool(context),\n getPaymentTool(context),\n readyPaymentTool(context),\n approvePaymentTool(context),\n cancelPaymentTool(context),\n requestSubscriptionTool(context),\n inactiveSubscriptionTool(context),\n getSubscriptionTool(context),\n];\n\nexport default tools;\n","import type { Context } from './configuration';\nimport tools, { Tool } from './tools';\nimport { KakaoPayClient } from './client';\n\nclass KakaoPayAPI {\n kakaoPayClient: KakaoPayClient;\n context: Context;\n tools: Tool[];\n\n constructor(secretKey: string, context?: Context) {\n this.context = context || {};\n this.kakaoPayClient = new KakaoPayClient(secretKey);\n this.tools = tools(this.context);\n }\n\n async run(method: string, arg: any): Promise<string> {\n try {\n const tool = this.tools.find((t) => t.method === method);\n if (!tool) {\n throw new Error(`Invalid MCP method: ${method}`);\n }\n\n const output = await tool.execute(this.kakaoPayClient, this.context, arg);\n return JSON.stringify(output);\n } catch (error: any) {\n if (error.response) {\n return JSON.stringify({\n error: { http_status: error.response.status, ...error.response.data },\n });\n }\n\n const errorMessage = error.message || 'Unknown error';\n return JSON.stringify({\n error: {\n error_message: errorMessage,\n },\n });\n }\n }\n}\n\nexport default KakaoPayAPI;\nexport { KakaoPayClient };\n","export type Context = {\n cid?: string;\n};\n\nexport type Configuration = {\n actions: {\n [product: string]: { [action: string]: boolean };\n };\n context?: Context;\n};\n\nexport function isToolAllowed(\n tool: any,\n configuration: Configuration\n): boolean {\n if (!configuration.actions) {\n return true;\n }\n\n const toolActions = tool.actions;\n if (!toolActions) {\n return true;\n }\n\n for (const [product, actions] of Object.entries(\n toolActions as Record<string, any>\n )) {\n if (configuration.actions[product]) {\n for (const [action, allowed] of Object.entries(\n actions as Record<string, boolean>\n )) {\n if (allowed && configuration.actions[product][action]) {\n return true;\n }\n }\n }\n }\n\n return false;\n}\n","import type { CoreTool } from 'ai';\nimport { tool } from 'ai';\nimport { z } from 'zod';\nimport KakaoPayAPI from '../shared/api';\n\nexport default function KakaoPayTool(\n kakaopayAPI: KakaoPayAPI,\n method: string,\n description: string,\n schema: z.ZodObject<any, any, any, any, { [x: string]: any }>\n): CoreTool {\n return tool({\n description: description,\n parameters: schema,\n execute: (arg: z.output<typeof schema>) => {\n return kakaopayAPI.run(method, arg);\n },\n });\n}\n","import KakaoPayAPI from '../shared/api';\nimport tools from '../shared/tools';\nimport { isToolAllowed, type Configuration } from '../shared/configuration';\nimport type {\n CoreTool,\n LanguageModelV1StreamPart,\n Experimental_LanguageModelV1Middleware as LanguageModelV1Middleware,\n} from 'ai';\nimport KakaoPayTool from './tool';\n\nclass KakaoPayAgentToolkit {\n private _kakaopay: KakaoPayAPI;\n\n tools: { [key: string]: CoreTool };\n\n constructor({\n secretKey,\n configuration,\n }: {\n secretKey: string;\n configuration: Configuration;\n }) {\n this._kakaopay = new KakaoPayAPI(secretKey, configuration.context);\n this.tools = {};\n\n const context = configuration.context || {};\n const filteredTools = tools(context).filter((tool) =>\n isToolAllowed(tool, configuration)\n );\n\n filteredTools.forEach((tool) => {\n this.tools[tool.method] = KakaoPayTool(\n this._kakaopay,\n tool.method,\n tool.description,\n tool.parameters\n );\n });\n }\n\n getTools(): { [key: string]: CoreTool } {\n return this.tools;\n }\n\n /**\n * Get KakaoPay API instance for direct access\n */\n getKakaoPayAPI(): KakaoPayAPI {\n return this._kakaopay;\n }\n}\n\nexport default KakaoPayAgentToolkit;\n"],"mappings":"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","names":["z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","z","z","tool","tool","tool","tool","tool"]}