{"version":3,"sources":["../src/schemas/common.ts","../src/schemas/item.ts","../src/items.ts","../src/feed.ts"],"names":["z"],"mappings":"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","file":"feed.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","// 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","// Agentic Commerce Protocol (ACP) feed generator for MELI sellers.\n//\n// IMPORTANT — read this before exposing the feed publicly.\n//\n//   ACP is the OpenAI/Stripe protocol that lets buyer agents (ChatGPT\n//   Instant Checkout, Copilot Checkout) discover and transact against\n//   merchant catalogs WITHOUT routing the buyer through the merchant's\n//   marketplace.\n//\n//   For a seller on Mercado Libre, that's a tradeoff:\n//     PRO — broader discovery; buyers asking ChatGPT for \"yerba amanda 1kg\n//           in Argentina\" can find your listing instead of a competitor's.\n//     CON — the buyer-marketplace relationship MELI cultivates (reviews,\n//           Mercado Pago checkout, Mercado Envíos shipping, claims SLA) is\n//           bypassed if the buyer agent transacts purely via the feed +\n//           an external Stripe checkout. That weakens MELI's role.\n//\n//   This module gives you the building blocks. It does NOT decide whether\n//   you should expose a feed. The reference implementation in\n//   `apps/bridge-hello/src/app/api/feed/products/route.ts` is **opt-in by\n//   default** (returns 403 unless `FEED_OPT_IN=1` or an explicit `Opt-In`\n//   header is sent), and we recommend hosts adopt the same posture.\n//\n// What's here:\n//   1. Iterates a seller's full catalog via `iterateSellerItems` + multiget.\n//   2. Maps each MELI Item to an ACP `FeedProduct` shape compatible with\n//      OpenAI/Stripe Agentic Commerce Protocol 2026-04-17.\n//   3. Yields products as a stream so consumers can serve a paginated feed\n//      endpoint without buffering a full catalog in memory.\n//\n// Three usage patterns:\n//\n//   a) `buildFeedSnapshot(client, sellerId)` — buffers the whole catalog\n//      into memory (good for small sellers or one-shot exports).\n//   b) `iterateFeed(client, sellerId)` — async iterator (good for streaming\n//      a `/api/feed` endpoint).\n//   c) `meliItemToFeedProduct(item)` — pure mapper (use it inside your\n//      own enumeration if you have a custom catalog scope).\n\nimport type { MeliClient } from \"./client\";\nimport * as items from \"./items\";\nimport type { Item as TItem } from \"./schemas/item\";\n\n// ---------------------------------------------------------------------------\n// ACP product shape (subset that maps cleanly from MELI Item)\n// ---------------------------------------------------------------------------\n\n/** Agent-readable product entry. Compatible with OpenAI/Stripe ACP feed\n *  contract — additional MELI-specific fields are tucked under\n *  `vendor_metadata.meli` so generic agents see only the standard surface. */\nexport interface FeedProduct {\n  /** Stable product id (the MELI item id, e.g. \"MLA1402155766\"). */\n  id: string;\n  /** Human-facing product title. */\n  title: string;\n  /** Product description in plain text. */\n  description?: string;\n  /** ISO 4217 currency code, uppercase. */\n  currency: string;\n  /** Price in major units (4500.50 means $4500.50). The ACP convention is\n   *  major units; minor-unit conversion is the buyer agent's job. */\n  price: number;\n  /** Available quantity. Omitted if MELI didn't return a stock figure. */\n  available_quantity?: number;\n  /** Public listing URL the buyer agent can deep-link to. */\n  permalink?: string;\n  /** Category id in MELI's taxonomy. */\n  category?: string;\n  /** Brand if known. */\n  brand?: string;\n  /** Image URLs (first one is the primary). */\n  images?: string[];\n  /** Free-form attributes the agent can reason about (color, size, weight). */\n  attributes?: Record<string, string>;\n  /** Seller id + name. */\n  seller?: { id?: string; name?: string };\n  /** Shipping affordances. */\n  shipping?: { free?: boolean; mode?: string; logistic_type?: string };\n  /** Vendor-specific metadata. Generic agents ignore this; MELI-specific\n   *  agents can use it for richer behavior. */\n  vendor_metadata?: {\n    meli?: {\n      site_id: string;\n      condition?: \"new\" | \"used\" | \"not_specified\";\n      listing_type_id?: string;\n      sold_quantity?: number;\n      tags?: string[];\n    };\n  };\n}\n\n/** Page envelope for HTTP feed endpoints. The ACP spec recommends this\n *  shape so buyer agents can paginate without scanning per-product. */\nexport interface FeedPage {\n  products: FeedProduct[];\n  /** Cursor to pass back to fetch the next page. Null when exhausted. */\n  next_cursor: string | null;\n  /** Wall-clock timestamp the feed was generated. ISO 8601. */\n  generated_at: string;\n}\n\n// ---------------------------------------------------------------------------\n// Pure mapper — MELI Item → ACP FeedProduct\n// ---------------------------------------------------------------------------\n\nconst ACTIVE_STATUSES = new Set([\"active\"]);\n\n/**\n * Map one MELI Item to an ACP FeedProduct. Returns null when the item\n * isn't agent-purchasable (paused, closed, under_review, etc.) so callers\n * can `.filter(Boolean)` cleanly.\n */\nexport function meliItemToFeedProduct(\n  item: Pick<\n    TItem,\n    | \"id\"\n    | \"site_id\"\n    | \"title\"\n    | \"price\"\n    | \"currency_id\"\n    | \"available_quantity\"\n    | \"sold_quantity\"\n    | \"status\"\n    | \"condition\"\n    | \"listing_type_id\"\n    | \"permalink\"\n    | \"category_id\"\n    | \"seller_id\"\n    | \"pictures\"\n    | \"attributes\"\n    | \"shipping\"\n    | \"tags\"\n  > & { description?: string },\n): FeedProduct | null {\n  if (item.status && !ACTIVE_STATUSES.has(item.status)) return null;\n\n  const images = (item.pictures ?? [])\n    .map((p) => p.secure_url ?? p.url)\n    .filter((u): u is string => typeof u === \"string\" && u.length > 0);\n\n  const attributes: Record<string, string> = {};\n  if (item.attributes) {\n    for (const a of item.attributes) {\n      const name = a.name ?? a.id;\n      if (a.value_name && name) attributes[name] = a.value_name;\n    }\n  }\n\n  // Pull the BRAND attribute up to top-level (most agents look there).\n  const brand =\n    item.attributes?.find((a) => a.id === \"BRAND\")?.value_name ?? undefined;\n\n  const shipping: NonNullable<FeedProduct[\"shipping\"]> = {};\n  if (item.shipping?.free_shipping !== undefined) shipping.free = item.shipping.free_shipping;\n  if (item.shipping?.mode !== undefined) shipping.mode = item.shipping.mode;\n  if (item.shipping?.logistic_type !== undefined) {\n    shipping.logistic_type = item.shipping.logistic_type;\n  }\n\n  const out: FeedProduct = {\n    id: item.id,\n    title: item.title,\n    currency: item.currency_id.toUpperCase(),\n    price: item.price,\n  };\n  if (item.description !== undefined) out.description = item.description;\n  if (item.available_quantity !== undefined) {\n    out.available_quantity = item.available_quantity;\n  }\n  if (item.permalink !== undefined) out.permalink = item.permalink;\n  if (item.category_id !== undefined) out.category = item.category_id;\n  if (brand !== undefined) out.brand = brand;\n  if (images.length > 0) out.images = images;\n  if (Object.keys(attributes).length > 0) out.attributes = attributes;\n  if (item.seller_id !== undefined) {\n    out.seller = { id: String(item.seller_id) };\n  }\n  if (Object.keys(shipping).length > 0) out.shipping = shipping;\n  out.vendor_metadata = {\n    meli: {\n      site_id: item.site_id,\n      ...(item.condition !== undefined ? { condition: item.condition } : {}),\n      ...(item.listing_type_id !== undefined\n        ? { listing_type_id: item.listing_type_id }\n        : {}),\n      ...(item.sold_quantity !== undefined\n        ? { sold_quantity: item.sold_quantity }\n        : {}),\n      ...(item.tags !== undefined ? { tags: item.tags } : {}),\n    },\n  };\n  return out;\n}\n\n// ---------------------------------------------------------------------------\n// Streaming feed builder\n// ---------------------------------------------------------------------------\n\nexport interface IterateFeedOptions {\n  /** Page size for `iterateSellerItems` (default 100). */\n  pageSize?: number;\n  /** Concurrency for the multiget calls that hydrate item details\n   *  (default 4). MELI multiget is 20 ids per call. */\n  concurrency?: number;\n  /** Filter to specific MELI item statuses. Default `[\"active\"]` because\n   *  agents shouldn't try to buy paused/closed listings. */\n  acceptableStatuses?: string[];\n}\n\n/**\n * Stream the seller's catalog as ACP `FeedProduct` entries. Use this in a\n * Next.js / Remix / Hono / Express handler that builds a feed endpoint —\n * each yield can be written to the response stream so the buyer agent\n * starts consuming products before the seller's full catalog has loaded.\n */\nexport async function* iterateFeed(\n  client: MeliClient,\n  sellerId: number,\n  options: IterateFeedOptions = {},\n): AsyncGenerator<FeedProduct, void, void> {\n  const acceptable = new Set(options.acceptableStatuses ?? [\"active\"]);\n  // Stage 1: enumerate item ids (cheap — single endpoint with scroll).\n  const ids: string[] = [];\n  for await (const id of items.iterateSellerItems(client, sellerId, {\n    status: \"active\",\n    limit: options.pageSize ?? 100,\n  })) {\n    ids.push(id);\n  }\n  // Stage 2: hydrate details in chunks (multiget auto-paralellizes).\n  const concurrency = options.concurrency ?? 4;\n  const CHUNK = 20;\n  let idx = 0;\n  const inflight: Promise<TItem[]>[] = [];\n  while (idx < ids.length || inflight.length > 0) {\n    while (inflight.length < concurrency && idx < ids.length) {\n      const slice = ids.slice(idx, idx + CHUNK);\n      idx += CHUNK;\n      inflight.push(items.multigetItems(client, slice));\n    }\n    let batch: TItem[];\n    try {\n      batch = await inflight.shift()!;\n    } catch (err) {\n      // The front chunk rejected. The remaining in-flight promises are still\n      // pending and would surface as unhandled rejections once this generator\n      // unwinds — settle them all before rethrowing so the host never sees an\n      // orphaned `unhandledRejection` (which crashes the Node process).\n      await Promise.allSettled(inflight);\n      throw err;\n    }\n    for (const item of batch) {\n      if (item.status && !acceptable.has(item.status)) continue;\n      const product = meliItemToFeedProduct(item);\n      if (product) yield product;\n    }\n  }\n}\n\n/**\n * Buffered version: collect the entire seller catalog into one array.\n * Useful for one-shot exports / daily-cron sitemap-style feeds.\n */\nexport async function buildFeedSnapshot(\n  client: MeliClient,\n  sellerId: number,\n  options: IterateFeedOptions = {},\n): Promise<FeedProduct[]> {\n  const products: FeedProduct[] = [];\n  for await (const p of iterateFeed(client, sellerId, options)) {\n    products.push(p);\n  }\n  return products;\n}\n\n/**\n * Build a single page of the feed (cursor-paginated). The cursor is just\n * the seller's `scroll_id` from MELI — the consumer treats it as opaque.\n */\nexport interface FeedPageOptions {\n  /** Page size (default 50). MELI's hard cap on multiget paging is 50 to\n   *  keep response payloads tight. */\n  limit?: number;\n  /** Cursor returned by the previous page. Omit for the first page. */\n  cursor?: string;\n  acceptableStatuses?: string[];\n}\n\nexport async function buildFeedPage(\n  client: MeliClient,\n  sellerId: number,\n  options: FeedPageOptions = {},\n): Promise<FeedPage> {\n  const limit = options.limit ?? 50;\n  const acceptable = new Set(options.acceptableStatuses ?? [\"active\"]);\n  const searchOpts: items.SearchSellerItemsOptions = {\n    status: \"active\",\n    limit,\n  };\n  if (options.cursor !== undefined) searchOpts.scrollId = options.cursor;\n  const page = await items.searchSellerItems(client, sellerId, searchOpts);\n  if (!page.results.length) {\n    return {\n      products: [],\n      next_cursor: null,\n      generated_at: new Date().toISOString(),\n    };\n  }\n  const hydrated = await items.multigetItems(client, page.results);\n  const products = hydrated\n    .filter((it) => !it.status || acceptable.has(it.status))\n    .map((it) => meliItemToFeedProduct(it))\n    .filter((p): p is FeedProduct => p !== null);\n  return {\n    products,\n    next_cursor: page.scroll_id ?? null,\n    generated_at: new Date().toISOString(),\n  };\n}\n"]}