@circles-market/cart
v0.1.0
Published
Basket/cart operations against the Market API (create basket, set items, validate, preview, checkout).
Readme
@circles-market/cart
Basket/cart operations against the Market API (create basket, set items, validate, preview, checkout).
Install
pnpm add @circles-market/cart @circles-market/core @circles-market/sessionQuickstart
import { FetchHttpTransport } from "@circles-market/core";
import { InMemoryAuthContext } from "@circles-market/session";
import { CartClientImpl } from "@circles-market/cart";
async function checkoutExample(marketApiBase: string) {
const http = new FetchHttpTransport();
const session = new InMemoryAuthContext();
const cart = new CartClientImpl(marketApiBase, http, session);
const { basketId } = await cart.createBasket({
buyer: "0x0000000000000000000000000000000000000000",
operator: "0x0000000000000000000000000000000000000000",
chainId: 100,
});
await cart.setItems({
basketId,
items: [
{ seller: "0x0000000000000000000000000000000000000000", sku: "coffee-1", quantity: 2 },
],
});
await cart.setCheckoutDetails({
basketId,
contactPoint: { email: "[email protected]" },
shippingAddress: { addressCountry: "DE", postalCode: "10115" },
});
const validation = await cart.validateBasket(basketId);
if (!validation.valid) {
return validation;
}
const preview = await cart.previewOrder(basketId);
const checkout = await cart.checkoutBasket({ basketId });
return { preview, checkout };
}Reference
Concepts
- A
Basketis server state identified bybasketId. itemsreference sellers + product SKUs.- Many endpoints can use auth (
AuthContexttoken). Checkout flows usually do.
API and return values
createBasket({ buyer, operator, chainId? })→{ basketId: string }basketId: server-generated identifier
setItems({ basketId, items })→BasketsetCheckoutDetails({ basketId, shippingAddress?, billingAddress?, contactPoint?, ageProof? })→BasketvalidateBasket(basketId)→ValidationResultpreviewOrder(basketId)→any- backend-defined JSON object; treat as opaque unless you control the backend schema
checkoutBasket({ basketId, buyer? })→{ orderId: string; paymentReference: string; basketId: string }orderId: use with@circles-market/orderspaymentReference: backend-issued referencebasketId: echoed basket id
Types
BasketItemInput
Fields:
seller: seller/avatar EVM address (0x...)sku: product SKU (typically from@circles-market/catalog)quantity: integer quantityimageUrl?: optional UI hint
Basket
Fields:
basketId: basket identifierbuyer?: buyer address (when provided/known)operator?: operator address (when provided/known)chainId: chain id (default100when created by SDK)items:BasketItem[](server-side basket line shape; see below). Backend may add extra fields via[k: string]: unknown.status: backend-defined status string[k: string]: unknown: forward-compat for backend-added fields
BasketItem (server basket line shape)
Fields (all optional unless noted by backend):
@type?: typically "OrderItem"orderQuantity?: numberorderedItem?:{ '@type'?: string; sku?: string; [k: string]: unknown }seller?: seller/avatar EVM address (0x...)imageUrl?: optional UI hintproductCid?,offerSnapshot?: optional provenance fields that the server may include[k: string]: unknown: forward-compat for backend-added fields
PostalAddressInput
Fields (all optional):
streetAddress,addressLocality,postalCode,addressCountry
ContactPointInput
Fields (all optional):
email,telephone
PersonMinimalInput
Fields (all optional):
birthDate: ISO date string (e.g. "1990-01-01")
ValidationResult
Fields:
valid:trueif checkout should be possiblerequirements: backend-defined requirement listmissing: backend-defined missing-fields listruleTrace: backend-defined rule evaluation trace
Related packages
@circles-market/catalogto discover valid{ seller, sku }pairs@circles-market/auth+@circles-market/sessionfor authenticated checkout flows@circles-market/sdkif you don’t want to wire the dependencies yourself
