@game-infra/progress-tracker-schemas
v0.0.0
Published
Progress-tracker API contract: run/task progress schemas + toad-contracts endpoint definitions
Readme
@game-infra/progress-tracker-schemas
Progress-tracker API contract: valibot schemas plus toad-contracts defineApiContract definitions for categories, work items, per-category and overall progress stats, changelog, and quick-task creation. Builds on @game-infra/api-schemas-core for the shared success-response wrapper and heartbeat.
Published to npm. Also consumable as sibling source (exports points at src/).
Install
// pnpm sibling checkout
"@game-infra/progress-tracker-schemas": "link:../../game-infra/packages/schemas/progress-tracker-schemas"
// or from npm
"@game-infra/progress-tracker-schemas": "^0.1.0"valibot is a peer dependency (^1.4.0); the consumer provides it. @game-infra/api-schemas-core is a runtime dependency (re-uses createSuccessResponseSchema).
Usage
Contracts carry method, path, params, query, and request/response schemas in one object. Build a URL with pathResolver, derive the route pattern with mapApiContractToPath:
import { categoryListContract, workItemGetContract } from "@game-infra/progress-tracker-schemas";
import { mapApiContractToPath } from "@toad-contracts/valibot";
categoryListContract.pathResolver({ gameId: "g1" }); // '/games/g1/categories'
workItemGetContract.pathResolver({ gameId: "g1", itemId: "i1" }); // '/games/g1/work-items/i1'
mapApiContractToPath(workItemGetContract); // '/games/:gameId/work-items/:itemId'Register on a Hono service with @toad-contracts/hono (buildHonoRoute) and call from a frontend with @toad-contracts/frontend-http-client (sendByApiContract) — both drive off the same contract objects.
Query filters live in requestQuerySchema, not in pathResolver. The old golem-forge resolvers baked ?workArea=... into their output; the client now appends the query from the typed schema. List and progress endpoints accept an optional workArea; workItemListContract additionally accepts categoryId, status, and priority.
Extension points
- Work area / priority / status:
WORK_AREA_VALUES,PRIORITY_VALUES,STATUS_VALUES(with matching*Schemapicklists) are the single source of truth for these enums. - Query filters: typed as plain
string()onrequestQuerySchema; a game can re-tighten them to the enum picklists in its own validation layer.
Migrating from golem-forge
The old ProgressTrackerApiPaths constants and ProgressTrackerPathResolvers / ProgressTrackerPathPatterns / resolve*Path helpers are gone. Get a URL from the contract itself with contract.pathResolver(params) and the :param route pattern with mapApiContractToPath(contract). Query filters that the old resolvers baked into their output now live in requestQuerySchema (see Usage) and are appended by the client. Prefer driving requests through @toad-contracts/frontend-http-client (sendByApiContract) and routes through @toad-contracts/hono (buildHonoRoute), which consume the contract directly so you never touch a raw path.
Dependencies
@game-infra/api-schemas-core, @toad-contracts/core, @toad-contracts/valibot; peer valibot.
Consumers
progress-tracker-api (the Hono service registering these routes) and the progress-tracker UI (frontend client calling them).
