SDK
2.1.0 — preparado localmente el 30 de octubre de 2026
- Agrega barra pública importable, controlador de temas y puente de preferencia visual con el contrato Angular existente. Primer host: bienvenida, sin marca duplicada. No cambia API comercial, políticas de pedidos ni autenticación.
- Nueva distribución, tarball y SRI; versiones y canales existentes se conservan. La publicación remota está pendiente.
2.0.3 — 25 de septiembre de 2026
- Actualiza el artefacto generado a la política 1.0.5: - el catálogo de tallas
Nacionalincluye33y33 (1/2); - la validación local evalúa el pedido completo con la misma función generada que replica al servidor, así que la primera violación que informa el SDK es la misma que devolvería el backend; - un contenedor vacío vale igual como[]o como{}, y un objeto con claves"0"a"n-1"se lee como lista, igual que en el servidor; - un valor comotype: "constructor"produce un error de política en lugar de unTypeError. - En el servidor, 1.0.5 acepta además
quantity: 1.0como el entero 1 en todos los perfiles, aplica a los metadatos de diseño el mismo recorte de espacios queString.prototype.trimy decide la autorización urgente con una sola regla de política. - Los canales
v2ylatestapuntan a 2.0.3. Las versiones 2.0.0, 2.0.1 y 2.0.2 siguen disponibles e inmutables.
2.0.2 — 25 de septiembre de 2026
- Actualiza el artefacto generado a la política 1.0.4, que alinea el SDK con la decisión del servidor: - un peso o medida decimal admite como máximo 32 caracteres; - un hecho booleano ausente, como
nona, cuenta como falso al elegir la regla, igual que en el servidor. - En el servidor, 1.0.4 corrige además comparaciones como
"2.0"frente al mínimo2y el tratamiento de números JSON según la configuración de PHP. Tras el cambio, el SDK y el backend deciden igual los mismos valores.
2.0.1 — 25 de septiembre de 2026
- Actualiza el artefacto generado a la política 1.0.3:
Otrosadmite una tallasolitarioopcional cuando pertenece al catálogo demeasurement_system; sin talla continúa siendo válido.
2.0.0 — 24 de septiembre de 2026
- El SDK envía
orders.create()aPOST /api/v2/client/orders, valida el perfil generadoexternal-create-v2y comprueba versión y SHA-256 de política en la respuesta. - La joya de creación incluye datos no financieros completos y 1–5
designRefsopacas obtenidas del servicio de carga autorizado por HTTP. El SDK no incorpora carga ni edición de órdenes. - El canal
v1conserva la versión 1.1.0.
1.1.0 — 16 de septiembre de 2026
- Nuevo
createAuthorizationCodeProvider(«Acceder con Zafirox», OAuth 2.0 Authorization Code + PKCE S256):createAuthorizationUrl(),login(),completeLogin(url),isAuthenticated(),session(),logout(); sesión ensessionStorageo memoria y renovación silenciosa con refresh token (rotación). - Utilidades
generatePkce,base64UrlEncode,requestTokeny constantesCLIENT_API_AUTHORIZE_PATH/CLIENT_API_TOKEN_PATH. createClientCredentialsProvidercomparte el mismo cliente del token endpoint; sin cambios de contrato.AuthenticationErrorpuede llevarINVALID_GRANT(HTTP 400) al canjear un code o renovar.
1.0.0 — 16 de septiembre de 2026
- Primera versión pública de
@zafirox/client-sdk(ESM + tipos, Node.js ≥ 22.18 y navegadores). - Módulos
orders(create,list),account(get,transactions) yportfolio(get,payments). - Proveedores de token
createClientCredentialsProvider(backend) ycreateStaticTokenProvider(navegador vía BFF). - Transporte con
X-Request-Id, timeout porAbortController, límite de tamaño, validación del envelope y deapi_version, reintentos sólo de errores transitorios en operaciones idempotentes. - Errores tipados con
code,status,requestId,retryable,field,diagnosticIdyretryAfterSeconds.
API pública
v2 de creación — preparada, pendiente de publicación
POST /api/v2/client/order-designsrecibe 1–5 imágenes y devuelve referencias opacas certificadas;POST /api/v2/client/orderscrea con el contrato de política versionado.- La creación v1 se retira con
410 ORDER_CREATE_VERSION_RETIREDal publicar v2; las lecturas y OAuth v1 siguen activas. - OpenAPI 3.1 v2 generado y expuesto en
/openapi/v2.yaml; sus extensionesx-order-policy-*describen límites de texto trasString.trim()ECMAScript, medidos en UTF-16.
v1 — «Acceder con Zafirox» — 16 de septiembre de 2026
GET /oauth/authorizeredirige aaccounts.joyeriazafirox.com, donde la persona inicia sesión con su propia cuenta de Zafirox y autoriza los scopes.POST /oauth/tokenadmitegrant_type=authorization_code(concode_verifier) ygrant_type=refresh_token(rotación); la respuesta incluyerefresh_token.- Clientes públicos (
kind=public, sin secreto) conredirect_urisregistradas; clientes confidenciales pueden combinarclient_credentialsyauthorization_code. - Nuevos códigos:
INVALID_GRANT(400),ACCOUNT_LOGIN_REJECTED(401, sólo en la pantalla de cuentas) yGATEWAY_KEY_INVALID(403, pasos reservados a accounts). - El token endpoint y el preflight
OPTIONSreflejanAccess-Control-Allow-Originúnicamente para orígenes registrados.
v1 — 16 de septiembre de 2026
- Fachada
/api/v1/clientcon OAuth 2.0client_credentials, scopes y alcance resuelto en servidor (titular + masters activos). - Operaciones: emisión de token, crear y listar órdenes, cuenta, transacciones, cartera y pagos.
- Envelope
{data, meta, errors}, dinero como decimal string, fechas RFC 3339, paginación por cursor e idempotencia en la creación de órdenes. - CORS por origen registrado, límite por cliente con
Retry-Aftery kill switch de mantenimiento (503 CLIENT_API_DISABLED).
Ciclo de vida y roadmap
Los tres temas del ciclo de vida operativo han quedado formalmente especificados en la documentación de arquitectura (documento 10 de ExternalClientSdk):
- Publicación del SDK en un registro npm: Empaquetado oficial bajo
@zafirox/client-sdkcon distribución dual (registro npm con--provenancey CDN inmutable ensdk.joyeriazafirox.com/cdn/con hashes SHA-384 / SRI), paquete ESM estricto sin dependencias de terceros. Permite instalación estándar víanpm install @zafirox/client-sdk. - Rotación de secretos con solapamiento: Ventana de gracia sin tiempo de inactividad (zero-downtime) en dos niveles: secreto secundario temporal (48-72 h) para clientes confidenciales durante despliegues de múltiples instancias, y cabecera
kidcon keyring de claves activas/en retiro para la firma de tokens JWT de la plataforma. - Revocación de todas las sesiones de una persona desde Zafirox: Marca temporal de revocación (
revoked_before/ Epoch) porsubject_uiden «Acceder con Zafirox»; invalida en el acto todos los refresh tokens (HTTP 400invalid_grant) y access tokens vigentes (HTTP 401TOKEN_REVOKED) ante cambio de contraseña, suspensión de cuenta o cierre voluntario de sesiones conectadas.