{"version":3,"sources":["../src/schemas/common.ts","../src/schemas/item.ts","../src/schemas/category.ts","../src/schemas/question.ts","../src/schemas/order.ts","../src/schemas/claim.ts","../src/schemas/shipment.ts","../src/schemas/reputation.ts","../src/schemas/promotion.ts","../src/schemas/webhook.ts","../src/errors.ts","../src/retry.ts","../src/rate-limiter.ts","../src/oauth.ts","../src/telemetry.ts","../src/client.ts","../src/items.ts","../src/categories.ts","../src/questions.ts","../src/orders.ts","../src/claims.ts","../src/shipments.ts","../src/reputation.ts","../src/promotions.ts","../src/webhooks.ts","../src/hitl.ts"],"names":["z","ArAgentsError","sleep","DEFAULTS"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Site IDs (MLA / MLB / MLM / MLC / MCO / MLU / MPE)\n// ---------------------------------------------------------------------------\n\nexport const SiteId = z.enum([\n  \"MLA\", // Argentina\n  \"MLB\", // Brazil\n  \"MLM\", // Mexico\n  \"MLC\", // Chile\n  \"MCO\", // Colombia\n  \"MLU\", // Uruguay\n  \"MPE\", // Peru\n]);\nexport type SiteId = z.infer<typeof SiteId>;\n\n// MELI uses ISO 4217 alpha-3 codes. We accept upper or lower; canonical\n// serialization is upper.\nexport const Currency = z.enum([\n  \"ARS\", // MLA\n  \"BRL\", // MLB\n  \"MXN\", // MLM\n  \"CLP\", // MLC\n  \"COP\", // MCO\n  \"UYU\", // MLU\n  \"PEN\", // MPE\n  \"USD\",\n]);\nexport type Currency = z.infer<typeof Currency>;\n\n// ---------------------------------------------------------------------------\n// MELI item id pattern (e.g. MLA123456789, MLB987654321)\n// ---------------------------------------------------------------------------\n\nexport const MeliItemId = z\n  .string()\n  .regex(/^(MLA|MLB|MLM|MLC|MCO|MLU|MPE)\\d+$/, \"must be a MELI item id like 'MLA123456789'\");\nexport type MeliItemId = z.infer<typeof MeliItemId>;\n\n// ---------------------------------------------------------------------------\n// Category id (e.g. MLA1055)\n// ---------------------------------------------------------------------------\n\nexport const CategoryId = z\n  .string()\n  .regex(/^(MLA|MLB|MLM|MLC|MCO|MLU|MPE)\\d+$/, \"must be a MELI category id like 'MLA1055'\");\nexport type CategoryId = z.infer<typeof CategoryId>;\n\n// ---------------------------------------------------------------------------\n// Listing types and item statuses\n// ---------------------------------------------------------------------------\n\nexport const ListingType = z.enum([\n  \"free\",\n  \"bronze\",\n  \"silver\",\n  \"gold\",\n  \"gold_premium\",\n  \"gold_special\",\n  \"gold_pro\",\n]);\nexport type ListingType = z.infer<typeof ListingType>;\n\nexport const ItemStatus = z.enum([\n  \"active\",\n  \"paused\",\n  \"closed\",\n  \"under_review\",\n  \"inactive\",\n  \"payment_required\",\n  \"not_yet_active\",\n]);\nexport type ItemStatus = z.infer<typeof ItemStatus>;\n\n// ---------------------------------------------------------------------------\n// Cursor pagination\n// ---------------------------------------------------------------------------\n\nexport const PagingResponse = z.object({\n  total: z.number().int().nonnegative(),\n  offset: z.number().int().nonnegative().optional(),\n  limit: z.number().int().positive().optional(),\n});\nexport type PagingResponse = z.infer<typeof PagingResponse>;\n\nexport const ScrollPagingResponse = z.object({\n  total: z.number().int().nonnegative(),\n  scroll_id: z.string().optional(),\n  limit: z.number().int().positive().optional(),\n});\nexport type ScrollPagingResponse = z.infer<typeof ScrollPagingResponse>;\n\n// ---------------------------------------------------------------------------\n// Pictures\n// ---------------------------------------------------------------------------\n\nexport const Picture = z.object({\n  id: z.string().optional(),\n  url: z.string().url().optional(),\n  secure_url: z.string().url().optional(),\n  size: z.string().optional(),\n  max_size: z.string().optional(),\n  quality: z.string().optional(),\n});\nexport type Picture = z.infer<typeof Picture>;\n\n// ---------------------------------------------------------------------------\n// Common attribute (used in items + categories)\n// ---------------------------------------------------------------------------\n\nexport const ItemAttribute = z.object({\n  id: z.string(),\n  name: z.string().optional(),\n  value_id: z.string().nullable().optional(),\n  value_name: z.string().nullable().optional(),\n  value_struct: z\n    .object({\n      number: z.number().optional(),\n      unit: z.string().optional(),\n    })\n    .nullable()\n    .optional(),\n  attribute_group_id: z.string().optional(),\n  attribute_group_name: z.string().optional(),\n});\nexport type ItemAttribute = z.infer<typeof ItemAttribute>;\n","import { z } from \"zod\";\nimport {\n  CategoryId,\n  Currency,\n  ItemAttribute,\n  ItemStatus,\n  ListingType,\n  MeliItemId,\n  Picture,\n  SiteId,\n} from \"./common\";\n\n// ---------------------------------------------------------------------------\n// Variations\n// ---------------------------------------------------------------------------\n\nexport const ItemVariation = z.object({\n  id: z.union([z.string(), z.number()]),\n  price: z.number().nonnegative().optional(),\n  available_quantity: z.number().int().nonnegative().optional(),\n  sold_quantity: z.number().int().nonnegative().optional(),\n  attribute_combinations: z.array(ItemAttribute).optional(),\n  picture_ids: z.array(z.string()).optional(),\n  seller_custom_field: z.string().nullable().optional(),\n});\nexport type ItemVariation = z.infer<typeof ItemVariation>;\n\n// ---------------------------------------------------------------------------\n// Shipping\n// ---------------------------------------------------------------------------\n\nexport const ItemShipping = z.object({\n  mode: z\n    .enum([\"me1\", \"me2\", \"custom\", \"not_specified\"])\n    .optional(),\n  free_shipping: z.boolean().optional(),\n  logistic_type: z\n    .enum([\n      \"default\",\n      \"self_service\",\n      \"cross_docking\",\n      \"xd_drop_off\",\n      \"fulfillment\",\n      \"drop_off\",\n    ])\n    .optional(),\n  tags: z.array(z.string()).optional(),\n  dimensions: z.string().nullable().optional(),\n  local_pick_up: z.boolean().optional(),\n  free_methods: z\n    .array(\n      z.object({\n        id: z.union([z.string(), z.number()]),\n        rule: z\n          .object({\n            free_mode: z.string().optional(),\n            value: z.number().optional(),\n          })\n          .optional(),\n      }),\n    )\n    .optional(),\n});\nexport type ItemShipping = z.infer<typeof ItemShipping>;\n\n// ---------------------------------------------------------------------------\n// Item (full shape)\n// ---------------------------------------------------------------------------\n\nexport const Item = z.object({\n  id: MeliItemId,\n  site_id: SiteId,\n  title: z.string(),\n  subtitle: z.string().nullable().optional(),\n  seller_id: z.number().int(),\n  category_id: CategoryId,\n  official_store_id: z.number().int().nullable().optional(),\n  price: z.number().nonnegative(),\n  base_price: z.number().nonnegative().optional(),\n  original_price: z.number().nonnegative().nullable().optional(),\n  currency_id: Currency,\n  initial_quantity: z.number().int().nonnegative().optional(),\n  available_quantity: z.number().int().nonnegative(),\n  sold_quantity: z.number().int().nonnegative().optional(),\n  buying_mode: z.enum([\"buy_it_now\", \"auction\", \"classified\"]).optional(),\n  listing_type_id: ListingType,\n  start_time: z.string().optional(),\n  stop_time: z.string().optional(),\n  end_time: z.string().optional(),\n  expiration_time: z.string().optional(),\n  condition: z.enum([\"new\", \"used\", \"not_specified\"]).optional(),\n  permalink: z.string().url().optional(),\n  thumbnail: z.string().url().optional(),\n  secure_thumbnail: z.string().url().optional(),\n  pictures: z.array(Picture).optional(),\n  video_id: z.string().nullable().optional(),\n  descriptions: z\n    .array(z.object({ id: z.string() }))\n    .optional(),\n  accepts_mercadopago: z.boolean().optional(),\n  shipping: ItemShipping.optional(),\n  international_delivery_mode: z.string().optional(),\n  seller_address: z\n    .object({\n      city: z.object({ id: z.string().optional(), name: z.string().optional() }).optional(),\n      state: z.object({ id: z.string().optional(), name: z.string().optional() }).optional(),\n      country: z.object({ id: z.string().optional(), name: z.string().optional() }).optional(),\n      zip_code: z.string().optional(),\n    })\n    .optional(),\n  seller_contact: z.unknown().nullable().optional(),\n  location: z.unknown().optional(),\n  geolocation: z\n    .object({\n      latitude: z.number().optional(),\n      longitude: z.number().optional(),\n    })\n    .optional(),\n  coverage_areas: z.array(z.unknown()).optional(),\n  attributes: z.array(ItemAttribute).optional(),\n  warnings: z.array(z.unknown()).optional(),\n  listing_source: z.string().optional(),\n  variations: z.array(ItemVariation).optional(),\n  status: ItemStatus,\n  sub_status: z.array(z.string()).optional(),\n  tags: z.array(z.string()).optional(),\n  warranty: z.string().nullable().optional(),\n  catalog_product_id: z.string().nullable().optional(),\n  domain_id: z.string().nullable().optional(),\n  parent_item_id: MeliItemId.nullable().optional(),\n  differential_pricing: z.unknown().nullable().optional(),\n  deal_ids: z.array(z.string()).optional(),\n  automatic_relist: z.boolean().optional(),\n  date_created: z.string().optional(),\n  last_updated: z.string().optional(),\n  health: z.number().nullable().optional(),\n  catalog_listing: z.boolean().optional(),\n  channels: z.array(z.string()).optional(),\n});\nexport type Item = z.infer<typeof Item>;\n\n// ---------------------------------------------------------------------------\n// Create/update payloads\n// ---------------------------------------------------------------------------\n\nexport const ItemCreateRequest = z.object({\n  title: z.string().min(1),\n  category_id: CategoryId,\n  price: z.number().nonnegative(),\n  currency_id: Currency,\n  available_quantity: z.number().int().nonnegative(),\n  buying_mode: z.enum([\"buy_it_now\", \"classified\"]).default(\"buy_it_now\"),\n  listing_type_id: ListingType.default(\"gold_special\"),\n  condition: z.enum([\"new\", \"used\", \"not_specified\"]).default(\"new\"),\n  description: z\n    .object({ plain_text: z.string() })\n    .or(z.string())\n    .optional(),\n  pictures: z\n    .array(z.object({ source: z.string().url() }))\n    .min(1)\n    .optional(),\n  attributes: z.array(ItemAttribute).optional(),\n  variations: z.array(ItemVariation).optional(),\n  warranty: z.string().optional(),\n  shipping: ItemShipping.optional(),\n  catalog_listing: z.boolean().optional(),\n  catalog_product_id: z.string().optional(),\n});\nexport type ItemCreateRequest = z.infer<typeof ItemCreateRequest>;\n\nexport const ItemUpdateRequest = z\n  .object({\n    title: z.string().optional(),\n    price: z.number().nonnegative().optional(),\n    available_quantity: z.number().int().nonnegative().optional(),\n    status: z.enum([\"active\", \"paused\", \"closed\"]).optional(),\n    pictures: z.array(z.object({ source: z.string().url() })).optional(),\n    attributes: z.array(ItemAttribute).optional(),\n    variations: z.array(ItemVariation).optional(),\n  })\n  .partial();\nexport type ItemUpdateRequest = z.infer<typeof ItemUpdateRequest>;\n","import { z } from \"zod\";\nimport { CategoryId, ItemAttribute } from \"./common\";\n\n// ---------------------------------------------------------------------------\n// Category predictor — `/sites/{site}/category_predictor/predict`\n// ---------------------------------------------------------------------------\n\nexport const CategoryPrediction = z.object({\n  category_id: CategoryId,\n  category_name: z.string(),\n  domain_id: z.string().optional(),\n  domain_name: z.string().optional(),\n  prediction_probability: z.number().min(0).max(1).optional(),\n  attributes: z.array(ItemAttribute).optional(),\n  /** Path to root, e.g. \"Electrónica > Celulares y Teléfonos > Celulares y Smartphones\". */\n  category_path: z\n    .array(z.object({ id: CategoryId, name: z.string() }))\n    .optional(),\n});\nexport type CategoryPrediction = z.infer<typeof CategoryPrediction>;\n\n// ---------------------------------------------------------------------------\n// Domain discovery — `/sites/{site}/domain_discovery/search` (better than predictor)\n// ---------------------------------------------------------------------------\n\nexport const DomainDiscoveryResult = z.object({\n  domain_id: z.string(),\n  domain_name: z.string(),\n  category_id: CategoryId,\n  category_name: z.string(),\n  attributes: z\n    .array(\n      z.object({\n        id: z.string(),\n        value_id: z.string().nullable().optional(),\n        value_name: z.string().nullable().optional(),\n      }),\n    )\n    .optional(),\n});\nexport type DomainDiscoveryResult = z.infer<typeof DomainDiscoveryResult>;\n\n// ---------------------------------------------------------------------------\n// Domain technical specs — `/domains/{id}/technical_specs/input`\n// ---------------------------------------------------------------------------\n\nexport const TechnicalSpecAttribute = z.object({\n  id: z.string(),\n  name: z.string().optional(),\n  hierarchy: z.string().optional(),\n  relevance: z.number().int().optional(),\n  required: z.boolean().optional(),\n  /** Allowed values when the attribute has a closed enum. */\n  values: z\n    .array(\n      z.object({\n        id: z.string().optional(),\n        name: z.string().optional(),\n        metadata: z.record(z.string(), z.unknown()).optional(),\n      }),\n    )\n    .optional(),\n  value_type: z.string().optional(),\n  value_max_length: z.number().int().optional(),\n  tags: z.record(z.string(), z.unknown()).optional(),\n});\nexport type TechnicalSpecAttribute = z.infer<typeof TechnicalSpecAttribute>;\n\nexport const TechnicalSpecResponse = z.object({\n  /** \"MAIN\" attributes are required to publish; \"DELT\" are optional but\n   * recommended for relevance / catalog matching. */\n  groups: z.array(\n    z.object({\n      id: z.string(),\n      label: z.string().optional(),\n      components: z.array(TechnicalSpecAttribute),\n    }),\n  ),\n});\nexport type TechnicalSpecResponse = z.infer<typeof TechnicalSpecResponse>;\n\n// ---------------------------------------------------------------------------\n// Category metadata — `/categories/{id}`\n// ---------------------------------------------------------------------------\n\nexport const CategoryMetadata = z.object({\n  id: CategoryId,\n  name: z.string(),\n  picture: z.string().url().nullable().optional(),\n  permalink: z.string().nullable().optional(),\n  total_items_in_this_category: z.number().int().nonnegative().optional(),\n  path_from_root: z\n    .array(z.object({ id: CategoryId, name: z.string() }))\n    .optional(),\n  children_categories: z\n    .array(z.object({ id: CategoryId, name: z.string() }))\n    .optional(),\n  attribute_types: z.string().optional(),\n  attributes: z.array(TechnicalSpecAttribute).optional(),\n  settings: z.record(z.string(), z.unknown()).optional(),\n});\nexport type CategoryMetadata = z.infer<typeof CategoryMetadata>;\n","import { z } from \"zod\";\nimport { MeliItemId } from \"./common\";\n\n// ---------------------------------------------------------------------------\n// Question + answer — `/questions/search` + `/questions/{id}` + `/answers`\n// ---------------------------------------------------------------------------\n\nexport const QuestionStatus = z.enum([\n  \"ANSWERED\",\n  \"UNANSWERED\",\n  \"CLOSED_UNANSWERED\",\n  \"UNDER_REVIEW\",\n  \"BANNED\",\n  \"DELETED\",\n  \"DISABLED\",\n]);\nexport type QuestionStatus = z.infer<typeof QuestionStatus>;\n\nexport const Answer = z.object({\n  text: z.string(),\n  status: z.enum([\"ACTIVE\", \"DISABLED\", \"UNDER_REVIEW\", \"DELETED\"]).optional(),\n  date_created: z.string().optional(),\n});\nexport type Answer = z.infer<typeof Answer>;\n\nexport const Question = z.object({\n  id: z.number().int(),\n  date_created: z.string(),\n  item_id: MeliItemId,\n  seller_id: z.number().int(),\n  status: QuestionStatus,\n  text: z.string(),\n  answer: Answer.nullable().optional(),\n  deleted_from_listing: z.boolean().optional(),\n  hold: z.boolean().optional(),\n  from: z\n    .object({\n      id: z.number().int(),\n      answered_questions: z.number().int().nonnegative().optional(),\n    })\n    .optional(),\n});\nexport type Question = z.infer<typeof Question>;\n\nexport const QuestionsSearchResponse = z.object({\n  questions: z.array(Question),\n  total: z.number().int().nonnegative(),\n  limit: z.number().int().positive().optional(),\n  offset: z.number().int().nonnegative().optional(),\n  filters: z.unknown().optional(),\n  available_filters: z.unknown().optional(),\n  available_sorts: z.unknown().optional(),\n});\nexport type QuestionsSearchResponse = z.infer<typeof QuestionsSearchResponse>;\n\nexport const AnswerRequest = z.object({\n  question_id: z.number().int(),\n  text: z.string().min(1).max(2000),\n});\nexport type AnswerRequest = z.infer<typeof AnswerRequest>;\n\n// ---------------------------------------------------------------------------\n// Spam classification helper — heuristic features used by the LLM-based\n// classifier in `questions.ts#classifyAsSpam`.\n// ---------------------------------------------------------------------------\n\nexport const QuestionSpamFeatures = z.object({\n  /** Account age in days (if known). New accounts are higher-risk. */\n  asker_account_age_days: z.number().nonnegative().optional(),\n  /** Past answered questions by this asker. */\n  asker_answered_questions: z.number().int().nonnegative().optional(),\n  /** True if the question contains URLs / phone numbers / emails. */\n  contains_external_contact: z.boolean(),\n  /** True if the question is duplicated across many listings. */\n  cross_listing_repetition: z.boolean(),\n  /** Length of the question text. */\n  text_length: z.number().int().nonnegative(),\n});\nexport type QuestionSpamFeatures = z.infer<typeof QuestionSpamFeatures>;\n","import { z } from \"zod\";\nimport { Currency, MeliItemId } from \"./common\";\n\n// ---------------------------------------------------------------------------\n// Order — `/orders/search` + `/orders/{id}`\n// ---------------------------------------------------------------------------\n\nexport const OrderStatus = z.enum([\n  \"confirmed\",\n  \"payment_required\",\n  \"payment_in_process\",\n  \"partially_paid\",\n  \"paid\",\n  \"cancelled\",\n  \"invalid\",\n]);\nexport type OrderStatus = z.infer<typeof OrderStatus>;\n\nexport const OrderItem = z.object({\n  item: z.object({\n    id: MeliItemId,\n    title: z.string(),\n    category_id: z.string().optional(),\n    variation_id: z.union([z.string(), z.number()]).nullable().optional(),\n    seller_custom_field: z.string().nullable().optional(),\n    variation_attributes: z\n      .array(z.object({ name: z.string(), id: z.string(), value_name: z.string().optional() }))\n      .optional(),\n    warranty: z.string().nullable().optional(),\n    condition: z.enum([\"new\", \"used\", \"not_specified\"]).optional(),\n  }),\n  quantity: z.number().int().positive(),\n  unit_price: z.number().nonnegative(),\n  full_unit_price: z.number().nonnegative().optional(),\n  currency_id: Currency,\n  manufacturing_days: z.number().int().nullable().optional(),\n  sale_fee: z.number().nullable().optional(),\n  listing_type_id: z.string().optional(),\n});\nexport type OrderItem = z.infer<typeof OrderItem>;\n\nexport const OrderPayment = z.object({\n  id: z.union([z.string(), z.number()]),\n  status: z\n    .enum([\n      \"pending\",\n      \"approved\",\n      \"authorized\",\n      \"in_process\",\n      \"in_mediation\",\n      \"rejected\",\n      \"cancelled\",\n      \"refunded\",\n      \"charged_back\",\n    ])\n    .optional(),\n  status_detail: z.string().nullable().optional(),\n  transaction_amount: z.number().optional(),\n  total_paid_amount: z.number().optional(),\n  currency_id: Currency.optional(),\n  payer_id: z.number().int().optional(),\n  installments: z.number().int().optional(),\n  payment_method_id: z.string().optional(),\n  payment_type: z.string().optional(),\n  date_approved: z.string().nullable().optional(),\n  date_created: z.string().optional(),\n});\nexport type OrderPayment = z.infer<typeof OrderPayment>;\n\nexport const OrderBuyer = z.object({\n  id: z.number().int(),\n  nickname: z.string().optional(),\n  first_name: z.string().nullable().optional(),\n  last_name: z.string().nullable().optional(),\n  email: z.string().nullable().optional(),\n  billing_info: z\n    .object({\n      doc_type: z.string().nullable().optional(),\n      doc_number: z.string().nullable().optional(),\n    })\n    .nullable()\n    .optional(),\n});\nexport type OrderBuyer = z.infer<typeof OrderBuyer>;\n\nexport const Order = z.object({\n  id: z.number().int(),\n  date_created: z.string(),\n  date_closed: z.string().optional(),\n  last_updated: z.string().optional(),\n  expiration_date: z.string().nullable().optional(),\n  status: OrderStatus,\n  status_detail: z.unknown().nullable().optional(),\n  total_amount: z.number().nonnegative(),\n  paid_amount: z.number().nullable().optional(),\n  currency_id: Currency,\n  pack_id: z.number().int().nullable().optional(),\n  pickup_id: z.number().int().nullable().optional(),\n  fulfilled: z.boolean().optional(),\n  shipping: z\n    .object({\n      id: z.number().int().nullable().optional(),\n    })\n    .optional(),\n  order_items: z.array(OrderItem),\n  payments: z.array(OrderPayment).optional(),\n  buyer: OrderBuyer,\n  seller: z\n    .object({\n      id: z.number().int(),\n      nickname: z.string().optional(),\n    })\n    .optional(),\n  feedback: z.unknown().nullable().optional(),\n  tags: z.array(z.string()).optional(),\n  manufacturing_ending_date: z.string().nullable().optional(),\n  application_id: z.string().optional(),\n  context: z\n    .object({\n      channel: z.string().optional(),\n      site: z.string().optional(),\n      flows: z.array(z.string()).optional(),\n    })\n    .optional(),\n});\nexport type Order = z.infer<typeof Order>;\n\nexport const OrdersSearchResponse = z.object({\n  results: z.array(Order),\n  paging: z.object({\n    total: z.number().int().nonnegative(),\n    offset: z.number().int().nonnegative().optional(),\n    limit: z.number().int().positive().optional(),\n  }),\n});\nexport type OrdersSearchResponse = z.infer<typeof OrdersSearchResponse>;\n\n// ---------------------------------------------------------------------------\n// Pack — `/marketplace/orders/pack/{pack_id}`\n// ---------------------------------------------------------------------------\n\nexport const Pack = z.object({\n  id: z.number().int(),\n  status: z.string(),\n  /** Each entry corresponds to one Order id within the pack. */\n  orders: z.array(\n    z.object({\n      id: z.number().int(),\n      buyer: z.object({ id: z.number().int() }).optional(),\n    }),\n  ),\n  shipment: z\n    .object({\n      id: z.number().int(),\n    })\n    .optional(),\n});\nexport type Pack = z.infer<typeof Pack>;\n","import { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Claim / Mediation — `/post-purchase/v1/claims/{id}` + `/v2/claims/{id}/returns`\n// ---------------------------------------------------------------------------\n\nexport const ClaimStage = z.enum([\n  \"claim\",\n  \"dispute\",\n  \"mediation\",\n  \"resolved\",\n  \"cancelled\",\n]);\nexport type ClaimStage = z.infer<typeof ClaimStage>;\n\nexport const ClaimStatus = z.enum([\n  \"opened\",\n  \"closed\",\n  \"expired\",\n  \"potential_claim\",\n]);\nexport type ClaimStatus = z.infer<typeof ClaimStatus>;\n\nexport const ClaimReason = z.object({\n  id: z.string(),\n  name: z.string(),\n  detail: z.string().optional(),\n});\nexport type ClaimReason = z.infer<typeof ClaimReason>;\n\nexport const ClaimPlayer = z.object({\n  role: z.enum([\"complainant\", \"respondent\", \"mediator\"]),\n  type: z.enum([\"buyer\", \"seller\", \"ml\"]),\n  user_id: z.number().int(),\n  available_actions: z.array(z.string()).optional(),\n});\nexport type ClaimPlayer = z.infer<typeof ClaimPlayer>;\n\nexport const Claim = z.object({\n  id: z.number().int(),\n  resource: z.enum([\"order\", \"shipment\", \"payment\"]),\n  resource_id: z.number().int(),\n  status: ClaimStatus,\n  stage: ClaimStage,\n  parent_id: z.number().int().nullable().optional(),\n  type: z.string().optional(),\n  reason_id: z.string().optional(),\n  reason: ClaimReason.optional(),\n  fulfilled: z.boolean().optional(),\n  quantity_type: z.string().optional(),\n  date_created: z.string(),\n  last_updated: z.string().optional(),\n  resolution: z\n    .object({\n      reason: z.string().nullable().optional(),\n      decision: z.string().nullable().optional(),\n      benefited: z.array(z.string()).optional(),\n      date_created: z.string().optional(),\n    })\n    .nullable()\n    .optional(),\n  players: z.array(ClaimPlayer).optional(),\n  related_entities: z.array(z.unknown()).optional(),\n  site_id: z.string().optional(),\n});\nexport type Claim = z.infer<typeof Claim>;\n\n// ---------------------------------------------------------------------------\n// Evidence upload — one-shot, immutable per spec.\n// ---------------------------------------------------------------------------\n\nexport const EvidenceType = z.enum([\n  \"PROOF_OF_SHIPMENT\",\n  \"ITEM_DESCRIPTION_VS_RECEIVED\",\n  \"VIDEO_OF_PRODUCT\",\n  \"INVOICE\",\n  \"MESSAGE_THREAD\",\n  \"DELIVERY_PROOF\",\n  \"RETURN_PROOF\",\n  \"OTHER\",\n]);\nexport type EvidenceType = z.infer<typeof EvidenceType>;\n\nexport const ClaimEvidence = z.object({\n  id: z.string().optional(),\n  type: EvidenceType,\n  /** Free-form text evidence description. */\n  text: z.string().optional(),\n  /** URL of the uploaded file (returned by attachment upload). */\n  attachment_url: z.string().url().optional(),\n  /** Attachment id once uploaded via /messages/attachments. */\n  attachment_id: z.string().optional(),\n  /** ISO 8601. */\n  date_created: z.string().optional(),\n});\nexport type ClaimEvidence = z.infer<typeof ClaimEvidence>;\n\nexport const EvidenceUploadRequest = z.object({\n  evidence_type: EvidenceType,\n  text: z.string().optional(),\n  attachment_id: z.string().optional(),\n});\nexport type EvidenceUploadRequest = z.infer<typeof EvidenceUploadRequest>;\n\n// ---------------------------------------------------------------------------\n// Claim message thread\n// ---------------------------------------------------------------------------\n\nexport const ClaimMessage = z.object({\n  id: z.string().optional(),\n  date: z.string().optional(),\n  sender_role: z.enum([\"complainant\", \"respondent\", \"mediator\"]).optional(),\n  sender_user_id: z.number().int().optional(),\n  message: z.string(),\n  attachments: z\n    .array(z.object({ url: z.string().url().optional(), name: z.string().optional() }))\n    .optional(),\n});\nexport type ClaimMessage = z.infer<typeof ClaimMessage>;\n","import { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Shipment — `/shipments/{id}` + `/shipments/{id}/history`\n// ---------------------------------------------------------------------------\n\nexport const ShipmentStatus = z.enum([\n  \"pending\",\n  \"handling\",\n  \"ready_to_ship\",\n  \"shipped\",\n  \"delivered\",\n  \"not_delivered\",\n  \"cancelled\",\n  \"returned\",\n]);\nexport type ShipmentStatus = z.infer<typeof ShipmentStatus>;\n\nexport const ShipmentMode = z.enum([\"me1\", \"me2\", \"custom\", \"not_specified\"]);\nexport type ShipmentMode = z.infer<typeof ShipmentMode>;\n\nexport const ShipmentLogisticType = z.enum([\n  \"self_service\", // Flex\n  \"cross_docking\", // Colecta\n  \"xd_drop_off\", // Drop-off\n  \"fulfillment\", // Full\n  \"drop_off\",\n  \"default\",\n]);\nexport type ShipmentLogisticType = z.infer<typeof ShipmentLogisticType>;\n\nexport const ShipmentItem = z.object({\n  id: z.string(),\n  description: z.string().optional(),\n  quantity: z.number().int().positive().optional(),\n});\nexport type ShipmentItem = z.infer<typeof ShipmentItem>;\n\nexport const ShipmentReceiverAddress = z.object({\n  id: z.number().int().optional(),\n  address_line: z.string().optional(),\n  street_name: z.string().optional(),\n  street_number: z.string().nullable().optional(),\n  comment: z.string().nullable().optional(),\n  zip_code: z.string().optional(),\n  city: z.object({ id: z.string().optional(), name: z.string().optional() }).optional(),\n  state: z.object({ id: z.string().optional(), name: z.string().optional() }).optional(),\n  country: z.object({ id: z.string().optional(), name: z.string().optional() }).optional(),\n  receiver_name: z.string().nullable().optional(),\n  receiver_phone: z.string().nullable().optional(),\n  latitude: z.number().nullable().optional(),\n  longitude: z.number().nullable().optional(),\n});\nexport type ShipmentReceiverAddress = z.infer<typeof ShipmentReceiverAddress>;\n\nexport const Shipment = z.object({\n  id: z.number().int(),\n  status: ShipmentStatus,\n  substatus: z.string().nullable().optional(),\n  mode: ShipmentMode.optional(),\n  logistic_type: ShipmentLogisticType.optional(),\n  date_created: z.string(),\n  last_updated: z.string().optional(),\n  tracking_number: z.string().nullable().optional(),\n  tracking_method: z.string().nullable().optional(),\n  service_id: z.number().int().nullable().optional(),\n  base_cost: z.number().nullable().optional(),\n  /** USD-denominated insurance value. */\n  declared_value: z.number().nullable().optional(),\n  origin: z\n    .object({\n      type: z.string().optional(),\n      sender_id: z.number().int().optional(),\n      shipping_address: ShipmentReceiverAddress.optional(),\n    })\n    .optional(),\n  destination: z\n    .object({\n      receiver_address: ShipmentReceiverAddress.optional(),\n      type: z.string().optional(),\n      receiver_id: z.number().int().optional(),\n    })\n    .optional(),\n  shipping_items: z.array(ShipmentItem).optional(),\n  /** Free-shipping or paid? */\n  cost: z.number().nullable().optional(),\n  estimated_delivery_time: z\n    .object({\n      date: z.string().nullable().optional(),\n      time_from: z.string().nullable().optional(),\n      time_to: z.string().nullable().optional(),\n    })\n    .optional(),\n  /** Window required to dispatch (Flex SLA). */\n  estimated_handling_limit: z\n    .object({\n      date: z.string().nullable().optional(),\n    })\n    .optional(),\n});\nexport type Shipment = z.infer<typeof Shipment>;\n\nexport const ShipmentHistoryEntry = z.object({\n  status: ShipmentStatus.optional(),\n  substatus: z.string().nullable().optional(),\n  date: z.string(),\n  comment: z.string().nullable().optional(),\n});\nexport type ShipmentHistoryEntry = z.infer<typeof ShipmentHistoryEntry>;\n\n// ---------------------------------------------------------------------------\n// Labels — `/shipment_labels?shipment_ids=...&response_type=pdf|zpl`\n// ---------------------------------------------------------------------------\n\nexport const LabelFormat = z.enum([\"pdf\", \"zpl\"]);\nexport type LabelFormat = z.infer<typeof LabelFormat>;\n\n// ---------------------------------------------------------------------------\n// Shipping options — `/items/{id}/shipping_options`\n// ---------------------------------------------------------------------------\n\nexport const ShippingOption = z.object({\n  id: z.number().int().optional(),\n  name: z.string(),\n  cost: z.number(),\n  currency_id: z.string(),\n  estimated_delivery_time: z\n    .object({\n      date: z.string().nullable().optional(),\n      handling_time: z\n        .object({\n          date: z.string().optional(),\n          time_from: z.string().optional(),\n          time_to: z.string().optional(),\n        })\n        .optional(),\n    })\n    .optional(),\n  display: z.string().optional(),\n});\nexport type ShippingOption = z.infer<typeof ShippingOption>;\n","import { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Seller reputation — `/users/{id}/seller_reputation`\n// ---------------------------------------------------------------------------\n\nexport const ReputationLevel = z.enum([\n  \"5_green\",\n  \"4_light_green\",\n  \"3_yellow\",\n  \"2_orange\",\n  \"1_red\",\n  \"newbie\",\n]);\nexport type ReputationLevel = z.infer<typeof ReputationLevel>;\n\nexport const PowerSellerStatus = z.enum([\"platinum\", \"gold\", \"silver\"]).nullable();\nexport type PowerSellerStatus = z.infer<typeof PowerSellerStatus>;\n\nexport const ReputationMetric = z.object({\n  rate: z.number().min(0).max(1).optional(),\n  value: z.number().nonnegative().optional(),\n});\nexport type ReputationMetric = z.infer<typeof ReputationMetric>;\n\nexport const ReputationMetrics = z.object({\n  claims: z\n    .object({\n      rate: z.number().min(0).max(1).optional(),\n      value: z.number().nonnegative().optional(),\n      period: z.string().optional(),\n      excluded: z.unknown().optional(),\n    })\n    .optional(),\n  delayed_handling_time: z\n    .object({\n      rate: z.number().min(0).max(1).optional(),\n      value: z.number().nonnegative().optional(),\n      period: z.string().optional(),\n    })\n    .optional(),\n  cancellations: z\n    .object({\n      rate: z.number().min(0).max(1).optional(),\n      value: z.number().nonnegative().optional(),\n      period: z.string().optional(),\n    })\n    .optional(),\n  sales: z\n    .object({\n      period: z.string().optional(),\n      completed: z.number().int().nonnegative().optional(),\n    })\n    .optional(),\n});\nexport type ReputationMetrics = z.infer<typeof ReputationMetrics>;\n\nexport const SellerReputation = z.object({\n  level_id: ReputationLevel.nullable().optional(),\n  power_seller_status: PowerSellerStatus.optional(),\n  protection_end_date: z.string().nullable().optional(),\n  status: z\n    .object({\n      list: z\n        .object({\n          allow: z.boolean().optional(),\n          codes: z.array(z.string()).optional(),\n        })\n        .optional(),\n      buy: z\n        .object({\n          allow: z.boolean().optional(),\n          codes: z.array(z.string()).optional(),\n        })\n        .optional(),\n      sell: z\n        .object({\n          allow: z.boolean().optional(),\n          codes: z.array(z.string()).optional(),\n        })\n        .optional(),\n      billing: z\n        .object({\n          allow: z.boolean().optional(),\n          codes: z.array(z.string()).optional(),\n        })\n        .optional(),\n    })\n    .optional(),\n  transactions: z\n    .object({\n      canceled: z.number().int().nonnegative().optional(),\n      completed: z.number().int().nonnegative().optional(),\n      period: z.string().optional(),\n      ratings: z\n        .object({\n          negative: z.number().min(0).max(1).optional(),\n          neutral: z.number().min(0).max(1).optional(),\n          positive: z.number().min(0).max(1).optional(),\n        })\n        .optional(),\n      total: z.number().int().nonnegative().optional(),\n    })\n    .optional(),\n  metrics: ReputationMetrics.optional(),\n});\nexport type SellerReputation = z.infer<typeof SellerReputation>;\n\n// ---------------------------------------------------------------------------\n// Reputation alert (synthesized by the monitor — not part of MELI's API).\n// ---------------------------------------------------------------------------\n\nexport const ReputationAlertSeverity = z.enum([\"info\", \"warning\", \"critical\"]);\nexport type ReputationAlertSeverity = z.infer<typeof ReputationAlertSeverity>;\n\nexport const ReputationAlert = z.object({\n  severity: ReputationAlertSeverity,\n  title: z.string(),\n  detail: z.string(),\n  metric: z.string().optional(),\n  current_value: z.number().optional(),\n  threshold: z.number().optional(),\n});\nexport type ReputationAlert = z.infer<typeof ReputationAlert>;\n","import { z } from \"zod\";\nimport { Currency, MeliItemId } from \"./common\";\n\n// ---------------------------------------------------------------------------\n// Promotions — `/seller-promotions/promotions` + `/seller-promotions/candidates`\n// ---------------------------------------------------------------------------\n\nexport const PromotionType = z.enum([\n  \"DEAL\",\n  \"DOD\", // Deal of the day\n  \"LIGHTNING\",\n  \"SMART\",\n  \"PRICE_DISCOUNT\",\n  \"PRICE_MATCHING\",\n  \"UNHEALTHY_STOCK\",\n  \"SELLER_COUPON_CAMPAIGN\",\n  \"MARKETPLACE_CAMPAIGN\",\n  \"VOLUME\",\n  \"PRE_NEGOTIATED\",\n]);\nexport type PromotionType = z.infer<typeof PromotionType>;\n\nexport const PromotionCandidate = z.object({\n  promotion_id: z.string(),\n  promotion_type: z.union([PromotionType, z.string()]),\n  /** When the seller can opt in. */\n  start_date: z.string().optional(),\n  finish_date: z.string().optional(),\n  /** Suggested discount percent (1..100). */\n  suggested_discount_percentage: z.number().nonnegative().nullable().optional(),\n  /** Maximum discount the platform will allow on this candidate. */\n  max_discount_percentage: z.number().nonnegative().nullable().optional(),\n  /** Minimum discount required to qualify. */\n  min_discount_percentage: z.number().nonnegative().nullable().optional(),\n  /** Items eligible to opt in to this candidate. */\n  items: z\n    .array(\n      z.object({\n        id: MeliItemId,\n        original_price: z.number().nonnegative().optional(),\n        suggested_price: z.number().nonnegative().nullable().optional(),\n        max_price: z.number().nonnegative().nullable().optional(),\n        min_price: z.number().nonnegative().nullable().optional(),\n        currency_id: Currency.optional(),\n      }),\n    )\n    .optional(),\n});\nexport type PromotionCandidate = z.infer<typeof PromotionCandidate>;\n\nexport const PromotionOptInRequest = z.object({\n  promotion_id: z.string(),\n  promotion_type: z.union([PromotionType, z.string()]).optional(),\n  /** Discounted price the seller commits to. */\n  deal_price: z.number().nonnegative(),\n});\nexport type PromotionOptInRequest = z.infer<typeof PromotionOptInRequest>;\n\nexport const PromotionOptInResponse = z.object({\n  id: MeliItemId,\n  status: z.enum([\"started\", \"finished\", \"candidate\", \"rejected\"]).optional(),\n  promotion_id: z.string().optional(),\n  deal_price: z.number().nonnegative().optional(),\n  original_price: z.number().nonnegative().optional(),\n});\nexport type PromotionOptInResponse = z.infer<typeof PromotionOptInResponse>;\n","import { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// MELI webhook envelope — `POST <your callback URL>`\n// MELI POSTs `application/json` with this shape across all 20+ topics.\n// ---------------------------------------------------------------------------\n\nexport const MeliWebhookTopic = z.enum([\n  \"orders_v2\",\n  \"orders\", // legacy\n  \"marketplace_orders\", // CBT\n  \"items\",\n  \"items_prices\",\n  \"questions\",\n  \"messages\",\n  \"claims\",\n  \"shipments\",\n  \"payments\",\n  \"fbm_stock_operations\",\n  \"stock_locations\",\n  \"public_offers\",\n  \"public_candidates\",\n  \"item_competition_status\",\n  \"catalog_suggestions\",\n  \"orders_feedback\",\n  \"leads_credits\",\n  \"vis_leads\",\n  \"post_purchase\",\n  \"marketplace_questions\",\n  \"marketplace_messages\",\n  \"marketplace_claims\",\n  \"marketplace_items\",\n]);\nexport type MeliWebhookTopic = z.infer<typeof MeliWebhookTopic>;\n\nexport const MeliWebhookEvent = z.object({\n  /** Notification id from MELI. */\n  _id: z.string().optional(),\n  /** Equivalent to `topic` for some legacy payloads. */\n  resource: z.string(),\n  user_id: z.number().int(),\n  topic: z.union([MeliWebhookTopic, z.string()]),\n  application_id: z.number().int().optional(),\n  attempts: z.number().int().nonnegative().optional(),\n  /** ISO 8601. */\n  sent: z.string().optional(),\n  received: z.string().optional(),\n  /** Free-form additional fields some topics carry. */\n  actions: z.array(z.string()).optional(),\n});\nexport type MeliWebhookEvent = z.infer<typeof MeliWebhookEvent>;\n\n// ---------------------------------------------------------------------------\n// `/myfeeds?app_id=...&topic=...` — recover dropped events within MELI's\n// 2-day retention window.\n// ---------------------------------------------------------------------------\n\nexport const MissedFeed = z.object({\n  /** Same shape as the original webhook envelope. */\n  resource: z.string(),\n  user_id: z.number().int(),\n  topic: z.union([MeliWebhookTopic, z.string()]),\n  application_id: z.number().int().optional(),\n  sent: z.string().optional(),\n  attempts: z.number().int().nonnegative().optional(),\n});\nexport type MissedFeed = z.infer<typeof MissedFeed>;\n\nexport const MissedFeedsResponse = z.array(MissedFeed);\nexport type MissedFeedsResponse = z.infer<typeof MissedFeedsResponse>;\n","// Typed errors for `@ar-agents/mercadolibre`. All client failures funnel\n// through one of these so consumers can `if (err instanceof MeliApiError)`\n// without parsing strings.\n//\n// `MeliError` extends `ArAgentsError` from `@ar-agents/core` so the\n// family contract (code / retryable / context) is uniform across every\n// `@ar-agents/*` integration.\n\nimport { ArAgentsError } from \"@ar-agents/core\";\n\n/** Common base. */\nexport abstract class MeliError extends ArAgentsError {\n  abstract override readonly code: string;\n  constructor(message: string, init: { retryable?: boolean; context?: Record<string, unknown>; cause?: unknown } = {}) {\n    super(message, {\n      code: \"meli_error\",\n      retryable: init.retryable ?? false,\n      context: init.context ?? {},\n      cause: init.cause,\n    });\n    this.name = this.constructor.name;\n  }\n}\n\n/** Shape of MELI's typical error envelope. The fields are not guaranteed —\n *  legacy endpoints sometimes use `{ status, message }` only, and some\n *  post-purchase routes return `{ error_code, description }`. We extract\n *  both shapes opportunistically. */\nexport interface MeliErrorBody {\n  /** MELI's machine-readable error slug (e.g., \"rate_limited\",\n   *  \"forbidden\", \"validation_error\"). */\n  error?: string;\n  /** Human-readable message MELI returns alongside `error`. */\n  message?: string;\n  /** Echoed status code (some MELI endpoints duplicate it in the body). */\n  status?: number;\n  /** Multi-issue causes — typically array of `{ code, message }` for\n   *  validation failures on `createItem` / `updateItem`. */\n  cause?: Array<{ code?: string | number; message?: string; [k: string]: unknown }>;\n}\n\n/** A MELI API call returned a non-2xx after retries are exhausted. */\nexport class MeliApiError extends MeliError {\n  readonly code = \"meli_api_error\";\n  /** MELI's error slug if present (`error` field on the body). Stable +\n   *  documented; safe to switch on in your code. */\n  readonly meliCode: string | null;\n  /** MELI's human-readable error message if present. */\n  readonly meliMessage: string | null;\n  /** Multi-issue causes (validation failures usually). */\n  readonly meliCauses: ReadonlyArray<{\n    code?: string | number;\n    message?: string;\n    [k: string]: unknown;\n  }>;\n\n  constructor(\n    message: string,\n    public readonly status: number,\n    public readonly url: string,\n    public readonly body: unknown,\n    public readonly requestId?: string,\n  ) {\n    super(message);\n    const parsed = parseMeliErrorBody(body);\n    this.meliCode = parsed.error ?? null;\n    this.meliMessage = parsed.message ?? null;\n    this.meliCauses = parsed.cause ?? [];\n  }\n\n  /** Back-compat — same as `meliCode`. New code should read `meliCode` directly. */\n  meliErrorCode(): string | null {\n    return this.meliCode;\n  }\n\n  /**\n   * True if MELI explicitly told us this was a rate-limit hit\n   * (vs. a 429 with no body, or a 5xx). Use this to drive a longer backoff\n   * in your retry loop.\n   */\n  isRateLimited(): boolean {\n    return this.status === 429 || this.meliCode === \"rate_limited\";\n  }\n\n  /**\n   * True if the request hit the seller's permission boundary — typically\n   * because the bearer token doesn't own the resource being addressed.\n   * Don't retry; surface to the user.\n   */\n  isForbidden(): boolean {\n    return this.status === 403 || this.meliCode === \"forbidden\";\n  }\n\n  /**\n   * True if MELI says this access_token is invalid / expired.\n   * The OAuth flow's `ensureAccessToken` should be re-driven before retrying.\n   */\n  isUnauthorized(): boolean {\n    return this.status === 401 || this.meliCode === \"unauthorized\" || this.meliCode === \"invalid_token\";\n  }\n\n  /** True if MELI's body identifies this as validation-failure on inputs. */\n  isValidationError(): boolean {\n    return this.meliCode === \"validation_error\" || this.status === 400;\n  }\n}\n\n/** Best-effort parse of MELI's error envelope. Tolerates missing fields\n *  and the post-purchase `{ error_code, description }` variant. */\nfunction parseMeliErrorBody(body: unknown): MeliErrorBody {\n  if (!body || typeof body !== \"object\") return {};\n  const b = body as Record<string, unknown>;\n  const out: MeliErrorBody = {};\n  if (typeof b[\"error\"] === \"string\") out.error = b[\"error\"];\n  else if (typeof b[\"error_code\"] === \"string\") out.error = b[\"error_code\"];\n  if (typeof b[\"message\"] === \"string\") out.message = b[\"message\"];\n  else if (typeof b[\"description\"] === \"string\") out.message = b[\"description\"];\n  if (typeof b[\"status\"] === \"number\") out.status = b[\"status\"];\n  if (Array.isArray(b[\"cause\"])) {\n    out.cause = b[\"cause\"].filter(\n      (c): c is { code?: string | number; message?: string } =>\n        typeof c === \"object\" && c !== null,\n    );\n  }\n  return out;\n}\n\n/** OAuth-related failure (token refresh, callback, etc.). */\nexport class MeliAuthError extends MeliError {\n  readonly code = \"meli_auth_error\";\n  constructor(\n    message: string,\n    public override readonly cause?: unknown,\n  ) {\n    super(message);\n  }\n}\n\n/** Rate limit hit and retries are exhausted. */\nexport class MeliRateLimitError extends MeliError {\n  readonly code = \"meli_rate_limit\";\n  constructor(\n    public readonly retryAfterSeconds: number,\n    public readonly url: string,\n  ) {\n    super(\n      `MELI rate limit exhausted on ${url}; retry in ${retryAfterSeconds}s`,\n    );\n  }\n}\n\n/** The host's network failed (DNS, TLS, fetch threw). */\nexport class MeliNetworkError extends MeliError {\n  readonly code = \"meli_network_error\";\n  constructor(\n    message: string,\n    public override readonly cause?: unknown,\n  ) {\n    super(message);\n  }\n}\n\n/** A response body failed Zod validation. */\nexport class MeliValidationError extends MeliError {\n  readonly code = \"meli_validation_error\";\n  constructor(\n    message: string,\n    public readonly issues: unknown,\n  ) {\n    super(message);\n  }\n}\n\n/** Webhook signature verification failed (where ML supports it). */\nexport class MeliWebhookError extends MeliError {\n  readonly code = \"meli_webhook_error\";\n  constructor(\n    public readonly detail:\n      | \"missing_topic\"\n      | \"missing_resource\"\n      | \"unknown_topic\"\n      | \"malformed_body\"\n      | \"missed_feeds_unauthorized\",\n    message: string,\n  ) {\n    super(message);\n  }\n}\n\n/** Convenience type guard. */\nexport function isMeliError(e: unknown): e is MeliError {\n  return e instanceof MeliError;\n}\n","// Exponential-backoff retry helper.\n//\n// Retries on 5xx + 429 + network errors. Honors `Retry-After` when present\n// (seconds or HTTP-date). Configurable max attempts + base delay. Adds\n// jitter so concurrent failures don't synchronize.\n\nexport interface RetryOptions {\n  /** Max attempts (including the first). Default 4. */\n  maxAttempts?: number;\n  /** Base delay in ms before the first retry. Default 200. */\n  baseDelayMs?: number;\n  /** Max delay between retries in ms. Default 8000. */\n  maxDelayMs?: number;\n  /** Jitter factor 0..1. Default 0.3 (±30%). */\n  jitter?: number;\n  /** Custom callback fired before each retry. */\n  onRetry?: (attempt: number, lastError: unknown) => void;\n}\n\nconst DEFAULTS = {\n  maxAttempts: 4,\n  baseDelayMs: 200,\n  maxDelayMs: 8000,\n  jitter: 0.3,\n} as const;\n\nexport interface RetryDecision {\n  shouldRetry: boolean;\n  /** Override delay (e.g. from Retry-After header). */\n  delayMsOverride?: number;\n}\n\nexport interface RetryContext {\n  /** HTTP method of the request being attempted, uppercase. Default \"GET\". */\n  method?: string;\n  /** Attempt number (1-based). */\n  attempt?: number;\n}\n\n/** A function that decides whether a thrown error / response is retryable. */\nexport type RetryClassifier = (\n  error: unknown,\n  response: Response | null,\n  ctx?: RetryContext,\n) => RetryDecision;\n\n/** HTTP methods that are safe to retry by default (RFC 9110 idempotent set). */\nconst IDEMPOTENT_METHODS = new Set([\"GET\", \"HEAD\", \"OPTIONS\", \"PUT\", \"DELETE\"]);\n\n/** Parse a `Retry-After` header value: integer seconds OR HTTP-date. */\nfunction parseRetryAfter(value: string): number | null {\n  const seconds = Number.parseInt(value, 10);\n  if (Number.isFinite(seconds)) return seconds * 1000;\n  const dateMs = Date.parse(value);\n  if (Number.isFinite(dateMs)) return Math.max(0, dateMs - Date.now());\n  return null;\n}\n\n/**\n * Default classifier — retry on 5xx, 429, network errors. By default,\n * **only retries idempotent methods** (GET/HEAD/OPTIONS/PUT/DELETE). POST\n * and PATCH are NOT retried because MELI's gateway can persist a request\n * after a 5xx (split-brain), which would create duplicate listings,\n * double-answers, or duplicate promo opt-ins on retry.\n *\n * Callers who know their POST endpoint is idempotent (or who supply an\n * `X-Idempotency-Key` header) can override via `retryClassifier`.\n */\nexport const defaultRetryClassifier: RetryClassifier = (error, response, ctx) => {\n  const method = ctx?.method?.toUpperCase() ?? \"GET\";\n  const methodIsIdempotent = IDEMPOTENT_METHODS.has(method);\n\n  if (response) {\n    if (response.status === 429) {\n      const retryAfter = response.headers.get(\"Retry-After\");\n      if (retryAfter) {\n        const delayMs = parseRetryAfter(retryAfter);\n        if (delayMs !== null) {\n          return { shouldRetry: true, delayMsOverride: delayMs };\n        }\n      }\n      // 429 is safe to retry on any method (request hadn't been processed).\n      return { shouldRetry: true };\n    }\n    if (response.status >= 500 && response.status < 600) {\n      // 5xx is split-brain risky: only retry idempotent verbs.\n      return { shouldRetry: methodIsIdempotent };\n    }\n    return { shouldRetry: false };\n  }\n  // Network-level failure (fetch threw, AbortError, etc.)\n  if (error instanceof Error) {\n    if (error.name === \"AbortError\") return { shouldRetry: false };\n    // Network errors are safe to retry on idempotent methods. For non-\n    // idempotent ones we have no way to know if the server got the request,\n    // so we err on the side of \"fail loud.\"\n    return { shouldRetry: methodIsIdempotent };\n  }\n  return { shouldRetry: false };\n};\n\n/**\n * Run an async operation with exponential backoff. The operation receives\n * the current attempt number (1-based) and is expected to either resolve\n * with a value or throw. The classifier decides whether to retry.\n *\n * For HTTP, prefer the `fetchWithRetry` helper instead — it composes this\n * with response inspection.\n */\nexport async function withRetry<T>(\n  op: (attempt: number) => Promise<T>,\n  classifier: RetryClassifier = defaultRetryClassifier,\n  options: RetryOptions = {},\n  ctx: RetryContext = {},\n): Promise<T> {\n  const opts = { ...DEFAULTS, ...options };\n  let lastError: unknown = null;\n  for (let attempt = 1; attempt <= opts.maxAttempts; attempt++) {\n    try {\n      return await op(attempt);\n    } catch (err) {\n      lastError = err;\n      const response = (err as { response?: Response }).response ?? null;\n      const decision = classifier(err, response, { ...ctx, attempt });\n      if (!decision.shouldRetry || attempt === opts.maxAttempts) {\n        throw err;\n      }\n      const delay =\n        decision.delayMsOverride ??\n        computeBackoffMs(attempt, opts.baseDelayMs, opts.maxDelayMs, opts.jitter);\n      opts.onRetry?.(attempt, err);\n      await sleep(delay);\n    }\n  }\n  throw lastError;\n}\n\n/**\n * Variant of `withRetry` specialized for `fetch`. The op MUST return the\n * `Response`, NOT throw on 4xx/5xx — this helper inspects the response\n * status itself. Network errors (fetch throwing) are retried per the\n * classifier.\n */\nexport async function fetchWithRetry(\n  url: string,\n  init: RequestInit,\n  options: RetryOptions = {},\n  classifier: RetryClassifier = defaultRetryClassifier,\n  fetchImpl: typeof fetch = fetch,\n): Promise<Response> {\n  const method = (init.method ?? \"GET\").toUpperCase();\n  const ctx: RetryContext = { method };\n  return withRetry(\n    async () => {\n      const response = await fetchImpl(url, init);\n      const decision = classifier(null, response, ctx);\n      if (decision.shouldRetry) {\n        const synthetic = new Error(`HTTP ${response.status} ${response.statusText}`);\n        (synthetic as { response?: Response }).response = response;\n        throw synthetic;\n      }\n      return response;\n    },\n    classifier,\n    options,\n    ctx,\n  );\n}\n\nfunction computeBackoffMs(\n  attempt: number,\n  base: number,\n  max: number,\n  jitter: number,\n): number {\n  const exp = Math.min(max, base * 2 ** (attempt - 1));\n  const j = exp * jitter * (Math.random() * 2 - 1);\n  return Math.max(0, Math.floor(exp + j));\n}\n\nexport function sleep(ms: number): Promise<void> {\n  if (ms <= 0) return Promise.resolve();\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","// Per-seller token-bucket rate limiter.\n//\n// MELI documents 1500 req/min/seller (≈25 req/s). We default to 24/s with\n// a burst of 60 to leave headroom for retries + concurrent requests.\n// Each acquire() returns a promise that resolves when a token is available.\n//\n// In-memory only. Cross-process deployments should swap with a Redis-\n// backed token bucket (the interface is intentionally tiny so a Redis\n// adapter is ~30 LOC).\n\nexport interface RateLimiter {\n  /**\n   * Acquire 1 token. Resolves when granted (immediately if burst capacity\n   * is available, otherwise after a delay).\n   *\n   * @param scope Independently-throttled bucket key (typically `seller:${id}`).\n   */\n  acquire(scope: string): Promise<void>;\n}\n\nexport interface TokenBucketOptions {\n  /** Tokens per second refill. Default 24 (≈1440 req/min). */\n  refillPerSecond?: number;\n  /** Max burst (bucket capacity). Default 60. */\n  burst?: number;\n  /** Override \"now\" for tests. Returns ms. */\n  now?: () => number;\n  /** Evict buckets idle for more than this many ms. Default 600_000 (10 min).\n   *  Set to 0 to disable GC (useful in tests). */\n  idleEvictMs?: number;\n}\n\ninterface Bucket {\n  tokens: number;\n  lastRefillMs: number;\n}\n\nexport class TokenBucketRateLimiter implements RateLimiter {\n  private readonly buckets = new Map<string, Bucket>();\n  private readonly refillPerSecond: number;\n  private readonly burst: number;\n  private readonly now: () => number;\n  private readonly idleEvictMs: number;\n  /** Counter — every N acquires we sweep idle buckets. */\n  private acquireSinceLastSweep = 0;\n  private static readonly SWEEP_EVERY_N_ACQUIRES = 256;\n\n  constructor(options: TokenBucketOptions = {}) {\n    this.refillPerSecond = options.refillPerSecond ?? 24;\n    this.burst = options.burst ?? 60;\n    this.now = options.now ?? (() => Date.now());\n    this.idleEvictMs = options.idleEvictMs ?? 600_000;\n  }\n\n  async acquire(scope: string): Promise<void> {\n    this.maybeSweep();\n    while (true) {\n      const ms = this.now();\n      const bucket = this.refill(scope, ms);\n      if (bucket.tokens >= 1) {\n        bucket.tokens -= 1;\n        return;\n      }\n      const deficitTokens = 1 - bucket.tokens;\n      const waitMs = Math.ceil((deficitTokens / this.refillPerSecond) * 1000);\n      await sleep(waitMs);\n    }\n  }\n\n  /** Inspect tokens (for tests/diagnostics). */\n  inspect(scope: string): { tokens: number } {\n    const bucket = this.refill(scope, this.now());\n    return { tokens: bucket.tokens };\n  }\n\n  /** Number of currently-tracked buckets. Diagnostics only. */\n  bucketCount(): number {\n    return this.buckets.size;\n  }\n\n  /** Force-evict buckets that have been idle longer than `idleEvictMs`.\n   *  We don't bother checking token count — recreating an idle bucket\n   *  later is essentially free (one Map.set + one allocation), and any\n   *  bucket that's been idle for >10 min has long since refilled to burst\n   *  anyway. */\n  sweepIdleBuckets(now = this.now()): number {\n    if (this.idleEvictMs === 0) return 0;\n    let evicted = 0;\n    for (const [scope, bucket] of this.buckets) {\n      if (now - bucket.lastRefillMs > this.idleEvictMs) {\n        this.buckets.delete(scope);\n        evicted++;\n      }\n    }\n    return evicted;\n  }\n\n  private maybeSweep(): void {\n    if (this.idleEvictMs === 0) return;\n    this.acquireSinceLastSweep++;\n    if (this.acquireSinceLastSweep < TokenBucketRateLimiter.SWEEP_EVERY_N_ACQUIRES) return;\n    this.acquireSinceLastSweep = 0;\n    this.sweepIdleBuckets();\n  }\n\n  private refill(scope: string, ms: number): Bucket {\n    let bucket = this.buckets.get(scope);\n    if (!bucket) {\n      bucket = { tokens: this.burst, lastRefillMs: ms };\n      this.buckets.set(scope, bucket);\n      return bucket;\n    }\n    const elapsedSeconds = (ms - bucket.lastRefillMs) / 1000;\n    bucket.tokens = Math.min(\n      this.burst,\n      bucket.tokens + elapsedSeconds * this.refillPerSecond,\n    );\n    bucket.lastRefillMs = ms;\n    return bucket;\n  }\n}\n\nfunction sleep(ms: number): Promise<void> {\n  if (ms <= 0) return Promise.resolve();\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** No-op limiter for tests / when you want to bypass throttling entirely. */\nexport class NoopRateLimiter implements RateLimiter {\n  async acquire(): Promise<void> {}\n}\n","// MELI OAuth 2.0 — auth code + refresh token flows.\n//\n// Critical landmines this module defends against (verified during research):\n//\n//   1. **Refresh tokens are SINGLE-USE.** Each refresh rotates the\n//      `refresh_token`. If two workers race a refresh with the same old\n//      token, MELI revokes the application's connection (`refresh_token_reused`).\n//      We mutex per-seller so concurrent token reads coalesce.\n//\n//   2. **Refresh tokens expire after 4 months of inactivity.** We expose\n//      this as a typed error so the caller can re-prompt the seller for\n//      OAuth consent gracefully.\n//\n//   3. **Multi-site OAuth callbacks must use a single redirect host.**\n//      The MLA / MLB / MLM / MLC apps share callback URLs.\n//\n//   4. **`offline_access` scope is required** to receive a refresh token\n//      at all. Without it, access_token-only flows expire in 6 hours and\n//      can't be renewed.\n\nimport { MeliAuthError } from \"./errors\";\n\nconst TOKEN_URL = \"https://api.mercadolibre.com/oauth/token\";\nconst AUTHORIZATION_URL_BY_SITE: Record<string, string> = {\n  MLA: \"https://auth.mercadolibre.com.ar/authorization\",\n  MLB: \"https://auth.mercadolivre.com.br/authorization\",\n  MLM: \"https://auth.mercadolibre.com.mx/authorization\",\n  MLC: \"https://auth.mercadolibre.cl/authorization\",\n  MCO: \"https://auth.mercadolibre.com.co/authorization\",\n  MLU: \"https://auth.mercadolibre.com.uy/authorization\",\n  MPE: \"https://auth.mercadolibre.com.pe/authorization\",\n};\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface OAuthAppCredentials {\n  clientId: string;\n  clientSecret: string;\n  /** Must be registered on the MELI app dashboard. */\n  redirectUri: string;\n}\n\nexport interface MeliOAuthTokens {\n  access_token: string;\n  refresh_token: string;\n  /** Seconds-from-now until access_token expires. Typically 21600 (6h). */\n  expires_in: number;\n  /** Unix-seconds wall-clock at which access_token will expire. */\n  access_token_expires_at: number;\n  /** MELI-side user id of the authorized seller. */\n  user_id: number;\n  scope: string;\n  token_type: \"bearer\";\n}\n\n/**\n * Pluggable token store. Production deployments back this with Redis /\n * Postgres / Vercel KV. The `InMemoryOAuthStore` below is suitable for\n * tests + single-process demos.\n */\nexport interface OAuthTokenStore {\n  /** Read tokens for a specific seller (by MELI user id). */\n  read(userId: number): Promise<MeliOAuthTokens | null>;\n  /** Atomically replace tokens. Implementations MUST handle concurrent writes. */\n  write(userId: number, tokens: MeliOAuthTokens): Promise<void>;\n  /** Remove tokens (e.g. when seller revokes). */\n  remove?(userId: number): Promise<void>;\n}\n\n// ---------------------------------------------------------------------------\n// Authorization URL builder\n// ---------------------------------------------------------------------------\n\nexport interface BuildAuthUrlInput {\n  app: OAuthAppCredentials;\n  /** MELI site identifier — controls which auth host is used. */\n  site: keyof typeof AUTHORIZATION_URL_BY_SITE;\n  /** State for CSRF protection (random nonce, validated on callback). */\n  state: string;\n  /** Override scopes. Default: `offline_access read write`. */\n  scopes?: string[];\n}\n\nexport function buildAuthorizationUrl(input: BuildAuthUrlInput): string {\n  const base = AUTHORIZATION_URL_BY_SITE[input.site];\n  if (!base) {\n    throw new MeliAuthError(`Unknown MELI site: '${input.site}'`);\n  }\n  const url = new URL(base);\n  url.searchParams.set(\"response_type\", \"code\");\n  url.searchParams.set(\"client_id\", input.app.clientId);\n  url.searchParams.set(\"redirect_uri\", input.app.redirectUri);\n  url.searchParams.set(\"state\", input.state);\n  if (input.scopes) {\n    url.searchParams.set(\"scope\", input.scopes.join(\" \"));\n  }\n  return url.toString();\n}\n\n// ---------------------------------------------------------------------------\n// Exchange auth code for tokens\n// ---------------------------------------------------------------------------\n\nexport async function exchangeAuthorizationCode(\n  app: OAuthAppCredentials,\n  code: string,\n  fetchImpl: typeof fetch = fetch,\n): Promise<MeliOAuthTokens> {\n  const body = new URLSearchParams({\n    grant_type: \"authorization_code\",\n    client_id: app.clientId,\n    client_secret: app.clientSecret,\n    code,\n    redirect_uri: app.redirectUri,\n  });\n  const tokens = await postTokenRequest(body, fetchImpl);\n  return enrichTokens(tokens);\n}\n\n// ---------------------------------------------------------------------------\n// Refresh\n// ---------------------------------------------------------------------------\n\nexport async function refreshTokens(\n  app: OAuthAppCredentials,\n  refreshToken: string,\n  fetchImpl: typeof fetch = fetch,\n): Promise<MeliOAuthTokens> {\n  const body = new URLSearchParams({\n    grant_type: \"refresh_token\",\n    client_id: app.clientId,\n    client_secret: app.clientSecret,\n    refresh_token: refreshToken,\n  });\n  const tokens = await postTokenRequest(body, fetchImpl);\n  return enrichTokens(tokens);\n}\n\n// ---------------------------------------------------------------------------\n// Mutex-protected ensure-fresh access token\n// ---------------------------------------------------------------------------\n\n/**\n * Returns a valid access_token for the given seller, refreshing if needed.\n * Coalesces concurrent calls so only one HTTP refresh fires per seller per\n * window. Atomically updates the store with the rotated refresh_token.\n *\n * Throws `MeliAuthError` if no tokens are stored OR if the refresh fails\n * permanently (e.g. revoked, expired beyond 4 months).\n */\nexport async function ensureAccessToken(args: {\n  userId: number;\n  app: OAuthAppCredentials;\n  store: OAuthTokenStore;\n  /** Refresh ahead of expiry by this many seconds. Default 60. */\n  preflightWindowSeconds?: number;\n  /** Override \"now\" for tests. Returns Unix seconds. */\n  now?: () => number;\n  /** Override fetch (mocked in tests / Edge runtime). Default global fetch. */\n  fetchImpl?: typeof fetch;\n}): Promise<MeliOAuthTokens> {\n  const now = args.now ?? (() => Math.floor(Date.now() / 1000));\n  const preflight = args.preflightWindowSeconds ?? 60;\n\n  const lock = getLock(args.userId);\n  return lock.run(async () => {\n    const stored = await args.store.read(args.userId);\n    if (!stored) {\n      throw new MeliAuthError(\n        `No OAuth tokens stored for MELI user ${args.userId}; the seller must complete the OAuth flow first.`,\n      );\n    }\n    if (stored.access_token_expires_at - now() > preflight) {\n      // Still fresh.\n      return stored;\n    }\n    // Refresh.\n    let refreshed: MeliOAuthTokens;\n    try {\n      refreshed = await refreshTokens(args.app, stored.refresh_token, args.fetchImpl);\n    } catch (err) {\n      throw new MeliAuthError(\n        `Token refresh failed for MELI user ${args.userId}: ${\n          err instanceof Error ? err.message : String(err)\n        }`,\n        err,\n      );\n    }\n    // Note: we MUST atomically write the new tokens before returning so\n    // concurrent callers see the rotated refresh_token. The mutex guarantees\n    // single-flight; the store's write atomicity guarantees no partial state.\n    await args.store.write(args.userId, refreshed);\n    return refreshed;\n  });\n}\n\n// ---------------------------------------------------------------------------\n// In-memory store + lock\n// ---------------------------------------------------------------------------\n\nexport class InMemoryOAuthStore implements OAuthTokenStore {\n  private state = new Map<number, MeliOAuthTokens>();\n\n  async read(userId: number): Promise<MeliOAuthTokens | null> {\n    return this.state.get(userId) ?? null;\n  }\n\n  async write(userId: number, tokens: MeliOAuthTokens): Promise<void> {\n    this.state.set(userId, tokens);\n  }\n\n  async remove(userId: number): Promise<void> {\n    this.state.delete(userId);\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\ninterface RawTokenResponse {\n  access_token: string;\n  refresh_token: string;\n  expires_in: number;\n  user_id: number;\n  scope: string;\n  token_type: \"bearer\";\n}\n\nasync function postTokenRequest(\n  body: URLSearchParams,\n  fetchImpl: typeof fetch = fetch,\n): Promise<RawTokenResponse> {\n  const response = await fetchImpl(TOKEN_URL, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/x-www-form-urlencoded\",\n      Accept: \"application/json\",\n    },\n    body: body.toString(),\n  });\n  let raw: unknown;\n  try {\n    raw = await response.json();\n  } catch {\n    throw new MeliAuthError(\n      `MELI /oauth/token returned non-JSON response (status ${response.status})`,\n    );\n  }\n  if (!response.ok) {\n    const errorBody = raw as { error?: string; message?: string };\n    throw new MeliAuthError(\n      `MELI /oauth/token failed (${response.status}): ${\n        errorBody.error ?? errorBody.message ?? \"unknown error\"\n      }`,\n      errorBody,\n    );\n  }\n  if (\n    typeof (raw as RawTokenResponse).access_token !== \"string\" ||\n    typeof (raw as RawTokenResponse).refresh_token !== \"string\" ||\n    typeof (raw as RawTokenResponse).expires_in !== \"number\" ||\n    typeof (raw as RawTokenResponse).user_id !== \"number\"\n  ) {\n    throw new MeliAuthError(\n      `MELI /oauth/token returned unexpected shape: ${JSON.stringify(raw)}`,\n    );\n  }\n  return raw as RawTokenResponse;\n}\n\nfunction enrichTokens(raw: RawTokenResponse): MeliOAuthTokens {\n  return {\n    access_token: raw.access_token,\n    refresh_token: raw.refresh_token,\n    expires_in: raw.expires_in,\n    access_token_expires_at: Math.floor(Date.now() / 1000) + raw.expires_in,\n    user_id: raw.user_id,\n    scope: raw.scope,\n    token_type: raw.token_type,\n  };\n}\n\n// Per-userId mutex map. Coalesces concurrent refresh requests to a single\n// in-flight HTTP call.\nconst locks = new Map<number, AsyncLock>();\nfunction getLock(userId: number): AsyncLock {\n  let lock = locks.get(userId);\n  if (!lock) {\n    lock = new AsyncLock();\n    locks.set(userId, lock);\n  }\n  return lock;\n}\n\nclass AsyncLock {\n  private chain: Promise<unknown> = Promise.resolve();\n  run<T>(fn: () => Promise<T>): Promise<T> {\n    const next = this.chain.then(() => fn(), () => fn());\n    this.chain = next.catch(() => {\n      /* swallow so a failure doesn't break the chain */\n    });\n    return next as Promise<T>;\n  }\n}\n","// Pluggable telemetry hooks. Wires the client to OpenTelemetry, Sentry,\n// Datadog, custom logging — without modifying the lib.\n//\n// Hosts pass `telemetry: { onRequest, onResponse, onRetry, onRateLimitWait }`\n// in `MeliClientOptions`. All hooks are optional; the client treats missing\n// hooks as no-ops with zero overhead.\n//\n// Design choices:\n//   - Hooks are SYNCHRONOUS by default — they shouldn't add latency to the\n//     request path. Async work (e.g., shipping spans to a remote collector)\n//     should be enqueued by the host.\n//   - The hook payload uses opaque `requestId` strings the host generates so\n//     onRequest/onResponse can be correlated.\n//   - We never pass headers containing `Authorization` to hooks.\n\nexport interface TelemetryRequestEvent {\n  /** Stable id for correlating onRequest ↔ onResponse / onRetry. */\n  requestId: string;\n  /** Wall-clock start in ms (Date.now). */\n  startedAt: number;\n  method: string;\n  /** Full URL including query string. */\n  url: string;\n  /** Path without query string for low-cardinality span names. */\n  path: string;\n  /** Attempt number (1-based). */\n  attempt: number;\n}\n\nexport interface TelemetryResponseEvent {\n  requestId: string;\n  /** Wall-clock end in ms. */\n  endedAt: number;\n  /** Total duration in ms (endedAt - startedAt). */\n  durationMs: number;\n  status: number;\n  /** Number of attempts that ran before this response (1 = no retries). */\n  attempts: number;\n  /** MELI's request id from the response header, if present. */\n  meliRequestId?: string;\n}\n\nexport interface TelemetryRetryEvent {\n  requestId: string;\n  attempt: number;\n  /** Reason: 5xx status, 429, network error, etc. */\n  reason: \"status\" | \"network\" | \"timeout\";\n  status?: number;\n  /** Backoff delay before next attempt, in ms. */\n  delayMs: number;\n}\n\nexport interface TelemetryRateLimitEvent {\n  /** Bucket scope (`seller:<userId>`, `bearer:<suffix>`, or \"anon\"). */\n  scope: string;\n  /** How long we waited for a token, in ms. */\n  waitMs: number;\n}\n\nexport interface TelemetryHooks {\n  /** Fired before the HTTP call leaves the client. */\n  onRequest?: (event: TelemetryRequestEvent) => void;\n  /** Fired after the response is received (success or non-retryable error). */\n  onResponse?: (event: TelemetryResponseEvent) => void;\n  /** Fired before each retry attempt. */\n  onRetry?: (event: TelemetryRetryEvent) => void;\n  /** Fired when a rate-limit token wait completes. Only emitted when wait > 0. */\n  onRateLimitWait?: (event: TelemetryRateLimitEvent) => void;\n}\n\n/**\n * No-op telemetry. Used as the default when the host doesn't configure hooks.\n * Defined here (instead of `?? {}` inline) so the JIT can devirtualize the\n * empty path.\n */\nexport const noopTelemetry: Required<TelemetryHooks> = {\n  onRequest: () => {},\n  onResponse: () => {},\n  onRetry: () => {},\n  onRateLimitWait: () => {},\n};\n\n/**\n * Generate a request id without depending on `crypto.randomUUID()`. Edge\n * runtimes have it, but Node 18- on Lambda doesn't.\n */\nexport function generateRequestId(): string {\n  const cryptoLike = (globalThis as { crypto?: { randomUUID?: () => string } })\n    .crypto;\n  if (cryptoLike?.randomUUID) return cryptoLike.randomUUID();\n  // Fallback — 16 bytes of Math.random hex.\n  let id = \"\";\n  for (let i = 0; i < 16; i++) {\n    id += Math.floor(Math.random() * 256)\n      .toString(16)\n      .padStart(2, \"0\");\n  }\n  return id;\n}\n","// `MeliClient` — typed HTTP client for the MercadoLibre API.\n//\n// Behaviour:\n//   - Bearer auth via OAuth access_token. The client coalesces concurrent\n//     calls per seller and refreshes tokens via the configured store.\n//   - Per-seller rate limit (token bucket; default 24/s, burst 60).\n//   - Exponential-backoff retry on 5xx + 429 + network errors.\n//   - Response body validation via Zod (with a flag to disable for hot paths).\n//   - Single base URL: `https://api.mercadolibre.com`.\n//\n// Domain-specific helpers (`items`, `categories`, etc.) compose this client\n// — they call `client.fetch(path, opts)` with the appropriate type.\n\nimport {\n  MeliApiError,\n  MeliAuthError,\n  MeliNetworkError,\n  MeliValidationError,\n} from \"./errors\";\nimport {\n  TokenBucketRateLimiter,\n  type RateLimiter,\n} from \"./rate-limiter\";\nimport {\n  fetchWithRetry,\n  type RetryClassifier,\n  type RetryOptions,\n  defaultRetryClassifier,\n} from \"./retry\";\nimport {\n  ensureAccessToken,\n  type OAuthAppCredentials,\n  type OAuthTokenStore,\n} from \"./oauth\";\nimport {\n  generateRequestId,\n  noopTelemetry,\n  type TelemetryHooks,\n} from \"./telemetry\";\nimport type { ZodType } from \"zod\";\n\nconst DEFAULT_BASE_URL = \"https://api.mercadolibre.com\";\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport type AuthMode =\n  | { kind: \"bearer\"; accessToken: string }\n  | { kind: \"oauth\"; userId: number; app: OAuthAppCredentials; store: OAuthTokenStore }\n  | { kind: \"none\" };\n\nexport interface MeliClientOptions {\n  /** Auth strategy. Use `bearer` for direct tokens, `oauth` for managed\n   *  refresh, or `none` for public endpoints (search, sites, currencies). */\n  auth: AuthMode;\n  /** Override base URL — useful for testing against a mock server. */\n  baseUrl?: string;\n  /** Override fetch (e.g. msw). Defaults to globalThis.fetch. */\n  fetch?: typeof fetch;\n  /** Rate limiter implementation. Default: TokenBucketRateLimiter. */\n  rateLimiter?: RateLimiter;\n  /** Retry options forwarded to `fetchWithRetry`. */\n  retry?: RetryOptions;\n  /** Custom retry classifier. */\n  retryClassifier?: RetryClassifier;\n  /** User-Agent string. Default: `@ar-agents/mercadolibre/<version>`. */\n  userAgent?: string;\n  /** When true, skip Zod validation on responses (hot paths). Default false. */\n  skipResponseValidation?: boolean;\n  /** Pluggable telemetry hooks (OpenTelemetry, Sentry, Datadog, custom). */\n  telemetry?: TelemetryHooks;\n  /** Per-request timeout in milliseconds. Default 30000.\n   *  Wedged TCP connections that never return data otherwise burn a Vercel\n   *  Edge function's entire 25-60s budget on attempt #1 and never retry. */\n  requestTimeoutMs?: number;\n}\n\nexport interface FetchOptions<T = unknown> {\n  method?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n  /** Path relative to base URL (must start with `/`). */\n  path: string;\n  /** Query string parameters. */\n  query?: Record<string, string | number | boolean | undefined | null>;\n  /** Pre-serialized body. If set, body is sent as-is. */\n  body?: unknown;\n  /** When set, response is parsed against this Zod schema. */\n  responseSchema?: ZodType<T>;\n  /** Override per-call User-Agent. */\n  userAgent?: string;\n  /** Per-call retry override. */\n  retry?: RetryOptions;\n  /** AbortSignal. */\n  signal?: AbortSignal;\n  /** Override the rate-limit scope. Default: derived from auth (`seller:<userId>`). */\n  rateLimitScope?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Client\n// ---------------------------------------------------------------------------\n\nexport class MeliClient {\n  readonly baseUrl: string;\n  private readonly auth: AuthMode;\n  private readonly fetchImpl: typeof fetch;\n  private readonly rateLimiter: RateLimiter;\n  private readonly retry: RetryOptions;\n  private readonly retryClassifier: RetryClassifier;\n  private readonly userAgent: string;\n  private readonly skipResponseValidation: boolean;\n  private readonly telemetry: Required<TelemetryHooks>;\n  private readonly requestTimeoutMs: number;\n\n  constructor(options: MeliClientOptions) {\n    this.auth = options.auth;\n    this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n    this.fetchImpl =\n      options.fetch ??\n      ((globalThis as { fetch?: typeof fetch }).fetch as typeof fetch);\n    if (typeof this.fetchImpl !== \"function\") {\n      throw new Error(\n        \"MeliClient requires `fetch` (Node 20+, browsers, Vercel Edge, etc.).\",\n      );\n    }\n    this.rateLimiter = options.rateLimiter ?? new TokenBucketRateLimiter();\n    this.retry = options.retry ?? {};\n    this.retryClassifier = options.retryClassifier ?? defaultRetryClassifier;\n    this.userAgent = options.userAgent ?? `@ar-agents/mercadolibre/0.1`;\n    this.skipResponseValidation = options.skipResponseValidation ?? false;\n    this.requestTimeoutMs = options.requestTimeoutMs ?? 30_000;\n    this.telemetry = {\n      onRequest: options.telemetry?.onRequest ?? noopTelemetry.onRequest,\n      onResponse: options.telemetry?.onResponse ?? noopTelemetry.onResponse,\n      onRetry: options.telemetry?.onRetry ?? noopTelemetry.onRetry,\n      onRateLimitWait:\n        options.telemetry?.onRateLimitWait ?? noopTelemetry.onRateLimitWait,\n    };\n  }\n\n  /**\n   * Like `fetch`, but returns the raw `Response`. Used for binary endpoints\n   * (e.g., `/shipment_labels` returning PDF/ZPL). Goes through the same\n   * auth + rate-limit + retry + telemetry plumbing.\n   *\n   * Throws on non-2xx the same way `fetch<T>` does.\n   */\n  async fetchRaw(\n    options: FetchOptions<unknown> & { acceptHeader?: string },\n  ): Promise<Response> {\n    return (await this.executeRequest({ ...options, parseAsJson: false })) as Response;\n  }\n\n  /**\n   * Make a request. Returns the parsed-and-validated response.\n   *\n   * Throws:\n   *   - `MeliAuthError` if OAuth refresh fails\n   *   - `MeliApiError` if status >= 400 after retries\n   *   - `MeliNetworkError` if fetch threw\n   *   - `MeliValidationError` if response failed Zod validation\n   */\n  async fetch<T = unknown>(options: FetchOptions<T>): Promise<T> {\n    return this.executeRequest({ ...options, parseAsJson: true }) as Promise<T>;\n  }\n\n  /** Internal — runs the full request pipeline. JSON-parses unless told otherwise. */\n  private async executeRequest(\n    options: FetchOptions<unknown> & {\n      parseAsJson: boolean;\n      acceptHeader?: string;\n    },\n  ): Promise<unknown> {\n    const url = this.buildUrl(options.path, options.query);\n    const requestId = generateRequestId();\n    const startedAt = Date.now();\n    let attempts = 1;\n\n    // 1. Resolve auth header.\n    const authHeader = await this.resolveAuthHeader();\n\n    // 2. Acquire rate-limit token.\n    const scope = options.rateLimitScope ?? this.deriveRateLimitScope();\n    const rateLimitStartedAt = Date.now();\n    await this.rateLimiter.acquire(scope);\n    const rateLimitWaitMs = Date.now() - rateLimitStartedAt;\n    if (rateLimitWaitMs > 0) {\n      this.telemetry.onRateLimitWait({ scope, waitMs: rateLimitWaitMs });\n    }\n\n    this.telemetry.onRequest({\n      requestId,\n      startedAt,\n      method: options.method ?? \"GET\",\n      url,\n      path: options.path,\n      attempt: 1,\n    });\n\n    // 3. Build request init. Compose a per-request timeout signal with the\n    // caller's signal (if any) so wedged connections can't burn the agent's\n    // budget on a single attempt.\n    const timeoutSignal = AbortSignal.timeout(this.requestTimeoutMs);\n    const composedSignal = options.signal\n      ? anySignal(options.signal, timeoutSignal)\n      : timeoutSignal;\n    const init: RequestInit = {\n      method: options.method ?? \"GET\",\n      headers: {\n        Accept: options.acceptHeader ?? \"application/json\",\n        \"User-Agent\": options.userAgent ?? this.userAgent,\n        ...(authHeader ? { Authorization: authHeader } : {}),\n        ...(options.body !== undefined && options.body !== null\n          ? { \"Content-Type\": \"application/json\" }\n          : {}),\n      },\n      ...(options.body !== undefined && options.body !== null\n        ? { body: typeof options.body === \"string\" ? options.body : JSON.stringify(options.body) }\n        : {}),\n      signal: composedSignal,\n    };\n\n    // 4. Do the request with retry.\n    const wrappedRetry: RetryOptions = {\n      ...this.retry,\n      ...(options.retry ?? {}),\n      onRetry: (attempt: number, lastError: unknown) => {\n        attempts = attempt + 1;\n        const retryResponse = (lastError as { response?: Response }).response;\n        const reason: \"status\" | \"network\" | \"timeout\" = retryResponse\n          ? \"status\"\n          : (lastError as { name?: string })?.name === \"AbortError\"\n            ? \"timeout\"\n            : \"network\";\n        const event: import(\"./telemetry\").TelemetryRetryEvent = {\n          requestId,\n          attempt,\n          reason,\n          delayMs: 0,\n        };\n        if (retryResponse) event.status = retryResponse.status;\n        this.telemetry.onRetry(event);\n        (this.retry.onRetry ?? options.retry?.onRetry)?.(attempt, lastError);\n      },\n    };\n    let response: Response;\n    try {\n      response = await fetchWithRetry(\n        url,\n        init,\n        wrappedRetry,\n        this.retryClassifier,\n        this.fetchImpl,\n      );\n    } catch (err) {\n      // Rethrow as our typed error so consumers can branch.\n      if (err instanceof Error && (err as { response?: Response }).response) {\n        const r = (err as { response?: Response }).response!;\n        const errorBody = await safeReadJson(r);\n        throw new MeliApiError(\n          `MELI API ${r.status} on ${options.method ?? \"GET\"} ${options.path}`,\n          r.status,\n          url,\n          errorBody,\n          r.headers.get(\"x-request-id\") ?? undefined,\n        );\n      }\n      throw new MeliNetworkError(\n        `MELI fetch failed for ${options.method ?? \"GET\"} ${options.path}: ${\n          err instanceof Error ? err.message : String(err)\n        }`,\n        err,\n      );\n    }\n\n    // 5. Parse + validate.\n    const meliReqId = response.headers.get(\"x-request-id\");\n    const responseEvent: import(\"./telemetry\").TelemetryResponseEvent = {\n      requestId,\n      endedAt: Date.now(),\n      durationMs: Date.now() - startedAt,\n      status: response.status,\n      attempts,\n    };\n    if (meliReqId) responseEvent.meliRequestId = meliReqId;\n    this.telemetry.onResponse(responseEvent);\n\n    // Raw mode: return the Response untouched (caller handles binary body).\n    if (!options.parseAsJson) {\n      if (response.status >= 400) {\n        // Try to read a JSON error body for context, but tolerate non-JSON.\n        const errorBody = await safeReadJson(response.clone());\n        throw new MeliApiError(\n          `MELI API ${response.status} on ${options.method ?? \"GET\"} ${options.path}`,\n          response.status,\n          url,\n          errorBody,\n          response.headers.get(\"x-request-id\") ?? undefined,\n        );\n      }\n      return response;\n    }\n\n    if (response.status === 204 || response.status === 205) {\n      return undefined;\n    }\n    let body: unknown;\n    try {\n      body = await response.json();\n    } catch (err) {\n      throw new MeliApiError(\n        `MELI returned non-JSON body on ${options.path}`,\n        response.status,\n        url,\n        null,\n        response.headers.get(\"x-request-id\") ?? undefined,\n      );\n    }\n\n    if (response.status >= 400) {\n      throw new MeliApiError(\n        `MELI API ${response.status} on ${options.method ?? \"GET\"} ${options.path}`,\n        response.status,\n        url,\n        body,\n        response.headers.get(\"x-request-id\") ?? undefined,\n      );\n    }\n\n    if (options.responseSchema && !this.skipResponseValidation) {\n      const parsed = options.responseSchema.safeParse(body);\n      if (!parsed.success) {\n        throw new MeliValidationError(\n          `Response from ${options.path} failed validation: ${\n            parsed.error.issues[0]?.message ?? \"unknown\"\n          }`,\n          parsed.error.issues,\n        );\n      }\n      return parsed.data;\n    }\n    return body;\n  }\n\n  // -------------------------------------------------------------------------\n  // Internal helpers\n  // -------------------------------------------------------------------------\n\n  private async resolveAuthHeader(): Promise<string | null> {\n    switch (this.auth.kind) {\n      case \"none\":\n        return null;\n      case \"bearer\":\n        return `Bearer ${this.auth.accessToken}`;\n      case \"oauth\": {\n        const tokens = await ensureAccessToken({\n          userId: this.auth.userId,\n          app: this.auth.app,\n          store: this.auth.store,\n          fetchImpl: this.fetchImpl,\n        }).catch((err) => {\n          throw err instanceof Error ? new MeliAuthError(err.message, err) : err;\n        });\n        return `Bearer ${tokens.access_token}`;\n      }\n    }\n  }\n\n  private deriveRateLimitScope(): string {\n    if (this.auth.kind === \"oauth\") return `seller:${this.auth.userId}`;\n    if (this.auth.kind === \"bearer\") {\n      // Hash instead of slicing the token. Slicing leaks the last 8 chars\n      // into telemetry; hashing produces an opaque, collision-resistant id.\n      // Use a non-cryptographic FNV-1a 32-bit (deterministic, no async).\n      return `bearer:${fnv1a32(this.auth.accessToken)}`;\n    }\n    return \"anon\";\n  }\n\n  private buildUrl(\n    path: string,\n    query?: Record<string, string | number | boolean | undefined | null>,\n  ): string {\n    // Defence in depth against SSRF: reject any path that includes a scheme\n    // (`http://...`) or a protocol-relative authority (`//evil.com/x`).\n    // Without this, a path containing an absolute URL would silently rebase\n    // the request onto an attacker's host. Domain helpers always pass paths\n    // beginning with `/`, so this only catches mistakes (or attacks) before\n    // they reach the network.\n    if (\n      typeof path !== \"string\" ||\n      /^[a-z][a-z0-9+.-]*:\\/\\//i.test(path) ||\n      path.startsWith(\"//\") ||\n      path.includes(\"\u0000\")\n    ) {\n      throw new Error(\n        `MeliClient: refusing to fetch path that looks like an absolute URL or contains NUL: ${JSON.stringify(path)}`,\n      );\n    }\n    const url = new URL(path.startsWith(\"/\") ? path : `/${path}`, this.baseUrl);\n    if (query) {\n      for (const [k, v] of Object.entries(query)) {\n        if (v === undefined || v === null) continue;\n        url.searchParams.set(k, String(v));\n      }\n    }\n    return url.toString();\n  }\n}\n\nasync function safeReadJson(r: Response): Promise<unknown> {\n  try {\n    return await r.json();\n  } catch {\n    return null;\n  }\n}\n\n/** Compose multiple AbortSignals into one. The result aborts when any input\n *  aborts. Pure ES2022, works on Node 20+ / browsers / Edge. */\nfunction anySignal(...signals: AbortSignal[]): AbortSignal {\n  if (typeof (AbortSignal as unknown as { any?: (s: AbortSignal[]) => AbortSignal }).any === \"function\") {\n    return (AbortSignal as unknown as { any: (s: AbortSignal[]) => AbortSignal }).any(signals);\n  }\n  // Polyfill for runtimes without AbortSignal.any (older Node 20.x).\n  const ctrl = new AbortController();\n  const onAbort = () => ctrl.abort();\n  for (const s of signals) {\n    if (s.aborted) {\n      ctrl.abort();\n      break;\n    }\n    s.addEventListener(\"abort\", onAbort, { once: true });\n  }\n  return ctrl.signal;\n}\n\n/** FNV-1a 32-bit hash. Used to scope rate-limit buckets without leaking tokens. */\nfunction fnv1a32(s: string): string {\n  let h = 0x811c9dc5;\n  for (let i = 0; i < s.length; i++) {\n    h ^= s.charCodeAt(i);\n    h = (h + ((h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24))) >>> 0;\n  }\n  return h.toString(16).padStart(8, \"0\");\n}\n","// Items API — `/items`, `/items/{id}`, `/users/{id}/items/search`.\n//\n// Covers create / get / update / pause / close / relist / multiget /\n// seller-items search with cursor (`scroll_id`) pagination.\n\nimport type { MeliClient } from \"./client\";\nimport {\n  Item,\n  ItemCreateRequest,\n  ItemUpdateRequest,\n  type Item as TItem,\n  type ItemCreateRequest as TItemCreateRequest,\n  type ItemUpdateRequest as TItemUpdateRequest,\n} from \"./schemas/item\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Get (single)\n// ---------------------------------------------------------------------------\n\nexport interface GetItemOptions {\n  /** Optionally project a subset of fields via the `attributes` param. */\n  attributes?: string[];\n  /** Include catalog data in the response. */\n  includeCatalog?: boolean;\n}\n\nexport async function getItem(\n  client: MeliClient,\n  itemId: string,\n  options: GetItemOptions = {},\n): Promise<TItem> {\n  const query: Record<string, string> = {};\n  if (options.attributes) query[\"attributes\"] = options.attributes.join(\",\");\n  if (options.includeCatalog) query[\"include_attributes\"] = \"all\";\n  return client.fetch<TItem>({\n    method: \"GET\",\n    path: `/items/${itemId}`,\n    query,\n    responseSchema: Item,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Multiget — `/items?ids=ML...,ML...`\n//\n// MELI's `/items?ids=...` accepts at most **20 ids per call**. This helper\n// auto-chunks larger arrays + parallelizes the chunks (still gated by the\n// client's per-seller rate limiter, so no risk of overwhelming MELI).\n// Items the API returns with a non-200 sub-code (e.g., 404 because the item\n// was deleted) are silently dropped — callers that need to surface those\n// should use `getItem` per-id instead.\n// ---------------------------------------------------------------------------\n\nconst MELI_MULTIGET_LIMIT = 20;\n\nconst MultigetEntry = z.object({\n  code: z.number().int(),\n  body: Item,\n});\nconst MultigetResponse = z.array(MultigetEntry);\n\nexport interface MultigetOptions {\n  /** How many chunks to fetch in parallel. Default 4 — high enough to halve\n   *  wall-clock time on a 100-item lookup, low enough that the per-seller\n   *  rate limit stays within burst on hot paths. */\n  concurrency?: number;\n}\n\nexport async function multigetItems(\n  client: MeliClient,\n  itemIds: string[],\n  options: MultigetOptions = {},\n): Promise<TItem[]> {\n  if (itemIds.length === 0) return [];\n\n  // Single-call fast path: no chunking + no parallelism overhead.\n  if (itemIds.length <= MELI_MULTIGET_LIMIT) {\n    const response = await client.fetch<z.infer<typeof MultigetResponse>>({\n      method: \"GET\",\n      path: `/items`,\n      query: { ids: itemIds.join(\",\") },\n      responseSchema: MultigetResponse,\n    });\n    return response.filter((e) => e.code === 200).map((e) => e.body);\n  }\n\n  // Chunk + fetch in parallel. Preserve original order for the caller — when\n  // chunk N completes before chunk N-1, we still want the output to match\n  // the input ordering.\n  const concurrency = Math.max(1, options.concurrency ?? 4);\n  const chunks: string[][] = [];\n  for (let i = 0; i < itemIds.length; i += MELI_MULTIGET_LIMIT) {\n    chunks.push(itemIds.slice(i, i + MELI_MULTIGET_LIMIT));\n  }\n  const results: TItem[][] = new Array(chunks.length);\n  let next = 0;\n  async function worker() {\n    while (next < chunks.length) {\n      const idx = next++;\n      const chunk = chunks[idx]!;\n      const response = await client.fetch<z.infer<typeof MultigetResponse>>({\n        method: \"GET\",\n        path: `/items`,\n        query: { ids: chunk.join(\",\") },\n        responseSchema: MultigetResponse,\n      });\n      results[idx] = response.filter((e) => e.code === 200).map((e) => e.body);\n    }\n  }\n  await Promise.all(\n    Array.from({ length: Math.min(concurrency, chunks.length) }, () => worker()),\n  );\n  return results.flat();\n}\n\n// ---------------------------------------------------------------------------\n// Create\n// ---------------------------------------------------------------------------\n\nexport async function createItem(\n  client: MeliClient,\n  payload: TItemCreateRequest,\n): Promise<TItem> {\n  const validated = ItemCreateRequest.parse(payload);\n  return client.fetch<TItem>({\n    method: \"POST\",\n    path: `/items`,\n    body: validated,\n    responseSchema: Item,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Update\n// ---------------------------------------------------------------------------\n\nexport async function updateItem(\n  client: MeliClient,\n  itemId: string,\n  payload: TItemUpdateRequest,\n): Promise<TItem> {\n  const validated = ItemUpdateRequest.parse(payload);\n  return client.fetch<TItem>({\n    method: \"PUT\",\n    path: `/items/${itemId}`,\n    body: validated,\n    responseSchema: Item,\n  });\n}\n\nexport async function pauseItem(client: MeliClient, itemId: string): Promise<TItem> {\n  return updateItem(client, itemId, { status: \"paused\" });\n}\n\nexport async function closeItem(client: MeliClient, itemId: string): Promise<TItem> {\n  return updateItem(client, itemId, { status: \"closed\" });\n}\n\n// ---------------------------------------------------------------------------\n// Relist (re-activate a closed listing)\n// ---------------------------------------------------------------------------\n\nexport async function relistItem(\n  client: MeliClient,\n  itemId: string,\n  args: {\n    listing_type_id?: TItem[\"listing_type_id\"];\n    quantity?: number;\n    price?: number;\n  } = {},\n): Promise<TItem> {\n  return client.fetch<TItem>({\n    method: \"POST\",\n    path: `/items/${itemId}/relist`,\n    body: args,\n    responseSchema: Item,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Seller-side items search with scroll_id pagination\n// (the only way to iterate >1k items)\n// ---------------------------------------------------------------------------\n\nexport const SellerItemsSearchResponse = z.object({\n  paging: z.object({\n    total: z.number().int().nonnegative(),\n    offset: z.number().int().nonnegative().optional(),\n    limit: z.number().int().positive().optional(),\n  }),\n  results: z.array(z.string()), // item ids\n  scroll_id: z.string().optional(),\n});\nexport type SellerItemsSearchResponse = z.infer<typeof SellerItemsSearchResponse>;\n\nexport interface SearchSellerItemsOptions {\n  /** Status filter. */\n  status?: \"active\" | \"paused\" | \"closed\" | \"all\";\n  /** ISO date filter — items updated after this. */\n  updatedAfter?: string;\n  /** Sort. */\n  sort?: \"last_updated_desc\" | \"last_updated_asc\";\n  /** Page size. Default 50. */\n  limit?: number;\n  /** Continuation token from the previous call. */\n  scrollId?: string;\n}\n\nexport async function searchSellerItems(\n  client: MeliClient,\n  sellerId: number,\n  options: SearchSellerItemsOptions = {},\n): Promise<SellerItemsSearchResponse> {\n  const query: Record<string, string | number> = {\n    search_type: \"scan\",\n  };\n  if (options.status && options.status !== \"all\") query[\"status\"] = options.status;\n  if (options.sort) query[\"sort\"] = options.sort;\n  if (options.limit) query[\"limit\"] = options.limit;\n  if (options.scrollId) query[\"scroll_id\"] = options.scrollId;\n  return client.fetch<SellerItemsSearchResponse>({\n    method: \"GET\",\n    path: `/users/${sellerId}/items/search`,\n    query,\n    responseSchema: SellerItemsSearchResponse,\n  });\n}\n\n/**\n * Iterate ALL items for a seller, transparently paging via `scroll_id`.\n * Yields one item id at a time; the caller decides batching.\n */\nexport async function* iterateSellerItems(\n  client: MeliClient,\n  sellerId: number,\n  options: Omit<SearchSellerItemsOptions, \"scrollId\"> = {},\n): AsyncGenerator<string, void, void> {\n  let scrollId: string | undefined;\n  while (true) {\n    const page = await searchSellerItems(client, sellerId, {\n      ...options,\n      ...(scrollId !== undefined ? { scrollId } : {}),\n    });\n    for (const id of page.results) yield id;\n    if (!page.scroll_id || page.results.length === 0) return;\n    scrollId = page.scroll_id;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Description (separate resource per spec)\n// ---------------------------------------------------------------------------\n\nexport const ItemDescription = z.object({\n  text: z.string().optional(),\n  plain_text: z.string().optional(),\n  last_updated: z.string().optional(),\n});\nexport type ItemDescription = z.infer<typeof ItemDescription>;\n\nexport async function getItemDescription(\n  client: MeliClient,\n  itemId: string,\n): Promise<ItemDescription> {\n  return client.fetch<ItemDescription>({\n    method: \"GET\",\n    path: `/items/${itemId}/description`,\n    responseSchema: ItemDescription,\n  });\n}\n\nexport async function updateItemDescription(\n  client: MeliClient,\n  itemId: string,\n  description: { plain_text: string },\n): Promise<ItemDescription> {\n  return client.fetch<ItemDescription>({\n    method: \"PUT\",\n    path: `/items/${itemId}/description`,\n    body: description,\n    responseSchema: ItemDescription,\n  });\n}\n","// Categories — `/sites/{site}/category_predictor`,\n// `/sites/{site}/domain_discovery/search`, `/domains/{id}/technical_specs/input`,\n// `/categories/{id}`.\n//\n// THE killer-app endpoints for agentic listings: predict the category from\n// title + description, fetch required attributes per domain, and surface\n// suggested values so the agent can fill them.\n\nimport type { MeliClient } from \"./client\";\nimport {\n  CategoryMetadata,\n  CategoryPrediction,\n  DomainDiscoveryResult,\n  TechnicalSpecResponse,\n  type CategoryMetadata as TCategoryMetadata,\n  type CategoryPrediction as TCategoryPrediction,\n  type DomainDiscoveryResult as TDomainDiscoveryResult,\n  type TechnicalSpecResponse as TTechnicalSpecResponse,\n} from \"./schemas/category\";\nimport type { SiteId } from \"./schemas/common\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Category predictor — POST `/sites/{site}/category_predictor/predict`\n// ---------------------------------------------------------------------------\n\nexport interface PredictCategoryInput {\n  title: string;\n  /** Optional price (currency-aware predictions). */\n  price?: number | undefined;\n  /** Optional listing condition. */\n  condition?: \"new\" | \"used\" | undefined;\n}\n\nexport async function predictCategory(\n  client: MeliClient,\n  site: SiteId,\n  input: PredictCategoryInput,\n): Promise<TCategoryPrediction> {\n  return client.fetch<TCategoryPrediction>({\n    method: \"POST\",\n    path: `/sites/${site}/category_predictor/predict`,\n    body: input,\n    responseSchema: CategoryPrediction,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Domain discovery — `/sites/{site}/domain_discovery/search?q=...`\n// (Better than the predictor for narrowing down the canonical domain.)\n// ---------------------------------------------------------------------------\n\nconst DomainDiscoveryListResponse = z.array(DomainDiscoveryResult);\n\nexport async function discoverDomain(\n  client: MeliClient,\n  site: SiteId,\n  query: string,\n  options: { limit?: number } = {},\n): Promise<TDomainDiscoveryResult[]> {\n  return client.fetch<TDomainDiscoveryResult[]>({\n    method: \"GET\",\n    path: `/sites/${site}/domain_discovery/search`,\n    query: { q: query, limit: options.limit ?? 5 },\n    responseSchema: DomainDiscoveryListResponse,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Technical specs — `/domains/{id}/technical_specs/input`\n// Returns required + recommended attributes for a domain.\n// ---------------------------------------------------------------------------\n\nexport async function getDomainTechnicalSpecs(\n  client: MeliClient,\n  domainId: string,\n): Promise<TTechnicalSpecResponse> {\n  return client.fetch<TTechnicalSpecResponse>({\n    method: \"GET\",\n    path: `/domains/${encodeURIComponent(domainId)}/technical_specs/input`,\n    responseSchema: TechnicalSpecResponse,\n  });\n}\n\n/**\n * Convenience: classify required attribute ids for a domain. Useful for\n * an agent flow that wants to ensure mandatory fields are filled BEFORE\n * trying to publish.\n */\nexport async function getRequiredAttributeIds(\n  client: MeliClient,\n  domainId: string,\n): Promise<string[]> {\n  const specs = await getDomainTechnicalSpecs(client, domainId);\n  const ids: string[] = [];\n  for (const group of specs.groups) {\n    if (group.id !== \"MAIN\") continue;\n    for (const c of group.components) {\n      if (c.required !== false) ids.push(c.id); // required defaults to true\n    }\n  }\n  return ids;\n}\n\n// ---------------------------------------------------------------------------\n// Category metadata — `/categories/{id}`\n// ---------------------------------------------------------------------------\n\nexport async function getCategory(\n  client: MeliClient,\n  categoryId: string,\n): Promise<TCategoryMetadata> {\n  return client.fetch<TCategoryMetadata>({\n    method: \"GET\",\n    path: `/categories/${categoryId}`,\n    responseSchema: CategoryMetadata,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Site categories (root) — `/sites/{site}/categories`\n// ---------------------------------------------------------------------------\n\nconst SiteCategoriesResponse = z.array(\n  z.object({ id: z.string(), name: z.string() }),\n);\n\nexport async function listSiteCategories(\n  client: MeliClient,\n  site: SiteId,\n): Promise<Array<{ id: string; name: string }>> {\n  return client.fetch({\n    method: \"GET\",\n    path: `/sites/${site}/categories`,\n    responseSchema: SiteCategoriesResponse,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Composite helper: predict + fetch specs in one call.\n// ---------------------------------------------------------------------------\n\nexport interface CategorizeAndPlanResult {\n  prediction: TCategoryPrediction;\n  /** All required attribute ids for the predicted domain. */\n  requiredAttributeIds: string[];\n  /** Full technical specs (use to render the form / fill via LLM). */\n  technicalSpecs: TTechnicalSpecResponse;\n}\n\n/**\n * One-shot: take a listing title (+ optional price/condition), predict the\n * category, fetch required attributes, and return everything needed for an\n * agent to publish a complete listing.\n *\n * This is the core of the \"agent publishes a listing in 30 seconds\" demo.\n */\nexport async function categorizeAndPlan(\n  client: MeliClient,\n  site: SiteId,\n  input: PredictCategoryInput,\n): Promise<CategorizeAndPlanResult> {\n  const prediction = await predictCategory(client, site, input);\n  if (!prediction.domain_id) {\n    return {\n      prediction,\n      requiredAttributeIds: [],\n      technicalSpecs: { groups: [] },\n    };\n  }\n  const technicalSpecs = await getDomainTechnicalSpecs(client, prediction.domain_id);\n  const requiredAttributeIds: string[] = [];\n  for (const group of technicalSpecs.groups) {\n    if (group.id !== \"MAIN\") continue;\n    for (const c of group.components) {\n      if (c.required !== false) requiredAttributeIds.push(c.id);\n    }\n  }\n  return { prediction, requiredAttributeIds, technicalSpecs };\n}\n","// Questions API — `/questions/search`, `/questions/{id}`, `/answers`,\n// `/users/{id}/questions_blacklist`.\n//\n// Includes a heuristic spam classifier suitable for a first-pass filter\n// before an LLM-based responder takes over.\n\nimport type { MeliClient } from \"./client\";\nimport {\n  AnswerRequest,\n  Question,\n  QuestionSpamFeatures,\n  QuestionsSearchResponse,\n  type Answer,\n  type AnswerRequest as TAnswerRequest,\n  type Question as TQuestion,\n  type QuestionSpamFeatures as TQuestionSpamFeatures,\n  type QuestionsSearchResponse as TQuestionsSearchResponse,\n} from \"./schemas/question\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// List questions — `/questions/search?seller_id=...&status=...`\n// ---------------------------------------------------------------------------\n\nexport interface ListQuestionsOptions {\n  status?: \"ANSWERED\" | \"UNANSWERED\" | \"CLOSED_UNANSWERED\";\n  itemId?: string;\n  /** Default 50. Max 100 per the docs. */\n  limit?: number;\n  offset?: number;\n  /** Sort, default `date_created.desc`. */\n  sort?: \"date_created.desc\" | \"date_created.asc\";\n}\n\nexport async function listQuestions(\n  client: MeliClient,\n  sellerId: number,\n  options: ListQuestionsOptions = {},\n): Promise<TQuestionsSearchResponse> {\n  const query: Record<string, string | number> = {\n    seller_id: sellerId,\n    api_version: 4,\n  };\n  if (options.status !== undefined) query[\"status\"] = options.status;\n  if (options.itemId !== undefined) query[\"item\"] = options.itemId;\n  if (options.limit !== undefined) query[\"limit\"] = options.limit;\n  if (options.offset !== undefined) query[\"offset\"] = options.offset;\n  if (options.sort !== undefined) query[\"sort\"] = options.sort;\n  return client.fetch<TQuestionsSearchResponse>({\n    method: \"GET\",\n    path: `/questions/search`,\n    query,\n    responseSchema: QuestionsSearchResponse,\n  });\n}\n\nexport async function getQuestion(\n  client: MeliClient,\n  questionId: number,\n): Promise<TQuestion> {\n  return client.fetch<TQuestion>({\n    method: \"GET\",\n    path: `/questions/${questionId}`,\n    responseSchema: Question,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Answer — `POST /answers`\n// ---------------------------------------------------------------------------\n\nconst AnswerResponse = z.object({\n  id: z.number().int(),\n  text: z.string(),\n  status: z.string().optional(),\n  date_created: z.string().optional(),\n});\n\nexport async function answerQuestion(\n  client: MeliClient,\n  request: TAnswerRequest,\n): Promise<z.infer<typeof AnswerResponse>> {\n  const validated = AnswerRequest.parse(request);\n  return client.fetch({\n    method: \"POST\",\n    path: `/answers`,\n    body: validated,\n    responseSchema: AnswerResponse,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Block (blacklist) a buyer\n// ---------------------------------------------------------------------------\n\nexport async function blacklistAsker(\n  client: MeliClient,\n  sellerId: number,\n  askerUserId: number,\n): Promise<void> {\n  await client.fetch({\n    method: \"POST\",\n    path: `/users/${sellerId}/questions_blacklist`,\n    body: { user_id: askerUserId },\n  });\n}\n\nexport async function unblockAsker(\n  client: MeliClient,\n  sellerId: number,\n  askerUserId: number,\n): Promise<void> {\n  await client.fetch({\n    method: \"DELETE\",\n    path: `/users/${sellerId}/questions_blacklist/${askerUserId}`,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Heuristic spam classifier — feature extractor + score function.\n//\n// The score is a non-LLM first-pass filter. For high-stakes auto-respond,\n// pair this with an LLM that re-classifies anything in the \"borderline\"\n// zone (score 0.3..0.7).\n// ---------------------------------------------------------------------------\n\nexport interface ClassifySpamInput {\n  question: TQuestion;\n  /** Fetched separately when needed (asker history). */\n  askerProfile?: {\n    answered_questions?: number;\n    account_age_days?: number;\n  };\n  /** Set of question texts (or hashes) seen across this seller's catalog. */\n  recentQuestionsByThisAsker?: string[];\n}\n\nconst URL_RE = /\\bhttps?:\\/\\/\\S+|www\\.\\S+/i;\n// Phone-like patterns: require word boundary, an optional country code\n// (`+54` etc.), and either explicit separators (spaces/hyphens/parens/dots)\n// OR a leading + sign — to avoid flagging order numbers and tracking codes\n// that are bare digit runs. Examples this catches:\n//   \"+54 11 1234-5678\", \"(011) 1234 5678\", \"11 1234.5678\", \"+34 695 632 237\"\n// Examples this rejects:\n//   \"2000003508510037\" (order id), \"AND1234567890\" (tracking)\nconst PHONE_RE =\n  /(?:\\+\\d[\\d\\s\\-.()]{6,}\\d)|(?:\\b\\(?\\d{2,4}\\)?[\\s\\-.]\\d{2,4}[\\s\\-.]\\d{3,4}\\b)/;\nconst EMAIL_RE = /[^\\s]+@[^\\s]+\\.[^\\s]+/i;\n\nexport function extractSpamFeatures(input: ClassifySpamInput): TQuestionSpamFeatures {\n  const text = input.question.text;\n  const containsExternal =\n    URL_RE.test(text) || PHONE_RE.test(text) || EMAIL_RE.test(text);\n  const repetitions = (input.recentQuestionsByThisAsker ?? []).filter(\n    (t) => t === text,\n  ).length;\n  return QuestionSpamFeatures.parse({\n    asker_account_age_days: input.askerProfile?.account_age_days,\n    asker_answered_questions: input.askerProfile?.answered_questions,\n    contains_external_contact: containsExternal,\n    cross_listing_repetition: repetitions >= 2,\n    text_length: text.length,\n  });\n}\n\n/**\n * Score 0..1 — higher is more likely spam. Uses a transparent heuristic so\n * agents can explain their decision.\n */\nexport function scoreSpam(features: TQuestionSpamFeatures): number {\n  let score = 0;\n  if (features.contains_external_contact) score += 0.45;\n  if (features.cross_listing_repetition) score += 0.35;\n  if (features.text_length < 8) score += 0.15;\n  if (features.text_length > 500) score += 0.05;\n  if (\n    features.asker_account_age_days !== undefined &&\n    features.asker_account_age_days < 7\n  ) {\n    score += 0.15;\n  }\n  if (\n    features.asker_answered_questions !== undefined &&\n    features.asker_answered_questions === 0\n  ) {\n    score += 0.1;\n  }\n  return Math.max(0, Math.min(1, score));\n}\n\nexport type SpamLabel = \"spam\" | \"borderline\" | \"ham\";\n\nexport function classifySpam(\n  input: ClassifySpamInput,\n): { label: SpamLabel; score: number; features: TQuestionSpamFeatures } {\n  const features = extractSpamFeatures(input);\n  const score = scoreSpam(features);\n  const label: SpamLabel =\n    score >= 0.7 ? \"spam\" : score <= 0.3 ? \"ham\" : \"borderline\";\n  return { label, score, features };\n}\n","// Orders + Packs — `/orders/search`, `/orders/{id}`,\n// `/marketplace/orders/pack/{pack_id}`, `/orders/{id}/billing_info`.\n\nimport type { MeliClient } from \"./client\";\nimport {\n  Order,\n  OrdersSearchResponse,\n  Pack,\n  type Order as TOrder,\n  type OrdersSearchResponse as TOrdersSearchResponse,\n  type Pack as TPack,\n} from \"./schemas/order\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Search — `/orders/search?seller=...`\n// ---------------------------------------------------------------------------\n\nexport interface SearchOrdersOptions {\n  /** Filter by order status. */\n  status?:\n    | \"paid\"\n    | \"confirmed\"\n    | \"payment_in_process\"\n    | \"cancelled\"\n    | \"invalid\";\n  /** Date filter: ISO 8601. */\n  dateCreatedFrom?: string;\n  dateCreatedTo?: string;\n  dateLastUpdatedFrom?: string;\n  /** Sort. Default `date_desc`. */\n  sort?: \"date_desc\" | \"date_asc\";\n  limit?: number;\n  offset?: number;\n  /** Tag filter (e.g. `paid`, `not_delivered`). */\n  tags?: string[];\n}\n\nexport async function searchOrders(\n  client: MeliClient,\n  sellerId: number,\n  options: SearchOrdersOptions = {},\n): Promise<TOrdersSearchResponse> {\n  const query: Record<string, string | number> = {\n    seller: sellerId,\n  };\n  if (options.status) query[\"order.status\"] = options.status;\n  if (options.dateCreatedFrom) query[\"order.date_created.from\"] = options.dateCreatedFrom;\n  if (options.dateCreatedTo) query[\"order.date_created.to\"] = options.dateCreatedTo;\n  if (options.dateLastUpdatedFrom) {\n    query[\"order.date_last_updated.from\"] = options.dateLastUpdatedFrom;\n  }\n  if (options.sort) query[\"sort\"] = options.sort;\n  if (options.limit) query[\"limit\"] = options.limit;\n  if (options.offset) query[\"offset\"] = options.offset;\n  if (options.tags && options.tags.length) query[\"tags\"] = options.tags.join(\",\");\n  return client.fetch<TOrdersSearchResponse>({\n    method: \"GET\",\n    path: `/orders/search`,\n    query,\n    responseSchema: OrdersSearchResponse,\n  });\n}\n\nexport async function getOrder(\n  client: MeliClient,\n  orderId: number,\n): Promise<TOrder> {\n  return client.fetch<TOrder>({\n    method: \"GET\",\n    path: `/orders/${orderId}`,\n    responseSchema: Order,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Billing info — `/orders/{id}/billing_info`\n// Returns the buyer's tax data (CUIT/CFDI) needed for invoice emission.\n// ---------------------------------------------------------------------------\n\nexport const OrderBillingInfo = z.object({\n  buyer: z.object({\n    billing_info: z\n      .object({\n        doc_type: z.string().nullable().optional(),\n        doc_number: z.string().nullable().optional(),\n      })\n      .optional(),\n  }),\n});\nexport type OrderBillingInfo = z.infer<typeof OrderBillingInfo>;\n\nexport async function getOrderBillingInfo(\n  client: MeliClient,\n  orderId: number,\n): Promise<OrderBillingInfo> {\n  return client.fetch<OrderBillingInfo>({\n    method: \"GET\",\n    path: `/orders/${orderId}/billing_info`,\n    responseSchema: OrderBillingInfo,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Packs — `/marketplace/orders/pack/{pack_id}`\n//\n// 30%+ of MELI sales go through carts (one buyer → multiple orders sharing\n// a single shipment). Naive `/orders/search` iterators miss the\n// pack-level coordination. Use `getPack(packId)` to load all orders in a\n// cart together.\n// ---------------------------------------------------------------------------\n\nexport async function getPack(\n  client: MeliClient,\n  packId: number,\n): Promise<TPack> {\n  return client.fetch<TPack>({\n    method: \"GET\",\n    path: `/marketplace/orders/pack/${packId}`,\n    responseSchema: Pack,\n  });\n}\n\n/**\n * Given an array of orders, group cart-orders by `pack_id` and return\n * (single-order, packs) so callers can iterate without double-counting.\n */\nexport function partitionByPack(\n  orders: TOrder[],\n): {\n  singleOrders: TOrder[];\n  packs: Map<number, TOrder[]>;\n} {\n  const singleOrders: TOrder[] = [];\n  const packs = new Map<number, TOrder[]>();\n  for (const order of orders) {\n    if (order.pack_id) {\n      const existing = packs.get(order.pack_id) ?? [];\n      existing.push(order);\n      packs.set(order.pack_id, existing);\n    } else {\n      singleOrders.push(order);\n    }\n  }\n  return { singleOrders, packs };\n}\n","// Claims / Mediation — `/post-purchase/v1/claims/{id}`,\n// `/post-purchase/v2/claims/{id}/returns`,\n// `/post-purchase/v1/claims/{id}/evidences`,\n// `/post-purchase/v1/claims/{id}/messages`.\n//\n// Implements the 2-day SLA defender pattern: list open claims, fetch\n// details, upload evidence (one-shot, immutable per spec), respond in the\n// mediation thread.\n\nimport type { MeliClient } from \"./client\";\nimport {\n  Claim,\n  ClaimEvidence,\n  ClaimMessage,\n  EvidenceUploadRequest,\n  type Claim as TClaim,\n  type ClaimEvidence as TClaimEvidence,\n  type ClaimMessage as TClaimMessage,\n  type EvidenceUploadRequest as TEvidenceUploadRequest,\n} from \"./schemas/claim\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// List claims — `/post-purchase/v1/claims/search?stage=...`\n// ---------------------------------------------------------------------------\n\nconst ClaimsSearchResponse = z.object({\n  paging: z.object({\n    total: z.number().int().nonnegative(),\n    offset: z.number().int().nonnegative().optional(),\n    limit: z.number().int().positive().optional(),\n  }),\n  data: z.array(Claim),\n});\nexport type ClaimsSearchResponse = z.infer<typeof ClaimsSearchResponse>;\n\nexport interface SearchClaimsOptions {\n  stage?: \"claim\" | \"dispute\" | \"mediation\";\n  status?: \"opened\" | \"closed\" | \"expired\";\n  resource?: \"order\" | \"shipment\" | \"payment\";\n  resourceId?: number;\n  limit?: number;\n  offset?: number;\n}\n\nexport async function searchClaims(\n  client: MeliClient,\n  options: SearchClaimsOptions = {},\n): Promise<ClaimsSearchResponse> {\n  const query: Record<string, string | number> = {};\n  if (options.stage !== undefined) query[\"stage\"] = options.stage;\n  if (options.status !== undefined) query[\"status\"] = options.status;\n  if (options.resource !== undefined) query[\"resource\"] = options.resource;\n  if (options.resourceId !== undefined) query[\"resource_id\"] = options.resourceId;\n  if (options.limit !== undefined) query[\"limit\"] = options.limit;\n  if (options.offset !== undefined) query[\"offset\"] = options.offset;\n  return client.fetch<ClaimsSearchResponse>({\n    method: \"GET\",\n    path: `/post-purchase/v1/claims/search`,\n    query,\n    responseSchema: ClaimsSearchResponse,\n  });\n}\n\nexport async function getClaim(client: MeliClient, claimId: number): Promise<TClaim> {\n  return client.fetch<TClaim>({\n    method: \"GET\",\n    path: `/post-purchase/v1/claims/${claimId}`,\n    responseSchema: Claim,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Evidence — one-shot upload per spec\n// ---------------------------------------------------------------------------\n\nconst ClaimEvidenceListResponse = z.object({\n  evidences: z.array(ClaimEvidence),\n});\nexport type ClaimEvidenceListResponse = z.infer<typeof ClaimEvidenceListResponse>;\n\nexport async function listClaimEvidences(\n  client: MeliClient,\n  claimId: number,\n): Promise<ClaimEvidenceListResponse> {\n  return client.fetch<ClaimEvidenceListResponse>({\n    method: \"GET\",\n    path: `/post-purchase/v1/claims/${claimId}/evidences`,\n    responseSchema: ClaimEvidenceListResponse,\n  });\n}\n\n/**\n * Upload evidence to a claim. **Immutable per spec** — once submitted,\n * cannot be changed. The agent flow should compose all evidence in one\n * call; rejected submissions cannot be amended without opening a new\n * claim cycle.\n */\nexport async function uploadClaimEvidence(\n  client: MeliClient,\n  claimId: number,\n  payload: TEvidenceUploadRequest,\n): Promise<TClaimEvidence> {\n  const validated = EvidenceUploadRequest.parse(payload);\n  return client.fetch<TClaimEvidence>({\n    method: \"POST\",\n    path: `/post-purchase/v1/claims/${claimId}/evidences`,\n    body: validated,\n    responseSchema: ClaimEvidence,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Mediation message thread\n// ---------------------------------------------------------------------------\n\nconst ClaimMessagesResponse = z.object({\n  messages: z.array(ClaimMessage),\n});\nexport type ClaimMessagesResponse = z.infer<typeof ClaimMessagesResponse>;\n\nexport async function listClaimMessages(\n  client: MeliClient,\n  claimId: number,\n): Promise<ClaimMessagesResponse> {\n  return client.fetch<ClaimMessagesResponse>({\n    method: \"GET\",\n    path: `/post-purchase/v1/claims/${claimId}/messages`,\n    responseSchema: ClaimMessagesResponse,\n  });\n}\n\nexport async function postClaimMessage(\n  client: MeliClient,\n  claimId: number,\n  message: string,\n): Promise<TClaimMessage> {\n  return client.fetch<TClaimMessage>({\n    method: \"POST\",\n    path: `/post-purchase/v1/claims/${claimId}/messages`,\n    body: { message },\n    responseSchema: ClaimMessage,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Returns — `/post-purchase/v2/claims/{id}/returns`\n// ---------------------------------------------------------------------------\n\nconst ReturnReviewRequest = z.object({\n  decision: z.enum([\"accepted\", \"rejected\"]),\n  reason: z.string().optional(),\n});\nexport type ReturnReviewRequest = z.infer<typeof ReturnReviewRequest>;\n\nconst ReturnReviewResponse = z.object({\n  status: z.string(),\n  decision: z.enum([\"accepted\", \"rejected\"]).optional(),\n  date: z.string().optional(),\n});\nexport type ReturnReviewResponse = z.infer<typeof ReturnReviewResponse>;\n\nexport async function reviewReturn(\n  client: MeliClient,\n  returnId: number,\n  payload: ReturnReviewRequest,\n): Promise<ReturnReviewResponse> {\n  const validated = ReturnReviewRequest.parse(payload);\n  return client.fetch<ReturnReviewResponse>({\n    method: \"POST\",\n    path: `/post-purchase/v1/returns/${returnId}/return-review`,\n    body: validated,\n    responseSchema: ReturnReviewResponse,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Defender pattern — orchestration helper\n// ---------------------------------------------------------------------------\n\nexport interface DefendClaimInput {\n  claimId: number;\n  evidences: TEvidenceUploadRequest[];\n  /** Optional message to post in the mediation thread alongside evidence. */\n  message?: string;\n}\n\nexport interface DefendClaimResult {\n  claim: TClaim;\n  uploadedEvidences: TClaimEvidence[];\n  /** Evidences that failed to upload, in the same order they were submitted.\n   *  When non-empty, the claim is partially defended — surface this to the\n   *  human for manual review. */\n  failedEvidences: { evidence: TEvidenceUploadRequest; error: unknown }[];\n  messagePosted: TClaimMessage | null;\n}\n\n/**\n * The 2-day SLA defender flow. Loads claim metadata, uploads evidences\n * **sequentially** (NOT in parallel — see below), and optionally posts a\n * closing message.\n *\n * Why sequential. MELI's `/claims/{id}/evidences` endpoint has one-shot\n * semantics per evidence-type: if N requests land concurrently, MELI may\n * persist some, reject others as duplicates, or close the evidence window\n * mid-batch — leaving the claim half-defended with no way to amend.\n * Sequential uploads cap the blast radius: on failure, we stop and return\n * the partial state so the caller can decide whether to retry, escalate, or\n * proceed with the message.\n *\n * The cost is latency (~N × 200ms instead of ~200ms). For a typical 3-piece\n * defence under MELI's 2-day SLA, that's a non-issue.\n */\nexport async function defendClaim(\n  client: MeliClient,\n  input: DefendClaimInput,\n): Promise<DefendClaimResult> {\n  const claim = await getClaim(client, input.claimId);\n  const uploaded: TClaimEvidence[] = [];\n  const failed: { evidence: TEvidenceUploadRequest; error: unknown }[] = [];\n  for (const evidence of input.evidences) {\n    try {\n      uploaded.push(await uploadClaimEvidence(client, input.claimId, evidence));\n    } catch (err) {\n      failed.push({ evidence, error: err });\n      // Stop on first failure — we don't know whether MELI persisted partial\n      // state, and we don't want the agent to keep stomping on the claim.\n      break;\n    }\n  }\n  let messagePosted: TClaimMessage | null = null;\n  if (input.message && failed.length === 0) {\n    messagePosted = await postClaimMessage(client, input.claimId, input.message);\n  }\n  return {\n    claim,\n    uploadedEvidences: uploaded,\n    failedEvidences: failed,\n    messagePosted,\n  };\n}\n","// Shipments — `/shipments/{id}`, `/shipments/{id}/history`,\n// `/shipment_labels?...`, `/items/{id}/shipping_options`.\n\nimport type { MeliClient } from \"./client\";\nimport {\n  LabelFormat,\n  Shipment,\n  ShipmentHistoryEntry,\n  ShippingOption,\n  type LabelFormat as TLabelFormat,\n  type Shipment as TShipment,\n  type ShipmentHistoryEntry as TShipmentHistoryEntry,\n  type ShippingOption as TShippingOption,\n} from \"./schemas/shipment\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Single shipment\n// ---------------------------------------------------------------------------\n\nexport async function getShipment(\n  client: MeliClient,\n  shipmentId: number,\n): Promise<TShipment> {\n  return client.fetch<TShipment>({\n    method: \"GET\",\n    path: `/shipments/${shipmentId}`,\n    responseSchema: Shipment,\n  });\n}\n\nconst ShipmentHistoryResponse = z.array(ShipmentHistoryEntry);\nexport async function getShipmentHistory(\n  client: MeliClient,\n  shipmentId: number,\n): Promise<TShipmentHistoryEntry[]> {\n  return client.fetch<TShipmentHistoryEntry[]>({\n    method: \"GET\",\n    path: `/shipments/${shipmentId}/history`,\n    responseSchema: ShipmentHistoryResponse,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Labels — returns binary (PDF / ZPL). Use the raw fetch path because the\n// response is NOT JSON.\n// ---------------------------------------------------------------------------\n\nexport interface FetchLabelsInput {\n  shipmentIds: number[];\n  format: TLabelFormat;\n}\n\n/**\n * Fetch shipment labels as a Blob. Caller decides what to do (save to disk,\n * stream to user, attach to email).\n *\n * Goes through the same auth + rate-limit + retry + telemetry plumbing as\n * the rest of the client (via `client.fetchRaw`) — labels never get a\n * silent unauthenticated request and aren't excluded from per-seller rate\n * limiting.\n *\n * NOTE: labels invalidate after 7 days — re-fetch close to ship time.\n */\nexport async function fetchLabelsBlob(\n  client: MeliClient,\n  input: FetchLabelsInput,\n): Promise<Blob> {\n  const response = await client.fetchRaw({\n    method: \"GET\",\n    path: \"/shipment_labels\",\n    query: {\n      shipment_ids: input.shipmentIds.join(\",\"),\n      response_type: input.format,\n    },\n    acceptHeader: input.format === \"pdf\" ? \"application/pdf\" : \"text/plain\",\n  });\n  return response.blob();\n}\n\n// ---------------------------------------------------------------------------\n// Shipping options for an item — `/items/{id}/shipping_options`\n// ---------------------------------------------------------------------------\n\nconst ShippingOptionsResponse = z.object({\n  options: z.array(ShippingOption),\n  destination: z\n    .object({\n      type: z.string().optional(),\n      zip_code: z.string().optional(),\n    })\n    .optional(),\n});\nexport type ShippingOptionsResponse = z.infer<typeof ShippingOptionsResponse>;\n\nexport async function getShippingOptions(\n  client: MeliClient,\n  itemId: string,\n  options: { zipCode?: string; quantity?: number } = {},\n): Promise<ShippingOptionsResponse> {\n  const query: Record<string, string | number> = {};\n  if (options.zipCode !== undefined) query[\"zip_code\"] = options.zipCode;\n  if (options.quantity !== undefined) query[\"quantity\"] = options.quantity;\n  return client.fetch<ShippingOptionsResponse>({\n    method: \"GET\",\n    path: `/items/${itemId}/shipping_options`,\n    query,\n    responseSchema: ShippingOptionsResponse,\n  });\n}\n\n// Re-export so consumers don't need a deep import.\nexport { LabelFormat, type TLabelFormat as LabelFormatType };\n","// Seller reputation — `/users/{id}/seller_reputation`.\n//\n// Plus a lightweight monitor pattern that polls the reputation snapshot\n// and emits typed alerts when metrics cross configurable thresholds.\n// MELI demotes sellers when claim_rate, late_handling, or cancel_rate\n// exceed silent thresholds; this monitor catches them BEFORE the\n// thermometer drops.\n\nimport type { MeliClient } from \"./client\";\nimport { MeliApiError, MeliAuthError, MeliValidationError } from \"./errors\";\nimport {\n  ReputationAlert,\n  SellerReputation,\n  type ReputationAlert as TReputationAlert,\n  type SellerReputation as TSellerReputation,\n} from \"./schemas/reputation\";\n\n// ---------------------------------------------------------------------------\n// Snapshot\n// ---------------------------------------------------------------------------\n\nexport async function getSellerReputation(\n  client: MeliClient,\n  sellerId: number,\n): Promise<TSellerReputation> {\n  // The endpoint returns the reputation envelope directly — `/users/{id}`\n  // is the parent shape, but we expose a cleaner client by hitting the\n  // dedicated subresource that MELI serves.\n  return client.fetch<TSellerReputation>({\n    method: \"GET\",\n    path: `/users/${sellerId}/seller_reputation`,\n    responseSchema: SellerReputation,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Threshold-based alert generator\n// ---------------------------------------------------------------------------\n\nexport interface ReputationThresholds {\n  /** Fire `warning` when claim rate >= warningClaimRate. Default 0.04. */\n  warningClaimRate?: number;\n  /** Fire `critical` when claim rate >= criticalClaimRate. Default 0.07. */\n  criticalClaimRate?: number;\n  /** Same for delayed handling time. Defaults 0.03 / 0.06. */\n  warningDelayedHandlingRate?: number;\n  criticalDelayedHandlingRate?: number;\n  /** Cancellation rate. Defaults 0.02 / 0.05. */\n  warningCancellationRate?: number;\n  criticalCancellationRate?: number;\n}\n\nconst DEFAULTS: Required<ReputationThresholds> = {\n  warningClaimRate: 0.04,\n  criticalClaimRate: 0.07,\n  warningDelayedHandlingRate: 0.03,\n  criticalDelayedHandlingRate: 0.06,\n  warningCancellationRate: 0.02,\n  criticalCancellationRate: 0.05,\n};\n\nexport function evaluateReputationAlerts(\n  reputation: TSellerReputation,\n  thresholds: ReputationThresholds = {},\n): TReputationAlert[] {\n  const t = { ...DEFAULTS, ...thresholds };\n  const alerts: TReputationAlert[] = [];\n\n  // Helper that pushes a typed alert.\n  const push = (\n    severity: \"info\" | \"warning\" | \"critical\",\n    title: string,\n    detail: string,\n    metric: string,\n    current_value: number | undefined,\n    threshold: number,\n  ) => {\n    const a: Record<string, unknown> = {\n      severity,\n      title,\n      detail,\n      metric,\n      threshold,\n    };\n    if (current_value !== undefined) a[\"current_value\"] = current_value;\n    alerts.push(ReputationAlert.parse(a));\n  };\n\n  // Level alert (thermometer color).\n  if (reputation.level_id === \"3_yellow\") {\n    push(\n      \"warning\",\n      \"Reputation thermometer is YELLOW\",\n      \"Listing cap may already have been reduced. Resolve open claims and improve handling time to recover.\",\n      \"level_id\",\n      undefined,\n      0,\n    );\n  } else if (\n    reputation.level_id === \"2_orange\" ||\n    reputation.level_id === \"1_red\"\n  ) {\n    push(\n      \"critical\",\n      `Reputation thermometer is ${reputation.level_id.toUpperCase()}`,\n      \"Listings will be heavily restricted. Pause non-critical operations and run a save-play on the most-recent reclamos.\",\n      \"level_id\",\n      undefined,\n      0,\n    );\n  }\n\n  // Claim rate.\n  const claimRate = reputation.metrics?.claims?.rate;\n  if (typeof claimRate === \"number\") {\n    if (claimRate >= t.criticalClaimRate) {\n      push(\n        \"critical\",\n        `Claim rate is ${(claimRate * 100).toFixed(2)}%`,\n        `Above critical threshold (${t.criticalClaimRate * 100}%). Demotion likely imminent.`,\n        \"claims.rate\",\n        claimRate,\n        t.criticalClaimRate,\n      );\n    } else if (claimRate >= t.warningClaimRate) {\n      push(\n        \"warning\",\n        `Claim rate is ${(claimRate * 100).toFixed(2)}%`,\n        `Above warning threshold (${t.warningClaimRate * 100}%). Trigger a defense pass on open claims.`,\n        \"claims.rate\",\n        claimRate,\n        t.warningClaimRate,\n      );\n    }\n  }\n\n  // Delayed handling rate.\n  const delayedRate = reputation.metrics?.delayed_handling_time?.rate;\n  if (typeof delayedRate === \"number\") {\n    if (delayedRate >= t.criticalDelayedHandlingRate) {\n      push(\n        \"critical\",\n        `Late dispatch rate is ${(delayedRate * 100).toFixed(2)}%`,\n        \"Mercado Envíos Flex de-listing risk is high.\",\n        \"delayed_handling_time.rate\",\n        delayedRate,\n        t.criticalDelayedHandlingRate,\n      );\n    } else if (delayedRate >= t.warningDelayedHandlingRate) {\n      push(\n        \"warning\",\n        `Late dispatch rate is ${(delayedRate * 100).toFixed(2)}%`,\n        \"Catch up on shipping cutoffs to avoid de-listing.\",\n        \"delayed_handling_time.rate\",\n        delayedRate,\n        t.warningDelayedHandlingRate,\n      );\n    }\n  }\n\n  // Cancellation rate.\n  const cancelRate = reputation.metrics?.cancellations?.rate;\n  if (typeof cancelRate === \"number\") {\n    if (cancelRate >= t.criticalCancellationRate) {\n      push(\n        \"critical\",\n        `Cancellation rate is ${(cancelRate * 100).toFixed(2)}%`,\n        \"Suspension risk; review stock-out cases and inventory sync.\",\n        \"cancellations.rate\",\n        cancelRate,\n        t.criticalCancellationRate,\n      );\n    } else if (cancelRate >= t.warningCancellationRate) {\n      push(\n        \"warning\",\n        `Cancellation rate is ${(cancelRate * 100).toFixed(2)}%`,\n        \"Investigate stock desync between channels.\",\n        \"cancellations.rate\",\n        cancelRate,\n        t.warningCancellationRate,\n      );\n    }\n  }\n\n  return alerts;\n}\n\n// ---------------------------------------------------------------------------\n// Polling monitor (returns an AsyncIterable for streaming alerts)\n// ---------------------------------------------------------------------------\n\nexport interface MonitorReputationOptions {\n  /** Poll interval in milliseconds. Default 5 minutes. */\n  intervalMs?: number;\n  thresholds?: ReputationThresholds;\n  /** AbortSignal to stop the monitor. */\n  signal?: AbortSignal;\n  /** Callback fired when a transient (recoverable) error is swallowed. Use\n   *  this to wire your telemetry/Sentry without breaking the polling loop. */\n  onTransientError?: (error: unknown) => void;\n}\n\n/**\n * Yields `{ snapshot, alerts }` on every poll.\n *\n * Error handling:\n *   - **`MeliAuthError`** (revoked seller, banned app, OAuth refresh dead) →\n *     RE-THROWN. The connection is permanently broken; the caller needs to\n *     stop polling and surface this to the human.\n *   - **`MeliValidationError`** (programmer error — schema drift) →\n *     RE-THROWN. Bugs should fail loud, not silently.\n *   - **`MeliApiError`** that `isUnauthorized()` / `isForbidden()` (401/403 —\n *     revoked or expired token) → RE-THROWN. The endpoint is dead; polling it\n *     forever is useless.\n *   - **`MeliApiError`** with 5xx, **`MeliNetworkError`**, anything else →\n *     swallowed and reported via `onTransientError`. The loop keeps polling\n *     because transient failures are normal.\n */\nexport async function* monitorReputation(\n  client: MeliClient,\n  sellerId: number,\n  options: MonitorReputationOptions = {},\n): AsyncGenerator<\n  { snapshot: TSellerReputation | null; alerts: TReputationAlert[] },\n  void,\n  void\n> {\n  const interval = options.intervalMs ?? 5 * 60 * 1000;\n  while (!options.signal?.aborted) {\n    let snapshot: TSellerReputation | null = null;\n    let alerts: TReputationAlert[] = [];\n    try {\n      snapshot = await getSellerReputation(client, sellerId);\n      alerts = evaluateReputationAlerts(snapshot, options.thresholds);\n    } catch (err) {\n      // Permanent errors must surface — never silently retry forever.\n      if (\n        err instanceof MeliAuthError ||\n        err instanceof MeliValidationError ||\n        // A revoked/expired token surfaces as a 401/403 MeliApiError, not a\n        // MeliAuthError. Treat those as permanent too — otherwise the loop\n        // polls a dead endpoint forever.\n        (err instanceof MeliApiError &&\n          (err.isUnauthorized() || err.isForbidden()))\n      ) {\n        throw err;\n      }\n      options.onTransientError?.(err);\n    }\n    yield { snapshot, alerts };\n    if (options.signal?.aborted) return;\n    await sleep(interval, options.signal);\n  }\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n  return new Promise((resolve) => {\n    const timer = setTimeout(resolve, ms);\n    signal?.addEventListener(\n      \"abort\",\n      () => {\n        clearTimeout(timer);\n        resolve();\n      },\n      { once: true },\n    );\n  });\n}\n","// Promotions — `/seller-promotions/promotions`,\n// `/seller-promotions/candidates`,\n// `/seller-promotions/items/{id}` (opt-in).\n//\n// One of MELI's biggest blindspots: ML invites items into promotions via\n// `/candidates`, but the surface is buried in seller hub. Auto-opt-in\n// based on margin guards is dollar-printing.\n\nimport type { MeliClient } from \"./client\";\nimport {\n  PromotionCandidate,\n  PromotionOptInRequest,\n  PromotionOptInResponse,\n  type PromotionCandidate as TPromotionCandidate,\n  type PromotionOptInRequest as TPromotionOptInRequest,\n  type PromotionOptInResponse as TPromotionOptInResponse,\n} from \"./schemas/promotion\";\nimport { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Candidates list\n// ---------------------------------------------------------------------------\n\nconst PromotionCandidatesResponse = z.object({\n  results: z.array(PromotionCandidate),\n  paging: z\n    .object({\n      total: z.number().int().nonnegative(),\n      offset: z.number().int().nonnegative().optional(),\n      limit: z.number().int().positive().optional(),\n    })\n    .optional(),\n});\nexport type PromotionCandidatesResponse = z.infer<typeof PromotionCandidatesResponse>;\n\nexport interface ListPromotionCandidatesOptions {\n  promotionType?:\n    | \"DEAL\"\n    | \"DOD\"\n    | \"LIGHTNING\"\n    | \"SMART\"\n    | \"PRICE_DISCOUNT\"\n    | \"SELLER_COUPON_CAMPAIGN\"\n    | \"MARKETPLACE_CAMPAIGN\";\n  limit?: number;\n  offset?: number;\n}\n\nexport async function listPromotionCandidates(\n  client: MeliClient,\n  sellerId: number,\n  options: ListPromotionCandidatesOptions = {},\n): Promise<PromotionCandidatesResponse> {\n  const query: Record<string, string | number> = { app_version: \"v2\" };\n  if (options.promotionType !== undefined) query[\"promotion_type\"] = options.promotionType;\n  if (options.limit !== undefined) query[\"limit\"] = options.limit;\n  if (options.offset !== undefined) query[\"offset\"] = options.offset;\n  return client.fetch<PromotionCandidatesResponse>({\n    method: \"GET\",\n    path: `/seller-promotions/users/${sellerId}/candidates`,\n    query,\n    responseSchema: PromotionCandidatesResponse,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Active promotions list\n// ---------------------------------------------------------------------------\n\nconst ActivePromotionsResponse = z.object({\n  results: z.array(PromotionCandidate),\n  paging: z\n    .object({\n      total: z.number().int().nonnegative(),\n    })\n    .optional(),\n});\nexport async function listActivePromotions(\n  client: MeliClient,\n  sellerId: number,\n): Promise<TPromotionCandidate[]> {\n  const r = await client.fetch<z.infer<typeof ActivePromotionsResponse>>({\n    method: \"GET\",\n    path: `/seller-promotions/users/${sellerId}/promotions`,\n    responseSchema: ActivePromotionsResponse,\n  });\n  return r.results;\n}\n\n// ---------------------------------------------------------------------------\n// Opt-in for an item\n// ---------------------------------------------------------------------------\n\nexport async function optInPromotion(\n  client: MeliClient,\n  itemId: string,\n  payload: TPromotionOptInRequest,\n): Promise<TPromotionOptInResponse> {\n  const validated = PromotionOptInRequest.parse(payload);\n  return client.fetch<TPromotionOptInResponse>({\n    method: \"POST\",\n    path: `/seller-promotions/items/${itemId}`,\n    body: validated,\n    responseSchema: PromotionOptInResponse,\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Margin-aware auto-opt-in\n// ---------------------------------------------------------------------------\n\nexport interface MarginGuard {\n  /** Item id → minimum margin we accept (decimal, e.g. 0.15 for 15%). */\n  minimumMarginByItem?: Record<string, number>;\n  /** Default minimum margin when item-specific isn't set. Default 0.15. */\n  defaultMinimumMargin?: number;\n  /** Item id → COGS in major units (used to compute margin from candidate's\n   *  suggested_price). When absent, the candidate is SKIPPED (we'd rather\n   *  miss revenue than auto-opt-in below cost). */\n  cogsByItem: Record<string, number>;\n}\n\nexport interface AutoOptInResult {\n  optedIn: TPromotionOptInResponse[];\n  skipped: Array<{\n    itemId: string;\n    promotionId: string;\n    reason: \"no_cogs\" | \"below_margin\" | \"no_suggested_price\";\n    detail: string;\n  }>;\n}\n\n/**\n * Iterate candidates and opt-in to those that respect the configured\n * margin guard. Returns both opted-in items and skipped ones (with reason\n * codes for telemetry).\n */\nexport async function autoOptInPromotions(\n  client: MeliClient,\n  sellerId: number,\n  guard: MarginGuard,\n  options: ListPromotionCandidatesOptions = {},\n): Promise<AutoOptInResult> {\n  const result: AutoOptInResult = { optedIn: [], skipped: [] };\n  const candidates = await listPromotionCandidates(client, sellerId, options);\n  const minDefault = guard.defaultMinimumMargin ?? 0.15;\n\n  for (const cand of candidates.results) {\n    if (!cand.items) continue;\n    for (const item of cand.items) {\n      const cogs = guard.cogsByItem[item.id];\n      if (cogs === undefined) {\n        result.skipped.push({\n          itemId: item.id,\n          promotionId: cand.promotion_id,\n          reason: \"no_cogs\",\n          detail:\n            \"No COGS configured for this item; refusing to auto-opt-in without a margin floor.\",\n        });\n        continue;\n      }\n      // Margin is computed against the SUGGESTED (discounted) price — that's\n      // the revenue we'd actually book if we opt in. Falling back to\n      // `original_price` would compute margin against full price and then\n      // opt in at full price, defeating the entire promotion. If MELI didn't\n      // suggest a discount, skip the candidate.\n      const suggested = item.suggested_price;\n      if (suggested === undefined || suggested === null || suggested <= 0) {\n        result.skipped.push({\n          itemId: item.id,\n          promotionId: cand.promotion_id,\n          reason: \"no_suggested_price\",\n          detail: \"MELI did not suggest a discount price for this candidate.\",\n        });\n        continue;\n      }\n      const margin = (suggested - cogs) / suggested;\n      const minMargin = guard.minimumMarginByItem?.[item.id] ?? minDefault;\n      if (margin < minMargin) {\n        result.skipped.push({\n          itemId: item.id,\n          promotionId: cand.promotion_id,\n          reason: \"below_margin\",\n          detail: `Margin at suggested_price (${(margin * 100).toFixed(1)}%) below floor ${(minMargin * 100).toFixed(1)}%.`,\n        });\n        continue;\n      }\n      const optInResult = await optInPromotion(client, item.id, {\n        promotion_id: cand.promotion_id,\n        promotion_type: cand.promotion_type,\n        deal_price: suggested,\n      });\n      result.optedIn.push(optInResult);\n    }\n  }\n  return result;\n}\n","// Webhooks parser + missed_feeds replay.\n//\n// MELI's webhooks DON'T carry HMAC signatures (this is a documented spec\n// gap; security relies on `topic` + `application_id` + IP allowlist). We\n// expose a typed parser that validates the envelope shape and a separate\n// `replayMissedFeeds` helper that polls `/myfeeds?app_id=...&topic=...`\n// to recover events MELI dropped within the 2-day retention window.\n\nimport type { MeliClient } from \"./client\";\nimport {\n  MeliWebhookEvent,\n  MissedFeedsResponse,\n  type MeliWebhookEvent as TMeliWebhookEvent,\n  type MissedFeed,\n  type MeliWebhookTopic,\n} from \"./schemas/webhook\";\nimport { MeliWebhookError } from \"./errors\";\n\n// ---------------------------------------------------------------------------\n// Parse + validate inbound webhook\n// ---------------------------------------------------------------------------\n\nexport interface ParseWebhookOptions {\n  /** Optional set of topics this app subscribes to. Throws on unknown. */\n  expectedTopics?: ReadonlyArray<MeliWebhookTopic | string>;\n  /** Optional application_id to assert. */\n  expectedApplicationId?: number;\n}\n\nexport function parseWebhook(\n  body: unknown,\n  options: ParseWebhookOptions = {},\n): TMeliWebhookEvent {\n  if (!body || typeof body !== \"object\") {\n    throw new MeliWebhookError(\n      \"malformed_body\",\n      \"Webhook body is missing or not an object\",\n    );\n  }\n  const parsed = MeliWebhookEvent.safeParse(body);\n  if (!parsed.success) {\n    throw new MeliWebhookError(\n      \"malformed_body\",\n      `Webhook envelope failed validation: ${parsed.error.issues[0]?.message ?? \"unknown\"}`,\n    );\n  }\n  if (\n    options.expectedApplicationId !== undefined &&\n    parsed.data.application_id !== options.expectedApplicationId\n  ) {\n    throw new MeliWebhookError(\n      \"malformed_body\",\n      `Webhook application_id ${parsed.data.application_id} does not match expected ${options.expectedApplicationId}`,\n    );\n  }\n  if (options.expectedTopics && !options.expectedTopics.includes(parsed.data.topic)) {\n    throw new MeliWebhookError(\n      \"unknown_topic\",\n      `Webhook topic '${parsed.data.topic}' is not in expectedTopics (${options.expectedTopics.join(\", \")})`,\n    );\n  }\n  return parsed.data;\n}\n\n// ---------------------------------------------------------------------------\n// Resource ID extractor — pulls the numeric/string id from `resource`.\n// Examples:\n//   resource: \"/orders/2000003508510037\"      → \"2000003508510037\"\n//   resource: \"/items/MLA1234567890\"          → \"MLA1234567890\"\n//   resource: \"/payments/1234\"                → \"1234\"\n//   resource: \"/questions/123\"                → \"123\"\n//   resource: \"/shipments/4567\"               → \"4567\"\n// ---------------------------------------------------------------------------\n\nexport function extractResourceId(event: TMeliWebhookEvent): string | null {\n  const last = event.resource.split(\"/\").filter(Boolean).pop();\n  return last ?? null;\n}\n\n// ---------------------------------------------------------------------------\n// Missed feeds replay — `/myfeeds?app_id=...&topic=...`\n//\n// MELI retains dropped events for 2 days. Call this on app boot OR on a\n// schedule (every ~6h) to catch up. Pair with idempotent handlers so\n// re-delivered events are safe.\n// ---------------------------------------------------------------------------\n\nexport interface ReplayMissedFeedsOptions {\n  appId: number;\n  topic: MeliWebhookTopic | string;\n  /** Optional from/to date filters (ISO 8601). */\n  dateFrom?: string;\n  dateTo?: string;\n  /** Continuation cursor returned by previous call. */\n  offset?: number;\n  /** Page size, default 50. */\n  limit?: number;\n}\n\nexport async function replayMissedFeeds(\n  client: MeliClient,\n  options: ReplayMissedFeedsOptions,\n): Promise<MissedFeed[]> {\n  const query: Record<string, string | number> = {\n    app_id: options.appId,\n    topic: String(options.topic),\n  };\n  if (options.dateFrom !== undefined) query[\"date_from\"] = options.dateFrom;\n  if (options.dateTo !== undefined) query[\"date_to\"] = options.dateTo;\n  if (options.offset !== undefined) query[\"offset\"] = options.offset;\n  if (options.limit !== undefined) query[\"limit\"] = options.limit;\n  return client.fetch<MissedFeed[]>({\n    method: \"GET\",\n    path: `/myfeeds`,\n    query,\n    responseSchema: MissedFeedsResponse,\n  });\n}\n\n/**\n * Iterate ALL missed feeds across topics. For each topic in `topics`,\n * pages through the feed and yields one event at a time.\n *\n * Use this when an app comes back online after >5 minutes of downtime —\n * it'll replay everything MELI tried to deliver while you were away,\n * within the 2-day retention window.\n */\nexport async function* iterateAllMissedFeeds(\n  client: MeliClient,\n  appId: number,\n  topics: ReadonlyArray<MeliWebhookTopic | string>,\n  dateFrom?: string,\n): AsyncGenerator<MissedFeed, void, void> {\n  // MELI's `/myfeeds` is a *live* list — events get appended as the system\n  // produces them. Plain offset pagination on a growing collection causes\n  // duplicate yields when an event is added between pages. Dedupe by\n  // (topic, resource, sent) — the natural identity of a missed delivery.\n  const seen = new Set<string>();\n  for (const topic of topics) {\n    let offset = 0;\n    while (true) {\n      const opts: ReplayMissedFeedsOptions = { appId, topic, offset, limit: 100 };\n      if (dateFrom !== undefined) opts.dateFrom = dateFrom;\n      const page = await replayMissedFeeds(client, opts);\n      if (page.length === 0) break;\n      let yielded = 0;\n      for (const event of page) {\n        const key = `${event.topic}|${event.resource}|${event.sent ?? \"\"}`;\n        if (seen.has(key)) continue;\n        seen.add(key);\n        yield event;\n        yielded++;\n      }\n      // Stop when MELI returned a partial page AND every entry was a\n      // duplicate — that means we've caught up.\n      if (page.length < 100 && yielded === 0) break;\n      offset += page.length;\n    }\n  }\n}\n","// Human-in-the-loop (HITL) gate for irreversible operations.\n//\n// Eight tool functions in `meliTools()` mutate seller-visible state in ways\n// that are hard to reverse:\n//\n//   create_item                 — emits a public listing\n//   update_item_price_or_stock  — public price change (visible immediately)\n//   answer_question             — public answer on the listing page\n//   defend_claim                — uploads evidence (one-shot, no amendment)\n//   optInPromotion              — locks the discount until promo expires\n//   blacklistAsker              — silences a buyer permanently\n//   pauseItem / closeItem       — affects discoverability + indexing\n//\n// Stripe Agent Toolkit's HITL pattern, applied to MELI. The host wires a\n// `requireConfirmation` callback that the lib invokes BEFORE the HTTP call\n// fires. The callback returns `true` to proceed, `false` to abort. The\n// guard is PROGRAMMATIC — it's not just a system-prompt rule the LLM might\n// ignore; the tool literally cannot execute without confirmation.\n//\n// Use cases:\n//   - Show the user a UI (\"approve $X price change on MLA…?\") and wait.\n//   - Auto-approve below a threshold (\"any change <5% is fine\").\n//   - Email/Slack the seller before destructive ops in a multi-tenant SaaS.\n//   - Audit logging — every irreversible op gets logged with the operator id.\n\n/** Operations the HITL gate covers. Stable identifiers — host code can\n *  switch on these to render different UIs (\"you're about to defend claim\n *  X with N evidences\" vs \"you're about to change the price of Y\"). */\nexport type HitlOpKind =\n  | \"create_item\"\n  | \"update_item_price_or_stock\"\n  | \"pause_item\"\n  | \"close_item\"\n  | \"relist_item\"\n  | \"answer_question\"\n  | \"defend_claim\"\n  | \"opt_in_promotion\"\n  | \"blacklist_asker\";\n\n/** Common envelope across all op kinds. Tool implementations wrap their\n *  inputs into this shape before invoking the gate. */\nexport interface HitlContext<TKind extends HitlOpKind = HitlOpKind> {\n  kind: TKind;\n  /** Stable identifier for the resource being mutated (item id, claim id,\n   *  question id, etc.) so the host UI can render a recognizable target. */\n  resourceId: string | number;\n  /** Human-readable summary the host can show the user without parsing the\n   *  raw input. Always Spanish — these go in front of Argentine sellers. */\n  summary: string;\n  /** Raw inputs the tool received, for advanced UIs that want to render a\n   *  diff or full preview. Don't rely on the shape — it's per-op. */\n  input: unknown;\n  /** Best-effort severity hint. Hosts can use this to decide whether to\n   *  block + ask vs auto-approve via threshold rules. */\n  severity: \"low\" | \"medium\" | \"high\";\n}\n\n/**\n * Decision returned from the host's HITL callback.\n *\n *   - `{ approve: true }`            — proceed with the operation.\n *   - `{ approve: false, reason }`   — abort. The tool returns\n *                                      `{ ok: false, code: \"hitl_rejected\" }`.\n *   - `{ approve: true, override: { ... } }` — proceed BUT replace the\n *                                              tool's inputs (e.g., user\n *                                              hand-edited the answer text\n *                                              before approving).\n */\nexport type HitlDecision =\n  | { approve: true; override?: Record<string, unknown> }\n  | { approve: false; reason?: string };\n\n/** Sync or async — hosts often need to render a UI + await a click. */\nexport type RequireConfirmation = (\n  context: HitlContext,\n) => HitlDecision | Promise<HitlDecision>;\n\n/**\n * Auto-approve hook. Lets the host run a fast policy decision before\n * popping a UI dialog. Examples:\n *   - \"any update under 5% price delta auto-approves\"\n *   - \"any answer under 200 chars auto-approves\"\n *   - \"create_item never auto-approves; always ask\"\n */\nexport type AutoApprovePolicy = (\n  context: HitlContext,\n) => boolean | Promise<boolean>;\n\n/** Default policy — never auto-approves. Forces every irreversible op\n *  through the user. Hosts override via `meliTools(client, { hitl })`. */\nexport const denyAllAutoApprove: AutoApprovePolicy = () => false;\n\n/** Combined HITL configuration the AI-SDK toolset accepts. */\nexport interface HitlConfig {\n  /** Required. Called to gate every op the auto-approve policy didn't pass. */\n  requireConfirmation: RequireConfirmation;\n  /** Optional. Bypasses `requireConfirmation` when it returns true. */\n  autoApprove?: AutoApprovePolicy;\n}\n\n/** Internal helper used by the AI-SDK tool wrappers. Returns the (possibly\n *  overridden) inputs if the op is approved, or throws `HitlRejectedError`\n *  if rejected. */\nexport class HitlRejectedError extends Error {\n  readonly code = \"hitl_rejected\";\n  constructor(\n    public readonly context: HitlContext,\n    public readonly reason?: string,\n  ) {\n    super(\n      reason\n        ? `HITL: rejected by user (${context.kind} on ${context.resourceId}): ${reason}`\n        : `HITL: rejected by user (${context.kind} on ${context.resourceId})`,\n    );\n    this.name = \"HitlRejectedError\";\n  }\n}\n\nexport async function gateHitl(\n  hitl: HitlConfig | undefined,\n  context: HitlContext,\n): Promise<{ approved: true; overrides?: Record<string, unknown> }> {\n  if (!hitl) return { approved: true };\n  const auto = hitl.autoApprove ?? denyAllAutoApprove;\n  if (await auto(context)) return { approved: true };\n  const decision = await hitl.requireConfirmation(context);\n  if (decision.approve === false) {\n    throw new HitlRejectedError(context, decision.reason);\n  }\n  if (decision.override !== undefined) {\n    return { approved: true, overrides: decision.override };\n  }\n  return { approved: true };\n}\n\n/** Severity classifier. Used by tool wrappers when building the context. */\nexport function classifyHitlSeverity(kind: HitlOpKind): HitlContext[\"severity\"] {\n  switch (kind) {\n    case \"create_item\":\n    case \"defend_claim\":\n    case \"opt_in_promotion\":\n      return \"high\"; // hard to undo\n    case \"update_item_price_or_stock\":\n    case \"pause_item\":\n    case \"close_item\":\n    case \"blacklist_asker\":\n      return \"medium\"; // reversible but visible\n    case \"relist_item\":\n    case \"answer_question\":\n      return \"low\"; // small blast radius\n  }\n}\n"]}