Receptor de órdenes de Explosion Store Engine
Receptor Store Engine (V-3.2.0223): - Nueva ruta POST /api/public/hooks/store-engine-order que recibe órdenes desde Explosion Store Engine. - Validación HMAC-SHA256 sobre `${timestamp}.${rawBody}` usando timingSafeEqual y tolerancia de 5 minutos en el timestamp. - Headers obligatorios: x-store-engine-signature, x-store-engine-timestamp, x-idempotency-key. - Mapeo tenant → owner mediante store_engine_configs (tenant_id, tenant_slug, webhook_secret, store_id). - Nueva tabla store_engine_webhook_events con índices únicos por (tenant_id, external_order_id) e idempotency_key para garantizar idempotencia: el mismo webhook nunca duplica orden. - Creación de venta source = explosion_store_engine, snapshot de cliente, items y totales. Si el SKU coincide se enlaza al producto interno; si no, se guarda como snapshot y se marca warning unmatched_products. - Nuevo valor de enum store_type: explosion_store_engine. Se crea automáticamente la tienda dedicada al recibir el primer pedido. - Errores tipados: missing_signature_headers (400), invalid_payload (400), invalid_signature (401), unknown_tenant (401), timestamp_out_of_range (401), subscription_inactive (402). Sin stack traces ni datos privados en la respuesta. - No toca POS físico, EcartPay, WooCommerce, Shopify, AI, bodegas ni subastas.
Aspectos destacados
- Endpoint receptor /api/public/hooks/store-engine-order
- Validación HMAC-SHA256 con timestamp y timingSafeEqual
- Idempotencia por tenant + external_order_id + idempotency_key
- Aislamiento por owner vía store_engine_configs