@commercekitsdk/adapter-node
v2.0.0
Published
Node.js server adapter for CommerceKit — mount a commerce API on Express/Fastify/Hono
Downloads
70
Readme
@commercekitsdk/adapter-node
Server adapter for CommerceKit: mount a complete commerce HTTP API on
Express, Fastify, or Hono. It turns any server-side
CommerceStore (the core Adapter contract) into REST routes that the
@commercekitsdk/adapter-rest client speaks to out of the box.
import express from "express";
import { expressCommerce } from "@commercekitsdk/adapter-node/express";
import { mockAdapter } from "@commercekitsdk/core/testing";
const app = express();
app.use("/api/commerce", express.json(), expressCommerce({ store: mockAdapter() }));
app.listen(3000);Now point a client at it:
import { createCommerceClient } from "@commercekitsdk/core";
import { createRestAdapter } from "@commercekitsdk/adapter-rest";
const client = createCommerceClient({
adapter: createRestAdapter({ baseUrl: "http://localhost:3000/api/commerce" }),
currency: "USD",
});
await client.products.list();What's included
createCommerceHandler({ store })— framework-agnostic request handler.expressCommerce,fastifyCommerce,honoCommerce— framework bindings.createJwtSessions(secret)— HS256 JWT sign/verify (vianode:crypto, no deps) implementing theSessionVerifiercontract for session management.prisma/schema.prisma— production data model (PostgreSQL/MySQL).
The store
The router dispatches to a CommerceStore, which is simply the core Adapter.
Use the in-memory mockAdapter() for local dev and tests; for production,
provide a database-backed adapter.
Note (roadmap): a Prisma-backed
createPrismaStore(prisma)built on the bundled schema is the next increment of this package. It is implemented and verified against a real database in CI rather than in the offline sandbox, so it ships once those integration tests are green. Until then, the router works with anyAdapteryou supply.
Auth
const sessions = createJwtSessions(process.env.SESSION_SECRET!);
const token = sessions.sign({ customerId: "cust_1" }, { expiresInSeconds: 3600 });
app.use("/api/commerce", express.json(), expressCommerce({ store, auth: sessions }));
// A valid `Authorization: Bearer <token>` threads `customerId` into the store context.