dazn-commerce-contracts
v2.72.0
Published
Single source of truth for the DAZN commerce /v1 wire format: Zod schemas → types → OpenAPI 3.1 → typed client. Published to a private registry.
Readme
dazn-commerce-contracts
The single source of truth for the DAZN commerce /v1 wire format.
Zod schemas → inferred TypeScript types → generated OpenAPI 3.1 and a typed
client. Published (semver) to a private registry and consumed by
dazn-commerce-engine and dazn-storefront. If it goes over the wire, it is defined
here.
Install
Configure the @dazn scope to the private registry (see .npmrc), then:
pnpm add dazn-commerce-contractsUse the schemas and types
import { Money, Cart, OrderDetail, OrderStatus, parseOr } from 'dazn-commerce-contracts';
const price: Money = { amount: 2500, currency: 'GBP' }; // £25.00
const cart = Cart.parse(await res.json()); // validated at the boundaryEvery schema is exported alongside its inferred type under the same name — Cart is
both the Zod schema (a value) and the Cart type.
Use the typed client
import { createClient } from 'dazn-commerce-contracts/client';
const api = createClient({
baseUrl: 'https://storefront.example.com/v1',
getToken: () => session.token,
});
const { data } = await api.catalog.listProducts({ limit: 20 });
const order = await api.orders.get('ord_01H9Z...'); // OrderDetail, validatedThe client validates every response with the schemas and throws a typed
DaznApiError (carrying the standard error code) on a non-2xx response.
OpenAPI
The generated OpenAPI 3.1 document is published at dazn-commerce-contracts/openapi.json and
served by the engine at /v1/openapi.json.
Golden rules
- Money is always integer minor units + ISO-4217 — never a float, never a bare number.
/v1is additive-only. A breaking change is a new major version and a new API version namespace.
Scripts
pnpm build # dist/ + client/ + openapi/openapi.json
pnpm test # schema round-trip tests
pnpm lint # ESLint
pnpm typecheck # tsc --noEmit (strict)