@ar-agents/mercadopago 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/client.ts","../src/types.ts","../src/oauth.ts","../src/webhook.ts","../src/tools.ts","../src/state.ts"],"names":["text","z"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Base class for any error originating from the Mercado Pago integration. All\n * specific error types extend this. Carries the MP HTTP status, the parsed\n * body when available, and the endpoint that failed for debugging.\n */\nexport class MercadoPagoError extends Error {\n constructor(\n message: string,\n public status: number,\n public endpoint: string,\n public mpResponse?: unknown,\n ) {\n super(message);\n this.name = \"MercadoPagoError\";\n }\n}\n\n/**\n * Thrown when the access token is missing, expired, or rejected by MP.\n */\nexport class MercadoPagoAuthError extends MercadoPagoError {\n constructor(endpoint: string, body?: unknown) {\n super(\n \"Mercado Pago rejected the request as unauthorized. Check the access token (TEST- prefix for sandbox, APP_USR- for production).\",\n 401,\n endpoint,\n body,\n );\n this.name = \"MercadoPagoAuthError\";\n }\n}\n\n/**\n * Thrown when MP returns the \"back_url is not a valid URL\" rejection. Common\n * when devs pass localhost or http:// — MP requires HTTPS only, even in sandbox.\n */\nexport class MercadoPagoBackUrlInvalidError extends MercadoPagoError {\n constructor(endpoint: string, body?: unknown) {\n super(\n \"back_url must be a valid HTTPS URL. localhost and http:// URLs are rejected by Mercado Pago, including in sandbox. Use a placeholder like https://example.com/done for local testing.\",\n 400,\n endpoint,\n body,\n );\n this.name = \"MercadoPagoBackUrlInvalidError\";\n }\n}\n\n/**\n * Thrown when the buyer email matches the seller account's email. MP refuses\n * self-payment on subscriptions: the Confirmar button at the init_point UI\n * stays disabled with no surfaceable error message.\n */\nexport class MercadoPagoSelfPaymentError extends MercadoPagoError {\n constructor(endpoint: string, body?: unknown) {\n super(\n \"The buyer email cannot equal the seller account's email. Mercado Pago blocks self-payment on subscriptions.\",\n 400,\n endpoint,\n body,\n );\n this.name = \"MercadoPagoSelfPaymentError\";\n }\n}\n\n/**\n * Thrown when MP returns \"Cannot operate between different countries\". Despite\n * the error text, this generally signals an account-type mismatch (real\n * account-in-test-mode vs. test user account), not a literal country mismatch.\n */\nexport class MercadoPagoAccountTypeMismatchError extends MercadoPagoError {\n constructor(endpoint: string, body?: unknown) {\n super(\n \"Mercado Pago rejected the operation: 'Cannot operate between different countries'. Despite the wording, this usually means the seller token and the buyer email are different account types (real-account-in-test-mode vs. test_user_*@testuser.com). Use a real consumer email as the buyer.\",\n 400,\n endpoint,\n body,\n );\n this.name = \"MercadoPagoAccountTypeMismatchError\";\n }\n}\n\n/**\n * Thrown when MP's risk engine rejects the first payment of a subscription.\n * IMPORTANT: when this happens, MP automatically cancels the entire preapproval\n * — you cannot retry on the same subscription, you must create a fresh one.\n */\nexport class MercadoPagoPaymentRejectedError extends MercadoPagoError {\n constructor(\n public preapprovalId: string,\n public statusDetail: string | null,\n body?: unknown,\n ) {\n super(\n `Payment rejected by Mercado Pago risk engine on preapproval ${preapprovalId}. Status detail: ${statusDetail ?? \"unknown\"}. The preapproval was auto-cancelled by MP — create a fresh subscription to retry.`,\n 400,\n `/preapproval/${preapprovalId}`,\n body,\n );\n this.name = \"MercadoPagoPaymentRejectedError\";\n }\n}\n\n/**\n * Thrown when an attempt is made to authorize a preapproval via API. Only the\n * payer can authorize via the init_point UI; there is no admin override even\n * in sandbox.\n */\nexport class MercadoPagoAuthorizeForbiddenError extends MercadoPagoError {\n constructor(preapprovalId: string, body?: unknown) {\n super(\n `Cannot authorize preapproval ${preapprovalId} via API: only the payer can authorize through the init_point checkout. There is no API shortcut, even in sandbox.`,\n 400,\n `/preapproval/${preapprovalId}`,\n body,\n );\n this.name = \"MercadoPagoAuthorizeForbiddenError\";\n }\n}\n\n/**\n * Thrown when MP rate-limits the integration. Retry with exponential backoff.\n */\nexport class MercadoPagoRateLimitError extends MercadoPagoError {\n constructor(\n endpoint: string,\n public retryAfterSeconds: number | null,\n body?: unknown,\n ) {\n super(\n `Mercado Pago rate limit hit on ${endpoint}. ${\n retryAfterSeconds\n ? `Retry after ${retryAfterSeconds}s.`\n : \"Retry with exponential backoff.\"\n }`,\n 429,\n endpoint,\n body,\n );\n this.name = \"MercadoPagoRateLimitError\";\n }\n}\n\n/**\n * Thrown when MP is overloaded and serves an HTML 503 page instead of a JSON\n * error. The library detects content-type !== application/json on 5xx and\n * raises this typed error so retry logic + agent UX can branch correctly.\n */\nexport class MercadoPagoOverloadedError extends MercadoPagoError {\n constructor(endpoint: string, status: number) {\n super(\n `Mercado Pago appears overloaded — returned a non-JSON ${status} response for ${endpoint}. Wait a few seconds and retry.`,\n status,\n endpoint,\n );\n this.name = \"MercadoPagoOverloadedError\";\n }\n}\n\n/**\n * Thrown when a request exceeds the configured `requestTimeoutMs`. Retried\n * automatically up to `maxRetries`; this surfaces only when the budget runs\n * out.\n */\nexport class MercadoPagoTimeoutError extends MercadoPagoError {\n constructor(endpoint: string, public readonly timeoutMs: number) {\n super(\n `Mercado Pago request timed out after ${timeoutMs}ms on ${endpoint}. Increase requestTimeoutMs or check connectivity.`,\n 0,\n endpoint,\n );\n this.name = \"MercadoPagoTimeoutError\";\n }\n}\n\n/**\n * Maps an MP error response body to the most specific known error class. Falls\n * back to the generic MercadoPagoError when no specific pattern matches.\n */\nexport function classifyError(\n status: number,\n endpoint: string,\n body: unknown,\n context?: { preapprovalId?: string; payerEmail?: string; sellerEmail?: string },\n): MercadoPagoError {\n const bodyText =\n typeof body === \"string\"\n ? body\n : body && typeof body === \"object\"\n ? JSON.stringify(body)\n : \"\";\n const lower = bodyText.toLowerCase();\n\n if (status === 401) return new MercadoPagoAuthError(endpoint, body);\n if (status === 429) {\n // Try to extract Retry-After from the body if it includes one.\n let retryAfter: number | null = null;\n const obj = body as { retry_after?: number; \"retry-after\"?: number } | undefined;\n if (obj?.retry_after) retryAfter = Number(obj.retry_after);\n else if (obj?.[\"retry-after\"]) retryAfter = Number(obj[\"retry-after\"]);\n return new MercadoPagoRateLimitError(endpoint, retryAfter, body);\n }\n if (status === 400) {\n if (lower.includes(\"back_url\") && lower.includes(\"not a valid url\")) {\n return new MercadoPagoBackUrlInvalidError(endpoint, body);\n }\n if (\n lower.includes(\"cannot operate\") &&\n lower.includes(\"different countries\")\n ) {\n return new MercadoPagoAccountTypeMismatchError(endpoint, body);\n }\n if (\n lower.includes(\"only the payer can\") &&\n context?.preapprovalId\n ) {\n return new MercadoPagoAuthorizeForbiddenError(context.preapprovalId, body);\n }\n if (\n context?.payerEmail &&\n context?.sellerEmail &&\n context.payerEmail.toLowerCase() === context.sellerEmail.toLowerCase()\n ) {\n return new MercadoPagoSelfPaymentError(endpoint, body);\n }\n }\n return new MercadoPagoError(\n `Mercado Pago ${endpoint} failed: ${status} ${bodyText.slice(0, 200)}`,\n status,\n endpoint,\n body,\n );\n}\n","import { classifyError, MercadoPagoError, MercadoPagoOverloadedError, MercadoPagoRateLimitError, MercadoPagoTimeoutError } from \"./errors\";\nimport type {\n AccountInfo,\n CardToken,\n CreateCardTokenParams,\n CreateCustomerParams,\n CreatePaymentParams,\n CreatePosParams,\n CreatePreapprovalParams,\n CreatePreferenceParams,\n CreateQrPaymentParams,\n CreateRefundParams,\n CreateStoreParams,\n CreateSubscriptionPlanParams,\n CreateOrderParams,\n CreateWebhookParams,\n Customer,\n CustomerCard,\n Dispute,\n IdentificationType,\n InstallmentOffer,\n Issuer,\n Order,\n Payment,\n PaymentMethod,\n PaymentsSearchResult,\n Pos,\n Preapproval,\n Preference,\n QrOrder,\n Refund,\n SearchPaymentsParams,\n Store,\n SubscriptionPayment,\n SubscriptionPlan,\n WebhookConfig,\n} from \"./types\";\n\nconst DEFAULT_BASE_URL = \"https://api.mercadopago.com\";\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport interface MercadoPagoClientOptions {\n /** Access token. TEST- prefix for sandbox, APP_USR- for production. */\n accessToken: string;\n /**\n * Override the API base URL. Mostly useful for tests against MSW or for\n * pointing at a regional MP host. Defaults to https://api.mercadopago.com.\n */\n baseUrl?: string;\n /**\n * Custom fetch implementation. Defaults to globalThis.fetch. Override to\n * inject your own retry/instrumentation layer or to test with MSW.\n */\n fetch?: typeof fetch;\n /**\n * Per-request timeout in ms. Aborts the request and throws if exceeded.\n * Default 30_000 (30s). MP can be slow under load; 30s is a safe upper bound.\n */\n requestTimeoutMs?: number;\n /**\n * Number of retries on 5xx + network errors. Default 1 (single retry).\n * 4xx errors are NEVER retried (they're user/config errors). Each retry\n * uses exponential backoff: 250ms, 500ms, 1000ms, ...\n */\n maxRetries?: number;\n /**\n * Observability hook fired AFTER every request (success or failure).\n * Useful for logging, metrics, tracing. Synchronous, fire-and-forget.\n */\n onCall?: (event: {\n method: string;\n path: string;\n durationMs: number;\n httpStatus: number | null;\n retried: number;\n success: boolean;\n }) => void;\n}\n\ninterface RequestOptions {\n /** Idempotency key. Required for POST/PUT to dedupe retries safely. */\n idempotencyKey?: string;\n /** Query string params. Object → URLSearchParams. */\n query?: Record<string, string | number | undefined>;\n /** Context for error classification. */\n classifyContext?: {\n preapprovalId?: string;\n paymentId?: string;\n customerId?: string;\n payerEmail?: string;\n sellerEmail?: string;\n };\n}\n\n/**\n * Thin, typed wrapper around Mercado Pago's REST API. Exposes the surface\n * the agent layer needs: Subscriptions (Preapprovals), Payments, Checkout Pro\n * (Preferences), Customers + saved Cards, Refunds, Payment Methods +\n * Installments, and Account info. Deliberately narrower than a full SDK\n * rebuild — we add endpoints when the agent layer needs them.\n */\nexport class MercadoPagoClient {\n private readonly accessToken: string;\n private readonly baseUrl: string;\n private readonly fetchImpl: typeof fetch | undefined;\n private readonly requestTimeoutMs: number;\n private readonly maxRetries: number;\n private readonly onCall:\n | ((event: {\n method: string;\n path: string;\n durationMs: number;\n httpStatus: number | null;\n retried: number;\n success: boolean;\n }) => void)\n | undefined;\n\n constructor(options: MercadoPagoClientOptions) {\n if (!options.accessToken) {\n throw new Error(\n \"MercadoPagoClient requires an accessToken. Get one from https://www.mercadopago.com.ar/developers/panel/credentials\",\n );\n }\n this.accessToken = options.accessToken;\n this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n this.fetchImpl = options.fetch;\n this.requestTimeoutMs = options.requestTimeoutMs ?? 30_000;\n this.maxRetries = Math.max(0, options.maxRetries ?? 1);\n this.onCall = options.onCall;\n }\n\n private async request<T>(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n path: string,\n body?: unknown,\n options?: RequestOptions,\n ): Promise<T> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.accessToken}`,\n \"Content-Type\": \"application/json\",\n };\n if (options?.idempotencyKey) {\n headers[\"X-Idempotency-Key\"] = options.idempotencyKey;\n }\n\n let url = `${this.baseUrl}${path}`;\n if (options?.query) {\n const search = new URLSearchParams();\n for (const [k, v] of Object.entries(options.query)) {\n if (v !== undefined && v !== null && v !== \"\") {\n search.set(k, String(v));\n }\n }\n const qs = search.toString();\n if (qs) url += `?${qs}`;\n }\n\n const fetchFn = this.fetchImpl ?? globalThis.fetch;\n const t0 = Date.now();\n let attempt = 0;\n let lastError: unknown;\n let lastStatus: number | null = null;\n\n while (attempt <= this.maxRetries) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);\n\n const init: RequestInit = { method, headers, signal: controller.signal };\n if (body !== undefined) init.body = JSON.stringify(body);\n\n try {\n const res = await fetchFn(url, init);\n clearTimeout(timer);\n lastStatus = res.status;\n\n if (res.ok) {\n const text = await res.text();\n this.onCall?.({\n method,\n path,\n durationMs: Date.now() - t0,\n httpStatus: res.status,\n retried: attempt,\n success: true,\n });\n if (!text) return undefined as T;\n return JSON.parse(text) as T;\n }\n\n // Retry on 5xx and 429 (rate-limit); never on 4xx user/config errors\n const isRetryable = res.status >= 500 || res.status === 429;\n if (isRetryable && attempt < this.maxRetries) {\n // Honor Retry-After header on 429\n const retryAfter = res.headers.get(\"retry-after\");\n const waitMs = retryAfter\n ? Number(retryAfter) * 1000\n : 250 * Math.pow(2, attempt);\n attempt++;\n await sleep(waitMs);\n continue;\n }\n\n // Detect HTML / non-JSON 5xx (MP overloaded)\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n if (res.status >= 500 && !contentType.includes(\"application/json\")) {\n this.onCall?.({\n method,\n path,\n durationMs: Date.now() - t0,\n httpStatus: res.status,\n retried: attempt,\n success: false,\n });\n throw new MercadoPagoOverloadedError(path, res.status);\n }\n\n let parsed: unknown;\n const text = await res.text();\n try { parsed = JSON.parse(text); } catch { parsed = text; }\n const err = classifyError(res.status, path, parsed, options?.classifyContext);\n this.onCall?.({\n method,\n path,\n durationMs: Date.now() - t0,\n httpStatus: res.status,\n retried: attempt,\n success: false,\n });\n throw err;\n } catch (err) {\n clearTimeout(timer);\n // If err is a MercadoPagoError, the 5xx-final / 4xx branch already\n // fired onCall above — don't double-fire. Just re-throw.\n if (err instanceof MercadoPagoError) throw err;\n\n // Network error / abort / parse error — retry if budget remains\n const isAbort = err instanceof Error && err.name === \"AbortError\";\n const isNetwork = !lastStatus && !isAbort;\n if ((isNetwork || isAbort) && attempt < this.maxRetries) {\n lastError = err;\n attempt++;\n await sleep(250 * Math.pow(2, attempt - 1));\n continue;\n }\n this.onCall?.({\n method,\n path,\n durationMs: Date.now() - t0,\n httpStatus: lastStatus,\n retried: attempt,\n success: false,\n });\n if (isAbort) {\n throw new MercadoPagoTimeoutError(path, this.requestTimeoutMs);\n }\n throw err;\n }\n }\n\n throw lastError ?? new Error(`MercadoPago request failed after ${this.maxRetries} retries`);\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Subscriptions (Preapprovals) — v0.1 surface, kept stable\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a recurring subscription (preapproval). The returned `init_point`\n * URL is where the buyer must complete the FIRST payment with their card +\n * CVV — there is no API path that bypasses this human step.\n */\n async createPreapproval(\n params: CreatePreapprovalParams,\n ): Promise<Preapproval> {\n return this.request<Preapproval>(\n \"POST\",\n \"/preapproval\",\n {\n reason: params.reason,\n payer_email: params.payerEmail,\n back_url: params.backUrl,\n external_reference: params.externalReference,\n auto_recurring: {\n frequency: params.frequency,\n frequency_type: params.frequencyType,\n transaction_amount: params.amount,\n currency_id: params.currency,\n },\n },\n { classifyContext: { payerEmail: params.payerEmail } },\n );\n }\n\n async getPreapproval(id: string): Promise<Preapproval> {\n return this.request<Preapproval>(\"GET\", `/preapproval/${id}`, undefined, {\n classifyContext: { preapprovalId: id },\n });\n }\n\n async cancelPreapproval(id: string): Promise<Preapproval> {\n return this.request<Preapproval>(\n \"PUT\",\n `/preapproval/${id}`,\n { status: \"cancelled\" },\n { classifyContext: { preapprovalId: id } },\n );\n }\n\n async pausePreapproval(id: string): Promise<Preapproval> {\n return this.request<Preapproval>(\n \"PUT\",\n `/preapproval/${id}`,\n { status: \"paused\" },\n { classifyContext: { preapprovalId: id } },\n );\n }\n\n async resumePreapproval(id: string): Promise<Preapproval> {\n return this.request<Preapproval>(\n \"PUT\",\n `/preapproval/${id}`,\n { status: \"authorized\" },\n { classifyContext: { preapprovalId: id } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Payments (v0.2)\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a payment. Two main flows:\n * - **Card payment**: pass `token` (from MP frontend Cardform) + payment_method_id.\n * - **Account money / cash**: omit token, pass payment_method_id like \"account_money\", \"rapipago\", \"pagofacil\".\n *\n * For credit card payments where you don't have a card token (i.e., you only\n * have a payer email and want to send them a payment link), use\n * `createPreference` (Checkout Pro) instead.\n *\n * Idempotency: pass `idempotencyKey` to safely retry. Required for production\n * to dedupe network-failed requests.\n */\n async createPayment(params: CreatePaymentParams): Promise<Payment> {\n const body: Record<string, unknown> = {\n transaction_amount: params.transactionAmount,\n payment_method_id: params.paymentMethodId,\n payer: {\n email: params.payerEmail,\n ...(params.identification ? { identification: params.identification } : {}),\n },\n };\n if (params.installments !== undefined) body.installments = params.installments;\n if (params.token !== undefined) body.token = params.token;\n if (params.description !== undefined) body.description = params.description;\n if (params.externalReference !== undefined) body.external_reference = params.externalReference;\n if (params.notificationUrl !== undefined) body.notification_url = params.notificationUrl;\n if (params.statementDescriptor !== undefined)\n body.statement_descriptor = params.statementDescriptor;\n if (params.capture !== undefined) body.capture = params.capture;\n if (params.additionalInfo !== undefined) body.additional_info = params.additionalInfo;\n\n return this.request<Payment>(\"POST\", \"/v1/payments\", body, {\n ...(params.idempotencyKey ? { idempotencyKey: params.idempotencyKey } : {}),\n classifyContext: { payerEmail: params.payerEmail },\n });\n }\n\n /** Fetch a payment by ID. */\n async getPayment(id: string): Promise<Payment> {\n return this.request<Payment>(\"GET\", `/v1/payments/${id}`, undefined, {\n classifyContext: { paymentId: id },\n });\n }\n\n /**\n * Search payments with filters. Common: by external_reference (your-system\n * id), by status, by date range. Pagination via offset + limit (max 100).\n */\n async searchPayments(params: SearchPaymentsParams = {}): Promise<PaymentsSearchResult> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit ?? 30,\n offset: params.offset ?? 0,\n };\n if (params.externalReference) query[\"external_reference\"] = params.externalReference;\n if (params.status) query[\"status\"] = params.status as string;\n if (params.payerEmail) query[\"payer.email\"] = params.payerEmail;\n if (params.beginDate) query[\"begin_date\"] = params.beginDate;\n if (params.endDate) query[\"end_date\"] = params.endDate;\n if (params.sort) query[\"sort\"] = params.sort;\n if (params.criteria) query[\"criteria\"] = params.criteria;\n\n return this.request<PaymentsSearchResult>(\n \"GET\",\n \"/v1/payments/search\",\n undefined,\n { query },\n );\n }\n\n /**\n * Capture a previously authorized payment. Only works for credit-card\n * payments created with `capture: false`. Optional partial capture amount.\n */\n async capturePayment(id: string, amount?: number): Promise<Payment> {\n return this.request<Payment>(\n \"PUT\",\n `/v1/payments/${id}`,\n amount !== undefined ? { capture: true, transaction_amount: amount } : { capture: true },\n { classifyContext: { paymentId: id } },\n );\n }\n\n /**\n * Cancel a pending or in_process payment. Once approved, you must use\n * `createRefund` instead.\n */\n async cancelPayment(id: string): Promise<Payment> {\n return this.request<Payment>(\n \"PUT\",\n `/v1/payments/${id}`,\n { status: \"cancelled\" },\n { classifyContext: { paymentId: id } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Refunds\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Refund a payment fully (omit `amount`) or partially. Idempotency key\n * recommended — refunds can fail mid-flight and you don't want double-refunds\n * on retry.\n */\n async createRefund(params: CreateRefundParams): Promise<Refund> {\n const body = params.amount !== undefined ? { amount: params.amount } : undefined;\n return this.request<Refund>(\n \"POST\",\n `/v1/payments/${params.paymentId}/refunds`,\n body,\n {\n ...(params.idempotencyKey ? { idempotencyKey: params.idempotencyKey } : {}),\n classifyContext: { paymentId: params.paymentId },\n },\n );\n }\n\n async listRefunds(paymentId: string): Promise<Refund[]> {\n const res = await this.request<Refund[] | { refunds: Refund[] }>(\n \"GET\",\n `/v1/payments/${paymentId}/refunds`,\n undefined,\n { classifyContext: { paymentId } },\n );\n return Array.isArray(res) ? res : res.refunds ?? [];\n }\n\n async getRefund(paymentId: string, refundId: string): Promise<Refund> {\n return this.request<Refund>(\n \"GET\",\n `/v1/payments/${paymentId}/refunds/${refundId}`,\n undefined,\n { classifyContext: { paymentId } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Checkout Pro (Preferences)\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a payment preference for Checkout Pro. Returns `init_point` URL\n * where the buyer completes payment on MP-hosted form. This is the\n * recommended flow when you don't have a card token (most common path for\n * agents — you don't want to handle PCI data).\n *\n * Sandbox: use `sandbox_init_point` instead of `init_point`.\n */\n async createPreference(params: CreatePreferenceParams): Promise<Preference> {\n const body: Record<string, unknown> = {\n items: params.items.map((it) => ({\n title: it.title,\n quantity: it.quantity,\n unit_price: it.unit_price,\n currency_id: it.currency_id ?? \"ARS\",\n ...(it.description ? { description: it.description } : {}),\n ...(it.picture_url ? { picture_url: it.picture_url } : {}),\n })),\n };\n if (params.payer) body.payer = params.payer;\n if (params.backUrls) body.back_urls = params.backUrls;\n if (params.autoReturn) body.auto_return = params.autoReturn;\n if (params.notificationUrl) body.notification_url = params.notificationUrl;\n if (params.externalReference) body.external_reference = params.externalReference;\n if (params.paymentMethods) body.payment_methods = params.paymentMethods;\n if (params.statementDescriptor)\n body.statement_descriptor = params.statementDescriptor;\n if (params.expires !== undefined) body.expires = params.expires;\n if (params.expirationDateFrom) body.expiration_date_from = params.expirationDateFrom;\n if (params.expirationDateTo) body.expiration_date_to = params.expirationDateTo;\n // v0.5 — Marketplace split routing\n if (params.marketplace) body.marketplace = params.marketplace;\n if (params.marketplaceFee !== undefined) body.marketplace_fee = params.marketplaceFee;\n if (params.collectorId !== undefined) body.collector_id = params.collectorId;\n\n return this.request<Preference>(\"POST\", \"/checkout/preferences\", body);\n }\n\n async getPreference(id: string): Promise<Preference> {\n return this.request<Preference>(\"GET\", `/checkout/preferences/${id}`);\n }\n\n async updatePreference(\n id: string,\n patch: Partial<CreatePreferenceParams>,\n ): Promise<Preference> {\n return this.request<Preference>(\"PUT\", `/checkout/preferences/${id}`, patch);\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Customers + Saved Cards\n // ───────────────────────────────────────────────────────────────────────────\n\n async createCustomer(params: CreateCustomerParams): Promise<Customer> {\n const body: Record<string, unknown> = { email: params.email };\n if (params.firstName) body.first_name = params.firstName;\n if (params.lastName) body.last_name = params.lastName;\n if (params.phone) body.phone = { area_code: params.phone.areaCode, number: params.phone.number };\n if (params.identification) body.identification = params.identification;\n if (params.description) body.description = params.description;\n return this.request<Customer>(\"POST\", \"/v1/customers\", body, {\n classifyContext: { payerEmail: params.email },\n });\n }\n\n async getCustomer(id: string): Promise<Customer> {\n return this.request<Customer>(\"GET\", `/v1/customers/${id}`, undefined, {\n classifyContext: { customerId: id },\n });\n }\n\n /**\n * Search customers. Most common: by email (returns 0 or 1 result).\n * Note: MP's `/v1/customers/search` returns a paginated wrapper, not a flat array.\n */\n async searchCustomers(params: { email?: string; limit?: number; offset?: number } = {}): Promise<{\n paging: { total: number; limit: number; offset: number };\n results: Customer[];\n }> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit ?? 10,\n offset: params.offset ?? 0,\n };\n if (params.email) query[\"email\"] = params.email;\n return this.request(\"GET\", \"/v1/customers/search\", undefined, { query });\n }\n\n async listCustomerCards(customerId: string): Promise<CustomerCard[]> {\n return this.request<CustomerCard[]>(\n \"GET\",\n `/v1/customers/${customerId}/cards`,\n undefined,\n { classifyContext: { customerId } },\n );\n }\n\n async getCustomerCard(customerId: string, cardId: string): Promise<CustomerCard> {\n return this.request<CustomerCard>(\n \"GET\",\n `/v1/customers/${customerId}/cards/${cardId}`,\n undefined,\n { classifyContext: { customerId } },\n );\n }\n\n async deleteCustomerCard(customerId: string, cardId: string): Promise<void> {\n await this.request(\n \"DELETE\",\n `/v1/customers/${customerId}/cards/${cardId}`,\n undefined,\n { classifyContext: { customerId } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Payment Methods + Installments\n // ───────────────────────────────────────────────────────────────────────────\n\n /** List all payment methods enabled for the account's site (MLA = Argentina). */\n async listPaymentMethods(): Promise<PaymentMethod[]> {\n return this.request<PaymentMethod[]>(\"GET\", \"/v1/payment_methods\");\n }\n\n /**\n * Get installment options for an amount. THE killer AR feature — returns\n * `payer_costs` with `recommended_message` strings like \"12 cuotas sin\n * interés de $X\" that you should surface verbatim to the user.\n *\n * Pass `bin` (first 6 digits of card) for issuer-specific offers (e.g.,\n * Naranja's interest-free promotions). Without bin, returns generic offers.\n */\n async getInstallments(params: {\n amount: number;\n paymentMethodId?: string;\n bin?: string;\n issuerId?: string;\n }): Promise<InstallmentOffer[]> {\n const query: Record<string, string | number | undefined> = {\n amount: params.amount,\n };\n if (params.paymentMethodId) query[\"payment_method_id\"] = params.paymentMethodId;\n if (params.bin) query[\"bin\"] = params.bin;\n if (params.issuerId) query[\"issuer.id\"] = params.issuerId;\n return this.request<InstallmentOffer[]>(\n \"GET\",\n \"/v1/payment_methods/installments\",\n undefined,\n { query },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Account\n // ───────────────────────────────────────────────────────────────────────────\n\n /** Get info about the account that owns this access token. */\n async getMe(): Promise<AccountInfo> {\n return this.request<AccountInfo>(\"GET\", \"/users/me\");\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Card tokens (server-side, for saved-card retokenization)\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a single-use card token from a saved card. This is the server-side\n * retokenization path (PCI-safe because the card data lives in MP's vault,\n * we only pass the saved card_id + customer_id + the user-supplied CVV).\n *\n * Tokens expire in 7 days but typically burn on first use. AR currently\n * REQUIRES CVV on every charge (MP doesn't store it); skipping CVV requires\n * a private MP product enablement, not a public API.\n */\n async createCardToken(params: CreateCardTokenParams): Promise<CardToken> {\n return this.request<CardToken>(\"POST\", \"/v1/card_tokens\", {\n card_id: params.cardId,\n customer_id: params.customerId,\n security_code: params.securityCode,\n });\n }\n\n /**\n * High-level helper: charge a saved card in 3 steps.\n * 1. Mint a card token from {customer_id, card_id, security_code}\n * 2. Lookup card to fill payment_method_id (avoids agent guessing)\n * 3. Create the payment with the token + idempotency key\n *\n * Returns the resulting Payment. Uses deterministic idempotency from\n * (card_id, amount, externalReference) so retries dedupe on MP's side.\n */\n async chargeSavedCard(params: {\n customerId: string;\n cardId: string;\n securityCode: string;\n amount: number;\n description: string;\n installments?: number;\n externalReference?: string;\n statementDescriptor?: string;\n idempotencyKey?: string;\n }): Promise<Payment> {\n // Step 1: Mint single-use token\n const token = await this.createCardToken({\n cardId: params.cardId,\n customerId: params.customerId,\n securityCode: params.securityCode,\n });\n\n // Step 2: Lookup the saved card to fill payment_method_id\n const card = await this.getCustomerCard(params.customerId, params.cardId);\n const paymentMethodId = card.payment_method?.id;\n if (!paymentMethodId) {\n throw new MercadoPagoError(\n `Saved card ${params.cardId} has no payment_method.id. Cannot charge.`,\n 0,\n `/v1/customers/${params.customerId}/cards/${params.cardId}`,\n );\n }\n\n // Step 3: Create payment\n const body: Record<string, unknown> = {\n transaction_amount: params.amount,\n token: token.id,\n payment_method_id: paymentMethodId,\n installments: params.installments ?? 1,\n description: params.description,\n payer: { type: \"customer\", id: params.customerId },\n };\n if (params.externalReference) body.external_reference = params.externalReference;\n if (params.statementDescriptor) body.statement_descriptor = params.statementDescriptor;\n\n return this.request<Payment>(\"POST\", \"/v1/payments\", body, {\n ...(params.idempotencyKey !== undefined ? { idempotencyKey: params.idempotencyKey } : {}),\n classifyContext: { customerId: params.customerId },\n });\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // QR (in-store dynamic) — Section 2 of v0.3 spec\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a dynamic in-store QR order. Returns `qr_data` (EMVCo TLV string)\n * + `in_store_order_id`. The buyer scans the QR with any AR wallet (Modo,\n * BNA+, Cuenta DNI, Naranja X, etc. — interop is mandated by Transferencias\n * 3.0). On payment, MP fires `point_integration_wh` then `payment` topics.\n *\n * Requires a pre-configured POS (`external_pos_id` from MP dashboard or\n * `POST /pos`). The seller's `user_id` is auto-fetched from `/users/me`.\n *\n * The lib does NOT render the QR image — pass `qr_data` to a QR renderer\n * (e.g., `qrcode` package) to get a data URL. The agent tool layer wraps\n * this and returns both raw + data URL.\n */\n async createQrPayment(userId: string, params: CreateQrPaymentParams): Promise<QrOrder> {\n const body: Record<string, unknown> = {\n total_amount: params.totalAmount,\n title: params.title,\n };\n if (params.description) body.description = params.description;\n if (params.notificationUrl) body.notification_url = params.notificationUrl;\n if (params.externalReference) body.external_reference = params.externalReference;\n if (params.expirationDate) body.expiration_date = params.expirationDate;\n body.items = params.items ?? [\n {\n title: params.title,\n quantity: 1,\n unit_price: params.totalAmount,\n unit_measure: \"unit\",\n total_amount: params.totalAmount,\n },\n ];\n\n return this.request<QrOrder>(\n \"PUT\",\n `/instore/orders/qr/seller/collectors/${encodeURIComponent(userId)}/pos/${encodeURIComponent(params.externalPosId)}/qrs`,\n body,\n );\n }\n\n /**\n * Cancel a pending QR order on a POS. Necessary if the buyer never scans\n * — otherwise the next `createQrPayment` on the same POS returns 409.\n */\n async cancelQrPayment(userId: string, externalPosId: string): Promise<void> {\n await this.request(\n \"DELETE\",\n `/instore/orders/qr/seller/collectors/${encodeURIComponent(userId)}/pos/${encodeURIComponent(externalPosId)}/qrs`,\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Subscription Plans (preapproval_plan — reusable plans, v0.4)\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a reusable subscription plan. Customers later subscribe to it via\n * `subscribeToPlan` (which creates a preapproval pointing at the plan).\n *\n * Use this when you have fixed tiers (Básico/Pro/Enterprise). For custom\n * per-customer amounts, skip plans and use `createPreapproval` directly.\n */\n async createSubscriptionPlan(params: CreateSubscriptionPlanParams): Promise<SubscriptionPlan> {\n const body: Record<string, unknown> = {\n reason: params.reason,\n back_url: params.backUrl,\n auto_recurring: {\n frequency: params.frequency,\n frequency_type: params.frequencyType,\n transaction_amount: params.amount,\n currency_id: params.currency,\n ...(params.freeTrialFrequency !== undefined && params.freeTrialFrequencyType !== undefined\n ? {\n free_trial: {\n frequency: params.freeTrialFrequency,\n frequency_type: params.freeTrialFrequencyType,\n },\n }\n : {}),\n },\n };\n if (params.externalReference) body.external_reference = params.externalReference;\n return this.request<SubscriptionPlan>(\"POST\", \"/preapproval_plan\", body);\n }\n\n async getSubscriptionPlan(id: string): Promise<SubscriptionPlan> {\n return this.request<SubscriptionPlan>(\"GET\", `/preapproval_plan/${id}`);\n }\n\n async listSubscriptionPlans(params: { limit?: number; offset?: number; status?: string } = {}): Promise<{\n paging: { total: number; limit: number; offset: number };\n results: SubscriptionPlan[];\n }> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit ?? 30,\n offset: params.offset ?? 0,\n };\n if (params.status) query[\"status\"] = params.status;\n return this.request(\"GET\", \"/preapproval_plan/search\", undefined, { query });\n }\n\n async updateSubscriptionPlan(\n id: string,\n patch: { reason?: string; status?: \"active\" | \"cancelled\"; amount?: number; backUrl?: string },\n ): Promise<SubscriptionPlan> {\n const body: Record<string, unknown> = {};\n if (patch.reason !== undefined) body.reason = patch.reason;\n if (patch.status !== undefined) body.status = patch.status;\n if (patch.backUrl !== undefined) body.back_url = patch.backUrl;\n if (patch.amount !== undefined) {\n body.auto_recurring = { transaction_amount: patch.amount };\n }\n return this.request<SubscriptionPlan>(\"PUT\", `/preapproval_plan/${id}`, body);\n }\n\n /**\n * Subscribe a customer to an existing plan. Returns a Preapproval with\n * `init_point` URL where the buyer completes the first payment.\n */\n async subscribeToPlan(params: {\n planId: string;\n payerEmail: string;\n cardTokenId?: string;\n externalReference?: string;\n }): Promise<Preapproval> {\n const body: Record<string, unknown> = {\n preapproval_plan_id: params.planId,\n payer_email: params.payerEmail,\n };\n if (params.cardTokenId) body.card_token_id = params.cardTokenId;\n if (params.externalReference) body.external_reference = params.externalReference;\n return this.request<Preapproval>(\"POST\", \"/preapproval\", body, {\n classifyContext: { payerEmail: params.payerEmail },\n });\n }\n\n /**\n * List the auto-charge attempts (authorized_payments) under a preapproval.\n * Useful for \"show me the cobros of the last 6 months for this client\".\n */\n async listSubscriptionPayments(preapprovalId: string, params: { limit?: number; offset?: number } = {}): Promise<{\n paging: { total: number; limit: number; offset: number };\n results: SubscriptionPayment[];\n }> {\n const query: Record<string, string | number | undefined> = {\n preapproval_id: preapprovalId,\n limit: params.limit ?? 30,\n offset: params.offset ?? 0,\n };\n return this.request(\n \"GET\",\n `/authorized_payments/search`,\n undefined,\n { query, classifyContext: { preapprovalId } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Stores + POS (for QR payments self-serve setup, v0.4)\n // ───────────────────────────────────────────────────────────────────────────\n\n /** Create a store for the seller. POSes (for QR) live under stores. */\n async createStore(userId: string, params: CreateStoreParams): Promise<Store> {\n const body: Record<string, unknown> = {\n name: params.name,\n external_id: params.externalId,\n };\n if (params.location) {\n body.location = {\n ...(params.location.addressLine ? { address_line: params.location.addressLine } : {}),\n ...(params.location.cityName ? { city_name: params.location.cityName } : {}),\n ...(params.location.stateName ? { state_name: params.location.stateName } : {}),\n ...(params.location.countryId ? { country_id: params.location.countryId } : {}),\n ...(params.location.latitude !== undefined ? { latitude: params.location.latitude } : {}),\n ...(params.location.longitude !== undefined ? { longitude: params.location.longitude } : {}),\n };\n }\n return this.request<Store>(\"POST\", `/users/${encodeURIComponent(userId)}/stores`, body);\n }\n\n async listStores(userId: string, params: { limit?: number; offset?: number } = {}): Promise<{\n paging: { total: number; limit: number; offset: number };\n results: Store[];\n }> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit ?? 50,\n offset: params.offset ?? 0,\n };\n return this.request(\"GET\", `/users/${encodeURIComponent(userId)}/stores/search`, undefined, { query });\n }\n\n /** Create a POS under a store. The POS's `external_id` is what `createQrPayment` uses. */\n async createPos(params: CreatePosParams): Promise<Pos> {\n const body: Record<string, unknown> = {\n name: params.name,\n external_id: params.externalId,\n store_id: params.storeId,\n category: params.category ?? 621102, // \"Other Food and Beverage Services\" — generic default\n };\n if (params.fixedAmount !== undefined) body.fixed_amount = params.fixedAmount;\n return this.request<Pos>(\"POST\", \"/pos\", body);\n }\n\n async listPos(params: { storeId?: string | number; limit?: number; offset?: number } = {}): Promise<{\n paging: { total: number; limit: number; offset: number };\n results: Pos[];\n }> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit ?? 50,\n offset: params.offset ?? 0,\n };\n if (params.storeId !== undefined) query[\"store_id\"] = String(params.storeId);\n return this.request(\"GET\", \"/pos\", undefined, { query });\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Disputes (read-only, v0.4)\n // ───────────────────────────────────────────────────────────────────────────\n\n async listPaymentDisputes(paymentId: string): Promise<Dispute[]> {\n return this.request<Dispute[]>(\"GET\", `/v1/payments/${paymentId}/disputes`, undefined, {\n classifyContext: { paymentId },\n });\n }\n\n async getDispute(paymentId: string, disputeId: string): Promise<Dispute> {\n return this.request<Dispute>(\n \"GET\",\n `/v1/payments/${paymentId}/disputes/${disputeId}`,\n undefined,\n { classifyContext: { paymentId } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Identification Types + Issuers (lookup helpers, v0.4)\n // ───────────────────────────────────────────────────────────────────────────\n\n /** List valid identification types for the seller's site. AR returns DNI/CI/LE/LC/Otro/Pasaporte/CUIT/CUIL. */\n async listIdentificationTypes(): Promise<IdentificationType[]> {\n return this.request<IdentificationType[]>(\"GET\", \"/v1/identification_types\");\n }\n\n /** List card issuers for a payment method. Useful with `bin` for installments. */\n async listIssuers(params: { paymentMethodId: string; bin?: string }): Promise<Issuer[]> {\n const query: Record<string, string | number | undefined> = {\n payment_method_id: params.paymentMethodId,\n };\n if (params.bin) query[\"bin\"] = params.bin;\n return this.request<Issuer[]>(\"GET\", \"/v1/payment_methods/card_issuers\", undefined, { query });\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Webhooks management (v0.4)\n // ───────────────────────────────────────────────────────────────────────────\n\n /** List configured webhook subscriptions. */\n async listWebhooks(): Promise<WebhookConfig[]> {\n return this.request<WebhookConfig[]>(\"GET\", \"/v1/webhooks\");\n }\n\n /** Create a webhook subscription for a topic. */\n async createWebhook(params: CreateWebhookParams): Promise<WebhookConfig> {\n return this.request<WebhookConfig>(\"POST\", \"/v1/webhooks\", {\n url: params.url,\n topic: params.topic,\n });\n }\n\n async updateWebhook(id: string, patch: { url?: string; topic?: string }): Promise<WebhookConfig> {\n return this.request<WebhookConfig>(\"PUT\", `/v1/webhooks/${id}`, patch);\n }\n\n async deleteWebhook(id: string): Promise<void> {\n await this.request(\"DELETE\", `/v1/webhooks/${id}`);\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // v0.5 — Order Management API\n //\n // The Order API is MP's newer abstraction for purchases, replacing some\n // Preference flows. Distinct from Preference: Order is a transactional\n // entity with explicit lifecycle (created → processed → captured/canceled),\n // supports manual capture (auth-only, capture later), and can attach\n // multiple payments to a single Order.\n //\n // Use Order when you need:\n // - Auth-only flow (capture later, e.g. ride-share, hotels)\n // - Multi-payment aggregation (one Order = N partial payments)\n // - In-store + online unified status\n //\n // Stick with Preference (Checkout Pro) when you just need a hosted pay-link.\n // ──────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a new Order. Use `capture_mode: \"manual\"` for auth-only flows\n * where you want to capture funds later (ride-share, hotels, marketplaces).\n *\n * For marketplace splits, set `marketplace`, `marketplace_fee`,\n * `collector_id` — see `MarketplaceParams`.\n */\n async createOrder(\n params: CreateOrderParams,\n options?: RequestOptions,\n ): Promise<Order> {\n const body: Record<string, unknown> = {\n type: params.type,\n };\n if (params.currency_id) body.currency_id = params.currency_id;\n if (params.external_reference) body.external_reference = params.external_reference;\n if (params.items) body.items = params.items;\n if (params.total_amount !== undefined) body.total_amount = params.total_amount;\n if (params.payer) body.payer = params.payer;\n if (params.capture_mode) body.capture_mode = params.capture_mode;\n if (params.notification_url) body.notification_url = params.notification_url;\n if (params.marketplace) body.marketplace = params.marketplace;\n if (params.marketplace_fee !== undefined) body.marketplace_fee = params.marketplace_fee;\n if (params.collector_id !== undefined) body.collector_id = params.collector_id;\n\n return this.request<Order>(\"POST\", \"/v1/orders\", body, options);\n }\n\n async getOrder(id: string): Promise<Order> {\n return this.request<Order>(\"GET\", `/v1/orders/${id}`);\n }\n\n async updateOrder(\n id: string,\n patch: Partial<CreateOrderParams>,\n ): Promise<Order> {\n return this.request<Order>(\"PUT\", `/v1/orders/${id}`, patch);\n }\n\n /**\n * Capture a previously-authorized Order (only for orders created with\n * `capture_mode: \"manual\"`). Captures up to the originally-authorized\n * amount; pass `amount` for partial capture.\n */\n async captureOrder(id: string, amount?: number): Promise<Order> {\n const body = amount !== undefined ? { amount } : {};\n return this.request<Order>(\"POST\", `/v1/orders/${id}/capture`, body);\n }\n\n /**\n * Cancel an Order. Releases any auth-holds; marks the Order as canceled.\n * For orders that have already been captured, use `createRefund` instead.\n */\n async cancelOrder(id: string): Promise<Order> {\n return this.request<Order>(\"POST\", `/v1/orders/${id}/cancel`);\n }\n}\n\nexport { MercadoPagoError };\n","import { z } from \"zod\";\n\n/**\n * Site IDs supported by Mercado Pago. The lib targets MLA (Argentina) primarily;\n * other LATAM sites may work for the read paths but the full Subscriptions flow\n * is only verified against MLA.\n */\nexport const SiteIdSchema = z.enum([\"MLA\", \"MLB\", \"MLM\", \"MCO\", \"MLC\", \"MLU\"]);\nexport type SiteId = z.infer<typeof SiteIdSchema>;\n\n/**\n * Currency identifiers MP exposes. ARS is the supported case for v0.1.\n */\nexport const CurrencyIdSchema = z.enum([\"ARS\", \"USD\", \"BRL\", \"MXN\"]);\nexport type CurrencyId = z.infer<typeof CurrencyIdSchema>;\n\n/**\n * Recurrence frequency unit for a subscription's auto_recurring config.\n */\nexport const FrequencyTypeSchema = z.enum([\"months\", \"days\"]);\nexport type FrequencyType = z.infer<typeof FrequencyTypeSchema>;\n\n/**\n * Lifecycle states a Mercado Pago preapproval can be in. The string is the\n * canonical MP value; we widen to `string` for forward compatibility because\n * MP has historically introduced new states without notice.\n */\nexport const PreapprovalStatusSchema = z.union([\n z.literal(\"pending\"),\n z.literal(\"authorized\"),\n z.literal(\"paused\"),\n z.literal(\"cancelled\"),\n z.string(),\n]);\nexport type PreapprovalStatus = z.infer<typeof PreapprovalStatusSchema>;\n\nexport const AutoRecurringSchema = z.object({\n frequency: z.number().int().positive(),\n frequency_type: FrequencyTypeSchema,\n transaction_amount: z.number().positive(),\n currency_id: CurrencyIdSchema,\n start_date: z.string().optional(),\n end_date: z.string().optional(),\n});\nexport type AutoRecurring = z.infer<typeof AutoRecurringSchema>;\n\nexport const PreapprovalSchema = z.object({\n id: z.string(),\n status: PreapprovalStatusSchema,\n payer_email: z.string(),\n init_point: z.string().url(),\n external_reference: z.string().optional(),\n date_created: z.string(),\n last_modified: z.string(),\n next_payment_date: z.string().optional(),\n payer_id: z.union([z.string(), z.number()]).optional(),\n auto_recurring: AutoRecurringSchema,\n});\nexport type Preapproval = z.infer<typeof PreapprovalSchema>;\n\n/**\n * Input for creating a preapproval (subscription). Internal field names match\n * MP API semantics; the public client method maps from camelCase Naza-friendly\n * params to the snake_case payload MP expects.\n */\nexport interface CreatePreapprovalParams {\n /** Short customer-facing description shown at checkout. */\n reason: string;\n /** Email of the buyer. Cannot equal the seller account's email (MP rejects). */\n payerEmail: string;\n /** Recurring amount per cycle. */\n amount: number;\n /** ARS for Argentina. Other currencies depend on the seller account's site. */\n currency: CurrencyId;\n /** Recurrence frequency (e.g., 1 + months = monthly). */\n frequency: number;\n frequencyType: FrequencyType;\n /** HTTPS URL where MP redirects the buyer after first payment. localhost rejected. */\n backUrl: string;\n /** Optional client-side identifier for the subscription. */\n externalReference?: string;\n}\n\n/**\n * The shape of an MP webhook notification body for `topic=preapproval`. MP's\n * webhook payload varies by event type; this is the union of fields seen in\n * production.\n */\nexport const WebhookBodySchema = z\n .object({\n type: z.string().optional(),\n topic: z.string().optional(),\n action: z.string().optional(),\n data: z.object({ id: z.union([z.string(), z.number()]) }).optional(),\n resource: z.string().optional(),\n user_id: z.union([z.string(), z.number()]).optional(),\n api_version: z.string().optional(),\n date_created: z.string().optional(),\n id: z.union([z.string(), z.number()]).optional(),\n live_mode: z.boolean().optional(),\n })\n .passthrough();\nexport type WebhookBody = z.infer<typeof WebhookBodySchema>;\n\n/**\n * Normalized webhook event after parsing. The library extracts topic + dataId\n * from either query params or body, since MP sends them in either location\n * depending on integration version.\n */\nexport interface ParsedWebhookEvent {\n /** Topic of the event, e.g., \"preapproval\", \"payment\", \"subscription_authorized_payment\". */\n topic: string;\n /** ID of the affected resource. */\n dataId: string;\n /** Action descriptor when present (e.g., \"updated\", \"created\"). */\n action: string | null;\n /** Raw body MP sent, for caller inspection / debugging. */\n raw: WebhookBody;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Payments (v0.2)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Top-level lifecycle status of a payment. MP-canonical values; widened to\n * string for forward compatibility.\n */\nexport const PaymentStatusSchema = z.union([\n z.literal(\"pending\"),\n z.literal(\"approved\"),\n z.literal(\"authorized\"),\n z.literal(\"in_process\"),\n z.literal(\"in_mediation\"),\n z.literal(\"rejected\"),\n z.literal(\"cancelled\"),\n z.literal(\"refunded\"),\n z.literal(\"charged_back\"),\n z.string(),\n]);\nexport type PaymentStatus = z.infer<typeof PaymentStatusSchema>;\n\n/** Status detail — finer granularity inside a status (e.g., why rejected). */\nexport type PaymentStatusDetail = string;\n\n/**\n * The full Payment object MP returns. Many fields are optional because they\n * vary by payment method, status, and integration mode (Checkout Pro vs API).\n */\nexport const PaymentSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n status: PaymentStatusSchema,\n status_detail: z.string().nullable().optional(),\n date_created: z.string().nullable().optional(),\n date_approved: z.string().nullable().optional(),\n date_last_updated: z.string().nullable().optional(),\n transaction_amount: z.number(),\n currency_id: z.string(),\n installments: z.number().int().nullable().optional(),\n payment_method_id: z.string().nullable().optional(),\n payment_type_id: z.string().nullable().optional(),\n external_reference: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n payer: z\n .object({\n id: z.union([z.string(), z.number()]).optional(),\n email: z.string().nullable().optional(),\n identification: z\n .object({\n type: z.string().nullable().optional(),\n number: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n })\n .passthrough()\n .optional(),\n transaction_details: z\n .object({\n net_received_amount: z.number().nullable().optional(),\n total_paid_amount: z.number().nullable().optional(),\n installment_amount: z.number().nullable().optional(),\n })\n .passthrough()\n .optional(),\n}).passthrough();\nexport type Payment = z.infer<typeof PaymentSchema>;\n\n/** Params for creating a payment (Checkout API / transparent flow). */\nexport interface CreatePaymentParams {\n /** Amount in account currency. ARS for Argentina. */\n transactionAmount: number;\n /** Number of installments. Use 1 for no cuotas; AR cards typically allow up to 12. */\n installments?: number;\n /** MP payment_method_id — `visa`, `master`, `naranja`, `account_money`, etc. */\n paymentMethodId: string;\n /** Payer email — REQUIRED. Cannot equal seller email. */\n payerEmail: string;\n /** Card token from MP frontend SDK (Cardform). Required for credit/debit; omit for `account_money` etc. */\n token?: string;\n /** Description shown in payer's MP statement. */\n description?: string;\n /** Your-system identifier for correlation. */\n externalReference?: string;\n /** Optional payer identification (DNI/CUIT) — required for some payment types. */\n identification?: { type: \"DNI\" | \"CUIT\" | \"CUIL\"; number: string };\n /** Webhook override URL. Falls back to dashboard config if omitted. */\n notificationUrl?: string;\n /** AFIP/ARCA discount/fee/tax additions. Used to discriminate IVA, marketplace fees, etc. */\n additionalInfo?: {\n items?: Array<{\n id?: string;\n title: string;\n quantity: number;\n unit_price: number;\n description?: string;\n }>;\n };\n /** Statement descriptor — what shows on the buyer's card statement. Max 13 chars. */\n statementDescriptor?: string;\n /** When true, capture is deferred (only for credit cards) — useful for hold flows. */\n capture?: boolean;\n /** Idempotency key — pass the same value on retries to dedupe. Required for non-GET. */\n idempotencyKey?: string;\n}\n\nexport interface SearchPaymentsParams {\n /** Filter by external_reference (your-system id). */\n externalReference?: string;\n /** Filter by payment status. */\n status?: PaymentStatus;\n /** Filter by payer email. */\n payerEmail?: string;\n /** Date range for date_created (ISO 8601). */\n beginDate?: string;\n endDate?: string;\n /** Result page (default 0). */\n offset?: number;\n /** Page size (default 30, max 100). */\n limit?: number;\n /** Sort: e.g. \"date_created\" desc. */\n sort?: string;\n criteria?: \"asc\" | \"desc\";\n}\n\nexport const PaymentsSearchResultSchema = z.object({\n paging: z.object({\n total: z.number(),\n limit: z.number(),\n offset: z.number(),\n }),\n results: z.array(PaymentSchema),\n});\nexport type PaymentsSearchResult = z.infer<typeof PaymentsSearchResultSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Refunds\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const RefundSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n payment_id: z.union([z.string(), z.number()]).transform(String),\n amount: z.number(),\n source: z\n .object({\n id: z.string().nullable().optional(),\n name: z.string().nullable().optional(),\n type: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n date_created: z.string().nullable().optional(),\n status: z.string().nullable().optional(),\n}).passthrough();\nexport type Refund = z.infer<typeof RefundSchema>;\n\nexport interface CreateRefundParams {\n paymentId: string;\n /** Partial refund amount. Omit for full refund. */\n amount?: number;\n /** Idempotency key — required for retry-safety. */\n idempotencyKey?: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Checkout Pro (Preferences)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const PreferenceItemSchema = z.object({\n id: z.string().optional(),\n title: z.string(),\n description: z.string().optional(),\n picture_url: z.string().url().optional(),\n category_id: z.string().optional(),\n quantity: z.number().int().positive(),\n unit_price: z.number().positive(),\n currency_id: CurrencyIdSchema.optional(),\n});\nexport type PreferenceItem = z.infer<typeof PreferenceItemSchema>;\n\nexport const PreferenceSchema = z.object({\n id: z.string(),\n init_point: z.string().url().optional(),\n sandbox_init_point: z.string().url().optional(),\n client_id: z.union([z.string(), z.number()]).optional(),\n collector_id: z.union([z.string(), z.number()]).optional(),\n items: z.array(PreferenceItemSchema).optional(),\n external_reference: z.string().nullable().optional(),\n date_created: z.string().nullable().optional(),\n expires: z.boolean().optional(),\n expiration_date_from: z.string().nullable().optional(),\n expiration_date_to: z.string().nullable().optional(),\n}).passthrough();\nexport type Preference = z.infer<typeof PreferenceSchema>;\n\nexport interface CreatePreferenceParams {\n items: Array<{\n title: string;\n quantity: number;\n unit_price: number;\n currency_id?: CurrencyId;\n description?: string;\n picture_url?: string;\n }>;\n payer?: {\n name?: string;\n surname?: string;\n email?: string;\n phone?: { area_code?: string; number?: string };\n identification?: { type: string; number: string };\n address?: { street_name?: string; street_number?: number; zip_code?: string };\n };\n /** Where to send the buyer after success/failure/pending. */\n backUrls?: { success?: string; failure?: string; pending?: string };\n /** \"approved\" → auto-redirect on success; \"all\" → always; \"\" → never. */\n autoReturn?: \"approved\" | \"all\";\n /** Webhook URL. */\n notificationUrl?: string;\n /** Your-system id for correlation. */\n externalReference?: string;\n /** Max installments offered. Defaults to MP account config. */\n paymentMethods?: {\n excluded_payment_types?: Array<{ id: string }>;\n excluded_payment_methods?: Array<{ id: string }>;\n installments?: number;\n default_installments?: number;\n };\n /** Statement descriptor — shows on buyer's card statement. */\n statementDescriptor?: string;\n /** Expiration window for the link itself. */\n expires?: boolean;\n expirationDateFrom?: string;\n expirationDateTo?: string;\n /**\n * Marketplace split — if set, funds route to `collector_id` (the seller)\n * and `marketplaceFee` (in ARS) is credited to the marketplace's MP\n * account. v0.5+. See `MarketplaceParams` for details.\n */\n marketplace?: string;\n marketplaceFee?: number;\n /** Seller's MP user_id. Funds route here when set. */\n collectorId?: string | number;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Customers + Saved Cards\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const CustomerSchema = z.object({\n id: z.string(),\n email: z.string(),\n first_name: z.string().nullable().optional(),\n last_name: z.string().nullable().optional(),\n phone: z\n .object({ area_code: z.string().nullable().optional(), number: z.string().nullable().optional() })\n .nullable()\n .optional(),\n identification: z\n .object({ type: z.string().nullable().optional(), number: z.string().nullable().optional() })\n .nullable()\n .optional(),\n date_created: z.string().nullable().optional(),\n date_last_updated: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n}).passthrough();\nexport type Customer = z.infer<typeof CustomerSchema>;\n\nexport const CustomerCardSchema = z.object({\n id: z.string(),\n customer_id: z.string(),\n expiration_month: z.number().int().nullable().optional(),\n expiration_year: z.number().int().nullable().optional(),\n first_six_digits: z.string().nullable().optional(),\n last_four_digits: z.string().nullable().optional(),\n payment_method: z\n .object({\n id: z.string().nullable().optional(),\n name: z.string().nullable().optional(),\n payment_type_id: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n date_created: z.string().nullable().optional(),\n}).passthrough();\nexport type CustomerCard = z.infer<typeof CustomerCardSchema>;\n\nexport interface CreateCustomerParams {\n email: string;\n firstName?: string;\n lastName?: string;\n phone?: { areaCode?: string; number?: string };\n identification?: { type: \"DNI\" | \"CUIT\" | \"CUIL\"; number: string };\n description?: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Payment Methods + Installments\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const PaymentMethodSchema = z.object({\n id: z.string(),\n name: z.string(),\n payment_type_id: z.string(),\n status: z.string(),\n thumbnail: z.string().nullable().optional(),\n secure_thumbnail: z.string().nullable().optional(),\n min_allowed_amount: z.number().nullable().optional(),\n max_allowed_amount: z.number().nullable().optional(),\n}).passthrough();\nexport type PaymentMethod = z.infer<typeof PaymentMethodSchema>;\n\nexport const InstallmentOfferSchema = z.object({\n payment_method_id: z.string(),\n payment_type_id: z.string(),\n issuer: z\n .object({\n id: z.union([z.string(), z.number()]).optional(),\n name: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n payer_costs: z.array(\n z.object({\n installments: z.number().int(),\n installment_rate: z.number(),\n discount_rate: z.number().nullable().optional(),\n installment_amount: z.number(),\n total_amount: z.number(),\n recommended_message: z.string().nullable().optional(),\n }).passthrough(),\n ),\n}).passthrough();\nexport type InstallmentOffer = z.infer<typeof InstallmentOfferSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Account\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ─────────────────────────────────────────────────────────────────────────────\n// QR (in-store dynamic)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const QrOrderSchema = z.object({\n in_store_order_id: z.string(),\n qr_data: z.string(),\n}).passthrough();\nexport type QrOrder = z.infer<typeof QrOrderSchema>;\n\nexport interface CreateQrPaymentParams {\n /** Pre-configured POS external_id from MP dashboard. Required. */\n externalPosId: string;\n /** Total amount in ARS. */\n totalAmount: number;\n /** Display title shown to the buyer when scanning. */\n title: string;\n description?: string;\n /** Webhook URL — MP fires `point_integration_wh` then `payment` topic. */\n notificationUrl?: string;\n /** Your-system identifier for correlation. */\n externalReference?: string;\n /** ISO 8601 expiration (default 10 min from now). */\n expirationDate?: string;\n /** Itemized line items (optional but improves analytics). */\n items?: Array<{\n title: string;\n quantity: number;\n unit_price: number;\n unit_measure?: string;\n total_amount?: number;\n }>;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Card tokens (for charge_saved_card)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const CardTokenSchema = z.object({\n id: z.string(),\n status: z.string().optional(),\n date_due: z.string().optional(),\n card_id: z.string().optional(),\n cardholder: z.unknown().optional(),\n}).passthrough();\nexport type CardToken = z.infer<typeof CardTokenSchema>;\n\nexport interface CreateCardTokenParams {\n /** Saved card id (from list_customer_cards). */\n cardId: string;\n /** Customer that owns the card. */\n customerId: string;\n /** CVV — required for AR; MP doesn't store CVV. */\n securityCode: string;\n}\n\nexport const AccountInfoSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n email: z.string().nullable().optional(),\n nickname: z.string().nullable().optional(),\n country_id: z.string().nullable().optional(),\n site_id: z.string().nullable().optional(),\n user_type: z.string().nullable().optional(),\n status: z\n .object({ user_type: z.string().nullable().optional() })\n .passthrough()\n .nullable()\n .optional(),\n}).passthrough();\nexport type AccountInfo = z.infer<typeof AccountInfoSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Subscription Plans (preapproval_plan — reusable plan definitions)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * A reusable subscription plan. Different from a per-customer subscription:\n * a plan defines the price + frequency once, then customers subscribe to it\n * via `subscribe_to_plan` (which creates a preapproval pointing at the plan).\n *\n * Use plans for SaaS-style billing where you have a fixed set of tiers\n * (Básico/Pro/Enterprise) instead of negotiating amounts per customer.\n */\nexport const SubscriptionPlanSchema = z.object({\n id: z.string(),\n status: z.string(),\n reason: z.string(),\n back_url: z.string().url().optional(),\n external_reference: z.string().nullable().optional(),\n date_created: z.string(),\n last_modified: z.string(),\n auto_recurring: AutoRecurringSchema,\n}).passthrough();\nexport type SubscriptionPlan = z.infer<typeof SubscriptionPlanSchema>;\n\nexport interface CreateSubscriptionPlanParams {\n /** Customer-facing plan name shown at checkout. */\n reason: string;\n /** Where MP redirects buyer after first payment. HTTPS only. */\n backUrl: string;\n /** Recurrence (e.g., 1 + months = monthly). */\n frequency: number;\n frequencyType: FrequencyType;\n /** Amount per cycle. */\n amount: number;\n /** ARS for AR. */\n currency: CurrencyId;\n /** Optional plan-level identifier from your system. */\n externalReference?: string;\n /** Free trial days before first charge. */\n freeTrialFrequency?: number;\n freeTrialFrequencyType?: FrequencyType;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Stores + POS (for QR payments setup)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const StoreSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n name: z.string().optional(),\n external_id: z.string().optional(),\n date_creation: z.string().optional(),\n location: z\n .object({\n address_line: z.string().optional(),\n city_name: z.string().optional(),\n state_name: z.string().optional(),\n country_id: z.string().optional(),\n latitude: z.number().optional(),\n longitude: z.number().optional(),\n })\n .passthrough()\n .optional(),\n}).passthrough();\nexport type Store = z.infer<typeof StoreSchema>;\n\nexport interface CreateStoreParams {\n /** Display name for the store. */\n name: string;\n /** Caller-defined identifier (must be unique within the seller's stores). */\n externalId: string;\n /** Optional physical location. */\n location?: {\n addressLine?: string;\n cityName?: string;\n stateName?: string;\n countryId?: string;\n latitude?: number;\n longitude?: number;\n };\n}\n\nexport const PosSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n name: z.string().optional(),\n external_id: z.string().optional(),\n store_id: z.union([z.string(), z.number()]).optional(),\n category: z.number().int().optional(),\n fixed_amount: z.boolean().optional(),\n qr: z\n .object({\n template_image: z.string().optional(),\n image: z.string().optional(),\n })\n .passthrough()\n .optional(),\n date_creation: z.string().optional(),\n}).passthrough();\nexport type Pos = z.infer<typeof PosSchema>;\n\nexport interface CreatePosParams {\n /** Display name. */\n name: string;\n /** Caller-defined POS id (used in QR endpoints; unique within store). */\n externalId: string;\n /** Parent store id (number from createStore). */\n storeId: string | number;\n /** MP category code (default 621102 = Other Food and Beverage Services). */\n category?: number;\n /** If true, the QR has a fixed amount; if false, dynamic per-order. */\n fixedAmount?: boolean;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Disputes / Chargebacks (read-only)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const DisputeSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n status: z.string(),\n resource: z.string().optional(),\n resource_id: z.union([z.string(), z.number()]).optional(),\n amount: z.number().optional(),\n date_created: z.string().optional(),\n reason: z.string().optional(),\n resolution: z\n .object({\n reason: z.string().optional(),\n result: z.string().optional(),\n date: z.string().optional(),\n })\n .passthrough()\n .optional(),\n /** Documents the buyer / seller submitted as evidence. */\n documents: z.array(z.unknown()).optional(),\n /** Buyer's stated complaint. */\n reason_description: z.string().optional(),\n}).passthrough();\nexport type Dispute = z.infer<typeof DisputeSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Subscription Payment History (authorized_payments under a preapproval)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const SubscriptionPaymentSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n preapproval_id: z.string().optional(),\n status: z.string(),\n payment_id: z.union([z.string(), z.number()]).nullable().optional(),\n transaction_amount: z.number().optional(),\n currency_id: z.string().optional(),\n date_created: z.string().optional(),\n debit_date: z.string().optional(),\n next_retry_date: z.string().nullable().optional(),\n retry_attempt: z.number().optional(),\n reason: z.string().optional(),\n}).passthrough();\nexport type SubscriptionPayment = z.infer<typeof SubscriptionPaymentSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Identification Types + Issuers (lookup helpers)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const IdentificationTypeSchema = z.object({\n id: z.string(),\n name: z.string(),\n type: z.string(),\n min_length: z.number().optional(),\n max_length: z.number().optional(),\n}).passthrough();\nexport type IdentificationType = z.infer<typeof IdentificationTypeSchema>;\n\nexport const IssuerSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n name: z.string(),\n secure_thumbnail: z.string().nullable().optional(),\n thumbnail: z.string().nullable().optional(),\n processing_mode: z.string().optional(),\n status: z.string().optional(),\n}).passthrough();\nexport type Issuer = z.infer<typeof IssuerSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Webhooks (configure subscriptions to topics)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Topics MP can fire webhooks for. Add more as MP exposes them. */\nexport const WebhookTopicSchema = z.enum([\n \"payment\",\n \"subscription_authorized_payment\",\n \"subscription_preapproval\",\n \"merchant_order\",\n \"point_integration_wh\",\n \"stop_delivery_op_wh\",\n]);\nexport type WebhookTopic = z.infer<typeof WebhookTopicSchema>;\n\nexport const WebhookConfigSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n url: z.string().url().optional(),\n status: z.string().optional(),\n topic: z.string().optional(),\n date_created: z.string().optional(),\n date_modified: z.string().optional(),\n}).passthrough();\nexport type WebhookConfig = z.infer<typeof WebhookConfigSchema>;\n\nexport interface CreateWebhookParams {\n url: string;\n /** Topic to subscribe to. */\n topic: WebhookTopic | string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// v0.5 — OAuth Marketplace flow (link third-party MP accounts)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Token response from MP's OAuth `/oauth/token` endpoint. The `access_token`\n * is what you use to make API calls AS the linked seller; the `refresh_token`\n * is what you use to refresh the access_token before expiration (~6 hours).\n *\n * **Persist the refresh_token**: it does NOT expire and is the only way to\n * keep the integration alive long-term.\n *\n * **Always store `user_id`** alongside the tokens — it identifies WHICH\n * seller these tokens belong to (you'll have many in a marketplace).\n */\nexport const OAuthTokenSchema = z.object({\n access_token: z.string(),\n token_type: z.string().optional(),\n /** Seconds until access_token expires. Typically 21600 (6h). */\n expires_in: z.number().optional(),\n scope: z.string().optional(),\n /** The MP user_id of the seller who authorized your app. */\n user_id: z.union([z.string(), z.number()]).transform(String),\n refresh_token: z.string().optional(),\n public_key: z.string().optional(),\n live_mode: z.boolean().optional(),\n}).passthrough();\nexport type OAuthToken = z.infer<typeof OAuthTokenSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// v0.5 — Order Management API (the new API replacing some Preference flows)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Status of an Order. Distinct from Payment status — an Order can have\n * multiple payments and the Order status reflects the aggregate state.\n */\nexport const OrderStatusSchema = z.union([\n z.literal(\"created\"),\n z.literal(\"processed\"),\n z.literal(\"action_required\"),\n z.literal(\"canceled\"),\n z.literal(\"expired\"),\n z.literal(\"refunded\"),\n z.string(),\n]);\nexport type OrderStatus = z.infer<typeof OrderStatusSchema>;\n\nexport const OrderItemSchema = z.object({\n title: z.string(),\n unit_price: z.number(),\n quantity: z.number(),\n description: z.string().optional(),\n id: z.string().optional(),\n category_id: z.string().optional(),\n picture_url: z.string().optional(),\n}).passthrough();\nexport type OrderItem = z.infer<typeof OrderItemSchema>;\n\nexport const OrderSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n type: z.string().optional(),\n status: OrderStatusSchema.optional(),\n status_detail: z.string().optional(),\n external_reference: z.string().optional(),\n total_amount: z.union([z.number(), z.string()]).optional(),\n /** Currency for this Order (e.g. \"ARS\"). */\n currency_id: z.string().optional(),\n date_created: z.string().optional(),\n date_last_updated: z.string().optional(),\n items: z.array(OrderItemSchema).optional(),\n /** Underlying transactions (payments) attached to this Order. */\n transactions: z\n .object({\n payments: z.array(z.unknown()).optional(),\n refunds: z.array(z.unknown()).optional(),\n })\n .passthrough()\n .optional(),\n /** Capture mode: \"automatic\" (charges immediately) or \"manual\" (auth-only). */\n capture_mode: z.string().optional(),\n}).passthrough();\nexport type Order = z.infer<typeof OrderSchema>;\n\nexport interface CreateOrderParams {\n /**\n * Order type. Common values:\n * - \"online\" — checkout-style (the most common)\n * - \"in_store\" — POS QR / in-person\n */\n type: \"online\" | \"in_store\" | string;\n /** Currency (e.g. \"ARS\"). */\n currency_id?: string;\n /** External reference for reconciliation (your internal id). */\n external_reference?: string;\n /** Items being ordered. */\n items?: OrderItem[];\n /** Total amount if you'd rather not itemize. */\n total_amount?: number;\n /** Customer info (payer). */\n payer?: {\n email?: string;\n first_name?: string;\n last_name?: string;\n identification?: { type?: string; number?: string };\n };\n /**\n * Capture mode:\n * - \"automatic\" (default) — charge immediately when paid.\n * - \"manual\" — authorize only, capture later via captureOrder().\n */\n capture_mode?: \"automatic\" | \"manual\";\n /**\n * Notification URL — MP fires webhooks for order lifecycle events here.\n */\n notification_url?: string;\n /**\n * Marketplace fee + collector — required for marketplace integrations\n * where YOU collect on behalf of a third-party seller (you take a fee,\n * the rest goes to the seller).\n */\n marketplace?: string;\n marketplace_fee?: number;\n collector_id?: string | number;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// v0.5 — Marketplace split payments (also usable on regular Preference)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Marketplace fee + collector params, applied to a Preference or Order.\n *\n * **How it works**: when you create a Preference or Order with\n * `collector_id` set to a SELLER's MP user_id (not yours), and you have a\n * valid OAuth access_token for that seller, MP routes the funds to the\n * seller's MP account, and credits `marketplace_fee` (in ARS, not %) to\n * YOUR marketplace account.\n *\n * Used for two-sided platforms (Rappi, MercadoLibre, Tienda Nube, etc.)\n * where your platform takes a fee and the seller keeps the rest.\n */\nexport interface MarketplaceParams {\n /**\n * Marketplace identifier — your application's marketplace name (you set\n * this when registering your app in MP's dev panel).\n */\n marketplace?: string;\n /**\n * Fee in ARS (NOT a percentage) that goes to your marketplace account.\n * Compute it from your own commission rate before passing.\n */\n marketplace_fee?: number;\n /**\n * The SELLER's MP user_id. The funds go to this account; the\n * `marketplace_fee` is split off and goes to YOUR account.\n * Get this from `OAuthToken.user_id` after the seller authorizes your app.\n */\n collector_id?: string | number;\n /**\n * Optional: split among multiple sellers. If set, `collector_id` /\n * `marketplace_fee` are ignored.\n */\n application_fee?: number;\n}\n\n","/**\n * Mercado Pago OAuth flow — for marketplace integrations where YOUR app\n * cobra a través de cuentas MP de terceros (sellers in your platform).\n *\n * # The flow (3 legs)\n *\n * 1. **Authorize URL** — Redirect the seller to `buildAuthorizeUrl()`. They\n * log in to MP and approve your app. MP redirects them back to your\n * `redirect_uri` with `?code=AUTH_CODE&state=YOUR_STATE`.\n * 2. **Code exchange** — Your server POSTs to `/oauth/token` via\n * `exchangeCodeForToken()` with the code. Returns `{ access_token,\n * refresh_token, user_id, expires_in (~6h), ... }`. **Persist all of it.**\n * 3. **Token refresh** — Before `expires_in` runs out (or on 401), call\n * `refreshAccessToken()` with the saved `refresh_token` to get a fresh\n * access_token. The refresh_token does NOT expire and is the only way\n * to keep the integration alive long-term.\n *\n * # Per-seller MercadoPagoClient\n *\n * Once you have an OAuth `access_token` for a seller, instantiate a\n * `MercadoPagoClient({ accessToken })` AS THAT SELLER. All API calls then\n * happen on the seller's behalf — payments, refunds, subscriptions,\n * everything.\n *\n * # Marketplace fee\n *\n * To take a fee while collecting on the seller's behalf, pass\n * `marketplace`, `marketplaceFee`, `collectorId` to `createPreference()`\n * or `createOrder()`. See `MarketplaceParams` for details.\n *\n * # Setup\n *\n * 1. Register your application in MP's dev panel\n * (https://www.mercadopago.com.ar/developers/panel/applications) to get\n * `clientId` (= application id) and `clientSecret`.\n * 2. Configure the `redirect_uri` whitelist in the same panel — MP rejects\n * redirects to URIs not whitelisted.\n * 3. Pick a `marketplace` identifier (used in fee routing).\n */\n\nimport { OAuthTokenSchema, type OAuthToken } from \"./types\";\n\nconst DEFAULT_AUTHORIZE_URL = \"https://auth.mercadopago.com.ar/authorization\";\nconst DEFAULT_TOKEN_URL = \"https://api.mercadopago.com/oauth/token\";\n\n/**\n * Build the URL the seller visits to authorize your app. Redirect them here.\n * On approval, MP redirects them to `redirect_uri?code=...&state=...`.\n *\n * @param state Optional opaque value echoed back in the redirect — use this\n * to bind the OAuth round-trip to a specific user/session and\n * prevent CSRF. Always set it in production.\n */\nexport function buildAuthorizeUrl(params: {\n /** Your app's client ID (= application id from MP dev panel). */\n clientId: string;\n /** Where MP redirects after approval. Must be whitelisted in MP panel. */\n redirectUri: string;\n /** CSRF / session-binding token, echoed back. Strongly recommended. */\n state?: string;\n /**\n * Override the authorize endpoint base. Default points to AR; for other\n * sites use `https://auth.mercadopago.com.{br,mx,co,cl,uy}/authorization`.\n */\n authorizeUrl?: string;\n}): string {\n const url = new URL(params.authorizeUrl ?? DEFAULT_AUTHORIZE_URL);\n url.searchParams.set(\"client_id\", params.clientId);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"platform_id\", \"mp\");\n url.searchParams.set(\"redirect_uri\", params.redirectUri);\n if (params.state) url.searchParams.set(\"state\", params.state);\n return url.toString();\n}\n\n/**\n * Exchange the authorization code (from the OAuth redirect) for an\n * `OAuthToken`. POSTs to `/oauth/token` with `grant_type=authorization_code`.\n *\n * **Persist the entire response** — the `refresh_token` is the only way to\n * keep the integration alive long-term, and `user_id` identifies the seller.\n */\nexport async function exchangeCodeForToken(params: {\n clientId: string;\n clientSecret: string;\n /** The `code` query param from the OAuth redirect. */\n code: string;\n /** Must match the `redirect_uri` used in `buildAuthorizeUrl`. */\n redirectUri: string;\n /** Override the token endpoint (testing). */\n tokenUrl?: string;\n /** Custom fetch (testing). */\n fetchImpl?: typeof fetch;\n}): Promise<OAuthToken> {\n const url = params.tokenUrl ?? DEFAULT_TOKEN_URL;\n const fetchFn = params.fetchImpl ?? globalThis.fetch;\n const res = await fetchFn(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n },\n body: new URLSearchParams({\n grant_type: \"authorization_code\",\n client_id: params.clientId,\n client_secret: params.clientSecret,\n code: params.code,\n redirect_uri: params.redirectUri,\n }).toString(),\n });\n return parseTokenResponse(res);\n}\n\n/**\n * Refresh an access_token using the saved refresh_token. Call this\n * proactively before `expires_in` runs out, or reactively on a 401 from a\n * per-seller MercadoPagoClient.\n *\n * The new response includes a fresh `refresh_token` — **always persist it,\n * replacing the old one**, even though MP often returns the same value.\n */\nexport async function refreshAccessToken(params: {\n clientId: string;\n clientSecret: string;\n refreshToken: string;\n tokenUrl?: string;\n fetchImpl?: typeof fetch;\n}): Promise<OAuthToken> {\n const url = params.tokenUrl ?? DEFAULT_TOKEN_URL;\n const fetchFn = params.fetchImpl ?? globalThis.fetch;\n const res = await fetchFn(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: params.clientId,\n client_secret: params.clientSecret,\n refresh_token: params.refreshToken,\n }).toString(),\n });\n return parseTokenResponse(res);\n}\n\nasync function parseTokenResponse(res: Response): Promise<OAuthToken> {\n const text = await res.text();\n if (!res.ok) {\n throw new Error(\n `MP OAuth ${res.status}: ${text.slice(0, 300)}`,\n );\n }\n const json = JSON.parse(text);\n return OAuthTokenSchema.parse(json);\n}\n\n/**\n * Compute when an access_token will expire, given the timestamp it was\n * issued and the `expires_in` value (in seconds).\n *\n * @returns A unix-ms timestamp.\n */\nexport function expirationTimeMs(\n issuedAtMs: number,\n expiresInSeconds: number | undefined,\n): number {\n return issuedAtMs + (expiresInSeconds ?? 21_600) * 1000;\n}\n\n/**\n * Check whether an access_token is close to expiring. Use this to decide\n * whether to proactively refresh BEFORE making an API call.\n *\n * @param skewSeconds Buffer to refresh early (default 5 min). MP tokens\n * typically last 6h; refreshing in the last 5 min avoids\n * races with API calls that take a few seconds.\n */\nexport function isExpiringSoon(\n expirationMs: number,\n skewSeconds = 300,\n): boolean {\n return Date.now() + skewSeconds * 1000 >= expirationMs;\n}\n","import { createHmac, timingSafeEqual } from \"node:crypto\";\nimport { WebhookBodySchema, type ParsedWebhookEvent } from \"./types\";\n\n/**\n * Parse a Mercado Pago webhook from the raw request body and URL search params.\n * MP sends the topic and resource id in EITHER the URL query string OR the\n * body, depending on integration version — this normalizes both shapes into a\n * single structure.\n *\n * @example\n * ```ts\n * export async function POST(req: Request) {\n * const body = await req.json().catch(() => ({}));\n * const event = parseWebhookEvent(body, new URL(req.url).searchParams);\n * if (event && event.topic === 'preapproval') {\n * // refresh status from MP, update your store\n * }\n * return Response.json({ received: true });\n * }\n * ```\n */\nexport function parseWebhookEvent(\n body: unknown,\n searchParams?: URLSearchParams,\n): ParsedWebhookEvent | null {\n const parseResult = WebhookBodySchema.safeParse(body ?? {});\n const parsedBody = parseResult.success ? parseResult.data : {};\n\n const topic =\n searchParams?.get(\"topic\") ??\n parsedBody.topic ??\n parsedBody.type ??\n null;\n\n const dataId =\n searchParams?.get(\"id\") ??\n (parsedBody.data?.id !== undefined ? String(parsedBody.data.id) : null) ??\n parsedBody.resource ??\n null;\n\n if (!topic || !dataId) {\n return null;\n }\n\n return {\n topic,\n dataId: String(dataId),\n action: parsedBody.action ?? null,\n raw: parsedBody,\n };\n}\n\n/**\n * Verify the HMAC-SHA256 signature MP sends in the `x-signature` header for\n * webhook authenticity. Returns true if the signature matches the expected\n * value derived from the integration's secret key.\n *\n * @param requestId The value of the `x-request-id` request header.\n * @param dataId The id of the resource the webhook is about (from query or body).\n * @param signatureHeader The full `x-signature` header value MP sent.\n * @param secret Your integration's webhook secret (configured in MP dev panel).\n *\n * @remarks\n * MP's `x-signature` header has the form: `ts=NNNNNNNN,v1=HEXSIGNATURE`. We\n * extract the timestamp and the v1 signature, then compute\n * `HMAC-SHA256(secret, \"id:${dataId};request-id:${requestId};ts:${ts};\")`\n * and compare with constant-time equality.\n */\nexport function verifyWebhookSignature(params: {\n requestId: string | null;\n dataId: string;\n signatureHeader: string | null;\n secret: string;\n}): boolean {\n if (!params.signatureHeader || !params.requestId) return false;\n\n // Parse \"ts=...,v1=...\" into a map.\n const parts = Object.fromEntries(\n params.signatureHeader\n .split(\",\")\n .map((segment) => segment.trim().split(\"=\") as [string, string]),\n );\n const ts = parts.ts;\n const v1 = parts.v1;\n if (!ts || !v1) return false;\n\n const manifest = `id:${params.dataId};request-id:${params.requestId};ts:${ts};`;\n const expected = createHmac(\"sha256\", params.secret)\n .update(manifest)\n .digest(\"hex\");\n\n // Constant-time comparison; lengths must match for timingSafeEqual.\n if (expected.length !== v1.length) return false;\n return timingSafeEqual(Buffer.from(expected), Buffer.from(v1));\n}\n","import { createHash } from \"node:crypto\";\nimport { tool, type ToolSet } from \"ai\";\nimport { z } from \"zod\";\nimport type { MercadoPagoClient } from \"./client\";\nimport {\n buildAuthorizeUrl,\n exchangeCodeForToken,\n refreshAccessToken,\n} from \"./oauth\";\nimport type { SubscriptionStateAdapter } from \"./state\";\nimport { parseWebhookEvent, verifyWebhookSignature } from \"./webhook\";\n\n/**\n * Deterministic idempotency key from caller-meaningful fields. Safe to retry:\n * the SAME inputs always produce the same key, so MP dedupes on its side\n * even if the client retries multiple times. Use a hash to keep keys short\n * + opaque (callers can't accidentally extract sensitive data from the key).\n */\nfunction deterministicIdempotencyKey(...parts: Array<string | number | undefined>): string {\n const payload = parts\n .filter((p) => p !== undefined && p !== null)\n .map(String)\n .join(\"|\");\n return createHash(\"sha256\").update(payload).digest(\"hex\").slice(0, 32);\n}\n\nexport interface MercadoPagoToolsOptions {\n /** State adapter for persisting subscription records. */\n state: SubscriptionStateAdapter;\n /**\n * Default back_url used when callers don't supply one. MUST be HTTPS — MP\n * rejects http:// and localhost back URLs even in sandbox.\n */\n backUrl: string;\n /**\n * Optionally override the agent-facing tool descriptions. Pass an object\n * with keys matching tool names; values replace the default description.\n * Useful for localizing the agent's tool reasoning.\n */\n descriptions?: Partial<Record<ToolName, string>>;\n /**\n * Default notification webhook URL used when callers don't supply one.\n * Optional — MP falls back to dashboard config if not set.\n */\n notificationUrl?: string;\n /**\n * Webhook secret for the `handle_webhook` tool. Required to verify\n * incoming webhook HMAC-SHA256 signatures. Get it from MP dev panel →\n * \"Notificaciones\" → \"Webhooks\" → \"Configurar notificaciones\".\n * If omitted, `handle_webhook` returns `{ verified: false, error: ... }`\n * and the agent should reject the webhook.\n */\n webhookSecret?: string;\n /**\n * OAuth credentials for the marketplace flow. Required for\n * `oauth_exchange_code` and `oauth_refresh_token` (the secret cannot be\n * passed by the agent — it's a server-side secret). If omitted, those\n * tools return `{ available: false }` with setup instructions.\n */\n oauth?: {\n clientId: string;\n clientSecret: string;\n };\n}\n\ntype ToolName =\n // Subscriptions (v0.1)\n | \"create_subscription\"\n | \"get_subscription_status\"\n | \"cancel_subscription\"\n | \"pause_subscription\"\n | \"resume_subscription\"\n // Payments (v0.2)\n | \"create_payment\"\n | \"get_payment\"\n | \"search_payments\"\n | \"cancel_payment\"\n | \"capture_payment\"\n // Refunds (v0.2)\n | \"refund_payment\"\n | \"list_refunds\"\n // Checkout Pro (v0.2)\n | \"create_payment_preference\"\n | \"get_payment_preference\"\n // Customers + Cards (v0.2)\n | \"create_customer\"\n | \"find_customer_by_email\"\n | \"list_customer_cards\"\n | \"delete_customer_card\"\n // Payment Methods + Installments (v0.2)\n | \"list_payment_methods\"\n | \"calculate_installments\"\n // Account (v0.2)\n | \"get_account_info\"\n // Saved-card charging (v0.3)\n | \"charge_saved_card\"\n // QR in-store (v0.3)\n | \"create_qr_payment\"\n | \"cancel_qr_payment\"\n // Subscription Plans (v0.4)\n | \"create_subscription_plan\"\n | \"list_subscription_plans\"\n | \"update_subscription_plan\"\n | \"subscribe_to_plan\"\n | \"list_subscription_payments\"\n // Stores + POS (v0.4)\n | \"create_store\"\n | \"list_stores\"\n | \"create_pos\"\n | \"list_pos\"\n // Disputes (v0.4)\n | \"list_payment_disputes\"\n | \"get_dispute\"\n // Lookup helpers (v0.4)\n | \"list_identification_types\"\n | \"list_issuers\"\n // Webhooks (v0.4)\n | \"list_webhooks\"\n | \"create_webhook\"\n | \"update_webhook\"\n | \"delete_webhook\"\n // Webhook handler combo (v0.5)\n | \"handle_webhook\"\n // OAuth Marketplace (v0.5)\n | \"oauth_authorize_url\"\n | \"oauth_exchange_code\"\n | \"oauth_refresh_token\"\n // Order Management API (v0.5)\n | \"create_order\"\n | \"get_order\"\n | \"update_order\"\n | \"capture_order\"\n | \"cancel_order\";\n\nconst DEFAULT_DESCRIPTIONS: Record<ToolName, string> = {\n // ── Subscriptions ────────────────────────────────────────────────────────\n create_subscription:\n \"Create a Mercado Pago recurring subscription. Returns an init_point URL where the customer must complete the FIRST payment with their card and CVV (this is a hard MP requirement; agents cannot bypass it). After they pay, MP will auto-charge at the configured frequency without further intervention.\",\n get_subscription_status:\n \"Check the current status of a Mercado Pago subscription. Use this to confirm the customer completed the first payment (status becomes 'authorized') or to inspect the next charge date.\",\n cancel_subscription:\n \"Cancel an active Mercado Pago subscription. After cancellation, MP will not charge the customer again. This action is irreversible — confirm with the user before calling.\",\n pause_subscription:\n \"Pause an authorized Mercado Pago subscription. Charges stop until resumed. Only works on subscriptions in 'authorized' status.\",\n resume_subscription:\n \"Resume a paused Mercado Pago subscription. Charges resume on the next scheduled date. Only works on subscriptions in 'paused' status.\",\n\n // ── Payments ─────────────────────────────────────────────────────────────\n create_payment:\n \"Create a one-time payment. Two flows: (a) with a card token from MP frontend Cardform — for transparent checkout; (b) without token, for non-card methods like 'account_money', 'rapipago', 'pagofacil'. For most agent flows where you only have a payer email and want to send them a payment link, use create_payment_preference instead (Checkout Pro hosted form). Returns the Payment object with status — typically 'approved' for account_money and 'pending' for tickets.\",\n get_payment:\n \"Fetch a single payment by ID. Use to confirm status after webhook arrives, or to inspect details (status_detail explains rejections).\",\n search_payments:\n \"Search payments with filters. Most common: by external_reference (your-system identifier) to find all payments for an order, or by status='approved' to list successful charges in a date range. Returns paginated results.\",\n cancel_payment:\n \"Cancel a pending or in_process payment (only works before approval). Once approved, use refund_payment instead. Common use: cancel an unpaid ticket payment that's still pending.\",\n capture_payment:\n \"Capture an authorized credit-card payment that was created with capture=false. Use for hold-then-capture flows (e.g., authorize on order, capture on shipment). Optional partial amount.\",\n\n // ── Refunds ──────────────────────────────────────────────────────────────\n refund_payment:\n \"Refund an approved payment. Pass amount for partial refund; omit for full refund. Idempotency key is auto-generated based on paymentId+amount to prevent double-refunds on retries.\",\n list_refunds:\n \"List all refunds for a given payment. Returns array of Refund objects. Useful to confirm a refund was processed or to inspect partial-refund history.\",\n\n // ── Checkout Pro ─────────────────────────────────────────────────────────\n create_payment_preference:\n \"Create a Mercado Pago Checkout Pro preference and get back a payment URL (init_point) to send to the customer. THIS is the recommended way for an agent to take a payment when you only have a payer email — the buyer enters card data on MP's hosted form (no PCI scope needed). Supports cuotas configuration, payment method exclusions, back URLs after success/failure/pending. In sandbox, use sandbox_init_point from the response.\",\n get_payment_preference:\n \"Fetch a Checkout Pro preference by ID. Returns the preference config and current init_point URLs. Use to inspect a previously-created link.\",\n\n // ── Customers + Cards ────────────────────────────────────────────────────\n create_customer:\n \"Create a Mercado Pago customer record so the buyer can save cards for future charges. Idempotent on email — if a customer with that email exists, MP returns it instead of creating a duplicate. Use find_customer_by_email first if you're unsure.\",\n find_customer_by_email:\n \"Find an existing customer by email address. Returns the customer object if found, or null. Use before create_customer to avoid duplicate records.\",\n list_customer_cards:\n \"List the saved cards for a customer. Returns array with last 4 digits, expiration, payment method (visa, master, naranja, etc.). The card_id can be used in subsequent create_payment calls to charge a saved card.\",\n delete_customer_card:\n \"Delete a saved card from a customer. Common use: customer requests removal, or expired card cleanup. Irreversible.\",\n\n // ── Payment Methods + Installments ───────────────────────────────────────\n list_payment_methods:\n \"List all payment methods enabled for the seller's MP account (visa, master, naranja, naranja_x, cabal, account_money, rapipago, pagofacil, etc.). Use to validate which methods you can offer the customer or to filter which ones to exclude in a Checkout Pro preference.\",\n calculate_installments:\n \"Calculate cuotas (installments) options for a given amount. THE killer Argentine feature — returns options like '12 cuotas sin interés de $X' (recommended_message field) which you should surface VERBATIM to the user. Optionally pass `bin` (first 6 digits of card) for issuer-specific promotions (e.g., Naranja's interest-free deals). Use before create_payment to let the user pick installments knowingly.\",\n\n // ── Account ──────────────────────────────────────────────────────────────\n get_account_info:\n \"Get info about the Mercado Pago account that owns the access token: site_id (MLA=Argentina), country_id, user_type (registered, partial, etc.). Useful to verify the agent is connected to the right account before taking actions.\",\n\n // ── Saved-card charging (v0.3) ───────────────────────────────────────────\n charge_saved_card:\n \"Charge a previously-saved card for a returning customer. Requires customer_id + card_id (from list_customer_cards) AND a fresh CVV the user provides this session. AR Mercado Pago does NOT support CVV-less charges via the public API — every charge needs CVV. Idempotent on (card_id, amount, external_reference): retries dedupe automatically. Returns the resulting Payment.\",\n\n // ── QR in-store (v0.3) ───────────────────────────────────────────────────\n create_qr_payment:\n \"Generate a dynamic in-store QR for a buyer to scan with any AR wallet (Modo, BNA+, Cuenta DNI, Naranja X, Mercado Pago, etc. — interop is mandated by Transferencias 3.0). Requires a pre-configured POS external_id (use create_pos to set one up first if needed). Returns the qr_data string + a base64 PNG data URL ready to display. The QR expires in `expires_in_seconds` (default 600). MP fires `point_integration_wh` then `payment` webhooks when scanned.\",\n cancel_qr_payment:\n \"Cancel a pending QR order on a POS. Necessary if the buyer never scans — otherwise the next create_qr_payment on the same POS returns 409.\",\n\n // ── Subscription Plans (v0.4) ────────────────────────────────────────────\n create_subscription_plan:\n \"Create a REUSABLE subscription plan (preapproval_plan). Different from create_subscription: a plan defines price + frequency once, then customers subscribe to it via subscribe_to_plan. Use plans for SaaS-style billing (Básico/Pro/Enterprise tiers). For per-customer custom amounts, use create_subscription directly.\",\n list_subscription_plans:\n \"List all subscription plans defined for this MP account. Useful before create_subscription_plan to check if one already exists, or for surfacing options to a customer.\",\n update_subscription_plan:\n \"Update a subscription plan's reason / amount / status / back_url. Existing customer subscriptions to the plan are NOT automatically updated — only NEW subscribers get the new pricing.\",\n subscribe_to_plan:\n \"Subscribe a customer to an existing reusable plan. Returns a Preapproval with init_point URL where the customer completes first payment. Cleaner than create_subscription when you have fixed tiers.\",\n list_subscription_payments:\n \"List the auto-charge attempts (authorized_payments) under a subscription. Useful for 'show me the cobros del último mes for this client' or to debug a failing recurring charge.\",\n\n // ── Stores + POS (v0.4) ──────────────────────────────────────────────────\n create_store:\n \"Create a store under the seller's MP account. Stores are the parent entity for POSes (which generate QR payments). Required ONE-TIME setup before create_pos. Pass a unique external_id and a display name.\",\n list_stores:\n \"List all stores configured for this MP account. Use this to find an existing store_id before create_pos, or to surface store options to the agent.\",\n create_pos:\n \"Create a POS (Point of Sale) under a store. The POS's external_id is what create_qr_payment uses. Each physical checkout / counter / agent typically has its own POS. Categories are MP-defined (default 621102 = Other Food and Beverage Services).\",\n list_pos:\n \"List all POSes for the seller (or filtered by store_id). Use to find an existing POS before create_qr_payment, or to surface options.\",\n\n // ── Disputes (v0.4 — read-only) ──────────────────────────────────────────\n list_payment_disputes:\n \"List all disputes / chargebacks raised against a payment. Read-only — resolution is dashboard-only. Surface the dashboard URL `https://www.mercadopago.com.ar/disputes/{dispute_id}` to the user when they need to respond.\",\n get_dispute:\n \"Get details of a specific dispute including reason, amount, resolution status. Read-only.\",\n\n // ── Lookup helpers (v0.4) ────────────────────────────────────────────────\n list_identification_types:\n \"List valid identification types for the seller's site. AR returns: DNI, CI, LE, LC, Otro, Pasaporte, CUIT, CUIL with their min/max length. Useful to validate an identification before passing to create_payment.\",\n list_issuers:\n \"List card issuers (banks) that support a payment_method_id. Optionally filter by `bin` (first 6 digits of the card) for accurate issuer detection. Useful with calculate_installments — issuer-specific promos (e.g., Naranja Galicia 6 cuotas sin interés) only appear when the issuer is identified.\",\n\n // ── Webhooks management (v0.4) ───────────────────────────────────────────\n list_webhooks:\n \"List all webhook subscriptions configured for this MP application. Use to see what topics + URLs are wired before adding new ones.\",\n create_webhook:\n \"Subscribe a webhook URL to a MP topic (payment, subscription_authorized_payment, subscription_preapproval, merchant_order, point_integration_wh). MP will POST to this URL when events of that topic fire.\",\n update_webhook:\n \"Update a webhook's URL or topic. Useful when you change deployment URLs without resubscribing from scratch.\",\n delete_webhook:\n \"Delete a webhook subscription. MP stops POSTing to it immediately.\",\n\n // ── Webhook handler combo (v0.5) ─────────────────────────────────────────\n handle_webhook:\n \"Process an incoming MP webhook in ONE call: verify the HMAC-SHA256 signature, parse the event, and (optionally) auto-fetch the underlying resource (Payment, Subscription, Order). Returns the structured event PLUS the full resource. USE THIS in your webhook endpoint INSTEAD of chaining verify_webhook_signature + parse_webhook_event + get_payment manually. Pass the raw request body, x-signature header, x-request-id header, and your MP webhook secret. SAFE: returns { verified: false } when signature mismatches — caller should respond 401 and stop processing. WHEN auto_fetch is true (default), the resource is fetched as the SAME MP user the client is configured for (so for marketplace integrations, instantiate a per-seller client).\",\n\n // ── OAuth Marketplace (v0.5) ─────────────────────────────────────────────\n oauth_authorize_url:\n \"Build the URL the SELLER (third-party MP account) visits to authorize your marketplace app. Pass the seller's redirect uri (must be whitelisted in MP dev panel) and an opaque state token (CSRF protection — bind it to the user's session). PURE FUNCTION: no network. The seller approves, MP redirects them to your `redirect_uri?code=...&state=...`. Then call oauth_exchange_code with the code.\",\n oauth_exchange_code:\n \"Exchange the authorization code (from the OAuth redirect) for an `OAuthToken`. Returns access_token, refresh_token, user_id, and expires_in. **PERSIST the entire response** — refresh_token is long-lived and the only way to keep the integration alive past 6h. Use the access_token to instantiate a per-seller MercadoPagoClient for marketplace flows.\",\n oauth_refresh_token:\n \"Refresh a per-seller access_token using the saved refresh_token. Call PROACTIVELY before expires_in elapses, or REACTIVELY on a 401 from a per-seller MercadoPagoClient. Returns a fresh OAuthToken — persist the new refresh_token (MP often returns the same value, but always replace).\",\n\n // ── Order Management API (v0.5 — modern Order API) ───────────────────────\n create_order:\n \"Create a new Order via MP's modern Order Management API. DIFFERENT from create_payment_preference: Order is a transactional entity with explicit lifecycle (created → processed → captured/canceled), supports MANUAL CAPTURE (auth-only, capture later — for ride-share, hotels, marketplaces) and aggregates multiple payments into one Order. Use Preference (Checkout Pro) for simple hosted pay-links; use Order when you need auth-only or multi-payment-per-order semantics. For marketplace splits, set marketplace + marketplace_fee + collector_id (the SELLER's MP user_id from oauth_exchange_code).\",\n get_order:\n \"Fetch an Order by ID. Returns the Order with its lifecycle status and any attached payments/refunds.\",\n update_order:\n \"Patch an existing Order before it's captured/canceled. Common use: update items or external_reference.\",\n capture_order:\n \"Capture a previously-authorized Order (only for orders created with capture_mode='manual'). Captures up to the originally-authorized amount; pass amount for partial capture. Common use: ride-share marks ride complete → capture; hotel checks-out guest → capture.\",\n cancel_order:\n \"Cancel an Order. Releases any auth-holds and marks the Order as canceled. For orders that have already been CAPTURED, use refund_payment instead — cancel only works pre-capture.\",\n};\n\n/**\n * Build a tool set for the Vercel AI SDK that exposes Mercado Pago to an\n * agent. Pass directly to `Experimental_Agent`'s `tools` option, or merge with\n * other tool sets.\n *\n * @example\n * ```ts\n * import { Experimental_Agent as Agent, stepCountIs } from 'ai';\n * import { MercadoPagoClient, mercadoPagoTools, InMemoryStateAdapter } from '@ar-agents/mercadopago';\n *\n * const mp = new MercadoPagoClient({ accessToken: process.env.MP_ACCESS_TOKEN! });\n * const agent = new Agent({\n * model: 'anthropic/claude-sonnet-4-6',\n * tools: mercadoPagoTools(mp, {\n * state: new InMemoryStateAdapter(),\n * backUrl: 'https://mysite.com/done',\n * }),\n * stopWhen: stepCountIs(8),\n * });\n * ```\n */\nexport function mercadoPagoTools(\n client: MercadoPagoClient,\n options: MercadoPagoToolsOptions,\n): ToolSet {\n const desc = (name: ToolName): string =>\n options.descriptions?.[name] ?? DEFAULT_DESCRIPTIONS[name];\n\n return {\n // ─────────────────────────────────────────────────────────────────────────\n // Subscriptions (v0.1 — kept identical for backward compatibility)\n // ─────────────────────────────────────────────────────────────────────────\n\n create_subscription: tool({\n description: desc(\"create_subscription\"),\n inputSchema: z.object({\n customer_email: z.string().email().describe(\"Email of the customer who will be charged\"),\n amount_ars: z.number().positive().describe(\"Amount in Argentine Pesos per recurring charge\"),\n frequency_months: z.number().int().positive().max(12).describe(\"Frequency in months (1=monthly, 3=quarterly, 12=yearly)\"),\n reason: z.string().min(3).max(120).describe(\"Short description shown to the customer at checkout\"),\n external_reference: z.string().optional().describe(\"Optional id from your system to track this subscription\"),\n }),\n execute: async ({ customer_email, amount_ars, frequency_months, reason, external_reference }) => {\n const created = await client.createPreapproval({\n reason,\n payerEmail: customer_email,\n amount: amount_ars,\n currency: \"ARS\",\n frequency: frequency_months,\n frequencyType: \"months\",\n backUrl: options.backUrl,\n ...(external_reference !== undefined ? { externalReference: external_reference } : {}),\n });\n await options.state.set(created.id, {\n status: created.status,\n payerEmail: customer_email,\n amount: amount_ars,\n currency: \"ARS\",\n frequency: frequency_months,\n frequencyType: \"months\",\n initPoint: created.init_point,\n ...(external_reference !== undefined ? { externalReference: external_reference } : {}),\n createdAt: new Date().toISOString(),\n });\n return {\n subscription_id: created.id,\n status: created.status,\n init_point_url: created.init_point,\n next_step:\n \"Send init_point_url to the customer. They must complete the first payment with card+CVV. Use get_subscription_status to confirm activation after they pay.\",\n };\n },\n }),\n\n get_subscription_status: tool({\n description: desc(\"get_subscription_status\"),\n inputSchema: z.object({\n subscription_id: z.string().describe(\"The Mercado Pago subscription/preapproval ID\"),\n }),\n execute: async ({ subscription_id }) => {\n const fresh = await client.getPreapproval(subscription_id);\n const cached = await options.state.get(subscription_id);\n return {\n subscription_id: fresh.id,\n status: fresh.status,\n payer_email: fresh.payer_email,\n amount: fresh.auto_recurring.transaction_amount,\n currency: fresh.auto_recurring.currency_id,\n next_payment_date: fresh.next_payment_date ?? null,\n last_webhook_status: cached?.lastWebhookStatus ?? null,\n last_webhook_at: cached?.lastWebhookAt ?? null,\n };\n },\n }),\n\n cancel_subscription: tool({\n description: desc(\"cancel_subscription\"),\n inputSchema: z.object({\n subscription_id: z.string().describe(\"The Mercado Pago subscription/preapproval ID to cancel\"),\n }),\n execute: async ({ subscription_id }) => {\n const cancelled = await client.cancelPreapproval(subscription_id);\n await options.state.set(subscription_id, {\n status: cancelled.status,\n cancelledAt: new Date().toISOString(),\n });\n return {\n subscription_id: cancelled.id,\n status: cancelled.status,\n message: \"Subscription cancelled. No further charges will occur.\",\n };\n },\n }),\n\n pause_subscription: tool({\n description: desc(\"pause_subscription\"),\n inputSchema: z.object({ subscription_id: z.string() }),\n execute: async ({ subscription_id }) => {\n const paused = await client.pausePreapproval(subscription_id);\n await options.state.set(subscription_id, { status: paused.status });\n return {\n subscription_id: paused.id,\n status: paused.status,\n message: \"Subscription paused. Use resume_subscription to reactivate.\",\n };\n },\n }),\n\n resume_subscription: tool({\n description: desc(\"resume_subscription\"),\n inputSchema: z.object({ subscription_id: z.string() }),\n execute: async ({ subscription_id }) => {\n const resumed = await client.resumePreapproval(subscription_id);\n await options.state.set(subscription_id, { status: resumed.status });\n return {\n subscription_id: resumed.id,\n status: resumed.status,\n message: \"Subscription resumed. Charges will continue on next scheduled date.\",\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Payments (v0.2)\n // ─────────────────────────────────────────────────────────────────────────\n\n create_payment: tool({\n description: desc(\"create_payment\"),\n inputSchema: z.object({\n amount_ars: z.number().positive().describe(\"Amount in ARS\"),\n payment_method_id: z.string().describe(\"MP payment method id (e.g. 'account_money', 'rapipago', 'visa', 'master', 'naranja')\"),\n payer_email: z.string().email().describe(\"Email of the payer. Cannot equal seller email.\"),\n token: z.string().optional().describe(\"Card token from MP frontend Cardform. Required for credit/debit; omit for cash/account_money.\"),\n installments: z.number().int().min(1).max(24).optional().describe(\"Number of installments (cuotas). Default 1. Use calculate_installments first to see options.\"),\n description: z.string().max(255).optional().describe(\"Short description\"),\n external_reference: z.string().optional().describe(\"Your-system identifier\"),\n identification: z.object({\n type: z.enum([\"DNI\", \"CUIT\", \"CUIL\"]),\n number: z.string(),\n }).optional().describe(\"Payer identification — required for some payment types in AR\"),\n statement_descriptor: z.string().max(13).optional().describe(\"Shows on buyer's card statement (max 13 chars)\"),\n }),\n execute: async (input) => {\n const payment = await client.createPayment({\n transactionAmount: input.amount_ars,\n paymentMethodId: input.payment_method_id,\n payerEmail: input.payer_email,\n ...(input.token !== undefined ? { token: input.token } : {}),\n ...(input.installments !== undefined ? { installments: input.installments } : {}),\n ...(input.description !== undefined ? { description: input.description } : {}),\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.identification !== undefined ? { identification: input.identification } : {}),\n ...(input.statement_descriptor !== undefined ? { statementDescriptor: input.statement_descriptor } : {}),\n ...(options.notificationUrl !== undefined ? { notificationUrl: options.notificationUrl } : {}),\n // Deterministic idempotency key — safe to retry, same inputs always\n // produce the same key (MP dedupes on its side).\n idempotencyKey: deterministicIdempotencyKey(\n \"create_payment\",\n input.external_reference ?? input.payer_email,\n input.amount_ars,\n input.payment_method_id,\n input.token,\n ),\n });\n return {\n payment_id: payment.id,\n status: payment.status,\n status_detail: payment.status_detail,\n amount: payment.transaction_amount,\n currency: payment.currency_id,\n installments: payment.installments,\n payment_method: payment.payment_method_id,\n payer_email: payment.payer?.email ?? null,\n external_reference: payment.external_reference,\n date_created: payment.date_created,\n date_approved: payment.date_approved,\n };\n },\n }),\n\n get_payment: tool({\n description: desc(\"get_payment\"),\n inputSchema: z.object({\n payment_id: z.string().describe(\"The MP payment ID\"),\n }),\n execute: async ({ payment_id }) => {\n const p = await client.getPayment(payment_id);\n return {\n payment_id: p.id,\n status: p.status,\n status_detail: p.status_detail,\n amount: p.transaction_amount,\n currency: p.currency_id,\n payment_method: p.payment_method_id,\n installments: p.installments,\n payer_email: p.payer?.email ?? null,\n external_reference: p.external_reference,\n date_created: p.date_created,\n date_approved: p.date_approved,\n net_received: p.transaction_details?.net_received_amount ?? null,\n };\n },\n }),\n\n search_payments: tool({\n description: desc(\"search_payments\"),\n inputSchema: z.object({\n external_reference: z.string().optional(),\n status: z.string().optional().describe(\"'approved' | 'pending' | 'rejected' | 'cancelled' | 'refunded' etc.\"),\n payer_email: z.string().optional(),\n begin_date: z.string().optional().describe(\"ISO 8601, e.g. 2026-01-01T00:00:00Z\"),\n end_date: z.string().optional().describe(\"ISO 8601\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Default 30, max 100\"),\n offset: z.number().int().min(0).optional().describe(\"Pagination offset (default 0)\"),\n }),\n execute: async (input) => {\n const result = await client.searchPayments({\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.status !== undefined ? { status: input.status } : {}),\n ...(input.payer_email !== undefined ? { payerEmail: input.payer_email } : {}),\n ...(input.begin_date !== undefined ? { beginDate: input.begin_date } : {}),\n ...(input.end_date !== undefined ? { endDate: input.end_date } : {}),\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n ...(input.offset !== undefined ? { offset: input.offset } : {}),\n });\n return {\n total: result.paging.total,\n returned: result.results.length,\n offset: result.paging.offset,\n payments: result.results.map((p) => ({\n payment_id: p.id,\n status: p.status,\n amount: p.transaction_amount,\n currency: p.currency_id,\n payer_email: p.payer?.email ?? null,\n external_reference: p.external_reference,\n date_created: p.date_created,\n })),\n };\n },\n }),\n\n cancel_payment: tool({\n description: desc(\"cancel_payment\"),\n inputSchema: z.object({ payment_id: z.string() }),\n execute: async ({ payment_id }) => {\n const cancelled = await client.cancelPayment(payment_id);\n return {\n payment_id: cancelled.id,\n status: cancelled.status,\n message: \"Payment cancelled. If it was already approved, use refund_payment instead.\",\n };\n },\n }),\n\n capture_payment: tool({\n description: desc(\"capture_payment\"),\n inputSchema: z.object({\n payment_id: z.string(),\n amount_ars: z.number().positive().optional().describe(\"Optional partial-capture amount. Omit to capture full authorized amount.\"),\n }),\n execute: async ({ payment_id, amount_ars }) => {\n const captured = await client.capturePayment(payment_id, amount_ars);\n return {\n payment_id: captured.id,\n status: captured.status,\n amount: captured.transaction_amount,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Refunds\n // ─────────────────────────────────────────────────────────────────────────\n\n refund_payment: tool({\n description: desc(\"refund_payment\"),\n inputSchema: z.object({\n payment_id: z.string(),\n amount_ars: z.number().positive().optional().describe(\"Partial-refund amount in ARS. Omit for full refund.\"),\n }),\n execute: async ({ payment_id, amount_ars }) => {\n const refund = await client.createRefund({\n paymentId: payment_id,\n ...(amount_ars !== undefined ? { amount: amount_ars } : {}),\n idempotencyKey: deterministicIdempotencyKey(\"refund\", payment_id, amount_ars ?? \"full\"),\n });\n return {\n refund_id: refund.id,\n payment_id: refund.payment_id,\n amount: refund.amount,\n status: refund.status,\n message:\n amount_ars === undefined\n ? \"Full refund issued. Funds return to the buyer in 3-10 business days.\"\n : `Partial refund of ${amount_ars} ARS issued.`,\n };\n },\n }),\n\n list_refunds: tool({\n description: desc(\"list_refunds\"),\n inputSchema: z.object({ payment_id: z.string() }),\n execute: async ({ payment_id }) => {\n const refunds = await client.listRefunds(payment_id);\n return {\n payment_id,\n count: refunds.length,\n refunds: refunds.map((r) => ({\n refund_id: r.id,\n amount: r.amount,\n status: r.status,\n date_created: r.date_created,\n })),\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Checkout Pro\n // ─────────────────────────────────────────────────────────────────────────\n\n create_payment_preference: tool({\n description: desc(\"create_payment_preference\"),\n inputSchema: z.object({\n items: z.array(z.object({\n title: z.string().min(1).max(256),\n quantity: z.number().int().positive(),\n unit_price: z.number().positive(),\n description: z.string().optional(),\n picture_url: z.string().url().optional(),\n })).min(1).describe(\"Items being charged. At least one required.\"),\n payer_email: z.string().email().optional().describe(\"Pre-fill the payer email on Checkout Pro form\"),\n external_reference: z.string().optional(),\n max_installments: z.number().int().min(1).max(24).optional().describe(\"Limit max cuotas offered. Defaults to MP account config.\"),\n statement_descriptor: z.string().max(13).optional(),\n excluded_payment_types: z.array(z.enum([\"credit_card\", \"debit_card\", \"ticket\", \"atm\", \"bank_transfer\"])).optional().describe(\"Block payment types — e.g., ['ticket'] to disable Rapipago/Pago Fácil\"),\n }),\n execute: async (input) => {\n const pref = await client.createPreference({\n items: input.items.map((it) => ({\n title: it.title,\n quantity: it.quantity,\n unit_price: it.unit_price,\n currency_id: \"ARS\",\n ...(it.description !== undefined ? { description: it.description } : {}),\n ...(it.picture_url !== undefined ? { picture_url: it.picture_url } : {}),\n })),\n ...(input.payer_email !== undefined ? { payer: { email: input.payer_email } } : {}),\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.statement_descriptor !== undefined ? { statementDescriptor: input.statement_descriptor } : {}),\n backUrls: { success: options.backUrl, failure: options.backUrl, pending: options.backUrl },\n autoReturn: \"approved\",\n ...(options.notificationUrl !== undefined ? { notificationUrl: options.notificationUrl } : {}),\n ...((input.max_installments !== undefined || input.excluded_payment_types !== undefined)\n ? {\n paymentMethods: {\n ...(input.max_installments !== undefined ? { installments: input.max_installments } : {}),\n ...(input.excluded_payment_types !== undefined\n ? { excluded_payment_types: input.excluded_payment_types.map((id) => ({ id })) }\n : {}),\n },\n }\n : {}),\n });\n return {\n preference_id: pref.id,\n init_point_url: pref.init_point ?? null,\n sandbox_init_point_url: pref.sandbox_init_point ?? null,\n external_reference: pref.external_reference,\n date_created: pref.date_created,\n next_step:\n \"Send init_point_url (or sandbox_init_point_url in sandbox) to the customer. After they pay, MP fires a webhook with the payment_id; use get_payment to confirm status.\",\n };\n },\n }),\n\n get_payment_preference: tool({\n description: desc(\"get_payment_preference\"),\n inputSchema: z.object({ preference_id: z.string() }),\n execute: async ({ preference_id }) => {\n const pref = await client.getPreference(preference_id);\n return {\n preference_id: pref.id,\n init_point_url: pref.init_point ?? null,\n sandbox_init_point_url: pref.sandbox_init_point ?? null,\n external_reference: pref.external_reference,\n items: pref.items,\n date_created: pref.date_created,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Customers + Saved Cards\n // ─────────────────────────────────────────────────────────────────────────\n\n create_customer: tool({\n description: desc(\"create_customer\"),\n inputSchema: z.object({\n email: z.string().email(),\n first_name: z.string().optional(),\n last_name: z.string().optional(),\n identification: z.object({\n type: z.enum([\"DNI\", \"CUIT\", \"CUIL\"]),\n number: z.string(),\n }).optional(),\n description: z.string().optional(),\n }),\n execute: async (input) => {\n const customer = await client.createCustomer({\n email: input.email,\n ...(input.first_name !== undefined ? { firstName: input.first_name } : {}),\n ...(input.last_name !== undefined ? { lastName: input.last_name } : {}),\n ...(input.identification !== undefined ? { identification: input.identification } : {}),\n ...(input.description !== undefined ? { description: input.description } : {}),\n });\n return {\n customer_id: customer.id,\n email: customer.email,\n first_name: customer.first_name,\n last_name: customer.last_name,\n date_created: customer.date_created,\n };\n },\n }),\n\n find_customer_by_email: tool({\n description: desc(\"find_customer_by_email\"),\n inputSchema: z.object({ email: z.string().email() }),\n execute: async ({ email }) => {\n const result = await client.searchCustomers({ email, limit: 1 });\n const customer = result.results[0] ?? null;\n return customer\n ? {\n found: true,\n customer_id: customer.id,\n email: customer.email,\n first_name: customer.first_name,\n last_name: customer.last_name,\n }\n : { found: false, customer_id: null };\n },\n }),\n\n list_customer_cards: tool({\n description: desc(\"list_customer_cards\"),\n inputSchema: z.object({ customer_id: z.string() }),\n execute: async ({ customer_id }) => {\n const cards = await client.listCustomerCards(customer_id);\n return {\n customer_id,\n count: cards.length,\n cards: cards.map((c) => ({\n card_id: c.id,\n last_four_digits: c.last_four_digits,\n expiration_month: c.expiration_month,\n expiration_year: c.expiration_year,\n payment_method: c.payment_method?.id ?? null,\n payment_method_name: c.payment_method?.name ?? null,\n })),\n };\n },\n }),\n\n delete_customer_card: tool({\n description: desc(\"delete_customer_card\"),\n inputSchema: z.object({\n customer_id: z.string(),\n card_id: z.string(),\n }),\n execute: async ({ customer_id, card_id }) => {\n await client.deleteCustomerCard(customer_id, card_id);\n return { customer_id, card_id, deleted: true };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Payment Methods + Installments\n // ─────────────────────────────────────────────────────────────────────────\n\n list_payment_methods: tool({\n description: desc(\"list_payment_methods\"),\n inputSchema: z.object({}),\n execute: async () => {\n const methods = await client.listPaymentMethods();\n return {\n count: methods.length,\n methods: methods.map((m) => ({\n id: m.id,\n name: m.name,\n payment_type: m.payment_type_id,\n status: m.status,\n min_amount: m.min_allowed_amount,\n max_amount: m.max_allowed_amount,\n })),\n };\n },\n }),\n\n calculate_installments: tool({\n description: desc(\"calculate_installments\"),\n inputSchema: z.object({\n amount_ars: z.number().positive(),\n payment_method_id: z.string().optional().describe(\"E.g. 'visa', 'master', 'naranja'. Omit for all available methods.\"),\n bin: z.string().min(6).max(8).optional().describe(\"First 6-8 digits of card for issuer-specific offers (e.g., Naranja interest-free promotions)\"),\n }),\n execute: async (input) => {\n const offers = await client.getInstallments({\n amount: input.amount_ars,\n ...(input.payment_method_id !== undefined ? { paymentMethodId: input.payment_method_id } : {}),\n ...(input.bin !== undefined ? { bin: input.bin } : {}),\n });\n return {\n amount: input.amount_ars,\n offers: offers.map((o) => ({\n payment_method_id: o.payment_method_id,\n payment_type_id: o.payment_type_id,\n issuer_name: o.issuer?.name ?? null,\n options: o.payer_costs.map((pc) => ({\n installments: pc.installments,\n installment_amount: pc.installment_amount,\n total_amount: pc.total_amount,\n installment_rate: pc.installment_rate,\n recommended_message: pc.recommended_message,\n })),\n })),\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Account\n // ─────────────────────────────────────────────────────────────────────────\n\n get_account_info: tool({\n description: desc(\"get_account_info\"),\n inputSchema: z.object({}),\n execute: async () => {\n const me = await client.getMe();\n return {\n account_id: me.id,\n email: me.email,\n nickname: me.nickname,\n country_id: me.country_id,\n site_id: me.site_id,\n user_type: me.user_type,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Saved-card charging (v0.3)\n // ─────────────────────────────────────────────────────────────────────────\n\n charge_saved_card: tool({\n description: desc(\"charge_saved_card\"),\n inputSchema: z.object({\n customer_id: z.string().describe(\"MP customer id (from create_customer / find_customer_by_email)\"),\n card_id: z.string().describe(\"Saved card id (from list_customer_cards)\"),\n security_code: z.string().regex(/^\\d{3,4}$/).describe(\"CVV — 3 digits (Visa/Master) or 4 (Amex). User must provide this each charge in AR.\"),\n amount_ars: z.number().positive(),\n description: z.string().min(1).max(255),\n installments: z.number().int().min(1).max(24).optional().describe(\"Default 1. Use calculate_installments first to pick a valid count.\"),\n external_reference: z.string().optional(),\n statement_descriptor: z.string().max(13).optional(),\n }),\n execute: async (input) => {\n const payment = await client.chargeSavedCard({\n customerId: input.customer_id,\n cardId: input.card_id,\n securityCode: input.security_code,\n amount: input.amount_ars,\n description: input.description,\n ...(input.installments !== undefined ? { installments: input.installments } : {}),\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.statement_descriptor !== undefined ? { statementDescriptor: input.statement_descriptor } : {}),\n idempotencyKey: deterministicIdempotencyKey(\n \"charge_saved_card\",\n input.card_id,\n input.amount_ars,\n input.external_reference,\n ),\n });\n return {\n payment_id: payment.id,\n status: payment.status,\n status_detail: payment.status_detail,\n amount: payment.transaction_amount,\n installments: payment.installments,\n payment_method: payment.payment_method_id,\n customer_id: input.customer_id,\n card_id: input.card_id,\n external_reference: payment.external_reference,\n date_approved: payment.date_approved,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // QR in-store (v0.3)\n // ─────────────────────────────────────────────────────────────────────────\n\n create_qr_payment: tool({\n description: desc(\"create_qr_payment\"),\n inputSchema: z.object({\n external_pos_id: z.string().describe(\"Pre-configured POS external_id from MP dashboard. Required.\"),\n amount_ars: z.number().positive(),\n title: z.string().min(1).max(80).describe(\"Display title shown when scanning\"),\n description: z.string().max(255).optional(),\n external_reference: z.string().optional(),\n notification_url: z.string().url().optional().describe(\"Webhook URL — falls back to dashboard config if omitted\"),\n expires_in_seconds: z.number().int().min(60).max(3600).optional().describe(\"Default 600 (10 min)\"),\n }),\n execute: async (input) => {\n // Lazy-load qrcode to keep cold-start lean for users who don't use QR\n const QRCode = (await import(\"qrcode\")).default;\n const me = await client.getMe();\n const userId = String(me.id);\n const expiresAt = new Date(\n Date.now() + (input.expires_in_seconds ?? 600) * 1000,\n ).toISOString();\n\n const qr = await client.createQrPayment(userId, {\n externalPosId: input.external_pos_id,\n totalAmount: input.amount_ars,\n title: input.title,\n ...(input.description !== undefined ? { description: input.description } : {}),\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.notification_url !== undefined ? { notificationUrl: input.notification_url } : {}),\n expirationDate: expiresAt,\n });\n\n const qrDataUrl = await QRCode.toDataURL(qr.qr_data, {\n errorCorrectionLevel: \"M\",\n margin: 1,\n width: 512,\n });\n\n return {\n in_store_order_id: qr.in_store_order_id,\n qr_data: qr.qr_data,\n qr_data_url: qrDataUrl,\n expires_at: expiresAt,\n external_pos_id: input.external_pos_id,\n amount: input.amount_ars,\n next_step:\n \"Display the qr_data_url image to the buyer. Wait for the payment webhook (point_integration_wh fires first, then payment topic). If buyer doesn't scan in time, call cancel_qr_payment to free the POS.\",\n };\n },\n }),\n\n cancel_qr_payment: tool({\n description: desc(\"cancel_qr_payment\"),\n inputSchema: z.object({\n external_pos_id: z.string(),\n }),\n execute: async ({ external_pos_id }) => {\n const me = await client.getMe();\n await client.cancelQrPayment(String(me.id), external_pos_id);\n return { external_pos_id, cancelled: true };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Subscription Plans (v0.4)\n // ─────────────────────────────────────────────────────────────────────────\n\n create_subscription_plan: tool({\n description: desc(\"create_subscription_plan\"),\n inputSchema: z.object({\n reason: z.string().min(3).max(120).describe(\"Plan name shown at checkout\"),\n amount_ars: z.number().positive(),\n frequency_months: z.number().int().min(1).max(12),\n back_url: z.string().url().describe(\"HTTPS URL where MP redirects after first payment\"),\n external_reference: z.string().optional(),\n free_trial_days: z.number().int().min(1).max(60).optional().describe(\"Free trial period in days before first charge\"),\n }),\n execute: async (input) => {\n const plan = await client.createSubscriptionPlan({\n reason: input.reason,\n amount: input.amount_ars,\n currency: \"ARS\",\n frequency: input.frequency_months,\n frequencyType: \"months\",\n backUrl: input.back_url,\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.free_trial_days !== undefined ? { freeTrialFrequency: input.free_trial_days, freeTrialFrequencyType: \"days\" as const } : {}),\n });\n return {\n plan_id: plan.id,\n status: plan.status,\n reason: plan.reason,\n amount: plan.auto_recurring.transaction_amount,\n currency: plan.auto_recurring.currency_id,\n frequency: `${plan.auto_recurring.frequency} ${plan.auto_recurring.frequency_type}`,\n external_reference: plan.external_reference,\n next_step: \"Use subscribe_to_plan to enroll customers in this plan, or share its ID for them to subscribe via your frontend.\",\n };\n },\n }),\n\n list_subscription_plans: tool({\n description: desc(\"list_subscription_plans\"),\n inputSchema: z.object({\n status: z.string().optional(),\n limit: z.number().int().min(1).max(100).optional(),\n }),\n execute: async (input) => {\n const result = await client.listSubscriptionPlans({\n ...(input.status !== undefined ? { status: input.status } : {}),\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n });\n return {\n total: result.paging.total,\n plans: result.results.map((p) => ({\n plan_id: p.id,\n reason: p.reason,\n status: p.status,\n amount: p.auto_recurring.transaction_amount,\n currency: p.auto_recurring.currency_id,\n frequency: `${p.auto_recurring.frequency} ${p.auto_recurring.frequency_type}`,\n })),\n };\n },\n }),\n\n update_subscription_plan: tool({\n description: desc(\"update_subscription_plan\"),\n inputSchema: z.object({\n plan_id: z.string(),\n reason: z.string().optional(),\n amount_ars: z.number().positive().optional(),\n status: z.enum([\"active\", \"cancelled\"]).optional(),\n back_url: z.string().url().optional(),\n }),\n execute: async (input) => {\n const updated = await client.updateSubscriptionPlan(input.plan_id, {\n ...(input.reason !== undefined ? { reason: input.reason } : {}),\n ...(input.amount_ars !== undefined ? { amount: input.amount_ars } : {}),\n ...(input.status !== undefined ? { status: input.status } : {}),\n ...(input.back_url !== undefined ? { backUrl: input.back_url } : {}),\n });\n return {\n plan_id: updated.id,\n status: updated.status,\n reason: updated.reason,\n amount: updated.auto_recurring.transaction_amount,\n message: input.amount_ars !== undefined\n ? \"Updated. Existing subscribers keep their old amount; only NEW subscribers get the new pricing.\"\n : \"Plan updated.\",\n };\n },\n }),\n\n subscribe_to_plan: tool({\n description: desc(\"subscribe_to_plan\"),\n inputSchema: z.object({\n plan_id: z.string(),\n customer_email: z.string().email(),\n external_reference: z.string().optional(),\n }),\n execute: async (input) => {\n const sub = await client.subscribeToPlan({\n planId: input.plan_id,\n payerEmail: input.customer_email,\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n });\n return {\n subscription_id: sub.id,\n status: sub.status,\n payer_email: sub.payer_email,\n init_point_url: sub.init_point,\n next_step: \"Send init_point_url to the customer for first payment with card+CVV.\",\n };\n },\n }),\n\n list_subscription_payments: tool({\n description: desc(\"list_subscription_payments\"),\n inputSchema: z.object({\n subscription_id: z.string(),\n limit: z.number().int().min(1).max(100).optional(),\n }),\n execute: async (input) => {\n const result = await client.listSubscriptionPayments(input.subscription_id, {\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n });\n return {\n subscription_id: input.subscription_id,\n total: result.paging.total,\n payments: result.results.map((p) => ({\n authorized_payment_id: p.id,\n payment_id: p.payment_id ?? null,\n status: p.status,\n amount: p.transaction_amount ?? null,\n currency: p.currency_id ?? null,\n debit_date: p.debit_date ?? null,\n next_retry_date: p.next_retry_date ?? null,\n retry_attempt: p.retry_attempt ?? 0,\n reason: p.reason ?? null,\n })),\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Stores + POS (v0.4)\n // ─────────────────────────────────────────────────────────────────────────\n\n create_store: tool({\n description: desc(\"create_store\"),\n inputSchema: z.object({\n name: z.string().min(1).max(80),\n external_id: z.string().min(1).max(64).describe(\"Unique within the seller's stores\"),\n address_line: z.string().optional(),\n city_name: z.string().optional(),\n state_name: z.string().optional(),\n }),\n execute: async (input) => {\n const me = await client.getMe();\n const store = await client.createStore(String(me.id), {\n name: input.name,\n externalId: input.external_id,\n ...(input.address_line || input.city_name || input.state_name\n ? {\n location: {\n ...(input.address_line ? { addressLine: input.address_line } : {}),\n ...(input.city_name ? { cityName: input.city_name } : {}),\n ...(input.state_name ? { stateName: input.state_name } : {}),\n countryId: \"AR\",\n },\n }\n : {}),\n });\n return {\n store_id: store.id,\n name: store.name,\n external_id: store.external_id,\n next_step: \"Use create_pos with this store_id to add a Point of Sale where create_qr_payment can issue QRs.\",\n };\n },\n }),\n\n list_stores: tool({\n description: desc(\"list_stores\"),\n inputSchema: z.object({\n limit: z.number().int().min(1).max(100).optional(),\n }),\n execute: async (input) => {\n const me = await client.getMe();\n const result = await client.listStores(String(me.id), {\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n });\n return {\n total: result.paging.total,\n stores: result.results.map((s) => ({\n store_id: s.id,\n name: s.name ?? null,\n external_id: s.external_id ?? null,\n })),\n };\n },\n }),\n\n create_pos: tool({\n description: desc(\"create_pos\"),\n inputSchema: z.object({\n name: z.string().min(1).max(80),\n external_id: z.string().min(1).max(64).describe(\"Unique within the store. This is what create_qr_payment uses.\"),\n store_id: z.string().describe(\"From create_store / list_stores\"),\n category: z.number().int().optional().describe(\"MP category code, default 621102 (other food/beverage)\"),\n fixed_amount: z.boolean().optional().describe(\"True for static QR with fixed amount; false (default) for dynamic per-order QR\"),\n }),\n execute: async (input) => {\n const pos = await client.createPos({\n name: input.name,\n externalId: input.external_id,\n storeId: input.store_id,\n ...(input.category !== undefined ? { category: input.category } : {}),\n ...(input.fixed_amount !== undefined ? { fixedAmount: input.fixed_amount } : {}),\n });\n return {\n pos_id: pos.id,\n external_id: pos.external_id,\n store_id: pos.store_id,\n name: pos.name,\n next_step: \"Use create_qr_payment with this external_id to start issuing dynamic QRs from this POS.\",\n };\n },\n }),\n\n list_pos: tool({\n description: desc(\"list_pos\"),\n inputSchema: z.object({\n store_id: z.string().optional(),\n limit: z.number().int().min(1).max(100).optional(),\n }),\n execute: async (input) => {\n const result = await client.listPos({\n ...(input.store_id !== undefined ? { storeId: input.store_id } : {}),\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n });\n return {\n total: result.paging.total,\n pos: result.results.map((p) => ({\n pos_id: p.id,\n external_id: p.external_id ?? null,\n store_id: p.store_id ?? null,\n name: p.name ?? null,\n })),\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Disputes (v0.4 — read-only)\n // ─────────────────────────────────────────────────────────────────────────\n\n list_payment_disputes: tool({\n description: desc(\"list_payment_disputes\"),\n inputSchema: z.object({ payment_id: z.string() }),\n execute: async ({ payment_id }) => {\n const disputes = await client.listPaymentDisputes(payment_id);\n return {\n payment_id,\n count: disputes.length,\n disputes: disputes.map((d) => ({\n dispute_id: d.id,\n status: d.status,\n amount: d.amount ?? null,\n reason: d.reason ?? null,\n date_created: d.date_created ?? null,\n dashboard_url: `https://www.mercadopago.com.ar/disputes/${d.id}`,\n })),\n };\n },\n }),\n\n get_dispute: tool({\n description: desc(\"get_dispute\"),\n inputSchema: z.object({\n payment_id: z.string(),\n dispute_id: z.string(),\n }),\n execute: async ({ payment_id, dispute_id }) => {\n const d = await client.getDispute(payment_id, dispute_id);\n return {\n dispute_id: d.id,\n status: d.status,\n amount: d.amount ?? null,\n reason: d.reason ?? null,\n reason_description: d.reason_description ?? null,\n resolution: d.resolution ?? null,\n date_created: d.date_created ?? null,\n dashboard_url: `https://www.mercadopago.com.ar/disputes/${d.id}`,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Lookup helpers (v0.4)\n // ─────────────────────────────────────────────────────────────────────────\n\n list_identification_types: tool({\n description: desc(\"list_identification_types\"),\n inputSchema: z.object({}),\n execute: async () => {\n const types = await client.listIdentificationTypes();\n return {\n count: types.length,\n types: types.map((t) => ({\n id: t.id,\n name: t.name,\n type: t.type,\n min_length: t.min_length ?? null,\n max_length: t.max_length ?? null,\n })),\n };\n },\n }),\n\n list_issuers: tool({\n description: desc(\"list_issuers\"),\n inputSchema: z.object({\n payment_method_id: z.string().describe(\"E.g. 'visa', 'master', 'naranja'\"),\n bin: z.string().min(6).max(8).optional().describe(\"First 6-8 digits of card for precise issuer detection\"),\n }),\n execute: async (input) => {\n const issuers = await client.listIssuers({\n paymentMethodId: input.payment_method_id,\n ...(input.bin !== undefined ? { bin: input.bin } : {}),\n });\n return {\n payment_method_id: input.payment_method_id,\n count: issuers.length,\n issuers: issuers.map((i) => ({\n issuer_id: i.id,\n name: i.name,\n status: i.status ?? null,\n })),\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Webhooks management (v0.4)\n // ─────────────────────────────────────────────────────────────────────────\n\n list_webhooks: tool({\n description: desc(\"list_webhooks\"),\n inputSchema: z.object({}),\n execute: async () => {\n const hooks = await client.listWebhooks();\n return {\n count: hooks.length,\n webhooks: hooks.map((h) => ({\n webhook_id: h.id,\n url: h.url ?? null,\n topic: h.topic ?? null,\n status: h.status ?? null,\n date_created: h.date_created ?? null,\n })),\n };\n },\n }),\n\n create_webhook: tool({\n description: desc(\"create_webhook\"),\n inputSchema: z.object({\n url: z.string().url(),\n topic: z.string().describe(\"E.g. 'payment', 'subscription_authorized_payment', 'subscription_preapproval', 'merchant_order', 'point_integration_wh'\"),\n }),\n execute: async ({ url, topic }) => {\n const hook = await client.createWebhook({ url, topic });\n return {\n webhook_id: hook.id,\n url: hook.url ?? url,\n topic: hook.topic ?? topic,\n status: hook.status ?? null,\n };\n },\n }),\n\n update_webhook: tool({\n description: desc(\"update_webhook\"),\n inputSchema: z.object({\n webhook_id: z.string(),\n url: z.string().url().optional(),\n topic: z.string().optional(),\n }),\n execute: async (input) => {\n const hook = await client.updateWebhook(input.webhook_id, {\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.topic !== undefined ? { topic: input.topic } : {}),\n });\n return {\n webhook_id: hook.id,\n url: hook.url ?? null,\n topic: hook.topic ?? null,\n status: hook.status ?? null,\n };\n },\n }),\n\n delete_webhook: tool({\n description: desc(\"delete_webhook\"),\n inputSchema: z.object({ webhook_id: z.string() }),\n execute: async ({ webhook_id }) => {\n await client.deleteWebhook(webhook_id);\n return { webhook_id, deleted: true };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // v0.5 — Webhook handler combo\n // ─────────────────────────────────────────────────────────────────────────\n\n handle_webhook: tool({\n description: desc(\"handle_webhook\"),\n inputSchema: z.object({\n raw_body: z\n .string()\n .describe(\n \"The raw JSON body of the webhook request, exactly as received (do NOT re-stringify). Pass `await req.text()` from your handler.\",\n ),\n signature_header: z\n .string()\n .nullable()\n .describe(\"Value of the `x-signature` request header.\"),\n request_id_header: z\n .string()\n .nullable()\n .describe(\"Value of the `x-request-id` request header.\"),\n auto_fetch: z\n .boolean()\n .optional()\n .default(true)\n .describe(\n \"If true (default), fetch the underlying resource (Payment, Subscription, etc.) AS the MP user the client is configured for. Set to false to skip the fetch (faster, useful when you only need the topic+id).\",\n ),\n }),\n execute: async ({\n raw_body,\n signature_header,\n request_id_header,\n auto_fetch,\n }) => {\n if (!options.webhookSecret) {\n return {\n verified: false,\n error:\n \"webhookSecret not configured in mercadoPagoTools options. Pass it from MP dev panel → Notificaciones → Webhooks.\",\n event: null,\n resource: null,\n };\n }\n let parsedBody: unknown;\n try {\n parsedBody = JSON.parse(raw_body);\n } catch {\n return {\n verified: false,\n error: \"raw_body is not valid JSON.\",\n event: null,\n resource: null,\n };\n }\n const event = parseWebhookEvent(parsedBody);\n if (!event) {\n return {\n verified: false,\n error: \"Could not extract topic + dataId from webhook body.\",\n event: null,\n resource: null,\n };\n }\n const verified = verifyWebhookSignature({\n requestId: request_id_header,\n dataId: event.dataId,\n signatureHeader: signature_header,\n secret: options.webhookSecret,\n });\n if (!verified) {\n return {\n verified: false,\n error: \"HMAC-SHA256 signature mismatch. Reject the webhook (HTTP 401).\",\n event,\n resource: null,\n };\n }\n let resource: unknown = null;\n let resourceError: string | null = null;\n if (auto_fetch) {\n try {\n switch (event.topic) {\n case \"payment\":\n case \"payment.created\":\n case \"payment.updated\":\n resource = await client.getPayment(event.dataId);\n break;\n case \"preapproval\":\n case \"subscription_preapproval\":\n resource = await client.getPreapproval(event.dataId);\n break;\n case \"subscription_authorized_payment\":\n // No direct fetch endpoint; the data id IS the authorized_payment id.\n resource = { id: event.dataId, hint: \"Use list_subscription_payments to enumerate parent.\" };\n break;\n default:\n resource = null;\n resourceError = `No auto-fetch handler for topic '${event.topic}' yet.`;\n }\n } catch (err) {\n resourceError = err instanceof Error ? err.message : String(err);\n }\n }\n return {\n verified: true,\n event,\n resource,\n resource_error: resourceError,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // v0.5 — OAuth Marketplace flow\n // ─────────────────────────────────────────────────────────────────────────\n\n oauth_authorize_url: tool({\n description: desc(\"oauth_authorize_url\"),\n inputSchema: z.object({\n redirect_uri: z\n .string()\n .url()\n .describe(\n \"Where MP redirects the seller after approval. MUST be whitelisted in MP dev panel → Aplicaciones → tu app → Redirect URIs.\",\n ),\n state: z\n .string()\n .min(8)\n .describe(\n \"Opaque CSRF/session token echoed back. Bind to the user's session and verify on redirect.\",\n ),\n }),\n execute: async ({ redirect_uri, state }) => {\n if (!options.oauth?.clientId) {\n return {\n available: false,\n error:\n \"OAuth not configured. Pass `oauth: { clientId, clientSecret }` to mercadoPagoTools options.\",\n url: null,\n };\n }\n const url = buildAuthorizeUrl({\n clientId: options.oauth.clientId,\n redirectUri: redirect_uri,\n state,\n });\n return {\n available: true,\n url,\n next_step:\n \"Redirect the seller to `url`. After approval MP sends them to redirect_uri?code=...&state=... — verify state matches, then call oauth_exchange_code with the code.\",\n };\n },\n }),\n\n oauth_exchange_code: tool({\n description: desc(\"oauth_exchange_code\"),\n inputSchema: z.object({\n code: z\n .string()\n .describe(\"The `code` query param from the OAuth redirect URL.\"),\n redirect_uri: z\n .string()\n .url()\n .describe(\n \"Must EXACTLY match the redirect_uri used in oauth_authorize_url.\",\n ),\n }),\n execute: async ({ code, redirect_uri }) => {\n if (!options.oauth?.clientId || !options.oauth?.clientSecret) {\n return {\n available: false,\n error:\n \"OAuth not configured. Pass `oauth: { clientId, clientSecret }` to mercadoPagoTools options.\",\n token: null,\n };\n }\n try {\n const token = await exchangeCodeForToken({\n clientId: options.oauth.clientId,\n clientSecret: options.oauth.clientSecret,\n code,\n redirectUri: redirect_uri,\n });\n return {\n available: true,\n token,\n next_step:\n \"PERSIST { user_id, access_token, refresh_token, expires_in } against this seller. Use access_token to instantiate `new MercadoPagoClient({ accessToken })` AS the seller for marketplace API calls.\",\n };\n } catch (err) {\n return {\n available: true,\n error: err instanceof Error ? err.message : String(err),\n token: null,\n };\n }\n },\n }),\n\n oauth_refresh_token: tool({\n description: desc(\"oauth_refresh_token\"),\n inputSchema: z.object({\n refresh_token: z\n .string()\n .describe(\"The saved refresh_token for this seller.\"),\n }),\n execute: async ({ refresh_token }) => {\n if (!options.oauth?.clientId || !options.oauth?.clientSecret) {\n return {\n available: false,\n error:\n \"OAuth not configured. Pass `oauth: { clientId, clientSecret }` to mercadoPagoTools options.\",\n token: null,\n };\n }\n try {\n const token = await refreshAccessToken({\n clientId: options.oauth.clientId,\n clientSecret: options.oauth.clientSecret,\n refreshToken: refresh_token,\n });\n return {\n available: true,\n token,\n next_step:\n \"Replace the persisted access_token + refresh_token with these new values (refresh_token may have rotated).\",\n };\n } catch (err) {\n return {\n available: true,\n error: err instanceof Error ? err.message : String(err),\n token: null,\n };\n }\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // v0.5 — Order Management API\n // ─────────────────────────────────────────────────────────────────────────\n\n create_order: tool({\n description: desc(\"create_order\"),\n inputSchema: z.object({\n type: z\n .enum([\"online\", \"in_store\"])\n .describe(\"'online' for hosted/checkout flow, 'in_store' for QR/POS\"),\n currency_id: z.string().optional().default(\"ARS\"),\n external_reference: z.string().optional(),\n total_amount: z.number().positive().optional(),\n items: z\n .array(\n z.object({\n title: z.string(),\n unit_price: z.number(),\n quantity: z.number(),\n description: z.string().optional(),\n }),\n )\n .optional(),\n payer_email: z.string().email().optional(),\n capture_mode: z\n .enum([\"automatic\", \"manual\"])\n .optional()\n .describe(\n \"'automatic' charges immediately; 'manual' authorizes only — capture later via capture_order.\",\n ),\n notification_url: z.string().url().optional(),\n marketplace: z\n .string()\n .optional()\n .describe(\n \"Marketplace identifier (your app's name). Required for split payments.\",\n ),\n marketplace_fee: z\n .number()\n .optional()\n .describe(\n \"Fee in ARS (NOT %) credited to the marketplace's MP account.\",\n ),\n collector_id: z\n .union([z.string(), z.number()])\n .optional()\n .describe(\n \"Seller's MP user_id (from oauth_exchange_code.user_id). Funds route here; marketplace_fee is split off to your account.\",\n ),\n }),\n execute: async (input) => {\n const params: Parameters<typeof client.createOrder>[0] = {\n type: input.type,\n };\n if (input.currency_id) params.currency_id = input.currency_id;\n if (input.external_reference) params.external_reference = input.external_reference;\n if (input.total_amount !== undefined) params.total_amount = input.total_amount;\n if (input.items) params.items = input.items;\n if (input.payer_email) params.payer = { email: input.payer_email };\n if (input.capture_mode) params.capture_mode = input.capture_mode;\n if (input.notification_url) params.notification_url = input.notification_url;\n if (input.marketplace) params.marketplace = input.marketplace;\n if (input.marketplace_fee !== undefined) params.marketplace_fee = input.marketplace_fee;\n if (input.collector_id !== undefined) params.collector_id = input.collector_id;\n const order = await client.createOrder(params, {\n idempotencyKey: deterministicIdempotencyKey(\n \"create_order\",\n input.external_reference,\n input.total_amount,\n input.collector_id,\n ),\n });\n return {\n order_id: order.id,\n status: order.status ?? null,\n capture_mode: order.capture_mode ?? params.capture_mode ?? \"automatic\",\n total_amount: order.total_amount ?? null,\n };\n },\n }),\n\n get_order: tool({\n description: desc(\"get_order\"),\n inputSchema: z.object({ order_id: z.string() }),\n execute: async ({ order_id }) => {\n const order = await client.getOrder(order_id);\n return order;\n },\n }),\n\n update_order: tool({\n description: desc(\"update_order\"),\n inputSchema: z.object({\n order_id: z.string(),\n external_reference: z.string().optional(),\n total_amount: z.number().optional(),\n }),\n execute: async ({ order_id, external_reference, total_amount }) => {\n const patch: Parameters<typeof client.updateOrder>[1] = {};\n if (external_reference !== undefined) patch.external_reference = external_reference;\n if (total_amount !== undefined) patch.total_amount = total_amount;\n const order = await client.updateOrder(order_id, patch);\n return order;\n },\n }),\n\n capture_order: tool({\n description: desc(\"capture_order\"),\n inputSchema: z.object({\n order_id: z.string(),\n amount: z\n .number()\n .positive()\n .optional()\n .describe(\n \"Optional partial-capture amount. Omit to capture the full authorized amount.\",\n ),\n }),\n execute: async ({ order_id, amount }) => {\n const order = await client.captureOrder(order_id, amount);\n return {\n order_id: order.id,\n status: order.status ?? null,\n captured_amount: amount ?? order.total_amount ?? null,\n };\n },\n }),\n\n cancel_order: tool({\n description: desc(\"cancel_order\"),\n inputSchema: z.object({ order_id: z.string() }),\n execute: async ({ order_id }) => {\n const order = await client.cancelOrder(order_id);\n return {\n order_id: order.id,\n status: order.status ?? \"canceled\",\n };\n },\n }),\n } satisfies ToolSet;\n}\n","/**\n * In-memory record of a subscription. The lib persists the MP-side fields\n * needed to reason about a subscription without hitting the API every time\n * (status, last webhook info, customer email, etc.) plus a free-form metadata\n * bag for callers to attach business context (tenant id, plan name, etc.).\n */\nexport interface SubscriptionStateRecord {\n status?: string;\n payerEmail?: string;\n amount?: number;\n currency?: string;\n frequency?: number;\n frequencyType?: string;\n initPoint?: string;\n externalReference?: string;\n createdAt?: string;\n cancelledAt?: string;\n lastWebhookStatus?: string;\n lastWebhookAt?: string;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Persistence surface for subscription state. Implementations may back this\n * with Upstash Redis, Vercel KV, Postgres, in-memory, or anything that\n * supports the three operations. The default `InMemoryStateAdapter` is\n * provided for tests and trivial single-process deployments; production\n * setups should plug in a durable store.\n */\nexport interface SubscriptionStateAdapter {\n set(id: string, state: Partial<SubscriptionStateRecord>): Promise<void>;\n get(id: string): Promise<SubscriptionStateRecord | null>;\n list?(): Promise<string[]>;\n}\n\n/**\n * Volatile, single-process state adapter. Useful for tests and demos. Do not\n * use in production: state is lost on restart and is not safe across tenants.\n */\nexport class InMemoryStateAdapter implements SubscriptionStateAdapter {\n private readonly store = new Map<string, SubscriptionStateRecord>();\n\n async set(\n id: string,\n state: Partial<SubscriptionStateRecord>,\n ): Promise<void> {\n const existing = this.store.get(id) ?? {};\n this.store.set(id, { ...existing, ...state });\n }\n\n async get(id: string): Promise<SubscriptionStateRecord | null> {\n return this.store.get(id) ?? null;\n }\n\n async list(): Promise<string[]> {\n return Array.from(this.store.keys());\n }\n\n /** Test helper: drop everything. Not part of the adapter interface. */\n reset(): void {\n this.store.clear();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/client.ts","../src/types.ts","../src/oauth.ts","../src/test-cards.ts","../src/three-ds.ts","../src/webhook.ts","../src/tools.ts","../src/state.ts"],"names":["text","z"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Base class for any error originating from the Mercado Pago integration. All\n * specific error types extend this. Carries the MP HTTP status, the parsed\n * body when available, and the endpoint that failed for debugging.\n */\nexport class MercadoPagoError extends Error {\n constructor(\n message: string,\n public status: number,\n public endpoint: string,\n public mpResponse?: unknown,\n ) {\n super(message);\n this.name = \"MercadoPagoError\";\n }\n}\n\n/**\n * Thrown when the access token is missing, expired, or rejected by MP.\n */\nexport class MercadoPagoAuthError extends MercadoPagoError {\n constructor(endpoint: string, body?: unknown) {\n super(\n \"Mercado Pago rejected the request as unauthorized. Check the access token (TEST- prefix for sandbox, APP_USR- for production).\",\n 401,\n endpoint,\n body,\n );\n this.name = \"MercadoPagoAuthError\";\n }\n}\n\n/**\n * Thrown when MP returns the \"back_url is not a valid URL\" rejection. Common\n * when devs pass localhost or http:// — MP requires HTTPS only, even in sandbox.\n */\nexport class MercadoPagoBackUrlInvalidError extends MercadoPagoError {\n constructor(endpoint: string, body?: unknown) {\n super(\n \"back_url must be a valid HTTPS URL. localhost and http:// URLs are rejected by Mercado Pago, including in sandbox. Use a placeholder like https://example.com/done for local testing.\",\n 400,\n endpoint,\n body,\n );\n this.name = \"MercadoPagoBackUrlInvalidError\";\n }\n}\n\n/**\n * Thrown when the buyer email matches the seller account's email. MP refuses\n * self-payment on subscriptions: the Confirmar button at the init_point UI\n * stays disabled with no surfaceable error message.\n */\nexport class MercadoPagoSelfPaymentError extends MercadoPagoError {\n constructor(endpoint: string, body?: unknown) {\n super(\n \"The buyer email cannot equal the seller account's email. Mercado Pago blocks self-payment on subscriptions.\",\n 400,\n endpoint,\n body,\n );\n this.name = \"MercadoPagoSelfPaymentError\";\n }\n}\n\n/**\n * Thrown when MP returns \"Cannot operate between different countries\". Despite\n * the error text, this generally signals an account-type mismatch (real\n * account-in-test-mode vs. test user account), not a literal country mismatch.\n */\nexport class MercadoPagoAccountTypeMismatchError extends MercadoPagoError {\n constructor(endpoint: string, body?: unknown) {\n super(\n \"Mercado Pago rejected the operation: 'Cannot operate between different countries'. Despite the wording, this usually means the seller token and the buyer email are different account types (real-account-in-test-mode vs. test_user_*@testuser.com). Use a real consumer email as the buyer.\",\n 400,\n endpoint,\n body,\n );\n this.name = \"MercadoPagoAccountTypeMismatchError\";\n }\n}\n\n/**\n * Thrown when MP's risk engine rejects the first payment of a subscription.\n * IMPORTANT: when this happens, MP automatically cancels the entire preapproval\n * — you cannot retry on the same subscription, you must create a fresh one.\n */\nexport class MercadoPagoPaymentRejectedError extends MercadoPagoError {\n constructor(\n public preapprovalId: string,\n public statusDetail: string | null,\n body?: unknown,\n ) {\n super(\n `Payment rejected by Mercado Pago risk engine on preapproval ${preapprovalId}. Status detail: ${statusDetail ?? \"unknown\"}. The preapproval was auto-cancelled by MP — create a fresh subscription to retry.`,\n 400,\n `/preapproval/${preapprovalId}`,\n body,\n );\n this.name = \"MercadoPagoPaymentRejectedError\";\n }\n}\n\n/**\n * Thrown when an attempt is made to authorize a preapproval via API. Only the\n * payer can authorize via the init_point UI; there is no admin override even\n * in sandbox.\n */\nexport class MercadoPagoAuthorizeForbiddenError extends MercadoPagoError {\n constructor(preapprovalId: string, body?: unknown) {\n super(\n `Cannot authorize preapproval ${preapprovalId} via API: only the payer can authorize through the init_point checkout. There is no API shortcut, even in sandbox.`,\n 400,\n `/preapproval/${preapprovalId}`,\n body,\n );\n this.name = \"MercadoPagoAuthorizeForbiddenError\";\n }\n}\n\n/**\n * Thrown when MP rate-limits the integration. Retry with exponential backoff.\n */\nexport class MercadoPagoRateLimitError extends MercadoPagoError {\n constructor(\n endpoint: string,\n public retryAfterSeconds: number | null,\n body?: unknown,\n ) {\n super(\n `Mercado Pago rate limit hit on ${endpoint}. ${\n retryAfterSeconds\n ? `Retry after ${retryAfterSeconds}s.`\n : \"Retry with exponential backoff.\"\n }`,\n 429,\n endpoint,\n body,\n );\n this.name = \"MercadoPagoRateLimitError\";\n }\n}\n\n/**\n * Thrown when MP is overloaded and serves an HTML 503 page instead of a JSON\n * error. The library detects content-type !== application/json on 5xx and\n * raises this typed error so retry logic + agent UX can branch correctly.\n */\nexport class MercadoPagoOverloadedError extends MercadoPagoError {\n constructor(endpoint: string, status: number) {\n super(\n `Mercado Pago appears overloaded — returned a non-JSON ${status} response for ${endpoint}. Wait a few seconds and retry.`,\n status,\n endpoint,\n );\n this.name = \"MercadoPagoOverloadedError\";\n }\n}\n\n/**\n * Thrown when a request exceeds the configured `requestTimeoutMs`. Retried\n * automatically up to `maxRetries`; this surfaces only when the budget runs\n * out.\n */\nexport class MercadoPagoTimeoutError extends MercadoPagoError {\n constructor(endpoint: string, public readonly timeoutMs: number) {\n super(\n `Mercado Pago request timed out after ${timeoutMs}ms on ${endpoint}. Increase requestTimeoutMs or check connectivity.`,\n 0,\n endpoint,\n );\n this.name = \"MercadoPagoTimeoutError\";\n }\n}\n\n/**\n * Maps an MP error response body to the most specific known error class. Falls\n * back to the generic MercadoPagoError when no specific pattern matches.\n */\nexport function classifyError(\n status: number,\n endpoint: string,\n body: unknown,\n context?: { preapprovalId?: string; payerEmail?: string; sellerEmail?: string },\n): MercadoPagoError {\n const bodyText =\n typeof body === \"string\"\n ? body\n : body && typeof body === \"object\"\n ? JSON.stringify(body)\n : \"\";\n const lower = bodyText.toLowerCase();\n\n if (status === 401) return new MercadoPagoAuthError(endpoint, body);\n if (status === 429) {\n // Try to extract Retry-After from the body if it includes one.\n let retryAfter: number | null = null;\n const obj = body as { retry_after?: number; \"retry-after\"?: number } | undefined;\n if (obj?.retry_after) retryAfter = Number(obj.retry_after);\n else if (obj?.[\"retry-after\"]) retryAfter = Number(obj[\"retry-after\"]);\n return new MercadoPagoRateLimitError(endpoint, retryAfter, body);\n }\n if (status === 400) {\n if (lower.includes(\"back_url\") && lower.includes(\"not a valid url\")) {\n return new MercadoPagoBackUrlInvalidError(endpoint, body);\n }\n if (\n lower.includes(\"cannot operate\") &&\n lower.includes(\"different countries\")\n ) {\n return new MercadoPagoAccountTypeMismatchError(endpoint, body);\n }\n if (\n lower.includes(\"only the payer can\") &&\n context?.preapprovalId\n ) {\n return new MercadoPagoAuthorizeForbiddenError(context.preapprovalId, body);\n }\n if (\n context?.payerEmail &&\n context?.sellerEmail &&\n context.payerEmail.toLowerCase() === context.sellerEmail.toLowerCase()\n ) {\n return new MercadoPagoSelfPaymentError(endpoint, body);\n }\n }\n return new MercadoPagoError(\n `Mercado Pago ${endpoint} failed: ${status} ${bodyText.slice(0, 200)}`,\n status,\n endpoint,\n body,\n );\n}\n","import { classifyError, MercadoPagoError, MercadoPagoOverloadedError, MercadoPagoRateLimitError, MercadoPagoTimeoutError } from \"./errors\";\nimport type {\n AccountInfo,\n CardToken,\n CreateCardTokenParams,\n CreateCustomerParams,\n CreatePaymentParams,\n CreatePosParams,\n CreatePreapprovalParams,\n CreatePreferenceParams,\n CreateQrPaymentParams,\n CreateRefundParams,\n CreateStoreParams,\n CreateSubscriptionPlanParams,\n AccountBalance,\n AccountMovement,\n CreateOrderParams,\n CreateWebhookParams,\n Customer,\n CustomerCard,\n Dispute,\n IdentificationType,\n InstallmentOffer,\n Issuer,\n Order,\n Payment,\n PaymentMethod,\n PaymentsSearchResult,\n Pos,\n Preapproval,\n Preference,\n QrOrder,\n Refund,\n SearchPaymentsParams,\n Settlement,\n Store,\n SubscriptionPayment,\n SubscriptionPlan,\n WebhookConfig,\n} from \"./types\";\n\nconst DEFAULT_BASE_URL = \"https://api.mercadopago.com\";\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport interface MercadoPagoClientOptions {\n /** Access token. TEST- prefix for sandbox, APP_USR- for production. */\n accessToken: string;\n /**\n * Override the API base URL. Mostly useful for tests against MSW or for\n * pointing at a regional MP host. Defaults to https://api.mercadopago.com.\n */\n baseUrl?: string;\n /**\n * Custom fetch implementation. Defaults to globalThis.fetch. Override to\n * inject your own retry/instrumentation layer or to test with MSW.\n */\n fetch?: typeof fetch;\n /**\n * Per-request timeout in ms. Aborts the request and throws if exceeded.\n * Default 30_000 (30s). MP can be slow under load; 30s is a safe upper bound.\n */\n requestTimeoutMs?: number;\n /**\n * Number of retries on 5xx + network errors. Default 1 (single retry).\n * 4xx errors are NEVER retried (they're user/config errors). Each retry\n * uses exponential backoff: 250ms, 500ms, 1000ms, ...\n */\n maxRetries?: number;\n /**\n * Observability hook fired AFTER every request (success or failure).\n * Useful for logging, metrics, tracing. Synchronous, fire-and-forget.\n */\n onCall?: (event: {\n method: string;\n path: string;\n durationMs: number;\n httpStatus: number | null;\n retried: number;\n success: boolean;\n }) => void;\n}\n\ninterface RequestOptions {\n /** Idempotency key. Required for POST/PUT to dedupe retries safely. */\n idempotencyKey?: string;\n /** Query string params. Object → URLSearchParams. */\n query?: Record<string, string | number | undefined>;\n /** Context for error classification. */\n classifyContext?: {\n preapprovalId?: string;\n paymentId?: string;\n customerId?: string;\n payerEmail?: string;\n sellerEmail?: string;\n };\n}\n\n/**\n * Thin, typed wrapper around Mercado Pago's REST API. Exposes the surface\n * the agent layer needs: Subscriptions (Preapprovals), Payments, Checkout Pro\n * (Preferences), Customers + saved Cards, Refunds, Payment Methods +\n * Installments, and Account info. Deliberately narrower than a full SDK\n * rebuild — we add endpoints when the agent layer needs them.\n */\nexport class MercadoPagoClient {\n private readonly accessToken: string;\n private readonly baseUrl: string;\n private readonly fetchImpl: typeof fetch | undefined;\n private readonly requestTimeoutMs: number;\n private readonly maxRetries: number;\n private readonly onCall:\n | ((event: {\n method: string;\n path: string;\n durationMs: number;\n httpStatus: number | null;\n retried: number;\n success: boolean;\n }) => void)\n | undefined;\n\n constructor(options: MercadoPagoClientOptions) {\n if (!options.accessToken) {\n throw new Error(\n \"MercadoPagoClient requires an accessToken. Get one from https://www.mercadopago.com.ar/developers/panel/credentials\",\n );\n }\n this.accessToken = options.accessToken;\n this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n this.fetchImpl = options.fetch;\n this.requestTimeoutMs = options.requestTimeoutMs ?? 30_000;\n this.maxRetries = Math.max(0, options.maxRetries ?? 1);\n this.onCall = options.onCall;\n }\n\n private async request<T>(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n path: string,\n body?: unknown,\n options?: RequestOptions,\n ): Promise<T> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.accessToken}`,\n \"Content-Type\": \"application/json\",\n };\n if (options?.idempotencyKey) {\n headers[\"X-Idempotency-Key\"] = options.idempotencyKey;\n }\n\n let url = `${this.baseUrl}${path}`;\n if (options?.query) {\n const search = new URLSearchParams();\n for (const [k, v] of Object.entries(options.query)) {\n if (v !== undefined && v !== null && v !== \"\") {\n search.set(k, String(v));\n }\n }\n const qs = search.toString();\n if (qs) url += `?${qs}`;\n }\n\n const fetchFn = this.fetchImpl ?? globalThis.fetch;\n const t0 = Date.now();\n let attempt = 0;\n let lastError: unknown;\n let lastStatus: number | null = null;\n\n while (attempt <= this.maxRetries) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);\n\n const init: RequestInit = { method, headers, signal: controller.signal };\n if (body !== undefined) init.body = JSON.stringify(body);\n\n try {\n const res = await fetchFn(url, init);\n clearTimeout(timer);\n lastStatus = res.status;\n\n if (res.ok) {\n const text = await res.text();\n this.onCall?.({\n method,\n path,\n durationMs: Date.now() - t0,\n httpStatus: res.status,\n retried: attempt,\n success: true,\n });\n if (!text) return undefined as T;\n return JSON.parse(text) as T;\n }\n\n // Retry on 5xx and 429 (rate-limit); never on 4xx user/config errors\n const isRetryable = res.status >= 500 || res.status === 429;\n if (isRetryable && attempt < this.maxRetries) {\n // Honor Retry-After header on 429\n const retryAfter = res.headers.get(\"retry-after\");\n const waitMs = retryAfter\n ? Number(retryAfter) * 1000\n : 250 * Math.pow(2, attempt);\n attempt++;\n await sleep(waitMs);\n continue;\n }\n\n // Detect HTML / non-JSON 5xx (MP overloaded)\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n if (res.status >= 500 && !contentType.includes(\"application/json\")) {\n this.onCall?.({\n method,\n path,\n durationMs: Date.now() - t0,\n httpStatus: res.status,\n retried: attempt,\n success: false,\n });\n throw new MercadoPagoOverloadedError(path, res.status);\n }\n\n let parsed: unknown;\n const text = await res.text();\n try { parsed = JSON.parse(text); } catch { parsed = text; }\n const err = classifyError(res.status, path, parsed, options?.classifyContext);\n this.onCall?.({\n method,\n path,\n durationMs: Date.now() - t0,\n httpStatus: res.status,\n retried: attempt,\n success: false,\n });\n throw err;\n } catch (err) {\n clearTimeout(timer);\n // If err is a MercadoPagoError, the 5xx-final / 4xx branch already\n // fired onCall above — don't double-fire. Just re-throw.\n if (err instanceof MercadoPagoError) throw err;\n\n // Network error / abort / parse error — retry if budget remains\n const isAbort = err instanceof Error && err.name === \"AbortError\";\n const isNetwork = !lastStatus && !isAbort;\n if ((isNetwork || isAbort) && attempt < this.maxRetries) {\n lastError = err;\n attempt++;\n await sleep(250 * Math.pow(2, attempt - 1));\n continue;\n }\n this.onCall?.({\n method,\n path,\n durationMs: Date.now() - t0,\n httpStatus: lastStatus,\n retried: attempt,\n success: false,\n });\n if (isAbort) {\n throw new MercadoPagoTimeoutError(path, this.requestTimeoutMs);\n }\n throw err;\n }\n }\n\n throw lastError ?? new Error(`MercadoPago request failed after ${this.maxRetries} retries`);\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Subscriptions (Preapprovals) — v0.1 surface, kept stable\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a recurring subscription (preapproval). The returned `init_point`\n * URL is where the buyer must complete the FIRST payment with their card +\n * CVV — there is no API path that bypasses this human step.\n */\n async createPreapproval(\n params: CreatePreapprovalParams,\n ): Promise<Preapproval> {\n return this.request<Preapproval>(\n \"POST\",\n \"/preapproval\",\n {\n reason: params.reason,\n payer_email: params.payerEmail,\n back_url: params.backUrl,\n external_reference: params.externalReference,\n auto_recurring: {\n frequency: params.frequency,\n frequency_type: params.frequencyType,\n transaction_amount: params.amount,\n currency_id: params.currency,\n },\n },\n { classifyContext: { payerEmail: params.payerEmail } },\n );\n }\n\n async getPreapproval(id: string): Promise<Preapproval> {\n return this.request<Preapproval>(\"GET\", `/preapproval/${id}`, undefined, {\n classifyContext: { preapprovalId: id },\n });\n }\n\n async cancelPreapproval(id: string): Promise<Preapproval> {\n return this.request<Preapproval>(\n \"PUT\",\n `/preapproval/${id}`,\n { status: \"cancelled\" },\n { classifyContext: { preapprovalId: id } },\n );\n }\n\n async pausePreapproval(id: string): Promise<Preapproval> {\n return this.request<Preapproval>(\n \"PUT\",\n `/preapproval/${id}`,\n { status: \"paused\" },\n { classifyContext: { preapprovalId: id } },\n );\n }\n\n async resumePreapproval(id: string): Promise<Preapproval> {\n return this.request<Preapproval>(\n \"PUT\",\n `/preapproval/${id}`,\n { status: \"authorized\" },\n { classifyContext: { preapprovalId: id } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Payments (v0.2)\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a payment. Two main flows:\n * - **Card payment**: pass `token` (from MP frontend Cardform) + payment_method_id.\n * - **Account money / cash**: omit token, pass payment_method_id like \"account_money\", \"rapipago\", \"pagofacil\".\n *\n * For credit card payments where you don't have a card token (i.e., you only\n * have a payer email and want to send them a payment link), use\n * `createPreference` (Checkout Pro) instead.\n *\n * Idempotency: pass `idempotencyKey` to safely retry. Required for production\n * to dedupe network-failed requests.\n */\n async createPayment(params: CreatePaymentParams): Promise<Payment> {\n const body: Record<string, unknown> = {\n transaction_amount: params.transactionAmount,\n payment_method_id: params.paymentMethodId,\n payer: {\n email: params.payerEmail,\n ...(params.identification ? { identification: params.identification } : {}),\n },\n };\n if (params.installments !== undefined) body.installments = params.installments;\n if (params.token !== undefined) body.token = params.token;\n if (params.description !== undefined) body.description = params.description;\n if (params.externalReference !== undefined) body.external_reference = params.externalReference;\n if (params.notificationUrl !== undefined) body.notification_url = params.notificationUrl;\n if (params.statementDescriptor !== undefined)\n body.statement_descriptor = params.statementDescriptor;\n if (params.capture !== undefined) body.capture = params.capture;\n if (params.additionalInfo !== undefined) body.additional_info = params.additionalInfo;\n\n return this.request<Payment>(\"POST\", \"/v1/payments\", body, {\n ...(params.idempotencyKey ? { idempotencyKey: params.idempotencyKey } : {}),\n classifyContext: { payerEmail: params.payerEmail },\n });\n }\n\n /** Fetch a payment by ID. */\n async getPayment(id: string): Promise<Payment> {\n return this.request<Payment>(\"GET\", `/v1/payments/${id}`, undefined, {\n classifyContext: { paymentId: id },\n });\n }\n\n /**\n * Search payments with filters. Common: by external_reference (your-system\n * id), by status, by date range. Pagination via offset + limit (max 100).\n */\n async searchPayments(params: SearchPaymentsParams = {}): Promise<PaymentsSearchResult> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit ?? 30,\n offset: params.offset ?? 0,\n };\n if (params.externalReference) query[\"external_reference\"] = params.externalReference;\n if (params.status) query[\"status\"] = params.status as string;\n if (params.payerEmail) query[\"payer.email\"] = params.payerEmail;\n if (params.beginDate) query[\"begin_date\"] = params.beginDate;\n if (params.endDate) query[\"end_date\"] = params.endDate;\n if (params.sort) query[\"sort\"] = params.sort;\n if (params.criteria) query[\"criteria\"] = params.criteria;\n\n return this.request<PaymentsSearchResult>(\n \"GET\",\n \"/v1/payments/search\",\n undefined,\n { query },\n );\n }\n\n /**\n * Capture a previously authorized payment. Only works for credit-card\n * payments created with `capture: false`. Optional partial capture amount.\n */\n async capturePayment(id: string, amount?: number): Promise<Payment> {\n return this.request<Payment>(\n \"PUT\",\n `/v1/payments/${id}`,\n amount !== undefined ? { capture: true, transaction_amount: amount } : { capture: true },\n { classifyContext: { paymentId: id } },\n );\n }\n\n /**\n * Cancel a pending or in_process payment. Once approved, you must use\n * `createRefund` instead.\n */\n async cancelPayment(id: string): Promise<Payment> {\n return this.request<Payment>(\n \"PUT\",\n `/v1/payments/${id}`,\n { status: \"cancelled\" },\n { classifyContext: { paymentId: id } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Refunds\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Refund a payment fully (omit `amount`) or partially. Idempotency key\n * recommended — refunds can fail mid-flight and you don't want double-refunds\n * on retry.\n */\n async createRefund(params: CreateRefundParams): Promise<Refund> {\n const body = params.amount !== undefined ? { amount: params.amount } : undefined;\n return this.request<Refund>(\n \"POST\",\n `/v1/payments/${params.paymentId}/refunds`,\n body,\n {\n ...(params.idempotencyKey ? { idempotencyKey: params.idempotencyKey } : {}),\n classifyContext: { paymentId: params.paymentId },\n },\n );\n }\n\n async listRefunds(paymentId: string): Promise<Refund[]> {\n const res = await this.request<Refund[] | { refunds: Refund[] }>(\n \"GET\",\n `/v1/payments/${paymentId}/refunds`,\n undefined,\n { classifyContext: { paymentId } },\n );\n return Array.isArray(res) ? res : res.refunds ?? [];\n }\n\n async getRefund(paymentId: string, refundId: string): Promise<Refund> {\n return this.request<Refund>(\n \"GET\",\n `/v1/payments/${paymentId}/refunds/${refundId}`,\n undefined,\n { classifyContext: { paymentId } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Checkout Pro (Preferences)\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a payment preference for Checkout Pro. Returns `init_point` URL\n * where the buyer completes payment on MP-hosted form. This is the\n * recommended flow when you don't have a card token (most common path for\n * agents — you don't want to handle PCI data).\n *\n * Sandbox: use `sandbox_init_point` instead of `init_point`.\n */\n async createPreference(params: CreatePreferenceParams): Promise<Preference> {\n const body: Record<string, unknown> = {\n items: params.items.map((it) => ({\n title: it.title,\n quantity: it.quantity,\n unit_price: it.unit_price,\n currency_id: it.currency_id ?? \"ARS\",\n ...(it.description ? { description: it.description } : {}),\n ...(it.picture_url ? { picture_url: it.picture_url } : {}),\n })),\n };\n if (params.payer) body.payer = params.payer;\n if (params.backUrls) body.back_urls = params.backUrls;\n if (params.autoReturn) body.auto_return = params.autoReturn;\n if (params.notificationUrl) body.notification_url = params.notificationUrl;\n if (params.externalReference) body.external_reference = params.externalReference;\n if (params.paymentMethods) body.payment_methods = params.paymentMethods;\n if (params.statementDescriptor)\n body.statement_descriptor = params.statementDescriptor;\n if (params.expires !== undefined) body.expires = params.expires;\n if (params.expirationDateFrom) body.expiration_date_from = params.expirationDateFrom;\n if (params.expirationDateTo) body.expiration_date_to = params.expirationDateTo;\n // v0.5 — Marketplace split routing\n if (params.marketplace) body.marketplace = params.marketplace;\n if (params.marketplaceFee !== undefined) body.marketplace_fee = params.marketplaceFee;\n if (params.collectorId !== undefined) body.collector_id = params.collectorId;\n\n return this.request<Preference>(\"POST\", \"/checkout/preferences\", body);\n }\n\n async getPreference(id: string): Promise<Preference> {\n return this.request<Preference>(\"GET\", `/checkout/preferences/${id}`);\n }\n\n async updatePreference(\n id: string,\n patch: Partial<CreatePreferenceParams>,\n ): Promise<Preference> {\n return this.request<Preference>(\"PUT\", `/checkout/preferences/${id}`, patch);\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Customers + Saved Cards\n // ───────────────────────────────────────────────────────────────────────────\n\n async createCustomer(params: CreateCustomerParams): Promise<Customer> {\n const body: Record<string, unknown> = { email: params.email };\n if (params.firstName) body.first_name = params.firstName;\n if (params.lastName) body.last_name = params.lastName;\n if (params.phone) body.phone = { area_code: params.phone.areaCode, number: params.phone.number };\n if (params.identification) body.identification = params.identification;\n if (params.description) body.description = params.description;\n return this.request<Customer>(\"POST\", \"/v1/customers\", body, {\n classifyContext: { payerEmail: params.email },\n });\n }\n\n async getCustomer(id: string): Promise<Customer> {\n return this.request<Customer>(\"GET\", `/v1/customers/${id}`, undefined, {\n classifyContext: { customerId: id },\n });\n }\n\n /**\n * Search customers. Most common: by email (returns 0 or 1 result).\n * Note: MP's `/v1/customers/search` returns a paginated wrapper, not a flat array.\n */\n async searchCustomers(params: { email?: string; limit?: number; offset?: number } = {}): Promise<{\n paging: { total: number; limit: number; offset: number };\n results: Customer[];\n }> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit ?? 10,\n offset: params.offset ?? 0,\n };\n if (params.email) query[\"email\"] = params.email;\n return this.request(\"GET\", \"/v1/customers/search\", undefined, { query });\n }\n\n async listCustomerCards(customerId: string): Promise<CustomerCard[]> {\n return this.request<CustomerCard[]>(\n \"GET\",\n `/v1/customers/${customerId}/cards`,\n undefined,\n { classifyContext: { customerId } },\n );\n }\n\n async getCustomerCard(customerId: string, cardId: string): Promise<CustomerCard> {\n return this.request<CustomerCard>(\n \"GET\",\n `/v1/customers/${customerId}/cards/${cardId}`,\n undefined,\n { classifyContext: { customerId } },\n );\n }\n\n async deleteCustomerCard(customerId: string, cardId: string): Promise<void> {\n await this.request(\n \"DELETE\",\n `/v1/customers/${customerId}/cards/${cardId}`,\n undefined,\n { classifyContext: { customerId } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Payment Methods + Installments\n // ───────────────────────────────────────────────────────────────────────────\n\n /** List all payment methods enabled for the account's site (MLA = Argentina). */\n async listPaymentMethods(): Promise<PaymentMethod[]> {\n return this.request<PaymentMethod[]>(\"GET\", \"/v1/payment_methods\");\n }\n\n /**\n * Get installment options for an amount. THE killer AR feature — returns\n * `payer_costs` with `recommended_message` strings like \"12 cuotas sin\n * interés de $X\" that you should surface verbatim to the user.\n *\n * Pass `bin` (first 6 digits of card) for issuer-specific offers (e.g.,\n * Naranja's interest-free promotions). Without bin, returns generic offers.\n */\n async getInstallments(params: {\n amount: number;\n paymentMethodId?: string;\n bin?: string;\n issuerId?: string;\n }): Promise<InstallmentOffer[]> {\n const query: Record<string, string | number | undefined> = {\n amount: params.amount,\n };\n if (params.paymentMethodId) query[\"payment_method_id\"] = params.paymentMethodId;\n if (params.bin) query[\"bin\"] = params.bin;\n if (params.issuerId) query[\"issuer.id\"] = params.issuerId;\n return this.request<InstallmentOffer[]>(\n \"GET\",\n \"/v1/payment_methods/installments\",\n undefined,\n { query },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Account\n // ───────────────────────────────────────────────────────────────────────────\n\n /** Get info about the account that owns this access token. */\n async getMe(): Promise<AccountInfo> {\n return this.request<AccountInfo>(\"GET\", \"/users/me\");\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Card tokens (server-side, for saved-card retokenization)\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a single-use card token from a saved card. This is the server-side\n * retokenization path (PCI-safe because the card data lives in MP's vault,\n * we only pass the saved card_id + customer_id + the user-supplied CVV).\n *\n * Tokens expire in 7 days but typically burn on first use. AR currently\n * REQUIRES CVV on every charge (MP doesn't store it); skipping CVV requires\n * a private MP product enablement, not a public API.\n */\n async createCardToken(params: CreateCardTokenParams): Promise<CardToken> {\n return this.request<CardToken>(\"POST\", \"/v1/card_tokens\", {\n card_id: params.cardId,\n customer_id: params.customerId,\n security_code: params.securityCode,\n });\n }\n\n /**\n * High-level helper: charge a saved card in 3 steps.\n * 1. Mint a card token from {customer_id, card_id, security_code}\n * 2. Lookup card to fill payment_method_id (avoids agent guessing)\n * 3. Create the payment with the token + idempotency key\n *\n * Returns the resulting Payment. Uses deterministic idempotency from\n * (card_id, amount, externalReference) so retries dedupe on MP's side.\n */\n async chargeSavedCard(params: {\n customerId: string;\n cardId: string;\n securityCode: string;\n amount: number;\n description: string;\n installments?: number;\n externalReference?: string;\n statementDescriptor?: string;\n idempotencyKey?: string;\n }): Promise<Payment> {\n // Step 1: Mint single-use token\n const token = await this.createCardToken({\n cardId: params.cardId,\n customerId: params.customerId,\n securityCode: params.securityCode,\n });\n\n // Step 2: Lookup the saved card to fill payment_method_id\n const card = await this.getCustomerCard(params.customerId, params.cardId);\n const paymentMethodId = card.payment_method?.id;\n if (!paymentMethodId) {\n throw new MercadoPagoError(\n `Saved card ${params.cardId} has no payment_method.id. Cannot charge.`,\n 0,\n `/v1/customers/${params.customerId}/cards/${params.cardId}`,\n );\n }\n\n // Step 3: Create payment\n const body: Record<string, unknown> = {\n transaction_amount: params.amount,\n token: token.id,\n payment_method_id: paymentMethodId,\n installments: params.installments ?? 1,\n description: params.description,\n payer: { type: \"customer\", id: params.customerId },\n };\n if (params.externalReference) body.external_reference = params.externalReference;\n if (params.statementDescriptor) body.statement_descriptor = params.statementDescriptor;\n\n return this.request<Payment>(\"POST\", \"/v1/payments\", body, {\n ...(params.idempotencyKey !== undefined ? { idempotencyKey: params.idempotencyKey } : {}),\n classifyContext: { customerId: params.customerId },\n });\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // QR (in-store dynamic) — Section 2 of v0.3 spec\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a dynamic in-store QR order. Returns `qr_data` (EMVCo TLV string)\n * + `in_store_order_id`. The buyer scans the QR with any AR wallet (Modo,\n * BNA+, Cuenta DNI, Naranja X, etc. — interop is mandated by Transferencias\n * 3.0). On payment, MP fires `point_integration_wh` then `payment` topics.\n *\n * Requires a pre-configured POS (`external_pos_id` from MP dashboard or\n * `POST /pos`). The seller's `user_id` is auto-fetched from `/users/me`.\n *\n * The lib does NOT render the QR image — pass `qr_data` to a QR renderer\n * (e.g., `qrcode` package) to get a data URL. The agent tool layer wraps\n * this and returns both raw + data URL.\n */\n async createQrPayment(userId: string, params: CreateQrPaymentParams): Promise<QrOrder> {\n const body: Record<string, unknown> = {\n total_amount: params.totalAmount,\n title: params.title,\n };\n if (params.description) body.description = params.description;\n if (params.notificationUrl) body.notification_url = params.notificationUrl;\n if (params.externalReference) body.external_reference = params.externalReference;\n if (params.expirationDate) body.expiration_date = params.expirationDate;\n body.items = params.items ?? [\n {\n title: params.title,\n quantity: 1,\n unit_price: params.totalAmount,\n unit_measure: \"unit\",\n total_amount: params.totalAmount,\n },\n ];\n\n return this.request<QrOrder>(\n \"PUT\",\n `/instore/orders/qr/seller/collectors/${encodeURIComponent(userId)}/pos/${encodeURIComponent(params.externalPosId)}/qrs`,\n body,\n );\n }\n\n /**\n * Cancel a pending QR order on a POS. Necessary if the buyer never scans\n * — otherwise the next `createQrPayment` on the same POS returns 409.\n */\n async cancelQrPayment(userId: string, externalPosId: string): Promise<void> {\n await this.request(\n \"DELETE\",\n `/instore/orders/qr/seller/collectors/${encodeURIComponent(userId)}/pos/${encodeURIComponent(externalPosId)}/qrs`,\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Subscription Plans (preapproval_plan — reusable plans, v0.4)\n // ───────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a reusable subscription plan. Customers later subscribe to it via\n * `subscribeToPlan` (which creates a preapproval pointing at the plan).\n *\n * Use this when you have fixed tiers (Básico/Pro/Enterprise). For custom\n * per-customer amounts, skip plans and use `createPreapproval` directly.\n */\n async createSubscriptionPlan(params: CreateSubscriptionPlanParams): Promise<SubscriptionPlan> {\n const body: Record<string, unknown> = {\n reason: params.reason,\n back_url: params.backUrl,\n auto_recurring: {\n frequency: params.frequency,\n frequency_type: params.frequencyType,\n transaction_amount: params.amount,\n currency_id: params.currency,\n ...(params.freeTrialFrequency !== undefined && params.freeTrialFrequencyType !== undefined\n ? {\n free_trial: {\n frequency: params.freeTrialFrequency,\n frequency_type: params.freeTrialFrequencyType,\n },\n }\n : {}),\n },\n };\n if (params.externalReference) body.external_reference = params.externalReference;\n return this.request<SubscriptionPlan>(\"POST\", \"/preapproval_plan\", body);\n }\n\n async getSubscriptionPlan(id: string): Promise<SubscriptionPlan> {\n return this.request<SubscriptionPlan>(\"GET\", `/preapproval_plan/${id}`);\n }\n\n async listSubscriptionPlans(params: { limit?: number; offset?: number; status?: string } = {}): Promise<{\n paging: { total: number; limit: number; offset: number };\n results: SubscriptionPlan[];\n }> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit ?? 30,\n offset: params.offset ?? 0,\n };\n if (params.status) query[\"status\"] = params.status;\n return this.request(\"GET\", \"/preapproval_plan/search\", undefined, { query });\n }\n\n async updateSubscriptionPlan(\n id: string,\n patch: { reason?: string; status?: \"active\" | \"cancelled\"; amount?: number; backUrl?: string },\n ): Promise<SubscriptionPlan> {\n const body: Record<string, unknown> = {};\n if (patch.reason !== undefined) body.reason = patch.reason;\n if (patch.status !== undefined) body.status = patch.status;\n if (patch.backUrl !== undefined) body.back_url = patch.backUrl;\n if (patch.amount !== undefined) {\n body.auto_recurring = { transaction_amount: patch.amount };\n }\n return this.request<SubscriptionPlan>(\"PUT\", `/preapproval_plan/${id}`, body);\n }\n\n /**\n * Subscribe a customer to an existing plan. Returns a Preapproval with\n * `init_point` URL where the buyer completes the first payment.\n */\n async subscribeToPlan(params: {\n planId: string;\n payerEmail: string;\n cardTokenId?: string;\n externalReference?: string;\n }): Promise<Preapproval> {\n const body: Record<string, unknown> = {\n preapproval_plan_id: params.planId,\n payer_email: params.payerEmail,\n };\n if (params.cardTokenId) body.card_token_id = params.cardTokenId;\n if (params.externalReference) body.external_reference = params.externalReference;\n return this.request<Preapproval>(\"POST\", \"/preapproval\", body, {\n classifyContext: { payerEmail: params.payerEmail },\n });\n }\n\n /**\n * List the auto-charge attempts (authorized_payments) under a preapproval.\n * Useful for \"show me the cobros of the last 6 months for this client\".\n */\n async listSubscriptionPayments(preapprovalId: string, params: { limit?: number; offset?: number } = {}): Promise<{\n paging: { total: number; limit: number; offset: number };\n results: SubscriptionPayment[];\n }> {\n const query: Record<string, string | number | undefined> = {\n preapproval_id: preapprovalId,\n limit: params.limit ?? 30,\n offset: params.offset ?? 0,\n };\n return this.request(\n \"GET\",\n `/authorized_payments/search`,\n undefined,\n { query, classifyContext: { preapprovalId } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Stores + POS (for QR payments self-serve setup, v0.4)\n // ───────────────────────────────────────────────────────────────────────────\n\n /** Create a store for the seller. POSes (for QR) live under stores. */\n async createStore(userId: string, params: CreateStoreParams): Promise<Store> {\n const body: Record<string, unknown> = {\n name: params.name,\n external_id: params.externalId,\n };\n if (params.location) {\n body.location = {\n ...(params.location.addressLine ? { address_line: params.location.addressLine } : {}),\n ...(params.location.cityName ? { city_name: params.location.cityName } : {}),\n ...(params.location.stateName ? { state_name: params.location.stateName } : {}),\n ...(params.location.countryId ? { country_id: params.location.countryId } : {}),\n ...(params.location.latitude !== undefined ? { latitude: params.location.latitude } : {}),\n ...(params.location.longitude !== undefined ? { longitude: params.location.longitude } : {}),\n };\n }\n return this.request<Store>(\"POST\", `/users/${encodeURIComponent(userId)}/stores`, body);\n }\n\n async listStores(userId: string, params: { limit?: number; offset?: number } = {}): Promise<{\n paging: { total: number; limit: number; offset: number };\n results: Store[];\n }> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit ?? 50,\n offset: params.offset ?? 0,\n };\n return this.request(\"GET\", `/users/${encodeURIComponent(userId)}/stores/search`, undefined, { query });\n }\n\n /** Create a POS under a store. The POS's `external_id` is what `createQrPayment` uses. */\n async createPos(params: CreatePosParams): Promise<Pos> {\n const body: Record<string, unknown> = {\n name: params.name,\n external_id: params.externalId,\n store_id: params.storeId,\n category: params.category ?? 621102, // \"Other Food and Beverage Services\" — generic default\n };\n if (params.fixedAmount !== undefined) body.fixed_amount = params.fixedAmount;\n return this.request<Pos>(\"POST\", \"/pos\", body);\n }\n\n async listPos(params: { storeId?: string | number; limit?: number; offset?: number } = {}): Promise<{\n paging: { total: number; limit: number; offset: number };\n results: Pos[];\n }> {\n const query: Record<string, string | number | undefined> = {\n limit: params.limit ?? 50,\n offset: params.offset ?? 0,\n };\n if (params.storeId !== undefined) query[\"store_id\"] = String(params.storeId);\n return this.request(\"GET\", \"/pos\", undefined, { query });\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Disputes (read-only, v0.4)\n // ───────────────────────────────────────────────────────────────────────────\n\n async listPaymentDisputes(paymentId: string): Promise<Dispute[]> {\n return this.request<Dispute[]>(\"GET\", `/v1/payments/${paymentId}/disputes`, undefined, {\n classifyContext: { paymentId },\n });\n }\n\n async getDispute(paymentId: string, disputeId: string): Promise<Dispute> {\n return this.request<Dispute>(\n \"GET\",\n `/v1/payments/${paymentId}/disputes/${disputeId}`,\n undefined,\n { classifyContext: { paymentId } },\n );\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Identification Types + Issuers (lookup helpers, v0.4)\n // ───────────────────────────────────────────────────────────────────────────\n\n /** List valid identification types for the seller's site. AR returns DNI/CI/LE/LC/Otro/Pasaporte/CUIT/CUIL. */\n async listIdentificationTypes(): Promise<IdentificationType[]> {\n return this.request<IdentificationType[]>(\"GET\", \"/v1/identification_types\");\n }\n\n /** List card issuers for a payment method. Useful with `bin` for installments. */\n async listIssuers(params: { paymentMethodId: string; bin?: string }): Promise<Issuer[]> {\n const query: Record<string, string | number | undefined> = {\n payment_method_id: params.paymentMethodId,\n };\n if (params.bin) query[\"bin\"] = params.bin;\n return this.request<Issuer[]>(\"GET\", \"/v1/payment_methods/card_issuers\", undefined, { query });\n }\n\n // ───────────────────────────────────────────────────────────────────────────\n // Webhooks management (v0.4)\n // ───────────────────────────────────────────────────────────────────────────\n\n /** List configured webhook subscriptions. */\n async listWebhooks(): Promise<WebhookConfig[]> {\n return this.request<WebhookConfig[]>(\"GET\", \"/v1/webhooks\");\n }\n\n /** Create a webhook subscription for a topic. */\n async createWebhook(params: CreateWebhookParams): Promise<WebhookConfig> {\n return this.request<WebhookConfig>(\"POST\", \"/v1/webhooks\", {\n url: params.url,\n topic: params.topic,\n });\n }\n\n async updateWebhook(id: string, patch: { url?: string; topic?: string }): Promise<WebhookConfig> {\n return this.request<WebhookConfig>(\"PUT\", `/v1/webhooks/${id}`, patch);\n }\n\n async deleteWebhook(id: string): Promise<void> {\n await this.request(\"DELETE\", `/v1/webhooks/${id}`);\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // v0.5 — Order Management API\n //\n // The Order API is MP's newer abstraction for purchases, replacing some\n // Preference flows. Distinct from Preference: Order is a transactional\n // entity with explicit lifecycle (created → processed → captured/canceled),\n // supports manual capture (auth-only, capture later), and can attach\n // multiple payments to a single Order.\n //\n // Use Order when you need:\n // - Auth-only flow (capture later, e.g. ride-share, hotels)\n // - Multi-payment aggregation (one Order = N partial payments)\n // - In-store + online unified status\n //\n // Stick with Preference (Checkout Pro) when you just need a hosted pay-link.\n // ──────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a new Order. Use `capture_mode: \"manual\"` for auth-only flows\n * where you want to capture funds later (ride-share, hotels, marketplaces).\n *\n * For marketplace splits, set `marketplace`, `marketplace_fee`,\n * `collector_id` — see `MarketplaceParams`.\n */\n async createOrder(\n params: CreateOrderParams,\n options?: RequestOptions,\n ): Promise<Order> {\n const body: Record<string, unknown> = {\n type: params.type,\n };\n if (params.currency_id) body.currency_id = params.currency_id;\n if (params.external_reference) body.external_reference = params.external_reference;\n if (params.items) body.items = params.items;\n if (params.total_amount !== undefined) body.total_amount = params.total_amount;\n if (params.payer) body.payer = params.payer;\n if (params.capture_mode) body.capture_mode = params.capture_mode;\n if (params.notification_url) body.notification_url = params.notification_url;\n if (params.marketplace) body.marketplace = params.marketplace;\n if (params.marketplace_fee !== undefined) body.marketplace_fee = params.marketplace_fee;\n if (params.collector_id !== undefined) body.collector_id = params.collector_id;\n\n return this.request<Order>(\"POST\", \"/v1/orders\", body, options);\n }\n\n async getOrder(id: string): Promise<Order> {\n return this.request<Order>(\"GET\", `/v1/orders/${id}`);\n }\n\n async updateOrder(\n id: string,\n patch: Partial<CreateOrderParams>,\n ): Promise<Order> {\n return this.request<Order>(\"PUT\", `/v1/orders/${id}`, patch);\n }\n\n /**\n * Capture a previously-authorized Order (only for orders created with\n * `capture_mode: \"manual\"`). Captures up to the originally-authorized\n * amount; pass `amount` for partial capture.\n */\n async captureOrder(id: string, amount?: number): Promise<Order> {\n const body = amount !== undefined ? { amount } : {};\n return this.request<Order>(\"POST\", `/v1/orders/${id}/capture`, body);\n }\n\n /**\n * Cancel an Order. Releases any auth-holds; marks the Order as canceled.\n * For orders that have already been captured, use `createRefund` instead.\n */\n async cancelOrder(id: string): Promise<Order> {\n return this.request<Order>(\"POST\", `/v1/orders/${id}/cancel`);\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // v0.6 — Account Balance + Movements\n //\n // Inspect the seller's MP wallet — what's available to withdraw, what's\n // in retention (pending release), and the movement log.\n //\n // For per-seller marketplace setups, instantiate the client AS THE SELLER\n // (with their OAuth access_token) before calling these — `getAccountBalance`\n // returns the balance of WHOEVER's accessToken is active.\n // ──────────────────────────────────────────────────────────────────────────\n\n /**\n * Get the seller's current MP wallet balance (available + unavailable).\n * - `available_balance`: spendable / withdrawable right now.\n * - `unavailable_balance`: in retention (e.g., 14-21 days for new sellers).\n * - `total_amount` = sum of both.\n */\n async getAccountBalance(): Promise<AccountBalance> {\n return this.request<AccountBalance>(\"GET\", \"/users/me/mercadopago_account/balance\");\n }\n\n /**\n * List wallet movements (incoming payments, transfers, refunds, holdings).\n * Defaults to most-recent-first, paginated. Filter by date range with\n * `from`/`to` (ISO 8601).\n */\n async listAccountMovements(\n params: { from?: string; to?: string; limit?: number; offset?: number } = {},\n ): Promise<{ movements: AccountMovement[]; paging: { limit: number; offset: number; total: number } }> {\n const query: Record<string, string | number> = {};\n if (params.from) query.begin_date = params.from;\n if (params.to) query.end_date = params.to;\n if (params.limit !== undefined) query.limit = params.limit;\n if (params.offset !== undefined) query.offset = params.offset;\n const result = await this.request<{\n results?: AccountMovement[];\n paging?: { limit: number; offset: number; total: number };\n }>(\"GET\", \"/users/me/mercadopago_account/movements/search\", undefined, { query });\n return {\n movements: result.results ?? [],\n paging: result.paging ?? { limit: params.limit ?? 25, offset: params.offset ?? 0, total: 0 },\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────────\n // v0.6 — Settlements (release_money)\n //\n // When MP transfers funds from your MP wallet to your registered CBU.\n // ──────────────────────────────────────────────────────────────────────────\n\n /**\n * List settlements (transfers from MP wallet to your bank account).\n * Useful for monthly conciliation reports.\n */\n async listSettlements(\n params: { from?: string; to?: string; status?: string; limit?: number; offset?: number } = {},\n ): Promise<{ settlements: Settlement[]; paging: { limit: number; offset: number; total: number } }> {\n const query: Record<string, string | number> = {};\n if (params.from) query.begin_date = params.from;\n if (params.to) query.end_date = params.to;\n if (params.status) query.status = params.status;\n if (params.limit !== undefined) query.limit = params.limit;\n if (params.offset !== undefined) query.offset = params.offset;\n const result = await this.request<{\n results?: Settlement[];\n paging?: { limit: number; offset: number; total: number };\n }>(\"GET\", \"/v1/account/release_money/search\", undefined, { query });\n return {\n settlements: result.results ?? [],\n paging: result.paging ?? { limit: params.limit ?? 25, offset: params.offset ?? 0, total: 0 },\n };\n }\n\n /**\n * Get a single settlement by id. Returns the full Settlement object\n * including bank_account info (CBU, bank name).\n */\n async getSettlement(id: string): Promise<Settlement> {\n return this.request<Settlement>(\"GET\", `/v1/account/release_money/${id}`);\n }\n}\n\nexport { MercadoPagoError };\n","import { z } from \"zod\";\n\n/**\n * Site IDs supported by Mercado Pago. The lib targets MLA (Argentina) primarily;\n * other LATAM sites may work for the read paths but the full Subscriptions flow\n * is only verified against MLA.\n */\nexport const SiteIdSchema = z.enum([\"MLA\", \"MLB\", \"MLM\", \"MCO\", \"MLC\", \"MLU\"]);\nexport type SiteId = z.infer<typeof SiteIdSchema>;\n\n/**\n * Currency identifiers MP exposes. ARS is the supported case for v0.1.\n */\nexport const CurrencyIdSchema = z.enum([\"ARS\", \"USD\", \"BRL\", \"MXN\"]);\nexport type CurrencyId = z.infer<typeof CurrencyIdSchema>;\n\n/**\n * Recurrence frequency unit for a subscription's auto_recurring config.\n */\nexport const FrequencyTypeSchema = z.enum([\"months\", \"days\"]);\nexport type FrequencyType = z.infer<typeof FrequencyTypeSchema>;\n\n/**\n * Lifecycle states a Mercado Pago preapproval can be in. The string is the\n * canonical MP value; we widen to `string` for forward compatibility because\n * MP has historically introduced new states without notice.\n */\nexport const PreapprovalStatusSchema = z.union([\n z.literal(\"pending\"),\n z.literal(\"authorized\"),\n z.literal(\"paused\"),\n z.literal(\"cancelled\"),\n z.string(),\n]);\nexport type PreapprovalStatus = z.infer<typeof PreapprovalStatusSchema>;\n\nexport const AutoRecurringSchema = z.object({\n frequency: z.number().int().positive(),\n frequency_type: FrequencyTypeSchema,\n transaction_amount: z.number().positive(),\n currency_id: CurrencyIdSchema,\n start_date: z.string().optional(),\n end_date: z.string().optional(),\n});\nexport type AutoRecurring = z.infer<typeof AutoRecurringSchema>;\n\nexport const PreapprovalSchema = z.object({\n id: z.string(),\n status: PreapprovalStatusSchema,\n payer_email: z.string(),\n init_point: z.string().url(),\n external_reference: z.string().optional(),\n date_created: z.string(),\n last_modified: z.string(),\n next_payment_date: z.string().optional(),\n payer_id: z.union([z.string(), z.number()]).optional(),\n auto_recurring: AutoRecurringSchema,\n});\nexport type Preapproval = z.infer<typeof PreapprovalSchema>;\n\n/**\n * Input for creating a preapproval (subscription). Internal field names match\n * MP API semantics; the public client method maps from camelCase Naza-friendly\n * params to the snake_case payload MP expects.\n */\nexport interface CreatePreapprovalParams {\n /** Short customer-facing description shown at checkout. */\n reason: string;\n /** Email of the buyer. Cannot equal the seller account's email (MP rejects). */\n payerEmail: string;\n /** Recurring amount per cycle. */\n amount: number;\n /** ARS for Argentina. Other currencies depend on the seller account's site. */\n currency: CurrencyId;\n /** Recurrence frequency (e.g., 1 + months = monthly). */\n frequency: number;\n frequencyType: FrequencyType;\n /** HTTPS URL where MP redirects the buyer after first payment. localhost rejected. */\n backUrl: string;\n /** Optional client-side identifier for the subscription. */\n externalReference?: string;\n}\n\n/**\n * The shape of an MP webhook notification body for `topic=preapproval`. MP's\n * webhook payload varies by event type; this is the union of fields seen in\n * production.\n */\nexport const WebhookBodySchema = z\n .object({\n type: z.string().optional(),\n topic: z.string().optional(),\n action: z.string().optional(),\n data: z.object({ id: z.union([z.string(), z.number()]) }).optional(),\n resource: z.string().optional(),\n user_id: z.union([z.string(), z.number()]).optional(),\n api_version: z.string().optional(),\n date_created: z.string().optional(),\n id: z.union([z.string(), z.number()]).optional(),\n live_mode: z.boolean().optional(),\n })\n .passthrough();\nexport type WebhookBody = z.infer<typeof WebhookBodySchema>;\n\n/**\n * Normalized webhook event after parsing. The library extracts topic + dataId\n * from either query params or body, since MP sends them in either location\n * depending on integration version.\n */\nexport interface ParsedWebhookEvent {\n /** Topic of the event, e.g., \"preapproval\", \"payment\", \"subscription_authorized_payment\". */\n topic: string;\n /** ID of the affected resource. */\n dataId: string;\n /** Action descriptor when present (e.g., \"updated\", \"created\"). */\n action: string | null;\n /** Raw body MP sent, for caller inspection / debugging. */\n raw: WebhookBody;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Payments (v0.2)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Top-level lifecycle status of a payment. MP-canonical values; widened to\n * string for forward compatibility.\n */\nexport const PaymentStatusSchema = z.union([\n z.literal(\"pending\"),\n z.literal(\"approved\"),\n z.literal(\"authorized\"),\n z.literal(\"in_process\"),\n z.literal(\"in_mediation\"),\n z.literal(\"rejected\"),\n z.literal(\"cancelled\"),\n z.literal(\"refunded\"),\n z.literal(\"charged_back\"),\n z.string(),\n]);\nexport type PaymentStatus = z.infer<typeof PaymentStatusSchema>;\n\n/** Status detail — finer granularity inside a status (e.g., why rejected). */\nexport type PaymentStatusDetail = string;\n\n/**\n * The full Payment object MP returns. Many fields are optional because they\n * vary by payment method, status, and integration mode (Checkout Pro vs API).\n */\nexport const PaymentSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n status: PaymentStatusSchema,\n status_detail: z.string().nullable().optional(),\n date_created: z.string().nullable().optional(),\n date_approved: z.string().nullable().optional(),\n date_last_updated: z.string().nullable().optional(),\n transaction_amount: z.number(),\n currency_id: z.string(),\n installments: z.number().int().nullable().optional(),\n payment_method_id: z.string().nullable().optional(),\n payment_type_id: z.string().nullable().optional(),\n external_reference: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n payer: z\n .object({\n id: z.union([z.string(), z.number()]).optional(),\n email: z.string().nullable().optional(),\n identification: z\n .object({\n type: z.string().nullable().optional(),\n number: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n })\n .passthrough()\n .optional(),\n transaction_details: z\n .object({\n net_received_amount: z.number().nullable().optional(),\n total_paid_amount: z.number().nullable().optional(),\n installment_amount: z.number().nullable().optional(),\n })\n .passthrough()\n .optional(),\n}).passthrough();\nexport type Payment = z.infer<typeof PaymentSchema>;\n\n/** Params for creating a payment (Checkout API / transparent flow). */\nexport interface CreatePaymentParams {\n /** Amount in account currency. ARS for Argentina. */\n transactionAmount: number;\n /** Number of installments. Use 1 for no cuotas; AR cards typically allow up to 12. */\n installments?: number;\n /** MP payment_method_id — `visa`, `master`, `naranja`, `account_money`, etc. */\n paymentMethodId: string;\n /** Payer email — REQUIRED. Cannot equal seller email. */\n payerEmail: string;\n /** Card token from MP frontend SDK (Cardform). Required for credit/debit; omit for `account_money` etc. */\n token?: string;\n /** Description shown in payer's MP statement. */\n description?: string;\n /** Your-system identifier for correlation. */\n externalReference?: string;\n /** Optional payer identification (DNI/CUIT) — required for some payment types. */\n identification?: { type: \"DNI\" | \"CUIT\" | \"CUIL\"; number: string };\n /** Webhook override URL. Falls back to dashboard config if omitted. */\n notificationUrl?: string;\n /** AFIP/ARCA discount/fee/tax additions. Used to discriminate IVA, marketplace fees, etc. */\n additionalInfo?: {\n items?: Array<{\n id?: string;\n title: string;\n quantity: number;\n unit_price: number;\n description?: string;\n }>;\n };\n /** Statement descriptor — what shows on the buyer's card statement. Max 13 chars. */\n statementDescriptor?: string;\n /** When true, capture is deferred (only for credit cards) — useful for hold flows. */\n capture?: boolean;\n /** Idempotency key — pass the same value on retries to dedupe. Required for non-GET. */\n idempotencyKey?: string;\n}\n\nexport interface SearchPaymentsParams {\n /** Filter by external_reference (your-system id). */\n externalReference?: string;\n /** Filter by payment status. */\n status?: PaymentStatus;\n /** Filter by payer email. */\n payerEmail?: string;\n /** Date range for date_created (ISO 8601). */\n beginDate?: string;\n endDate?: string;\n /** Result page (default 0). */\n offset?: number;\n /** Page size (default 30, max 100). */\n limit?: number;\n /** Sort: e.g. \"date_created\" desc. */\n sort?: string;\n criteria?: \"asc\" | \"desc\";\n}\n\nexport const PaymentsSearchResultSchema = z.object({\n paging: z.object({\n total: z.number(),\n limit: z.number(),\n offset: z.number(),\n }),\n results: z.array(PaymentSchema),\n});\nexport type PaymentsSearchResult = z.infer<typeof PaymentsSearchResultSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Refunds\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const RefundSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n payment_id: z.union([z.string(), z.number()]).transform(String),\n amount: z.number(),\n source: z\n .object({\n id: z.string().nullable().optional(),\n name: z.string().nullable().optional(),\n type: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n date_created: z.string().nullable().optional(),\n status: z.string().nullable().optional(),\n}).passthrough();\nexport type Refund = z.infer<typeof RefundSchema>;\n\nexport interface CreateRefundParams {\n paymentId: string;\n /** Partial refund amount. Omit for full refund. */\n amount?: number;\n /** Idempotency key — required for retry-safety. */\n idempotencyKey?: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Checkout Pro (Preferences)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const PreferenceItemSchema = z.object({\n id: z.string().optional(),\n title: z.string(),\n description: z.string().optional(),\n picture_url: z.string().url().optional(),\n category_id: z.string().optional(),\n quantity: z.number().int().positive(),\n unit_price: z.number().positive(),\n currency_id: CurrencyIdSchema.optional(),\n});\nexport type PreferenceItem = z.infer<typeof PreferenceItemSchema>;\n\nexport const PreferenceSchema = z.object({\n id: z.string(),\n init_point: z.string().url().optional(),\n sandbox_init_point: z.string().url().optional(),\n client_id: z.union([z.string(), z.number()]).optional(),\n collector_id: z.union([z.string(), z.number()]).optional(),\n items: z.array(PreferenceItemSchema).optional(),\n external_reference: z.string().nullable().optional(),\n date_created: z.string().nullable().optional(),\n expires: z.boolean().optional(),\n expiration_date_from: z.string().nullable().optional(),\n expiration_date_to: z.string().nullable().optional(),\n}).passthrough();\nexport type Preference = z.infer<typeof PreferenceSchema>;\n\nexport interface CreatePreferenceParams {\n items: Array<{\n title: string;\n quantity: number;\n unit_price: number;\n currency_id?: CurrencyId;\n description?: string;\n picture_url?: string;\n }>;\n payer?: {\n name?: string;\n surname?: string;\n email?: string;\n phone?: { area_code?: string; number?: string };\n identification?: { type: string; number: string };\n address?: { street_name?: string; street_number?: number; zip_code?: string };\n };\n /** Where to send the buyer after success/failure/pending. */\n backUrls?: { success?: string; failure?: string; pending?: string };\n /** \"approved\" → auto-redirect on success; \"all\" → always; \"\" → never. */\n autoReturn?: \"approved\" | \"all\";\n /** Webhook URL. */\n notificationUrl?: string;\n /** Your-system id for correlation. */\n externalReference?: string;\n /** Max installments offered. Defaults to MP account config. */\n paymentMethods?: {\n excluded_payment_types?: Array<{ id: string }>;\n excluded_payment_methods?: Array<{ id: string }>;\n installments?: number;\n default_installments?: number;\n };\n /** Statement descriptor — shows on buyer's card statement. */\n statementDescriptor?: string;\n /** Expiration window for the link itself. */\n expires?: boolean;\n expirationDateFrom?: string;\n expirationDateTo?: string;\n /**\n * Marketplace split — if set, funds route to `collector_id` (the seller)\n * and `marketplaceFee` (in ARS) is credited to the marketplace's MP\n * account. v0.5+. See `MarketplaceParams` for details.\n */\n marketplace?: string;\n marketplaceFee?: number;\n /** Seller's MP user_id. Funds route here when set. */\n collectorId?: string | number;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Customers + Saved Cards\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const CustomerSchema = z.object({\n id: z.string(),\n email: z.string(),\n first_name: z.string().nullable().optional(),\n last_name: z.string().nullable().optional(),\n phone: z\n .object({ area_code: z.string().nullable().optional(), number: z.string().nullable().optional() })\n .nullable()\n .optional(),\n identification: z\n .object({ type: z.string().nullable().optional(), number: z.string().nullable().optional() })\n .nullable()\n .optional(),\n date_created: z.string().nullable().optional(),\n date_last_updated: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n}).passthrough();\nexport type Customer = z.infer<typeof CustomerSchema>;\n\nexport const CustomerCardSchema = z.object({\n id: z.string(),\n customer_id: z.string(),\n expiration_month: z.number().int().nullable().optional(),\n expiration_year: z.number().int().nullable().optional(),\n first_six_digits: z.string().nullable().optional(),\n last_four_digits: z.string().nullable().optional(),\n payment_method: z\n .object({\n id: z.string().nullable().optional(),\n name: z.string().nullable().optional(),\n payment_type_id: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n date_created: z.string().nullable().optional(),\n}).passthrough();\nexport type CustomerCard = z.infer<typeof CustomerCardSchema>;\n\nexport interface CreateCustomerParams {\n email: string;\n firstName?: string;\n lastName?: string;\n phone?: { areaCode?: string; number?: string };\n identification?: { type: \"DNI\" | \"CUIT\" | \"CUIL\"; number: string };\n description?: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Payment Methods + Installments\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const PaymentMethodSchema = z.object({\n id: z.string(),\n name: z.string(),\n payment_type_id: z.string(),\n status: z.string(),\n thumbnail: z.string().nullable().optional(),\n secure_thumbnail: z.string().nullable().optional(),\n min_allowed_amount: z.number().nullable().optional(),\n max_allowed_amount: z.number().nullable().optional(),\n}).passthrough();\nexport type PaymentMethod = z.infer<typeof PaymentMethodSchema>;\n\nexport const InstallmentOfferSchema = z.object({\n payment_method_id: z.string(),\n payment_type_id: z.string(),\n issuer: z\n .object({\n id: z.union([z.string(), z.number()]).optional(),\n name: z.string().nullable().optional(),\n })\n .nullable()\n .optional(),\n payer_costs: z.array(\n z.object({\n installments: z.number().int(),\n installment_rate: z.number(),\n discount_rate: z.number().nullable().optional(),\n installment_amount: z.number(),\n total_amount: z.number(),\n recommended_message: z.string().nullable().optional(),\n }).passthrough(),\n ),\n}).passthrough();\nexport type InstallmentOffer = z.infer<typeof InstallmentOfferSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Account\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ─────────────────────────────────────────────────────────────────────────────\n// QR (in-store dynamic)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const QrOrderSchema = z.object({\n in_store_order_id: z.string(),\n qr_data: z.string(),\n}).passthrough();\nexport type QrOrder = z.infer<typeof QrOrderSchema>;\n\nexport interface CreateQrPaymentParams {\n /** Pre-configured POS external_id from MP dashboard. Required. */\n externalPosId: string;\n /** Total amount in ARS. */\n totalAmount: number;\n /** Display title shown to the buyer when scanning. */\n title: string;\n description?: string;\n /** Webhook URL — MP fires `point_integration_wh` then `payment` topic. */\n notificationUrl?: string;\n /** Your-system identifier for correlation. */\n externalReference?: string;\n /** ISO 8601 expiration (default 10 min from now). */\n expirationDate?: string;\n /** Itemized line items (optional but improves analytics). */\n items?: Array<{\n title: string;\n quantity: number;\n unit_price: number;\n unit_measure?: string;\n total_amount?: number;\n }>;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Card tokens (for charge_saved_card)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const CardTokenSchema = z.object({\n id: z.string(),\n status: z.string().optional(),\n date_due: z.string().optional(),\n card_id: z.string().optional(),\n cardholder: z.unknown().optional(),\n}).passthrough();\nexport type CardToken = z.infer<typeof CardTokenSchema>;\n\nexport interface CreateCardTokenParams {\n /** Saved card id (from list_customer_cards). */\n cardId: string;\n /** Customer that owns the card. */\n customerId: string;\n /** CVV — required for AR; MP doesn't store CVV. */\n securityCode: string;\n}\n\nexport const AccountInfoSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n email: z.string().nullable().optional(),\n nickname: z.string().nullable().optional(),\n country_id: z.string().nullable().optional(),\n site_id: z.string().nullable().optional(),\n user_type: z.string().nullable().optional(),\n status: z\n .object({ user_type: z.string().nullable().optional() })\n .passthrough()\n .nullable()\n .optional(),\n}).passthrough();\nexport type AccountInfo = z.infer<typeof AccountInfoSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Subscription Plans (preapproval_plan — reusable plan definitions)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * A reusable subscription plan. Different from a per-customer subscription:\n * a plan defines the price + frequency once, then customers subscribe to it\n * via `subscribe_to_plan` (which creates a preapproval pointing at the plan).\n *\n * Use plans for SaaS-style billing where you have a fixed set of tiers\n * (Básico/Pro/Enterprise) instead of negotiating amounts per customer.\n */\nexport const SubscriptionPlanSchema = z.object({\n id: z.string(),\n status: z.string(),\n reason: z.string(),\n back_url: z.string().url().optional(),\n external_reference: z.string().nullable().optional(),\n date_created: z.string(),\n last_modified: z.string(),\n auto_recurring: AutoRecurringSchema,\n}).passthrough();\nexport type SubscriptionPlan = z.infer<typeof SubscriptionPlanSchema>;\n\nexport interface CreateSubscriptionPlanParams {\n /** Customer-facing plan name shown at checkout. */\n reason: string;\n /** Where MP redirects buyer after first payment. HTTPS only. */\n backUrl: string;\n /** Recurrence (e.g., 1 + months = monthly). */\n frequency: number;\n frequencyType: FrequencyType;\n /** Amount per cycle. */\n amount: number;\n /** ARS for AR. */\n currency: CurrencyId;\n /** Optional plan-level identifier from your system. */\n externalReference?: string;\n /** Free trial days before first charge. */\n freeTrialFrequency?: number;\n freeTrialFrequencyType?: FrequencyType;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Stores + POS (for QR payments setup)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const StoreSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n name: z.string().optional(),\n external_id: z.string().optional(),\n date_creation: z.string().optional(),\n location: z\n .object({\n address_line: z.string().optional(),\n city_name: z.string().optional(),\n state_name: z.string().optional(),\n country_id: z.string().optional(),\n latitude: z.number().optional(),\n longitude: z.number().optional(),\n })\n .passthrough()\n .optional(),\n}).passthrough();\nexport type Store = z.infer<typeof StoreSchema>;\n\nexport interface CreateStoreParams {\n /** Display name for the store. */\n name: string;\n /** Caller-defined identifier (must be unique within the seller's stores). */\n externalId: string;\n /** Optional physical location. */\n location?: {\n addressLine?: string;\n cityName?: string;\n stateName?: string;\n countryId?: string;\n latitude?: number;\n longitude?: number;\n };\n}\n\nexport const PosSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n name: z.string().optional(),\n external_id: z.string().optional(),\n store_id: z.union([z.string(), z.number()]).optional(),\n category: z.number().int().optional(),\n fixed_amount: z.boolean().optional(),\n qr: z\n .object({\n template_image: z.string().optional(),\n image: z.string().optional(),\n })\n .passthrough()\n .optional(),\n date_creation: z.string().optional(),\n}).passthrough();\nexport type Pos = z.infer<typeof PosSchema>;\n\nexport interface CreatePosParams {\n /** Display name. */\n name: string;\n /** Caller-defined POS id (used in QR endpoints; unique within store). */\n externalId: string;\n /** Parent store id (number from createStore). */\n storeId: string | number;\n /** MP category code (default 621102 = Other Food and Beverage Services). */\n category?: number;\n /** If true, the QR has a fixed amount; if false, dynamic per-order. */\n fixedAmount?: boolean;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Disputes / Chargebacks (read-only)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const DisputeSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n status: z.string(),\n resource: z.string().optional(),\n resource_id: z.union([z.string(), z.number()]).optional(),\n amount: z.number().optional(),\n date_created: z.string().optional(),\n reason: z.string().optional(),\n resolution: z\n .object({\n reason: z.string().optional(),\n result: z.string().optional(),\n date: z.string().optional(),\n })\n .passthrough()\n .optional(),\n /** Documents the buyer / seller submitted as evidence. */\n documents: z.array(z.unknown()).optional(),\n /** Buyer's stated complaint. */\n reason_description: z.string().optional(),\n}).passthrough();\nexport type Dispute = z.infer<typeof DisputeSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Subscription Payment History (authorized_payments under a preapproval)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const SubscriptionPaymentSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n preapproval_id: z.string().optional(),\n status: z.string(),\n payment_id: z.union([z.string(), z.number()]).nullable().optional(),\n transaction_amount: z.number().optional(),\n currency_id: z.string().optional(),\n date_created: z.string().optional(),\n debit_date: z.string().optional(),\n next_retry_date: z.string().nullable().optional(),\n retry_attempt: z.number().optional(),\n reason: z.string().optional(),\n}).passthrough();\nexport type SubscriptionPayment = z.infer<typeof SubscriptionPaymentSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Identification Types + Issuers (lookup helpers)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const IdentificationTypeSchema = z.object({\n id: z.string(),\n name: z.string(),\n type: z.string(),\n min_length: z.number().optional(),\n max_length: z.number().optional(),\n}).passthrough();\nexport type IdentificationType = z.infer<typeof IdentificationTypeSchema>;\n\nexport const IssuerSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n name: z.string(),\n secure_thumbnail: z.string().nullable().optional(),\n thumbnail: z.string().nullable().optional(),\n processing_mode: z.string().optional(),\n status: z.string().optional(),\n}).passthrough();\nexport type Issuer = z.infer<typeof IssuerSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Webhooks (configure subscriptions to topics)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Topics MP can fire webhooks for. Add more as MP exposes them. */\nexport const WebhookTopicSchema = z.enum([\n \"payment\",\n \"subscription_authorized_payment\",\n \"subscription_preapproval\",\n \"merchant_order\",\n \"point_integration_wh\",\n \"stop_delivery_op_wh\",\n]);\nexport type WebhookTopic = z.infer<typeof WebhookTopicSchema>;\n\nexport const WebhookConfigSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n url: z.string().url().optional(),\n status: z.string().optional(),\n topic: z.string().optional(),\n date_created: z.string().optional(),\n date_modified: z.string().optional(),\n}).passthrough();\nexport type WebhookConfig = z.infer<typeof WebhookConfigSchema>;\n\nexport interface CreateWebhookParams {\n url: string;\n /** Topic to subscribe to. */\n topic: WebhookTopic | string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// v0.5 — OAuth Marketplace flow (link third-party MP accounts)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Token response from MP's OAuth `/oauth/token` endpoint. The `access_token`\n * is what you use to make API calls AS the linked seller; the `refresh_token`\n * is what you use to refresh the access_token before expiration (~6 hours).\n *\n * **Persist the refresh_token**: it does NOT expire and is the only way to\n * keep the integration alive long-term.\n *\n * **Always store `user_id`** alongside the tokens — it identifies WHICH\n * seller these tokens belong to (you'll have many in a marketplace).\n */\nexport const OAuthTokenSchema = z.object({\n access_token: z.string(),\n token_type: z.string().optional(),\n /** Seconds until access_token expires. Typically 21600 (6h). */\n expires_in: z.number().optional(),\n scope: z.string().optional(),\n /** The MP user_id of the seller who authorized your app. */\n user_id: z.union([z.string(), z.number()]).transform(String),\n refresh_token: z.string().optional(),\n public_key: z.string().optional(),\n live_mode: z.boolean().optional(),\n}).passthrough();\nexport type OAuthToken = z.infer<typeof OAuthTokenSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// v0.5 — Order Management API (the new API replacing some Preference flows)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Status of an Order. Distinct from Payment status — an Order can have\n * multiple payments and the Order status reflects the aggregate state.\n */\nexport const OrderStatusSchema = z.union([\n z.literal(\"created\"),\n z.literal(\"processed\"),\n z.literal(\"action_required\"),\n z.literal(\"canceled\"),\n z.literal(\"expired\"),\n z.literal(\"refunded\"),\n z.string(),\n]);\nexport type OrderStatus = z.infer<typeof OrderStatusSchema>;\n\nexport const OrderItemSchema = z.object({\n title: z.string(),\n unit_price: z.number(),\n quantity: z.number(),\n description: z.string().optional(),\n id: z.string().optional(),\n category_id: z.string().optional(),\n picture_url: z.string().optional(),\n}).passthrough();\nexport type OrderItem = z.infer<typeof OrderItemSchema>;\n\nexport const OrderSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n type: z.string().optional(),\n status: OrderStatusSchema.optional(),\n status_detail: z.string().optional(),\n external_reference: z.string().optional(),\n total_amount: z.union([z.number(), z.string()]).optional(),\n /** Currency for this Order (e.g. \"ARS\"). */\n currency_id: z.string().optional(),\n date_created: z.string().optional(),\n date_last_updated: z.string().optional(),\n items: z.array(OrderItemSchema).optional(),\n /** Underlying transactions (payments) attached to this Order. */\n transactions: z\n .object({\n payments: z.array(z.unknown()).optional(),\n refunds: z.array(z.unknown()).optional(),\n })\n .passthrough()\n .optional(),\n /** Capture mode: \"automatic\" (charges immediately) or \"manual\" (auth-only). */\n capture_mode: z.string().optional(),\n}).passthrough();\nexport type Order = z.infer<typeof OrderSchema>;\n\nexport interface CreateOrderParams {\n /**\n * Order type. Common values:\n * - \"online\" — checkout-style (the most common)\n * - \"in_store\" — POS QR / in-person\n */\n type: \"online\" | \"in_store\" | string;\n /** Currency (e.g. \"ARS\"). */\n currency_id?: string;\n /** External reference for reconciliation (your internal id). */\n external_reference?: string;\n /** Items being ordered. */\n items?: OrderItem[];\n /** Total amount if you'd rather not itemize. */\n total_amount?: number;\n /** Customer info (payer). */\n payer?: {\n email?: string;\n first_name?: string;\n last_name?: string;\n identification?: { type?: string; number?: string };\n };\n /**\n * Capture mode:\n * - \"automatic\" (default) — charge immediately when paid.\n * - \"manual\" — authorize only, capture later via captureOrder().\n */\n capture_mode?: \"automatic\" | \"manual\";\n /**\n * Notification URL — MP fires webhooks for order lifecycle events here.\n */\n notification_url?: string;\n /**\n * Marketplace fee + collector — required for marketplace integrations\n * where YOU collect on behalf of a third-party seller (you take a fee,\n * the rest goes to the seller).\n */\n marketplace?: string;\n marketplace_fee?: number;\n collector_id?: string | number;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// v0.5 — Marketplace split payments (also usable on regular Preference)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Marketplace fee + collector params, applied to a Preference or Order.\n *\n * **How it works**: when you create a Preference or Order with\n * `collector_id` set to a SELLER's MP user_id (not yours), and you have a\n * valid OAuth access_token for that seller, MP routes the funds to the\n * seller's MP account, and credits `marketplace_fee` (in ARS, not %) to\n * YOUR marketplace account.\n *\n * Used for two-sided platforms (Rappi, MercadoLibre, Tienda Nube, etc.)\n * where your platform takes a fee and the seller keeps the rest.\n */\nexport interface MarketplaceParams {\n /**\n * Marketplace identifier — your application's marketplace name (you set\n * this when registering your app in MP's dev panel).\n */\n marketplace?: string;\n /**\n * Fee in ARS (NOT a percentage) that goes to your marketplace account.\n * Compute it from your own commission rate before passing.\n */\n marketplace_fee?: number;\n /**\n * The SELLER's MP user_id. The funds go to this account; the\n * `marketplace_fee` is split off and goes to YOUR account.\n * Get this from `OAuthToken.user_id` after the seller authorizes your app.\n */\n collector_id?: string | number;\n /**\n * Optional: split among multiple sellers. If set, `collector_id` /\n * `marketplace_fee` are ignored.\n */\n application_fee?: number;\n}\n\n\n// ─────────────────────────────────────────────────────────────────────────────\n// v0.6 — Account Balance + Movements\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Account balance snapshot. Sum of `available + unavailable` is the seller's\n * total Mercado Pago balance.\n *\n * - `available` — funds the seller can withdraw or pay with right now.\n * - `unavailable` — funds in retention (typically 14-21 days for new sellers\n * or for risk-flagged transactions). Becomes `available` automatically.\n */\nexport const AccountBalanceSchema = z.object({\n user_id: z.union([z.string(), z.number()]).transform(String).optional(),\n available_balance: z.number(),\n unavailable_balance: z.number(),\n total_amount: z.number(),\n currency_id: z.string().default(\"ARS\"),\n}).passthrough();\nexport type AccountBalance = z.infer<typeof AccountBalanceSchema>;\n\n/**\n * Account movement (a single line in the seller's MP \"movements\" log).\n * Includes incoming payments, outgoing transfers, refunds, holdings, etc.\n */\nexport const AccountMovementSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n type: z.string(),\n description: z.string().optional(),\n amount: z.number(),\n currency_id: z.string().optional(),\n status: z.string().optional(),\n date_created: z.string().optional(),\n date_released: z.string().optional(),\n reference_id: z.union([z.string(), z.number()]).optional(),\n payment_id: z.union([z.string(), z.number()]).optional(),\n}).passthrough();\nexport type AccountMovement = z.infer<typeof AccountMovementSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// v0.6 — Settlements (release_money)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * A scheduled or completed transfer from the MP account to the seller's\n * registered bank account (CBU). Settlements are the core of \"when do I\n * actually get paid\".\n */\nexport const SettlementSchema = z.object({\n id: z.union([z.string(), z.number()]).transform(String),\n status: z.string().optional(),\n amount: z.number().optional(),\n currency_id: z.string().optional(),\n date_created: z.string().optional(),\n date_scheduled: z.string().optional(),\n date_processed: z.string().optional(),\n bank_account: z\n .object({\n cbu: z.string().optional(),\n bank_name: z.string().optional(),\n })\n .passthrough()\n .optional(),\n}).passthrough();\nexport type Settlement = z.infer<typeof SettlementSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// v0.6 — 3DS (Strong Customer Authentication) info derived from a Payment\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type ThreeDSStatus =\n | \"not_required\" // No 3DS challenge issued (low-risk transaction).\n | \"frictionless\" // Issuer approved without challenge.\n | \"challenge_required\" // Buyer must complete the issuer's challenge.\n | \"rejected\" // Failed authentication.\n | \"unknown\"; // Couldn't determine — surface to ops.\n\nexport interface ThreeDSInfo {\n /** High-level status — the field most agents care about. */\n status: ThreeDSStatus;\n /** Raw `three_d_secure_mode` field from the payment, if present. */\n mode: string | null;\n /**\n * URL the buyer must visit to complete the 3DS challenge, if one was\n * triggered. `null` for frictionless/not_required.\n */\n challengeUrl: string | null;\n /** Human-readable explanation suitable for surfacing to the user. */\n description: string;\n}\n\n","/**\n * Mercado Pago OAuth flow — for marketplace integrations where YOUR app\n * cobra a través de cuentas MP de terceros (sellers in your platform).\n *\n * # The flow (3 legs)\n *\n * 1. **Authorize URL** — Redirect the seller to `buildAuthorizeUrl()`. They\n * log in to MP and approve your app. MP redirects them back to your\n * `redirect_uri` with `?code=AUTH_CODE&state=YOUR_STATE`.\n * 2. **Code exchange** — Your server POSTs to `/oauth/token` via\n * `exchangeCodeForToken()` with the code. Returns `{ access_token,\n * refresh_token, user_id, expires_in (~6h), ... }`. **Persist all of it.**\n * 3. **Token refresh** — Before `expires_in` runs out (or on 401), call\n * `refreshAccessToken()` with the saved `refresh_token` to get a fresh\n * access_token. The refresh_token does NOT expire and is the only way\n * to keep the integration alive long-term.\n *\n * # Per-seller MercadoPagoClient\n *\n * Once you have an OAuth `access_token` for a seller, instantiate a\n * `MercadoPagoClient({ accessToken })` AS THAT SELLER. All API calls then\n * happen on the seller's behalf — payments, refunds, subscriptions,\n * everything.\n *\n * # Marketplace fee\n *\n * To take a fee while collecting on the seller's behalf, pass\n * `marketplace`, `marketplaceFee`, `collectorId` to `createPreference()`\n * or `createOrder()`. See `MarketplaceParams` for details.\n *\n * # Setup\n *\n * 1. Register your application in MP's dev panel\n * (https://www.mercadopago.com.ar/developers/panel/applications) to get\n * `clientId` (= application id) and `clientSecret`.\n * 2. Configure the `redirect_uri` whitelist in the same panel — MP rejects\n * redirects to URIs not whitelisted.\n * 3. Pick a `marketplace` identifier (used in fee routing).\n */\n\nimport { OAuthTokenSchema, type OAuthToken } from \"./types\";\n\nconst DEFAULT_AUTHORIZE_URL = \"https://auth.mercadopago.com.ar/authorization\";\nconst DEFAULT_TOKEN_URL = \"https://api.mercadopago.com/oauth/token\";\n\n/**\n * Build the URL the seller visits to authorize your app. Redirect them here.\n * On approval, MP redirects them to `redirect_uri?code=...&state=...`.\n *\n * @param state Optional opaque value echoed back in the redirect — use this\n * to bind the OAuth round-trip to a specific user/session and\n * prevent CSRF. Always set it in production.\n */\nexport function buildAuthorizeUrl(params: {\n /** Your app's client ID (= application id from MP dev panel). */\n clientId: string;\n /** Where MP redirects after approval. Must be whitelisted in MP panel. */\n redirectUri: string;\n /** CSRF / session-binding token, echoed back. Strongly recommended. */\n state?: string;\n /**\n * Override the authorize endpoint base. Default points to AR; for other\n * sites use `https://auth.mercadopago.com.{br,mx,co,cl,uy}/authorization`.\n */\n authorizeUrl?: string;\n}): string {\n const url = new URL(params.authorizeUrl ?? DEFAULT_AUTHORIZE_URL);\n url.searchParams.set(\"client_id\", params.clientId);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"platform_id\", \"mp\");\n url.searchParams.set(\"redirect_uri\", params.redirectUri);\n if (params.state) url.searchParams.set(\"state\", params.state);\n return url.toString();\n}\n\n/**\n * Exchange the authorization code (from the OAuth redirect) for an\n * `OAuthToken`. POSTs to `/oauth/token` with `grant_type=authorization_code`.\n *\n * **Persist the entire response** — the `refresh_token` is the only way to\n * keep the integration alive long-term, and `user_id` identifies the seller.\n */\nexport async function exchangeCodeForToken(params: {\n clientId: string;\n clientSecret: string;\n /** The `code` query param from the OAuth redirect. */\n code: string;\n /** Must match the `redirect_uri` used in `buildAuthorizeUrl`. */\n redirectUri: string;\n /** Override the token endpoint (testing). */\n tokenUrl?: string;\n /** Custom fetch (testing). */\n fetchImpl?: typeof fetch;\n}): Promise<OAuthToken> {\n const url = params.tokenUrl ?? DEFAULT_TOKEN_URL;\n const fetchFn = params.fetchImpl ?? globalThis.fetch;\n const res = await fetchFn(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n },\n body: new URLSearchParams({\n grant_type: \"authorization_code\",\n client_id: params.clientId,\n client_secret: params.clientSecret,\n code: params.code,\n redirect_uri: params.redirectUri,\n }).toString(),\n });\n return parseTokenResponse(res);\n}\n\n/**\n * Refresh an access_token using the saved refresh_token. Call this\n * proactively before `expires_in` runs out, or reactively on a 401 from a\n * per-seller MercadoPagoClient.\n *\n * The new response includes a fresh `refresh_token` — **always persist it,\n * replacing the old one**, even though MP often returns the same value.\n */\nexport async function refreshAccessToken(params: {\n clientId: string;\n clientSecret: string;\n refreshToken: string;\n tokenUrl?: string;\n fetchImpl?: typeof fetch;\n}): Promise<OAuthToken> {\n const url = params.tokenUrl ?? DEFAULT_TOKEN_URL;\n const fetchFn = params.fetchImpl ?? globalThis.fetch;\n const res = await fetchFn(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: params.clientId,\n client_secret: params.clientSecret,\n refresh_token: params.refreshToken,\n }).toString(),\n });\n return parseTokenResponse(res);\n}\n\nasync function parseTokenResponse(res: Response): Promise<OAuthToken> {\n const text = await res.text();\n if (!res.ok) {\n throw new Error(\n `MP OAuth ${res.status}: ${text.slice(0, 300)}`,\n );\n }\n const json = JSON.parse(text);\n return OAuthTokenSchema.parse(json);\n}\n\n/**\n * Compute when an access_token will expire, given the timestamp it was\n * issued and the `expires_in` value (in seconds).\n *\n * @returns A unix-ms timestamp.\n */\nexport function expirationTimeMs(\n issuedAtMs: number,\n expiresInSeconds: number | undefined,\n): number {\n return issuedAtMs + (expiresInSeconds ?? 21_600) * 1000;\n}\n\n/**\n * Check whether an access_token is close to expiring. Use this to decide\n * whether to proactively refresh BEFORE making an API call.\n *\n * @param skewSeconds Buffer to refresh early (default 5 min). MP tokens\n * typically last 6h; refreshing in the last 5 min avoids\n * races with API calls that take a few seconds.\n */\nexport function isExpiringSoon(\n expirationMs: number,\n skewSeconds = 300,\n): boolean {\n return Date.now() + skewSeconds * 1000 >= expirationMs;\n}\n","/**\n * MP sandbox test cards for AR (MLA) — the official numbers MP publishes for\n * its TEST environment. Use these in unit tests + integration tests to\n * exercise the create_payment / charge_saved_card flows without touching a\n * real card.\n *\n * # When this matters\n *\n * Most non-trivial dev flows hit the issue of \"I want to test approved /\n * rejected / pending paths\" but MP's docs scatter the test card numbers\n * across multiple pages. This module collects them so you can `import { TEST_CARDS_AR }`\n * and pick the scenario you need.\n *\n * # Source\n *\n * AR (MLA) test cards published at\n * https://www.mercadopago.com.ar/developers/es/docs/checkout-api/additional-content/test-cards\n *\n * Last sync: 2026-05.\n */\n\n/**\n * The full data needed to test a payment:\n * - `number` — 16 digits\n * - `cvv` — 3 digits\n * - `exp` — MM/YY (use any future date in TEST mode)\n * - `paymentMethodId` — what to pass as `payment_method_id` to create_payment\n * - `holderName` — special string that triggers the desired status\n * (e.g. \"APRO\" → approved, \"OTHE\" → rejected with bad CVV)\n */\nexport interface TestCard {\n brand: string;\n number: string;\n cvv: string;\n exp: string;\n paymentMethodId: string;\n /**\n * Holder-name \"magic strings\" — MP routes the payment to a specific\n * status_detail based on this:\n * - `APRO` → status: approved\n * - `OTHE` → rejected (status_detail: cc_rejected_other_reason)\n * - `CONT` → pending (status_detail: pending_contingency)\n * - `CALL` → rejected (status_detail: cc_rejected_call_for_authorize)\n * - `FUND` → rejected (status_detail: cc_rejected_insufficient_amount)\n * - `SECU` → rejected (status_detail: cc_rejected_bad_filled_security_code)\n * - `EXPI` → rejected (status_detail: cc_rejected_bad_filled_date)\n * - `FORM` → rejected (status_detail: cc_rejected_bad_filled_other)\n */\n holderNameToTest: Record<string, string>;\n}\n\n/**\n * The MP-published test cards for AR. Pass `holderName: \"APRO\"` for an\n * approved payment, `\"OTHE\"` for a rejected one, etc.\n */\nexport const TEST_CARDS_AR: Record<string, TestCard> = {\n VISA_CREDIT: {\n brand: \"Visa (crédito)\",\n number: \"4509 9535 6623 3704\".replace(/\\s/g, \"\"),\n cvv: \"123\",\n exp: \"11/30\",\n paymentMethodId: \"visa\",\n holderNameToTest: {\n APRO: \"approved\",\n OTHE: \"cc_rejected_other_reason\",\n CONT: \"pending_contingency\",\n CALL: \"cc_rejected_call_for_authorize\",\n FUND: \"cc_rejected_insufficient_amount\",\n SECU: \"cc_rejected_bad_filled_security_code\",\n EXPI: \"cc_rejected_bad_filled_date\",\n FORM: \"cc_rejected_bad_filled_other\",\n },\n },\n MASTERCARD_CREDIT: {\n brand: \"Mastercard (crédito)\",\n number: \"5031 7557 3453 0604\".replace(/\\s/g, \"\"),\n cvv: \"123\",\n exp: \"11/30\",\n paymentMethodId: \"master\",\n holderNameToTest: {\n APRO: \"approved\",\n OTHE: \"cc_rejected_other_reason\",\n CONT: \"pending_contingency\",\n CALL: \"cc_rejected_call_for_authorize\",\n FUND: \"cc_rejected_insufficient_amount\",\n },\n },\n AMEX_CREDIT: {\n brand: \"American Express (crédito)\",\n number: \"3711 803032 57522\".replace(/\\s/g, \"\"),\n cvv: \"1234\",\n exp: \"11/30\",\n paymentMethodId: \"amex\",\n holderNameToTest: { APRO: \"approved\", OTHE: \"cc_rejected_other_reason\" },\n },\n VISA_DEBIT: {\n brand: \"Visa (débito)\",\n number: \"4002 7686 9439 5619\".replace(/\\s/g, \"\"),\n cvv: \"123\",\n exp: \"11/30\",\n paymentMethodId: \"debvisa\",\n holderNameToTest: { APRO: \"approved\", OTHE: \"cc_rejected_other_reason\" },\n },\n MASTERCARD_DEBIT: {\n brand: \"Mastercard (débito)\",\n number: \"5287 3383 0125 4634\".replace(/\\s/g, \"\"),\n cvv: \"123\",\n exp: \"11/30\",\n paymentMethodId: \"debmaster\",\n holderNameToTest: { APRO: \"approved\", OTHE: \"cc_rejected_other_reason\" },\n },\n};\n\n/**\n * Pre-built payer objects that MP recognizes as test buyers. Pair with\n * an APRO test card → status: approved.\n *\n * **Use a NEW email per call** if you don't want MP's idempotency-on-email\n * to dedupe — append a timestamp.\n */\nexport const TEST_PAYERS_AR = {\n approvedBuyer: () => ({\n email: `test_user_${Date.now()}@testuser.com`,\n identification: { type: \"DNI\", number: \"12345678\" },\n }),\n} as const;\n\n/**\n * Resolve a `(card, scenario)` pair to a ready-to-use `CreatePaymentParams`-like\n * object. Reduces boilerplate in test files.\n *\n * @example\n * ```ts\n * const card = buildTestCardScenario(\"VISA_CREDIT\", \"APRO\", 1500);\n * await client.createPayment({ ...card, externalReference: \"test-1\" });\n * ```\n */\nexport function buildTestCardScenario(\n cardKey: keyof typeof TEST_CARDS_AR,\n scenario: string,\n amountArs: number,\n): {\n transactionAmount: number;\n paymentMethodId: string;\n payerEmail: string;\n description: string;\n installments: number;\n /**\n * Magic holder name — pass to MP frontend's CardForm `cardholderName`\n * field. (For server-side create_payment, pass via additional_info.)\n */\n holderName: string;\n} {\n const card = TEST_CARDS_AR[cardKey];\n if (!card) throw new Error(`Unknown test card: ${cardKey}`);\n if (!card.holderNameToTest[scenario]) {\n throw new Error(\n `Card ${cardKey} doesn't define scenario ${scenario}. Available: ${Object.keys(card.holderNameToTest).join(\", \")}`,\n );\n }\n return {\n transactionAmount: amountArs,\n paymentMethodId: card.paymentMethodId,\n payerEmail: TEST_PAYERS_AR.approvedBuyer().email,\n description: `TEST ${scenario} via ${cardKey}`,\n installments: 1,\n holderName: scenario,\n };\n}\n","/**\n * 3DS (Strong Customer Authentication) analyzer for Mercado Pago Payments.\n *\n * # Background\n *\n * 3DS (3-D Secure / \"verified by Visa\", \"Mastercard SecureCode\") is the\n * issuer-side 2FA layer for card payments. MP triggers it automatically when:\n * - The card's issuer requires it (driven by MCC + amount + risk).\n * - The buyer's country mandates it (MX, BR, several EU countries).\n *\n * In Argentina (MLA), 3DS is OPTIONAL but strongly recommended for\n * high-value transactions and is required for some FCE MiPyMEs flows.\n *\n * # What this module does\n *\n * Given a `Payment` returned by `getPayment()` or `createPayment()`, derive\n * a normalized `ThreeDSInfo` telling you:\n * - Whether 3DS was triggered at all\n * - Whether it was frictionless (no buyer interaction) or required a challenge\n * - The challenge URL (if any) you must redirect the buyer to\n * - A human-readable description suitable for surfacing to the user\n *\n * # When to use\n *\n * Call `analyze3DS(payment)` after EVERY `createPayment()` for credit cards.\n * If `info.challengeUrl !== null`, you MUST redirect the buyer there before\n * the payment can complete — otherwise it stays in `pending` forever.\n */\n\nimport type { Payment } from \"./types\";\nimport type { ThreeDSInfo, ThreeDSStatus } from \"./types\";\n\n/**\n * Analyze a Payment's 3DS state. Pure function, no I/O.\n */\nexport function analyze3DS(payment: Payment): ThreeDSInfo {\n const raw = payment as unknown as Record<string, unknown>;\n const mode = (raw.three_d_secure_mode as string | undefined) ?? null;\n const statusDetail = (payment.status_detail as string | null) ?? null;\n\n // No 3DS field at all → not triggered for this payment.\n if (!mode || mode === \"not_supported\" || mode === \"off\") {\n return {\n status: \"not_required\",\n mode,\n challengeUrl: null,\n description:\n \"3DS no fue requerido para este pago (riesgo bajo o emisor sin 3DS habilitado).\",\n };\n }\n\n // MP exposes the challenge URL inside `three_ds_info.external_resource_url`\n // when one is required.\n const threeDsInfo = (raw.three_ds_info as\n | { external_resource_url?: string; status?: string; creq?: string }\n | undefined) ?? undefined;\n\n if (statusDetail === \"pending_challenge\" && threeDsInfo?.external_resource_url) {\n return {\n status: \"challenge_required\",\n mode,\n challengeUrl: threeDsInfo.external_resource_url,\n description:\n \"El emisor de la tarjeta requirió autenticación 3DS. Redirigí al comprador a challengeUrl para completar el desafío. El pago queda pending hasta que lo haga.\",\n };\n }\n\n // Approved + 3DS field present → frictionless flow (issuer authorized\n // without challenging the buyer).\n if (payment.status === \"approved\") {\n return {\n status: \"frictionless\",\n mode,\n challengeUrl: null,\n description: \"3DS frictionless: el emisor autorizó sin desafiar al comprador.\",\n };\n }\n\n // Rejected with 3DS-related status_detail.\n if (\n payment.status === \"rejected\" &&\n typeof statusDetail === \"string\" &&\n statusDetail.includes(\"3ds\")\n ) {\n return {\n status: \"rejected\",\n mode,\n challengeUrl: null,\n description: `Autenticación 3DS rechazada (${statusDetail}). El comprador debe usar otra tarjeta o validarla con el emisor.`,\n };\n }\n\n return {\n status: \"unknown\" as ThreeDSStatus,\n mode,\n challengeUrl: threeDsInfo?.external_resource_url ?? null,\n description:\n \"No se pudo determinar el estado 3DS — revisar payment.three_d_secure_mode + payment.status_detail manualmente.\",\n };\n}\n","import { createHmac, timingSafeEqual } from \"node:crypto\";\nimport { WebhookBodySchema, type ParsedWebhookEvent } from \"./types\";\n\n/**\n * Parse a Mercado Pago webhook from the raw request body and URL search params.\n * MP sends the topic and resource id in EITHER the URL query string OR the\n * body, depending on integration version — this normalizes both shapes into a\n * single structure.\n *\n * @example\n * ```ts\n * export async function POST(req: Request) {\n * const body = await req.json().catch(() => ({}));\n * const event = parseWebhookEvent(body, new URL(req.url).searchParams);\n * if (event && event.topic === 'preapproval') {\n * // refresh status from MP, update your store\n * }\n * return Response.json({ received: true });\n * }\n * ```\n */\nexport function parseWebhookEvent(\n body: unknown,\n searchParams?: URLSearchParams,\n): ParsedWebhookEvent | null {\n const parseResult = WebhookBodySchema.safeParse(body ?? {});\n const parsedBody = parseResult.success ? parseResult.data : {};\n\n const topic =\n searchParams?.get(\"topic\") ??\n parsedBody.topic ??\n parsedBody.type ??\n null;\n\n const dataId =\n searchParams?.get(\"id\") ??\n (parsedBody.data?.id !== undefined ? String(parsedBody.data.id) : null) ??\n parsedBody.resource ??\n null;\n\n if (!topic || !dataId) {\n return null;\n }\n\n return {\n topic,\n dataId: String(dataId),\n action: parsedBody.action ?? null,\n raw: parsedBody,\n };\n}\n\n/**\n * Verify the HMAC-SHA256 signature MP sends in the `x-signature` header for\n * webhook authenticity. Returns true if the signature matches the expected\n * value derived from the integration's secret key.\n *\n * @param requestId The value of the `x-request-id` request header.\n * @param dataId The id of the resource the webhook is about (from query or body).\n * @param signatureHeader The full `x-signature` header value MP sent.\n * @param secret Your integration's webhook secret (configured in MP dev panel).\n *\n * @remarks\n * MP's `x-signature` header has the form: `ts=NNNNNNNN,v1=HEXSIGNATURE`. We\n * extract the timestamp and the v1 signature, then compute\n * `HMAC-SHA256(secret, \"id:${dataId};request-id:${requestId};ts:${ts};\")`\n * and compare with constant-time equality.\n */\nexport function verifyWebhookSignature(params: {\n requestId: string | null;\n dataId: string;\n signatureHeader: string | null;\n secret: string;\n}): boolean {\n if (!params.signatureHeader || !params.requestId) return false;\n\n // Parse \"ts=...,v1=...\" into a map.\n const parts = Object.fromEntries(\n params.signatureHeader\n .split(\",\")\n .map((segment) => segment.trim().split(\"=\") as [string, string]),\n );\n const ts = parts.ts;\n const v1 = parts.v1;\n if (!ts || !v1) return false;\n\n const manifest = `id:${params.dataId};request-id:${params.requestId};ts:${ts};`;\n const expected = createHmac(\"sha256\", params.secret)\n .update(manifest)\n .digest(\"hex\");\n\n // Constant-time comparison; lengths must match for timingSafeEqual.\n if (expected.length !== v1.length) return false;\n return timingSafeEqual(Buffer.from(expected), Buffer.from(v1));\n}\n","import { createHash } from \"node:crypto\";\nimport { tool, type ToolSet } from \"ai\";\nimport { z } from \"zod\";\nimport type { MercadoPagoClient } from \"./client\";\nimport {\n buildAuthorizeUrl,\n exchangeCodeForToken,\n refreshAccessToken,\n} from \"./oauth\";\nimport type { SubscriptionStateAdapter } from \"./state\";\nimport { TEST_CARDS_AR } from \"./test-cards\";\nimport { analyze3DS } from \"./three-ds\";\nimport { parseWebhookEvent, verifyWebhookSignature } from \"./webhook\";\n\n/**\n * Deterministic idempotency key from caller-meaningful fields. Safe to retry:\n * the SAME inputs always produce the same key, so MP dedupes on its side\n * even if the client retries multiple times. Use a hash to keep keys short\n * + opaque (callers can't accidentally extract sensitive data from the key).\n */\nfunction deterministicIdempotencyKey(...parts: Array<string | number | undefined>): string {\n const payload = parts\n .filter((p) => p !== undefined && p !== null)\n .map(String)\n .join(\"|\");\n return createHash(\"sha256\").update(payload).digest(\"hex\").slice(0, 32);\n}\n\nexport interface MercadoPagoToolsOptions {\n /** State adapter for persisting subscription records. */\n state: SubscriptionStateAdapter;\n /**\n * Default back_url used when callers don't supply one. MUST be HTTPS — MP\n * rejects http:// and localhost back URLs even in sandbox.\n */\n backUrl: string;\n /**\n * Optionally override the agent-facing tool descriptions. Pass an object\n * with keys matching tool names; values replace the default description.\n * Useful for localizing the agent's tool reasoning.\n */\n descriptions?: Partial<Record<ToolName, string>>;\n /**\n * Default notification webhook URL used when callers don't supply one.\n * Optional — MP falls back to dashboard config if not set.\n */\n notificationUrl?: string;\n /**\n * Webhook secret for the `handle_webhook` tool. Required to verify\n * incoming webhook HMAC-SHA256 signatures. Get it from MP dev panel →\n * \"Notificaciones\" → \"Webhooks\" → \"Configurar notificaciones\".\n * If omitted, `handle_webhook` returns `{ verified: false, error: ... }`\n * and the agent should reject the webhook.\n */\n webhookSecret?: string;\n /**\n * OAuth credentials for the marketplace flow. Required for\n * `oauth_exchange_code` and `oauth_refresh_token` (the secret cannot be\n * passed by the agent — it's a server-side secret). If omitted, those\n * tools return `{ available: false }` with setup instructions.\n */\n oauth?: {\n clientId: string;\n clientSecret: string;\n };\n}\n\ntype ToolName =\n // Subscriptions (v0.1)\n | \"create_subscription\"\n | \"get_subscription_status\"\n | \"cancel_subscription\"\n | \"pause_subscription\"\n | \"resume_subscription\"\n // Payments (v0.2)\n | \"create_payment\"\n | \"get_payment\"\n | \"search_payments\"\n | \"cancel_payment\"\n | \"capture_payment\"\n // Refunds (v0.2)\n | \"refund_payment\"\n | \"list_refunds\"\n // Checkout Pro (v0.2)\n | \"create_payment_preference\"\n | \"get_payment_preference\"\n // Customers + Cards (v0.2)\n | \"create_customer\"\n | \"find_customer_by_email\"\n | \"list_customer_cards\"\n | \"delete_customer_card\"\n // Payment Methods + Installments (v0.2)\n | \"list_payment_methods\"\n | \"calculate_installments\"\n // Account (v0.2)\n | \"get_account_info\"\n // Saved-card charging (v0.3)\n | \"charge_saved_card\"\n // QR in-store (v0.3)\n | \"create_qr_payment\"\n | \"cancel_qr_payment\"\n // Subscription Plans (v0.4)\n | \"create_subscription_plan\"\n | \"list_subscription_plans\"\n | \"update_subscription_plan\"\n | \"subscribe_to_plan\"\n | \"list_subscription_payments\"\n // Stores + POS (v0.4)\n | \"create_store\"\n | \"list_stores\"\n | \"create_pos\"\n | \"list_pos\"\n // Disputes (v0.4)\n | \"list_payment_disputes\"\n | \"get_dispute\"\n // Lookup helpers (v0.4)\n | \"list_identification_types\"\n | \"list_issuers\"\n // Webhooks (v0.4)\n | \"list_webhooks\"\n | \"create_webhook\"\n | \"update_webhook\"\n | \"delete_webhook\"\n // Webhook handler combo (v0.5)\n | \"handle_webhook\"\n // OAuth Marketplace (v0.5)\n | \"oauth_authorize_url\"\n | \"oauth_exchange_code\"\n | \"oauth_refresh_token\"\n // Order Management API (v0.5)\n | \"create_order\"\n | \"get_order\"\n | \"update_order\"\n | \"capture_order\"\n | \"cancel_order\"\n // v0.6 — Account / Balance / Movements / Settlements\n | \"get_account_balance\"\n | \"list_account_movements\"\n | \"list_settlements\"\n | \"get_settlement\"\n // v0.6 — 3DS analyzer (pure)\n | \"analyze_payment_3ds\"\n // v0.6 — Test cards (pure)\n | \"get_test_cards\";\n\nconst DEFAULT_DESCRIPTIONS: Record<ToolName, string> = {\n // ── Subscriptions ────────────────────────────────────────────────────────\n create_subscription:\n \"Create a Mercado Pago recurring subscription. Returns an init_point URL where the customer must complete the FIRST payment with their card and CVV (this is a hard MP requirement; agents cannot bypass it). After they pay, MP will auto-charge at the configured frequency without further intervention.\",\n get_subscription_status:\n \"Check the current status of a Mercado Pago subscription. Use this to confirm the customer completed the first payment (status becomes 'authorized') or to inspect the next charge date.\",\n cancel_subscription:\n \"Cancel an active Mercado Pago subscription. After cancellation, MP will not charge the customer again. This action is irreversible — confirm with the user before calling.\",\n pause_subscription:\n \"Pause an authorized Mercado Pago subscription. Charges stop until resumed. Only works on subscriptions in 'authorized' status.\",\n resume_subscription:\n \"Resume a paused Mercado Pago subscription. Charges resume on the next scheduled date. Only works on subscriptions in 'paused' status.\",\n\n // ── Payments ─────────────────────────────────────────────────────────────\n create_payment:\n \"Create a one-time payment. Two flows: (a) with a card token from MP frontend Cardform — for transparent checkout; (b) without token, for non-card methods like 'account_money', 'rapipago', 'pagofacil'. For most agent flows where you only have a payer email and want to send them a payment link, use create_payment_preference instead (Checkout Pro hosted form). Returns the Payment object with status — typically 'approved' for account_money and 'pending' for tickets.\",\n get_payment:\n \"Fetch a single payment by ID. Use to confirm status after webhook arrives, or to inspect details (status_detail explains rejections).\",\n search_payments:\n \"Search payments with filters. Most common: by external_reference (your-system identifier) to find all payments for an order, or by status='approved' to list successful charges in a date range. Returns paginated results.\",\n cancel_payment:\n \"Cancel a pending or in_process payment (only works before approval). Once approved, use refund_payment instead. Common use: cancel an unpaid ticket payment that's still pending.\",\n capture_payment:\n \"Capture an authorized credit-card payment that was created with capture=false. Use for hold-then-capture flows (e.g., authorize on order, capture on shipment). Optional partial amount.\",\n\n // ── Refunds ──────────────────────────────────────────────────────────────\n refund_payment:\n \"Refund an approved payment. Pass amount for partial refund; omit for full refund. Idempotency key is auto-generated based on paymentId+amount to prevent double-refunds on retries.\",\n list_refunds:\n \"List all refunds for a given payment. Returns array of Refund objects. Useful to confirm a refund was processed or to inspect partial-refund history.\",\n\n // ── Checkout Pro ─────────────────────────────────────────────────────────\n create_payment_preference:\n \"Create a Mercado Pago Checkout Pro preference and get back a payment URL (init_point) to send to the customer. THIS is the recommended way for an agent to take a payment when you only have a payer email — the buyer enters card data on MP's hosted form (no PCI scope needed). Supports cuotas configuration, payment method exclusions, back URLs after success/failure/pending. In sandbox, use sandbox_init_point from the response.\",\n get_payment_preference:\n \"Fetch a Checkout Pro preference by ID. Returns the preference config and current init_point URLs. Use to inspect a previously-created link.\",\n\n // ── Customers + Cards ────────────────────────────────────────────────────\n create_customer:\n \"Create a Mercado Pago customer record so the buyer can save cards for future charges. Idempotent on email — if a customer with that email exists, MP returns it instead of creating a duplicate. Use find_customer_by_email first if you're unsure.\",\n find_customer_by_email:\n \"Find an existing customer by email address. Returns the customer object if found, or null. Use before create_customer to avoid duplicate records.\",\n list_customer_cards:\n \"List the saved cards for a customer. Returns array with last 4 digits, expiration, payment method (visa, master, naranja, etc.). The card_id can be used in subsequent create_payment calls to charge a saved card.\",\n delete_customer_card:\n \"Delete a saved card from a customer. Common use: customer requests removal, or expired card cleanup. Irreversible.\",\n\n // ── Payment Methods + Installments ───────────────────────────────────────\n list_payment_methods:\n \"List all payment methods enabled for the seller's MP account (visa, master, naranja, naranja_x, cabal, account_money, rapipago, pagofacil, etc.). Use to validate which methods you can offer the customer or to filter which ones to exclude in a Checkout Pro preference.\",\n calculate_installments:\n \"Calculate cuotas (installments) options for a given amount. THE killer Argentine feature — returns options like '12 cuotas sin interés de $X' (recommended_message field) which you should surface VERBATIM to the user. Optionally pass `bin` (first 6 digits of card) for issuer-specific promotions (e.g., Naranja's interest-free deals). Use before create_payment to let the user pick installments knowingly.\",\n\n // ── Account ──────────────────────────────────────────────────────────────\n get_account_info:\n \"Get info about the Mercado Pago account that owns the access token: site_id (MLA=Argentina), country_id, user_type (registered, partial, etc.). Useful to verify the agent is connected to the right account before taking actions.\",\n\n // ── Saved-card charging (v0.3) ───────────────────────────────────────────\n charge_saved_card:\n \"Charge a previously-saved card for a returning customer. Requires customer_id + card_id (from list_customer_cards) AND a fresh CVV the user provides this session. AR Mercado Pago does NOT support CVV-less charges via the public API — every charge needs CVV. Idempotent on (card_id, amount, external_reference): retries dedupe automatically. Returns the resulting Payment.\",\n\n // ── QR in-store (v0.3) ───────────────────────────────────────────────────\n create_qr_payment:\n \"Generate a dynamic in-store QR for a buyer to scan with any AR wallet (Modo, BNA+, Cuenta DNI, Naranja X, Mercado Pago, etc. — interop is mandated by Transferencias 3.0). Requires a pre-configured POS external_id (use create_pos to set one up first if needed). Returns the qr_data string + a base64 PNG data URL ready to display. The QR expires in `expires_in_seconds` (default 600). MP fires `point_integration_wh` then `payment` webhooks when scanned.\",\n cancel_qr_payment:\n \"Cancel a pending QR order on a POS. Necessary if the buyer never scans — otherwise the next create_qr_payment on the same POS returns 409.\",\n\n // ── Subscription Plans (v0.4) ────────────────────────────────────────────\n create_subscription_plan:\n \"Create a REUSABLE subscription plan (preapproval_plan). Different from create_subscription: a plan defines price + frequency once, then customers subscribe to it via subscribe_to_plan. Use plans for SaaS-style billing (Básico/Pro/Enterprise tiers). For per-customer custom amounts, use create_subscription directly.\",\n list_subscription_plans:\n \"List all subscription plans defined for this MP account. Useful before create_subscription_plan to check if one already exists, or for surfacing options to a customer.\",\n update_subscription_plan:\n \"Update a subscription plan's reason / amount / status / back_url. Existing customer subscriptions to the plan are NOT automatically updated — only NEW subscribers get the new pricing.\",\n subscribe_to_plan:\n \"Subscribe a customer to an existing reusable plan. Returns a Preapproval with init_point URL where the customer completes first payment. Cleaner than create_subscription when you have fixed tiers.\",\n list_subscription_payments:\n \"List the auto-charge attempts (authorized_payments) under a subscription. Useful for 'show me the cobros del último mes for this client' or to debug a failing recurring charge.\",\n\n // ── Stores + POS (v0.4) ──────────────────────────────────────────────────\n create_store:\n \"Create a store under the seller's MP account. Stores are the parent entity for POSes (which generate QR payments). Required ONE-TIME setup before create_pos. Pass a unique external_id and a display name.\",\n list_stores:\n \"List all stores configured for this MP account. Use this to find an existing store_id before create_pos, or to surface store options to the agent.\",\n create_pos:\n \"Create a POS (Point of Sale) under a store. The POS's external_id is what create_qr_payment uses. Each physical checkout / counter / agent typically has its own POS. Categories are MP-defined (default 621102 = Other Food and Beverage Services).\",\n list_pos:\n \"List all POSes for the seller (or filtered by store_id). Use to find an existing POS before create_qr_payment, or to surface options.\",\n\n // ── Disputes (v0.4 — read-only) ──────────────────────────────────────────\n list_payment_disputes:\n \"List all disputes / chargebacks raised against a payment. Read-only — resolution is dashboard-only. Surface the dashboard URL `https://www.mercadopago.com.ar/disputes/{dispute_id}` to the user when they need to respond.\",\n get_dispute:\n \"Get details of a specific dispute including reason, amount, resolution status. Read-only.\",\n\n // ── Lookup helpers (v0.4) ────────────────────────────────────────────────\n list_identification_types:\n \"List valid identification types for the seller's site. AR returns: DNI, CI, LE, LC, Otro, Pasaporte, CUIT, CUIL with their min/max length. Useful to validate an identification before passing to create_payment.\",\n list_issuers:\n \"List card issuers (banks) that support a payment_method_id. Optionally filter by `bin` (first 6 digits of the card) for accurate issuer detection. Useful with calculate_installments — issuer-specific promos (e.g., Naranja Galicia 6 cuotas sin interés) only appear when the issuer is identified.\",\n\n // ── Webhooks management (v0.4) ───────────────────────────────────────────\n list_webhooks:\n \"List all webhook subscriptions configured for this MP application. Use to see what topics + URLs are wired before adding new ones.\",\n create_webhook:\n \"Subscribe a webhook URL to a MP topic (payment, subscription_authorized_payment, subscription_preapproval, merchant_order, point_integration_wh). MP will POST to this URL when events of that topic fire.\",\n update_webhook:\n \"Update a webhook's URL or topic. Useful when you change deployment URLs without resubscribing from scratch.\",\n delete_webhook:\n \"Delete a webhook subscription. MP stops POSTing to it immediately.\",\n\n // ── Webhook handler combo (v0.5) ─────────────────────────────────────────\n handle_webhook:\n \"Process an incoming MP webhook in ONE call: verify the HMAC-SHA256 signature, parse the event, and (optionally) auto-fetch the underlying resource (Payment, Subscription, Order). Returns the structured event PLUS the full resource. USE THIS in your webhook endpoint INSTEAD of chaining verify_webhook_signature + parse_webhook_event + get_payment manually. Pass the raw request body, x-signature header, x-request-id header, and your MP webhook secret. SAFE: returns { verified: false } when signature mismatches — caller should respond 401 and stop processing. WHEN auto_fetch is true (default), the resource is fetched as the SAME MP user the client is configured for (so for marketplace integrations, instantiate a per-seller client).\",\n\n // ── OAuth Marketplace (v0.5) ─────────────────────────────────────────────\n oauth_authorize_url:\n \"Build the URL the SELLER (third-party MP account) visits to authorize your marketplace app. Pass the seller's redirect uri (must be whitelisted in MP dev panel) and an opaque state token (CSRF protection — bind it to the user's session). PURE FUNCTION: no network. The seller approves, MP redirects them to your `redirect_uri?code=...&state=...`. Then call oauth_exchange_code with the code.\",\n oauth_exchange_code:\n \"Exchange the authorization code (from the OAuth redirect) for an `OAuthToken`. Returns access_token, refresh_token, user_id, and expires_in. **PERSIST the entire response** — refresh_token is long-lived and the only way to keep the integration alive past 6h. Use the access_token to instantiate a per-seller MercadoPagoClient for marketplace flows.\",\n oauth_refresh_token:\n \"Refresh a per-seller access_token using the saved refresh_token. Call PROACTIVELY before expires_in elapses, or REACTIVELY on a 401 from a per-seller MercadoPagoClient. Returns a fresh OAuthToken — persist the new refresh_token (MP often returns the same value, but always replace).\",\n\n // ── Order Management API (v0.5 — modern Order API) ───────────────────────\n create_order:\n \"Create a new Order via MP's modern Order Management API. DIFFERENT from create_payment_preference: Order is a transactional entity with explicit lifecycle (created → processed → captured/canceled), supports MANUAL CAPTURE (auth-only, capture later — for ride-share, hotels, marketplaces) and aggregates multiple payments into one Order. Use Preference (Checkout Pro) for simple hosted pay-links; use Order when you need auth-only or multi-payment-per-order semantics. For marketplace splits, set marketplace + marketplace_fee + collector_id (the SELLER's MP user_id from oauth_exchange_code).\",\n get_order:\n \"Fetch an Order by ID. Returns the Order with its lifecycle status and any attached payments/refunds.\",\n update_order:\n \"Patch an existing Order before it's captured/canceled. Common use: update items or external_reference.\",\n capture_order:\n \"Capture a previously-authorized Order (only for orders created with capture_mode='manual'). Captures up to the originally-authorized amount; pass amount for partial capture. Common use: ride-share marks ride complete → capture; hotel checks-out guest → capture.\",\n cancel_order:\n \"Cancel an Order. Releases any auth-holds and marks the Order as canceled. For orders that have already been CAPTURED, use refund_payment instead — cancel only works pre-capture.\",\n\n // ── Account / Balance / Movements / Settlements (v0.6) ───────────────────\n get_account_balance:\n \"Get the seller's current MP wallet balance. Returns { available_balance, unavailable_balance, total_amount, currency_id }. The available balance is what the seller can withdraw or pay with right now; unavailable is in retention (typically 14-21 days for new sellers or risk-flagged transactions). For per-seller marketplace setups, instantiate the client AS THE SELLER first.\",\n list_account_movements:\n \"List wallet movements (incoming payments, transfers, refunds, holdings) for the active MP account. Filter by date range with `from`/`to` (ISO 8601). Useful for monthly conciliation or 'show me what came in this month' workflows.\",\n list_settlements:\n \"List settlements (release_money) — i.e. transfers from the MP wallet to the seller's registered bank account (CBU). USE WHEN the user asks 'cuándo me deposita MP' or for monthly bank-conciliation reports. Filter by date range and status.\",\n get_settlement:\n \"Get details of a single settlement: amount, date_scheduled, date_processed, bank_account info (CBU + bank name).\",\n\n // ── 3DS analyzer (v0.6 — pure) ───────────────────────────────────────────\n analyze_payment_3ds:\n \"Pure local analyzer for a Payment's 3DS (Strong Customer Authentication) state. Pass a payment_id (string) and the tool fetches the Payment then derives { status: 'not_required'|'frictionless'|'challenge_required'|'rejected'|'unknown', mode, challengeUrl, description }. USE THIS after every create_payment for credit cards: when challengeUrl !== null, you MUST redirect the buyer there before the payment can complete. Without 3DS, payments stay in 'pending' indefinitely if the issuer demanded a challenge.\",\n\n // ── Test cards (v0.6 — pure) ─────────────────────────────────────────────\n get_test_cards:\n \"Pure helper that returns the official MP test cards for AR (MLA): VISA/Mastercard/Amex credit + debit, with the 'magic' holder names that route the payment to specific status_detail values (APRO=approved, OTHE=rejected, CONT=pending, FUND=insufficient_amount, etc.). USE WHEN you need to demo a payment flow without a real card, or to script integration tests. Pure data — no network call.\",\n};\n\n/**\n * Build a tool set for the Vercel AI SDK that exposes Mercado Pago to an\n * agent. Pass directly to `Experimental_Agent`'s `tools` option, or merge with\n * other tool sets.\n *\n * @example\n * ```ts\n * import { Experimental_Agent as Agent, stepCountIs } from 'ai';\n * import { MercadoPagoClient, mercadoPagoTools, InMemoryStateAdapter } from '@ar-agents/mercadopago';\n *\n * const mp = new MercadoPagoClient({ accessToken: process.env.MP_ACCESS_TOKEN! });\n * const agent = new Agent({\n * model: 'anthropic/claude-sonnet-4-6',\n * tools: mercadoPagoTools(mp, {\n * state: new InMemoryStateAdapter(),\n * backUrl: 'https://mysite.com/done',\n * }),\n * stopWhen: stepCountIs(8),\n * });\n * ```\n */\nexport function mercadoPagoTools(\n client: MercadoPagoClient,\n options: MercadoPagoToolsOptions,\n): ToolSet {\n const desc = (name: ToolName): string =>\n options.descriptions?.[name] ?? DEFAULT_DESCRIPTIONS[name];\n\n return {\n // ─────────────────────────────────────────────────────────────────────────\n // Subscriptions (v0.1 — kept identical for backward compatibility)\n // ─────────────────────────────────────────────────────────────────────────\n\n create_subscription: tool({\n description: desc(\"create_subscription\"),\n inputSchema: z.object({\n customer_email: z.string().email().describe(\"Email of the customer who will be charged\"),\n amount_ars: z.number().positive().describe(\"Amount in Argentine Pesos per recurring charge\"),\n frequency_months: z.number().int().positive().max(12).describe(\"Frequency in months (1=monthly, 3=quarterly, 12=yearly)\"),\n reason: z.string().min(3).max(120).describe(\"Short description shown to the customer at checkout\"),\n external_reference: z.string().optional().describe(\"Optional id from your system to track this subscription\"),\n }),\n execute: async ({ customer_email, amount_ars, frequency_months, reason, external_reference }) => {\n const created = await client.createPreapproval({\n reason,\n payerEmail: customer_email,\n amount: amount_ars,\n currency: \"ARS\",\n frequency: frequency_months,\n frequencyType: \"months\",\n backUrl: options.backUrl,\n ...(external_reference !== undefined ? { externalReference: external_reference } : {}),\n });\n await options.state.set(created.id, {\n status: created.status,\n payerEmail: customer_email,\n amount: amount_ars,\n currency: \"ARS\",\n frequency: frequency_months,\n frequencyType: \"months\",\n initPoint: created.init_point,\n ...(external_reference !== undefined ? { externalReference: external_reference } : {}),\n createdAt: new Date().toISOString(),\n });\n return {\n subscription_id: created.id,\n status: created.status,\n init_point_url: created.init_point,\n next_step:\n \"Send init_point_url to the customer. They must complete the first payment with card+CVV. Use get_subscription_status to confirm activation after they pay.\",\n };\n },\n }),\n\n get_subscription_status: tool({\n description: desc(\"get_subscription_status\"),\n inputSchema: z.object({\n subscription_id: z.string().describe(\"The Mercado Pago subscription/preapproval ID\"),\n }),\n execute: async ({ subscription_id }) => {\n const fresh = await client.getPreapproval(subscription_id);\n const cached = await options.state.get(subscription_id);\n return {\n subscription_id: fresh.id,\n status: fresh.status,\n payer_email: fresh.payer_email,\n amount: fresh.auto_recurring.transaction_amount,\n currency: fresh.auto_recurring.currency_id,\n next_payment_date: fresh.next_payment_date ?? null,\n last_webhook_status: cached?.lastWebhookStatus ?? null,\n last_webhook_at: cached?.lastWebhookAt ?? null,\n };\n },\n }),\n\n cancel_subscription: tool({\n description: desc(\"cancel_subscription\"),\n inputSchema: z.object({\n subscription_id: z.string().describe(\"The Mercado Pago subscription/preapproval ID to cancel\"),\n }),\n execute: async ({ subscription_id }) => {\n const cancelled = await client.cancelPreapproval(subscription_id);\n await options.state.set(subscription_id, {\n status: cancelled.status,\n cancelledAt: new Date().toISOString(),\n });\n return {\n subscription_id: cancelled.id,\n status: cancelled.status,\n message: \"Subscription cancelled. No further charges will occur.\",\n };\n },\n }),\n\n pause_subscription: tool({\n description: desc(\"pause_subscription\"),\n inputSchema: z.object({ subscription_id: z.string() }),\n execute: async ({ subscription_id }) => {\n const paused = await client.pausePreapproval(subscription_id);\n await options.state.set(subscription_id, { status: paused.status });\n return {\n subscription_id: paused.id,\n status: paused.status,\n message: \"Subscription paused. Use resume_subscription to reactivate.\",\n };\n },\n }),\n\n resume_subscription: tool({\n description: desc(\"resume_subscription\"),\n inputSchema: z.object({ subscription_id: z.string() }),\n execute: async ({ subscription_id }) => {\n const resumed = await client.resumePreapproval(subscription_id);\n await options.state.set(subscription_id, { status: resumed.status });\n return {\n subscription_id: resumed.id,\n status: resumed.status,\n message: \"Subscription resumed. Charges will continue on next scheduled date.\",\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Payments (v0.2)\n // ─────────────────────────────────────────────────────────────────────────\n\n create_payment: tool({\n description: desc(\"create_payment\"),\n inputSchema: z.object({\n amount_ars: z.number().positive().describe(\"Amount in ARS\"),\n payment_method_id: z.string().describe(\"MP payment method id (e.g. 'account_money', 'rapipago', 'visa', 'master', 'naranja')\"),\n payer_email: z.string().email().describe(\"Email of the payer. Cannot equal seller email.\"),\n token: z.string().optional().describe(\"Card token from MP frontend Cardform. Required for credit/debit; omit for cash/account_money.\"),\n installments: z.number().int().min(1).max(24).optional().describe(\"Number of installments (cuotas). Default 1. Use calculate_installments first to see options.\"),\n description: z.string().max(255).optional().describe(\"Short description\"),\n external_reference: z.string().optional().describe(\"Your-system identifier\"),\n identification: z.object({\n type: z.enum([\"DNI\", \"CUIT\", \"CUIL\"]),\n number: z.string(),\n }).optional().describe(\"Payer identification — required for some payment types in AR\"),\n statement_descriptor: z.string().max(13).optional().describe(\"Shows on buyer's card statement (max 13 chars)\"),\n }),\n execute: async (input) => {\n const payment = await client.createPayment({\n transactionAmount: input.amount_ars,\n paymentMethodId: input.payment_method_id,\n payerEmail: input.payer_email,\n ...(input.token !== undefined ? { token: input.token } : {}),\n ...(input.installments !== undefined ? { installments: input.installments } : {}),\n ...(input.description !== undefined ? { description: input.description } : {}),\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.identification !== undefined ? { identification: input.identification } : {}),\n ...(input.statement_descriptor !== undefined ? { statementDescriptor: input.statement_descriptor } : {}),\n ...(options.notificationUrl !== undefined ? { notificationUrl: options.notificationUrl } : {}),\n // Deterministic idempotency key — safe to retry, same inputs always\n // produce the same key (MP dedupes on its side).\n idempotencyKey: deterministicIdempotencyKey(\n \"create_payment\",\n input.external_reference ?? input.payer_email,\n input.amount_ars,\n input.payment_method_id,\n input.token,\n ),\n });\n return {\n payment_id: payment.id,\n status: payment.status,\n status_detail: payment.status_detail,\n amount: payment.transaction_amount,\n currency: payment.currency_id,\n installments: payment.installments,\n payment_method: payment.payment_method_id,\n payer_email: payment.payer?.email ?? null,\n external_reference: payment.external_reference,\n date_created: payment.date_created,\n date_approved: payment.date_approved,\n };\n },\n }),\n\n get_payment: tool({\n description: desc(\"get_payment\"),\n inputSchema: z.object({\n payment_id: z.string().describe(\"The MP payment ID\"),\n }),\n execute: async ({ payment_id }) => {\n const p = await client.getPayment(payment_id);\n return {\n payment_id: p.id,\n status: p.status,\n status_detail: p.status_detail,\n amount: p.transaction_amount,\n currency: p.currency_id,\n payment_method: p.payment_method_id,\n installments: p.installments,\n payer_email: p.payer?.email ?? null,\n external_reference: p.external_reference,\n date_created: p.date_created,\n date_approved: p.date_approved,\n net_received: p.transaction_details?.net_received_amount ?? null,\n };\n },\n }),\n\n search_payments: tool({\n description: desc(\"search_payments\"),\n inputSchema: z.object({\n external_reference: z.string().optional(),\n status: z.string().optional().describe(\"'approved' | 'pending' | 'rejected' | 'cancelled' | 'refunded' etc.\"),\n payer_email: z.string().optional(),\n begin_date: z.string().optional().describe(\"ISO 8601, e.g. 2026-01-01T00:00:00Z\"),\n end_date: z.string().optional().describe(\"ISO 8601\"),\n limit: z.number().int().min(1).max(100).optional().describe(\"Default 30, max 100\"),\n offset: z.number().int().min(0).optional().describe(\"Pagination offset (default 0)\"),\n }),\n execute: async (input) => {\n const result = await client.searchPayments({\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.status !== undefined ? { status: input.status } : {}),\n ...(input.payer_email !== undefined ? { payerEmail: input.payer_email } : {}),\n ...(input.begin_date !== undefined ? { beginDate: input.begin_date } : {}),\n ...(input.end_date !== undefined ? { endDate: input.end_date } : {}),\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n ...(input.offset !== undefined ? { offset: input.offset } : {}),\n });\n return {\n total: result.paging.total,\n returned: result.results.length,\n offset: result.paging.offset,\n payments: result.results.map((p) => ({\n payment_id: p.id,\n status: p.status,\n amount: p.transaction_amount,\n currency: p.currency_id,\n payer_email: p.payer?.email ?? null,\n external_reference: p.external_reference,\n date_created: p.date_created,\n })),\n };\n },\n }),\n\n cancel_payment: tool({\n description: desc(\"cancel_payment\"),\n inputSchema: z.object({ payment_id: z.string() }),\n execute: async ({ payment_id }) => {\n const cancelled = await client.cancelPayment(payment_id);\n return {\n payment_id: cancelled.id,\n status: cancelled.status,\n message: \"Payment cancelled. If it was already approved, use refund_payment instead.\",\n };\n },\n }),\n\n capture_payment: tool({\n description: desc(\"capture_payment\"),\n inputSchema: z.object({\n payment_id: z.string(),\n amount_ars: z.number().positive().optional().describe(\"Optional partial-capture amount. Omit to capture full authorized amount.\"),\n }),\n execute: async ({ payment_id, amount_ars }) => {\n const captured = await client.capturePayment(payment_id, amount_ars);\n return {\n payment_id: captured.id,\n status: captured.status,\n amount: captured.transaction_amount,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Refunds\n // ─────────────────────────────────────────────────────────────────────────\n\n refund_payment: tool({\n description: desc(\"refund_payment\"),\n inputSchema: z.object({\n payment_id: z.string(),\n amount_ars: z.number().positive().optional().describe(\"Partial-refund amount in ARS. Omit for full refund.\"),\n }),\n execute: async ({ payment_id, amount_ars }) => {\n const refund = await client.createRefund({\n paymentId: payment_id,\n ...(amount_ars !== undefined ? { amount: amount_ars } : {}),\n idempotencyKey: deterministicIdempotencyKey(\"refund\", payment_id, amount_ars ?? \"full\"),\n });\n return {\n refund_id: refund.id,\n payment_id: refund.payment_id,\n amount: refund.amount,\n status: refund.status,\n message:\n amount_ars === undefined\n ? \"Full refund issued. Funds return to the buyer in 3-10 business days.\"\n : `Partial refund of ${amount_ars} ARS issued.`,\n };\n },\n }),\n\n list_refunds: tool({\n description: desc(\"list_refunds\"),\n inputSchema: z.object({ payment_id: z.string() }),\n execute: async ({ payment_id }) => {\n const refunds = await client.listRefunds(payment_id);\n return {\n payment_id,\n count: refunds.length,\n refunds: refunds.map((r) => ({\n refund_id: r.id,\n amount: r.amount,\n status: r.status,\n date_created: r.date_created,\n })),\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Checkout Pro\n // ─────────────────────────────────────────────────────────────────────────\n\n create_payment_preference: tool({\n description: desc(\"create_payment_preference\"),\n inputSchema: z.object({\n items: z.array(z.object({\n title: z.string().min(1).max(256),\n quantity: z.number().int().positive(),\n unit_price: z.number().positive(),\n description: z.string().optional(),\n picture_url: z.string().url().optional(),\n })).min(1).describe(\"Items being charged. At least one required.\"),\n payer_email: z.string().email().optional().describe(\"Pre-fill the payer email on Checkout Pro form\"),\n external_reference: z.string().optional(),\n max_installments: z.number().int().min(1).max(24).optional().describe(\"Limit max cuotas offered. Defaults to MP account config.\"),\n statement_descriptor: z.string().max(13).optional(),\n excluded_payment_types: z.array(z.enum([\"credit_card\", \"debit_card\", \"ticket\", \"atm\", \"bank_transfer\"])).optional().describe(\"Block payment types — e.g., ['ticket'] to disable Rapipago/Pago Fácil\"),\n }),\n execute: async (input) => {\n const pref = await client.createPreference({\n items: input.items.map((it) => ({\n title: it.title,\n quantity: it.quantity,\n unit_price: it.unit_price,\n currency_id: \"ARS\",\n ...(it.description !== undefined ? { description: it.description } : {}),\n ...(it.picture_url !== undefined ? { picture_url: it.picture_url } : {}),\n })),\n ...(input.payer_email !== undefined ? { payer: { email: input.payer_email } } : {}),\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.statement_descriptor !== undefined ? { statementDescriptor: input.statement_descriptor } : {}),\n backUrls: { success: options.backUrl, failure: options.backUrl, pending: options.backUrl },\n autoReturn: \"approved\",\n ...(options.notificationUrl !== undefined ? { notificationUrl: options.notificationUrl } : {}),\n ...((input.max_installments !== undefined || input.excluded_payment_types !== undefined)\n ? {\n paymentMethods: {\n ...(input.max_installments !== undefined ? { installments: input.max_installments } : {}),\n ...(input.excluded_payment_types !== undefined\n ? { excluded_payment_types: input.excluded_payment_types.map((id) => ({ id })) }\n : {}),\n },\n }\n : {}),\n });\n return {\n preference_id: pref.id,\n init_point_url: pref.init_point ?? null,\n sandbox_init_point_url: pref.sandbox_init_point ?? null,\n external_reference: pref.external_reference,\n date_created: pref.date_created,\n next_step:\n \"Send init_point_url (or sandbox_init_point_url in sandbox) to the customer. After they pay, MP fires a webhook with the payment_id; use get_payment to confirm status.\",\n };\n },\n }),\n\n get_payment_preference: tool({\n description: desc(\"get_payment_preference\"),\n inputSchema: z.object({ preference_id: z.string() }),\n execute: async ({ preference_id }) => {\n const pref = await client.getPreference(preference_id);\n return {\n preference_id: pref.id,\n init_point_url: pref.init_point ?? null,\n sandbox_init_point_url: pref.sandbox_init_point ?? null,\n external_reference: pref.external_reference,\n items: pref.items,\n date_created: pref.date_created,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Customers + Saved Cards\n // ─────────────────────────────────────────────────────────────────────────\n\n create_customer: tool({\n description: desc(\"create_customer\"),\n inputSchema: z.object({\n email: z.string().email(),\n first_name: z.string().optional(),\n last_name: z.string().optional(),\n identification: z.object({\n type: z.enum([\"DNI\", \"CUIT\", \"CUIL\"]),\n number: z.string(),\n }).optional(),\n description: z.string().optional(),\n }),\n execute: async (input) => {\n const customer = await client.createCustomer({\n email: input.email,\n ...(input.first_name !== undefined ? { firstName: input.first_name } : {}),\n ...(input.last_name !== undefined ? { lastName: input.last_name } : {}),\n ...(input.identification !== undefined ? { identification: input.identification } : {}),\n ...(input.description !== undefined ? { description: input.description } : {}),\n });\n return {\n customer_id: customer.id,\n email: customer.email,\n first_name: customer.first_name,\n last_name: customer.last_name,\n date_created: customer.date_created,\n };\n },\n }),\n\n find_customer_by_email: tool({\n description: desc(\"find_customer_by_email\"),\n inputSchema: z.object({ email: z.string().email() }),\n execute: async ({ email }) => {\n const result = await client.searchCustomers({ email, limit: 1 });\n const customer = result.results[0] ?? null;\n return customer\n ? {\n found: true,\n customer_id: customer.id,\n email: customer.email,\n first_name: customer.first_name,\n last_name: customer.last_name,\n }\n : { found: false, customer_id: null };\n },\n }),\n\n list_customer_cards: tool({\n description: desc(\"list_customer_cards\"),\n inputSchema: z.object({ customer_id: z.string() }),\n execute: async ({ customer_id }) => {\n const cards = await client.listCustomerCards(customer_id);\n return {\n customer_id,\n count: cards.length,\n cards: cards.map((c) => ({\n card_id: c.id,\n last_four_digits: c.last_four_digits,\n expiration_month: c.expiration_month,\n expiration_year: c.expiration_year,\n payment_method: c.payment_method?.id ?? null,\n payment_method_name: c.payment_method?.name ?? null,\n })),\n };\n },\n }),\n\n delete_customer_card: tool({\n description: desc(\"delete_customer_card\"),\n inputSchema: z.object({\n customer_id: z.string(),\n card_id: z.string(),\n }),\n execute: async ({ customer_id, card_id }) => {\n await client.deleteCustomerCard(customer_id, card_id);\n return { customer_id, card_id, deleted: true };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Payment Methods + Installments\n // ─────────────────────────────────────────────────────────────────────────\n\n list_payment_methods: tool({\n description: desc(\"list_payment_methods\"),\n inputSchema: z.object({}),\n execute: async () => {\n const methods = await client.listPaymentMethods();\n return {\n count: methods.length,\n methods: methods.map((m) => ({\n id: m.id,\n name: m.name,\n payment_type: m.payment_type_id,\n status: m.status,\n min_amount: m.min_allowed_amount,\n max_amount: m.max_allowed_amount,\n })),\n };\n },\n }),\n\n calculate_installments: tool({\n description: desc(\"calculate_installments\"),\n inputSchema: z.object({\n amount_ars: z.number().positive(),\n payment_method_id: z.string().optional().describe(\"E.g. 'visa', 'master', 'naranja'. Omit for all available methods.\"),\n bin: z.string().min(6).max(8).optional().describe(\"First 6-8 digits of card for issuer-specific offers (e.g., Naranja interest-free promotions)\"),\n }),\n execute: async (input) => {\n const offers = await client.getInstallments({\n amount: input.amount_ars,\n ...(input.payment_method_id !== undefined ? { paymentMethodId: input.payment_method_id } : {}),\n ...(input.bin !== undefined ? { bin: input.bin } : {}),\n });\n return {\n amount: input.amount_ars,\n offers: offers.map((o) => ({\n payment_method_id: o.payment_method_id,\n payment_type_id: o.payment_type_id,\n issuer_name: o.issuer?.name ?? null,\n options: o.payer_costs.map((pc) => ({\n installments: pc.installments,\n installment_amount: pc.installment_amount,\n total_amount: pc.total_amount,\n installment_rate: pc.installment_rate,\n recommended_message: pc.recommended_message,\n })),\n })),\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Account\n // ─────────────────────────────────────────────────────────────────────────\n\n get_account_info: tool({\n description: desc(\"get_account_info\"),\n inputSchema: z.object({}),\n execute: async () => {\n const me = await client.getMe();\n return {\n account_id: me.id,\n email: me.email,\n nickname: me.nickname,\n country_id: me.country_id,\n site_id: me.site_id,\n user_type: me.user_type,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Saved-card charging (v0.3)\n // ─────────────────────────────────────────────────────────────────────────\n\n charge_saved_card: tool({\n description: desc(\"charge_saved_card\"),\n inputSchema: z.object({\n customer_id: z.string().describe(\"MP customer id (from create_customer / find_customer_by_email)\"),\n card_id: z.string().describe(\"Saved card id (from list_customer_cards)\"),\n security_code: z.string().regex(/^\\d{3,4}$/).describe(\"CVV — 3 digits (Visa/Master) or 4 (Amex). User must provide this each charge in AR.\"),\n amount_ars: z.number().positive(),\n description: z.string().min(1).max(255),\n installments: z.number().int().min(1).max(24).optional().describe(\"Default 1. Use calculate_installments first to pick a valid count.\"),\n external_reference: z.string().optional(),\n statement_descriptor: z.string().max(13).optional(),\n }),\n execute: async (input) => {\n const payment = await client.chargeSavedCard({\n customerId: input.customer_id,\n cardId: input.card_id,\n securityCode: input.security_code,\n amount: input.amount_ars,\n description: input.description,\n ...(input.installments !== undefined ? { installments: input.installments } : {}),\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.statement_descriptor !== undefined ? { statementDescriptor: input.statement_descriptor } : {}),\n idempotencyKey: deterministicIdempotencyKey(\n \"charge_saved_card\",\n input.card_id,\n input.amount_ars,\n input.external_reference,\n ),\n });\n return {\n payment_id: payment.id,\n status: payment.status,\n status_detail: payment.status_detail,\n amount: payment.transaction_amount,\n installments: payment.installments,\n payment_method: payment.payment_method_id,\n customer_id: input.customer_id,\n card_id: input.card_id,\n external_reference: payment.external_reference,\n date_approved: payment.date_approved,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // QR in-store (v0.3)\n // ─────────────────────────────────────────────────────────────────────────\n\n create_qr_payment: tool({\n description: desc(\"create_qr_payment\"),\n inputSchema: z.object({\n external_pos_id: z.string().describe(\"Pre-configured POS external_id from MP dashboard. Required.\"),\n amount_ars: z.number().positive(),\n title: z.string().min(1).max(80).describe(\"Display title shown when scanning\"),\n description: z.string().max(255).optional(),\n external_reference: z.string().optional(),\n notification_url: z.string().url().optional().describe(\"Webhook URL — falls back to dashboard config if omitted\"),\n expires_in_seconds: z.number().int().min(60).max(3600).optional().describe(\"Default 600 (10 min)\"),\n }),\n execute: async (input) => {\n // Lazy-load qrcode to keep cold-start lean for users who don't use QR\n const QRCode = (await import(\"qrcode\")).default;\n const me = await client.getMe();\n const userId = String(me.id);\n const expiresAt = new Date(\n Date.now() + (input.expires_in_seconds ?? 600) * 1000,\n ).toISOString();\n\n const qr = await client.createQrPayment(userId, {\n externalPosId: input.external_pos_id,\n totalAmount: input.amount_ars,\n title: input.title,\n ...(input.description !== undefined ? { description: input.description } : {}),\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.notification_url !== undefined ? { notificationUrl: input.notification_url } : {}),\n expirationDate: expiresAt,\n });\n\n const qrDataUrl = await QRCode.toDataURL(qr.qr_data, {\n errorCorrectionLevel: \"M\",\n margin: 1,\n width: 512,\n });\n\n return {\n in_store_order_id: qr.in_store_order_id,\n qr_data: qr.qr_data,\n qr_data_url: qrDataUrl,\n expires_at: expiresAt,\n external_pos_id: input.external_pos_id,\n amount: input.amount_ars,\n next_step:\n \"Display the qr_data_url image to the buyer. Wait for the payment webhook (point_integration_wh fires first, then payment topic). If buyer doesn't scan in time, call cancel_qr_payment to free the POS.\",\n };\n },\n }),\n\n cancel_qr_payment: tool({\n description: desc(\"cancel_qr_payment\"),\n inputSchema: z.object({\n external_pos_id: z.string(),\n }),\n execute: async ({ external_pos_id }) => {\n const me = await client.getMe();\n await client.cancelQrPayment(String(me.id), external_pos_id);\n return { external_pos_id, cancelled: true };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Subscription Plans (v0.4)\n // ─────────────────────────────────────────────────────────────────────────\n\n create_subscription_plan: tool({\n description: desc(\"create_subscription_plan\"),\n inputSchema: z.object({\n reason: z.string().min(3).max(120).describe(\"Plan name shown at checkout\"),\n amount_ars: z.number().positive(),\n frequency_months: z.number().int().min(1).max(12),\n back_url: z.string().url().describe(\"HTTPS URL where MP redirects after first payment\"),\n external_reference: z.string().optional(),\n free_trial_days: z.number().int().min(1).max(60).optional().describe(\"Free trial period in days before first charge\"),\n }),\n execute: async (input) => {\n const plan = await client.createSubscriptionPlan({\n reason: input.reason,\n amount: input.amount_ars,\n currency: \"ARS\",\n frequency: input.frequency_months,\n frequencyType: \"months\",\n backUrl: input.back_url,\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n ...(input.free_trial_days !== undefined ? { freeTrialFrequency: input.free_trial_days, freeTrialFrequencyType: \"days\" as const } : {}),\n });\n return {\n plan_id: plan.id,\n status: plan.status,\n reason: plan.reason,\n amount: plan.auto_recurring.transaction_amount,\n currency: plan.auto_recurring.currency_id,\n frequency: `${plan.auto_recurring.frequency} ${plan.auto_recurring.frequency_type}`,\n external_reference: plan.external_reference,\n next_step: \"Use subscribe_to_plan to enroll customers in this plan, or share its ID for them to subscribe via your frontend.\",\n };\n },\n }),\n\n list_subscription_plans: tool({\n description: desc(\"list_subscription_plans\"),\n inputSchema: z.object({\n status: z.string().optional(),\n limit: z.number().int().min(1).max(100).optional(),\n }),\n execute: async (input) => {\n const result = await client.listSubscriptionPlans({\n ...(input.status !== undefined ? { status: input.status } : {}),\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n });\n return {\n total: result.paging.total,\n plans: result.results.map((p) => ({\n plan_id: p.id,\n reason: p.reason,\n status: p.status,\n amount: p.auto_recurring.transaction_amount,\n currency: p.auto_recurring.currency_id,\n frequency: `${p.auto_recurring.frequency} ${p.auto_recurring.frequency_type}`,\n })),\n };\n },\n }),\n\n update_subscription_plan: tool({\n description: desc(\"update_subscription_plan\"),\n inputSchema: z.object({\n plan_id: z.string(),\n reason: z.string().optional(),\n amount_ars: z.number().positive().optional(),\n status: z.enum([\"active\", \"cancelled\"]).optional(),\n back_url: z.string().url().optional(),\n }),\n execute: async (input) => {\n const updated = await client.updateSubscriptionPlan(input.plan_id, {\n ...(input.reason !== undefined ? { reason: input.reason } : {}),\n ...(input.amount_ars !== undefined ? { amount: input.amount_ars } : {}),\n ...(input.status !== undefined ? { status: input.status } : {}),\n ...(input.back_url !== undefined ? { backUrl: input.back_url } : {}),\n });\n return {\n plan_id: updated.id,\n status: updated.status,\n reason: updated.reason,\n amount: updated.auto_recurring.transaction_amount,\n message: input.amount_ars !== undefined\n ? \"Updated. Existing subscribers keep their old amount; only NEW subscribers get the new pricing.\"\n : \"Plan updated.\",\n };\n },\n }),\n\n subscribe_to_plan: tool({\n description: desc(\"subscribe_to_plan\"),\n inputSchema: z.object({\n plan_id: z.string(),\n customer_email: z.string().email(),\n external_reference: z.string().optional(),\n }),\n execute: async (input) => {\n const sub = await client.subscribeToPlan({\n planId: input.plan_id,\n payerEmail: input.customer_email,\n ...(input.external_reference !== undefined ? { externalReference: input.external_reference } : {}),\n });\n return {\n subscription_id: sub.id,\n status: sub.status,\n payer_email: sub.payer_email,\n init_point_url: sub.init_point,\n next_step: \"Send init_point_url to the customer for first payment with card+CVV.\",\n };\n },\n }),\n\n list_subscription_payments: tool({\n description: desc(\"list_subscription_payments\"),\n inputSchema: z.object({\n subscription_id: z.string(),\n limit: z.number().int().min(1).max(100).optional(),\n }),\n execute: async (input) => {\n const result = await client.listSubscriptionPayments(input.subscription_id, {\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n });\n return {\n subscription_id: input.subscription_id,\n total: result.paging.total,\n payments: result.results.map((p) => ({\n authorized_payment_id: p.id,\n payment_id: p.payment_id ?? null,\n status: p.status,\n amount: p.transaction_amount ?? null,\n currency: p.currency_id ?? null,\n debit_date: p.debit_date ?? null,\n next_retry_date: p.next_retry_date ?? null,\n retry_attempt: p.retry_attempt ?? 0,\n reason: p.reason ?? null,\n })),\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Stores + POS (v0.4)\n // ─────────────────────────────────────────────────────────────────────────\n\n create_store: tool({\n description: desc(\"create_store\"),\n inputSchema: z.object({\n name: z.string().min(1).max(80),\n external_id: z.string().min(1).max(64).describe(\"Unique within the seller's stores\"),\n address_line: z.string().optional(),\n city_name: z.string().optional(),\n state_name: z.string().optional(),\n }),\n execute: async (input) => {\n const me = await client.getMe();\n const store = await client.createStore(String(me.id), {\n name: input.name,\n externalId: input.external_id,\n ...(input.address_line || input.city_name || input.state_name\n ? {\n location: {\n ...(input.address_line ? { addressLine: input.address_line } : {}),\n ...(input.city_name ? { cityName: input.city_name } : {}),\n ...(input.state_name ? { stateName: input.state_name } : {}),\n countryId: \"AR\",\n },\n }\n : {}),\n });\n return {\n store_id: store.id,\n name: store.name,\n external_id: store.external_id,\n next_step: \"Use create_pos with this store_id to add a Point of Sale where create_qr_payment can issue QRs.\",\n };\n },\n }),\n\n list_stores: tool({\n description: desc(\"list_stores\"),\n inputSchema: z.object({\n limit: z.number().int().min(1).max(100).optional(),\n }),\n execute: async (input) => {\n const me = await client.getMe();\n const result = await client.listStores(String(me.id), {\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n });\n return {\n total: result.paging.total,\n stores: result.results.map((s) => ({\n store_id: s.id,\n name: s.name ?? null,\n external_id: s.external_id ?? null,\n })),\n };\n },\n }),\n\n create_pos: tool({\n description: desc(\"create_pos\"),\n inputSchema: z.object({\n name: z.string().min(1).max(80),\n external_id: z.string().min(1).max(64).describe(\"Unique within the store. This is what create_qr_payment uses.\"),\n store_id: z.string().describe(\"From create_store / list_stores\"),\n category: z.number().int().optional().describe(\"MP category code, default 621102 (other food/beverage)\"),\n fixed_amount: z.boolean().optional().describe(\"True for static QR with fixed amount; false (default) for dynamic per-order QR\"),\n }),\n execute: async (input) => {\n const pos = await client.createPos({\n name: input.name,\n externalId: input.external_id,\n storeId: input.store_id,\n ...(input.category !== undefined ? { category: input.category } : {}),\n ...(input.fixed_amount !== undefined ? { fixedAmount: input.fixed_amount } : {}),\n });\n return {\n pos_id: pos.id,\n external_id: pos.external_id,\n store_id: pos.store_id,\n name: pos.name,\n next_step: \"Use create_qr_payment with this external_id to start issuing dynamic QRs from this POS.\",\n };\n },\n }),\n\n list_pos: tool({\n description: desc(\"list_pos\"),\n inputSchema: z.object({\n store_id: z.string().optional(),\n limit: z.number().int().min(1).max(100).optional(),\n }),\n execute: async (input) => {\n const result = await client.listPos({\n ...(input.store_id !== undefined ? { storeId: input.store_id } : {}),\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n });\n return {\n total: result.paging.total,\n pos: result.results.map((p) => ({\n pos_id: p.id,\n external_id: p.external_id ?? null,\n store_id: p.store_id ?? null,\n name: p.name ?? null,\n })),\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Disputes (v0.4 — read-only)\n // ─────────────────────────────────────────────────────────────────────────\n\n list_payment_disputes: tool({\n description: desc(\"list_payment_disputes\"),\n inputSchema: z.object({ payment_id: z.string() }),\n execute: async ({ payment_id }) => {\n const disputes = await client.listPaymentDisputes(payment_id);\n return {\n payment_id,\n count: disputes.length,\n disputes: disputes.map((d) => ({\n dispute_id: d.id,\n status: d.status,\n amount: d.amount ?? null,\n reason: d.reason ?? null,\n date_created: d.date_created ?? null,\n dashboard_url: `https://www.mercadopago.com.ar/disputes/${d.id}`,\n })),\n };\n },\n }),\n\n get_dispute: tool({\n description: desc(\"get_dispute\"),\n inputSchema: z.object({\n payment_id: z.string(),\n dispute_id: z.string(),\n }),\n execute: async ({ payment_id, dispute_id }) => {\n const d = await client.getDispute(payment_id, dispute_id);\n return {\n dispute_id: d.id,\n status: d.status,\n amount: d.amount ?? null,\n reason: d.reason ?? null,\n reason_description: d.reason_description ?? null,\n resolution: d.resolution ?? null,\n date_created: d.date_created ?? null,\n dashboard_url: `https://www.mercadopago.com.ar/disputes/${d.id}`,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Lookup helpers (v0.4)\n // ─────────────────────────────────────────────────────────────────────────\n\n list_identification_types: tool({\n description: desc(\"list_identification_types\"),\n inputSchema: z.object({}),\n execute: async () => {\n const types = await client.listIdentificationTypes();\n return {\n count: types.length,\n types: types.map((t) => ({\n id: t.id,\n name: t.name,\n type: t.type,\n min_length: t.min_length ?? null,\n max_length: t.max_length ?? null,\n })),\n };\n },\n }),\n\n list_issuers: tool({\n description: desc(\"list_issuers\"),\n inputSchema: z.object({\n payment_method_id: z.string().describe(\"E.g. 'visa', 'master', 'naranja'\"),\n bin: z.string().min(6).max(8).optional().describe(\"First 6-8 digits of card for precise issuer detection\"),\n }),\n execute: async (input) => {\n const issuers = await client.listIssuers({\n paymentMethodId: input.payment_method_id,\n ...(input.bin !== undefined ? { bin: input.bin } : {}),\n });\n return {\n payment_method_id: input.payment_method_id,\n count: issuers.length,\n issuers: issuers.map((i) => ({\n issuer_id: i.id,\n name: i.name,\n status: i.status ?? null,\n })),\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // Webhooks management (v0.4)\n // ─────────────────────────────────────────────────────────────────────────\n\n list_webhooks: tool({\n description: desc(\"list_webhooks\"),\n inputSchema: z.object({}),\n execute: async () => {\n const hooks = await client.listWebhooks();\n return {\n count: hooks.length,\n webhooks: hooks.map((h) => ({\n webhook_id: h.id,\n url: h.url ?? null,\n topic: h.topic ?? null,\n status: h.status ?? null,\n date_created: h.date_created ?? null,\n })),\n };\n },\n }),\n\n create_webhook: tool({\n description: desc(\"create_webhook\"),\n inputSchema: z.object({\n url: z.string().url(),\n topic: z.string().describe(\"E.g. 'payment', 'subscription_authorized_payment', 'subscription_preapproval', 'merchant_order', 'point_integration_wh'\"),\n }),\n execute: async ({ url, topic }) => {\n const hook = await client.createWebhook({ url, topic });\n return {\n webhook_id: hook.id,\n url: hook.url ?? url,\n topic: hook.topic ?? topic,\n status: hook.status ?? null,\n };\n },\n }),\n\n update_webhook: tool({\n description: desc(\"update_webhook\"),\n inputSchema: z.object({\n webhook_id: z.string(),\n url: z.string().url().optional(),\n topic: z.string().optional(),\n }),\n execute: async (input) => {\n const hook = await client.updateWebhook(input.webhook_id, {\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.topic !== undefined ? { topic: input.topic } : {}),\n });\n return {\n webhook_id: hook.id,\n url: hook.url ?? null,\n topic: hook.topic ?? null,\n status: hook.status ?? null,\n };\n },\n }),\n\n delete_webhook: tool({\n description: desc(\"delete_webhook\"),\n inputSchema: z.object({ webhook_id: z.string() }),\n execute: async ({ webhook_id }) => {\n await client.deleteWebhook(webhook_id);\n return { webhook_id, deleted: true };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // v0.5 — Webhook handler combo\n // ─────────────────────────────────────────────────────────────────────────\n\n handle_webhook: tool({\n description: desc(\"handle_webhook\"),\n inputSchema: z.object({\n raw_body: z\n .string()\n .describe(\n \"The raw JSON body of the webhook request, exactly as received (do NOT re-stringify). Pass `await req.text()` from your handler.\",\n ),\n signature_header: z\n .string()\n .nullable()\n .describe(\"Value of the `x-signature` request header.\"),\n request_id_header: z\n .string()\n .nullable()\n .describe(\"Value of the `x-request-id` request header.\"),\n auto_fetch: z\n .boolean()\n .optional()\n .default(true)\n .describe(\n \"If true (default), fetch the underlying resource (Payment, Subscription, etc.) AS the MP user the client is configured for. Set to false to skip the fetch (faster, useful when you only need the topic+id).\",\n ),\n }),\n execute: async ({\n raw_body,\n signature_header,\n request_id_header,\n auto_fetch,\n }) => {\n if (!options.webhookSecret) {\n return {\n verified: false,\n error:\n \"webhookSecret not configured in mercadoPagoTools options. Pass it from MP dev panel → Notificaciones → Webhooks.\",\n event: null,\n resource: null,\n };\n }\n let parsedBody: unknown;\n try {\n parsedBody = JSON.parse(raw_body);\n } catch {\n return {\n verified: false,\n error: \"raw_body is not valid JSON.\",\n event: null,\n resource: null,\n };\n }\n const event = parseWebhookEvent(parsedBody);\n if (!event) {\n return {\n verified: false,\n error: \"Could not extract topic + dataId from webhook body.\",\n event: null,\n resource: null,\n };\n }\n const verified = verifyWebhookSignature({\n requestId: request_id_header,\n dataId: event.dataId,\n signatureHeader: signature_header,\n secret: options.webhookSecret,\n });\n if (!verified) {\n return {\n verified: false,\n error: \"HMAC-SHA256 signature mismatch. Reject the webhook (HTTP 401).\",\n event,\n resource: null,\n };\n }\n let resource: unknown = null;\n let resourceError: string | null = null;\n if (auto_fetch) {\n try {\n switch (event.topic) {\n case \"payment\":\n case \"payment.created\":\n case \"payment.updated\":\n resource = await client.getPayment(event.dataId);\n break;\n case \"preapproval\":\n case \"subscription_preapproval\":\n resource = await client.getPreapproval(event.dataId);\n break;\n case \"subscription_authorized_payment\":\n // No direct fetch endpoint; the data id IS the authorized_payment id.\n resource = { id: event.dataId, hint: \"Use list_subscription_payments to enumerate parent.\" };\n break;\n default:\n resource = null;\n resourceError = `No auto-fetch handler for topic '${event.topic}' yet.`;\n }\n } catch (err) {\n resourceError = err instanceof Error ? err.message : String(err);\n }\n }\n return {\n verified: true,\n event,\n resource,\n resource_error: resourceError,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // v0.5 — OAuth Marketplace flow\n // ─────────────────────────────────────────────────────────────────────────\n\n oauth_authorize_url: tool({\n description: desc(\"oauth_authorize_url\"),\n inputSchema: z.object({\n redirect_uri: z\n .string()\n .url()\n .describe(\n \"Where MP redirects the seller after approval. MUST be whitelisted in MP dev panel → Aplicaciones → tu app → Redirect URIs.\",\n ),\n state: z\n .string()\n .min(8)\n .describe(\n \"Opaque CSRF/session token echoed back. Bind to the user's session and verify on redirect.\",\n ),\n }),\n execute: async ({ redirect_uri, state }) => {\n if (!options.oauth?.clientId) {\n return {\n available: false,\n error:\n \"OAuth not configured. Pass `oauth: { clientId, clientSecret }` to mercadoPagoTools options.\",\n url: null,\n };\n }\n const url = buildAuthorizeUrl({\n clientId: options.oauth.clientId,\n redirectUri: redirect_uri,\n state,\n });\n return {\n available: true,\n url,\n next_step:\n \"Redirect the seller to `url`. After approval MP sends them to redirect_uri?code=...&state=... — verify state matches, then call oauth_exchange_code with the code.\",\n };\n },\n }),\n\n oauth_exchange_code: tool({\n description: desc(\"oauth_exchange_code\"),\n inputSchema: z.object({\n code: z\n .string()\n .describe(\"The `code` query param from the OAuth redirect URL.\"),\n redirect_uri: z\n .string()\n .url()\n .describe(\n \"Must EXACTLY match the redirect_uri used in oauth_authorize_url.\",\n ),\n }),\n execute: async ({ code, redirect_uri }) => {\n if (!options.oauth?.clientId || !options.oauth?.clientSecret) {\n return {\n available: false,\n error:\n \"OAuth not configured. Pass `oauth: { clientId, clientSecret }` to mercadoPagoTools options.\",\n token: null,\n };\n }\n try {\n const token = await exchangeCodeForToken({\n clientId: options.oauth.clientId,\n clientSecret: options.oauth.clientSecret,\n code,\n redirectUri: redirect_uri,\n });\n return {\n available: true,\n token,\n next_step:\n \"PERSIST { user_id, access_token, refresh_token, expires_in } against this seller. Use access_token to instantiate `new MercadoPagoClient({ accessToken })` AS the seller for marketplace API calls.\",\n };\n } catch (err) {\n return {\n available: true,\n error: err instanceof Error ? err.message : String(err),\n token: null,\n };\n }\n },\n }),\n\n oauth_refresh_token: tool({\n description: desc(\"oauth_refresh_token\"),\n inputSchema: z.object({\n refresh_token: z\n .string()\n .describe(\"The saved refresh_token for this seller.\"),\n }),\n execute: async ({ refresh_token }) => {\n if (!options.oauth?.clientId || !options.oauth?.clientSecret) {\n return {\n available: false,\n error:\n \"OAuth not configured. Pass `oauth: { clientId, clientSecret }` to mercadoPagoTools options.\",\n token: null,\n };\n }\n try {\n const token = await refreshAccessToken({\n clientId: options.oauth.clientId,\n clientSecret: options.oauth.clientSecret,\n refreshToken: refresh_token,\n });\n return {\n available: true,\n token,\n next_step:\n \"Replace the persisted access_token + refresh_token with these new values (refresh_token may have rotated).\",\n };\n } catch (err) {\n return {\n available: true,\n error: err instanceof Error ? err.message : String(err),\n token: null,\n };\n }\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // v0.5 — Order Management API\n // ─────────────────────────────────────────────────────────────────────────\n\n create_order: tool({\n description: desc(\"create_order\"),\n inputSchema: z.object({\n type: z\n .enum([\"online\", \"in_store\"])\n .describe(\"'online' for hosted/checkout flow, 'in_store' for QR/POS\"),\n currency_id: z.string().optional().default(\"ARS\"),\n external_reference: z.string().optional(),\n total_amount: z.number().positive().optional(),\n items: z\n .array(\n z.object({\n title: z.string(),\n unit_price: z.number(),\n quantity: z.number(),\n description: z.string().optional(),\n }),\n )\n .optional(),\n payer_email: z.string().email().optional(),\n capture_mode: z\n .enum([\"automatic\", \"manual\"])\n .optional()\n .describe(\n \"'automatic' charges immediately; 'manual' authorizes only — capture later via capture_order.\",\n ),\n notification_url: z.string().url().optional(),\n marketplace: z\n .string()\n .optional()\n .describe(\n \"Marketplace identifier (your app's name). Required for split payments.\",\n ),\n marketplace_fee: z\n .number()\n .optional()\n .describe(\n \"Fee in ARS (NOT %) credited to the marketplace's MP account.\",\n ),\n collector_id: z\n .union([z.string(), z.number()])\n .optional()\n .describe(\n \"Seller's MP user_id (from oauth_exchange_code.user_id). Funds route here; marketplace_fee is split off to your account.\",\n ),\n }),\n execute: async (input) => {\n const params: Parameters<typeof client.createOrder>[0] = {\n type: input.type,\n };\n if (input.currency_id) params.currency_id = input.currency_id;\n if (input.external_reference) params.external_reference = input.external_reference;\n if (input.total_amount !== undefined) params.total_amount = input.total_amount;\n if (input.items) params.items = input.items;\n if (input.payer_email) params.payer = { email: input.payer_email };\n if (input.capture_mode) params.capture_mode = input.capture_mode;\n if (input.notification_url) params.notification_url = input.notification_url;\n if (input.marketplace) params.marketplace = input.marketplace;\n if (input.marketplace_fee !== undefined) params.marketplace_fee = input.marketplace_fee;\n if (input.collector_id !== undefined) params.collector_id = input.collector_id;\n const order = await client.createOrder(params, {\n idempotencyKey: deterministicIdempotencyKey(\n \"create_order\",\n input.external_reference,\n input.total_amount,\n input.collector_id,\n ),\n });\n return {\n order_id: order.id,\n status: order.status ?? null,\n capture_mode: order.capture_mode ?? params.capture_mode ?? \"automatic\",\n total_amount: order.total_amount ?? null,\n };\n },\n }),\n\n get_order: tool({\n description: desc(\"get_order\"),\n inputSchema: z.object({ order_id: z.string() }),\n execute: async ({ order_id }) => {\n const order = await client.getOrder(order_id);\n return order;\n },\n }),\n\n update_order: tool({\n description: desc(\"update_order\"),\n inputSchema: z.object({\n order_id: z.string(),\n external_reference: z.string().optional(),\n total_amount: z.number().optional(),\n }),\n execute: async ({ order_id, external_reference, total_amount }) => {\n const patch: Parameters<typeof client.updateOrder>[1] = {};\n if (external_reference !== undefined) patch.external_reference = external_reference;\n if (total_amount !== undefined) patch.total_amount = total_amount;\n const order = await client.updateOrder(order_id, patch);\n return order;\n },\n }),\n\n capture_order: tool({\n description: desc(\"capture_order\"),\n inputSchema: z.object({\n order_id: z.string(),\n amount: z\n .number()\n .positive()\n .optional()\n .describe(\n \"Optional partial-capture amount. Omit to capture the full authorized amount.\",\n ),\n }),\n execute: async ({ order_id, amount }) => {\n const order = await client.captureOrder(order_id, amount);\n return {\n order_id: order.id,\n status: order.status ?? null,\n captured_amount: amount ?? order.total_amount ?? null,\n };\n },\n }),\n\n cancel_order: tool({\n description: desc(\"cancel_order\"),\n inputSchema: z.object({ order_id: z.string() }),\n execute: async ({ order_id }) => {\n const order = await client.cancelOrder(order_id);\n return {\n order_id: order.id,\n status: order.status ?? \"canceled\",\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // v0.6 — Account / Balance / Movements / Settlements\n // ─────────────────────────────────────────────────────────────────────────\n\n get_account_balance: tool({\n description: desc(\"get_account_balance\"),\n inputSchema: z.object({}),\n execute: async () => {\n const balance = await client.getAccountBalance();\n return balance;\n },\n }),\n\n list_account_movements: tool({\n description: desc(\"list_account_movements\"),\n inputSchema: z.object({\n from: z\n .string()\n .optional()\n .describe(\"ISO 8601 start date (e.g. 2026-05-01)\"),\n to: z\n .string()\n .optional()\n .describe(\"ISO 8601 end date\"),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n }),\n execute: async ({ from, to, limit, offset }) => {\n const params: Parameters<typeof client.listAccountMovements>[0] = {};\n if (from !== undefined) params.from = from;\n if (to !== undefined) params.to = to;\n if (limit !== undefined) params.limit = limit;\n if (offset !== undefined) params.offset = offset;\n return client.listAccountMovements(params);\n },\n }),\n\n list_settlements: tool({\n description: desc(\"list_settlements\"),\n inputSchema: z.object({\n from: z.string().optional(),\n to: z.string().optional(),\n status: z.string().optional(),\n limit: z.number().int().min(1).max(100).optional(),\n offset: z.number().int().min(0).optional(),\n }),\n execute: async ({ from, to, status, limit, offset }) => {\n const params: Parameters<typeof client.listSettlements>[0] = {};\n if (from !== undefined) params.from = from;\n if (to !== undefined) params.to = to;\n if (status !== undefined) params.status = status;\n if (limit !== undefined) params.limit = limit;\n if (offset !== undefined) params.offset = offset;\n return client.listSettlements(params);\n },\n }),\n\n get_settlement: tool({\n description: desc(\"get_settlement\"),\n inputSchema: z.object({ settlement_id: z.string() }),\n execute: async ({ settlement_id }) => {\n return client.getSettlement(settlement_id);\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // v0.6 — 3DS analyzer (combined: fetch payment + analyze)\n // ─────────────────────────────────────────────────────────────────────────\n\n analyze_payment_3ds: tool({\n description: desc(\"analyze_payment_3ds\"),\n inputSchema: z.object({\n payment_id: z.string().describe(\"MP payment id\"),\n }),\n execute: async ({ payment_id }) => {\n const payment = await client.getPayment(payment_id);\n const info = analyze3DS(payment);\n return {\n payment_id,\n payment_status: payment.status,\n payment_status_detail: payment.status_detail ?? null,\n ...info,\n };\n },\n }),\n\n // ─────────────────────────────────────────────────────────────────────────\n // v0.6 — Test cards (pure)\n // ─────────────────────────────────────────────────────────────────────────\n\n get_test_cards: tool({\n description: desc(\"get_test_cards\"),\n inputSchema: z.object({}),\n execute: async () => {\n return {\n site: \"MLA\",\n cards: TEST_CARDS_AR,\n usage:\n \"Pass holderName='APRO' for an approved payment, 'OTHE' for rejected, 'CONT' for pending, 'FUND' for insufficient amount, 'CALL' for call-for-authorize. Use a NEW payer email per call (append a timestamp) to avoid MP idempotency-on-email deduping.\",\n };\n },\n }),\n } satisfies ToolSet;\n}\n","/**\n * In-memory record of a subscription. The lib persists the MP-side fields\n * needed to reason about a subscription without hitting the API every time\n * (status, last webhook info, customer email, etc.) plus a free-form metadata\n * bag for callers to attach business context (tenant id, plan name, etc.).\n */\nexport interface SubscriptionStateRecord {\n status?: string;\n payerEmail?: string;\n amount?: number;\n currency?: string;\n frequency?: number;\n frequencyType?: string;\n initPoint?: string;\n externalReference?: string;\n createdAt?: string;\n cancelledAt?: string;\n lastWebhookStatus?: string;\n lastWebhookAt?: string;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Persistence surface for subscription state. Implementations may back this\n * with Upstash Redis, Vercel KV, Postgres, in-memory, or anything that\n * supports the three operations. The default `InMemoryStateAdapter` is\n * provided for tests and trivial single-process deployments; production\n * setups should plug in a durable store.\n */\nexport interface SubscriptionStateAdapter {\n set(id: string, state: Partial<SubscriptionStateRecord>): Promise<void>;\n get(id: string): Promise<SubscriptionStateRecord | null>;\n list?(): Promise<string[]>;\n}\n\n/**\n * Volatile, single-process state adapter. Useful for tests and demos. Do not\n * use in production: state is lost on restart and is not safe across tenants.\n */\nexport class InMemoryStateAdapter implements SubscriptionStateAdapter {\n private readonly store = new Map<string, SubscriptionStateRecord>();\n\n async set(\n id: string,\n state: Partial<SubscriptionStateRecord>,\n ): Promise<void> {\n const existing = this.store.get(id) ?? {};\n this.store.set(id, { ...existing, ...state });\n }\n\n async get(id: string): Promise<SubscriptionStateRecord | null> {\n return this.store.get(id) ?? null;\n }\n\n async list(): Promise<string[]> {\n return Array.from(this.store.keys());\n }\n\n /** Test helper: drop everything. Not part of the adapter interface. */\n reset(): void {\n this.store.clear();\n }\n}\n"]}