@game-infra/balance-schemas
@game-infra/balance-schemas
Balance-tool API contract: valibot schemas plus toad-contracts defineApiContract definitions for dataset list/save/load/publish/export-all and the balance AI-assist endpoint. Builds on @game-infra/api-schemas-core (reuses createSuccessResponseSchema and AIProviderSchema).
Published to npm. Also consumable as sibling source (exports points at src/).
Install
// pnpm sibling checkout
"@game-infra/balance-schemas": "link:../../game-infra/packages/schemas/balance-schemas"
// or from npm
"@game-infra/balance-schemas": "^0.1.0"
valibot is a peer dependency (^1.4.0); the consumer provides it. @game-infra/api-schemas-core is a direct dependency.
Usage
Contracts carry method, path, params, and request/response schemas in one object. Build a URL with pathResolver, derive the route pattern with mapApiContractToPath:
import { balanceLoadContract, balancePublishContract } from "@game-infra/balance-schemas";
import { mapApiContractToPath } from "@toad-contracts/valibot";
balanceLoadContract.pathResolver({ gameId: "g1", datasetId: "weapons" });
// '/games/g1/balance/weapons'
mapApiContractToPath(balancePublishContract);
// '/games/:gameId/balance/:datasetId/publish'
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.
Extension points
- Dataset ids:
datasetIdis a plainstring(). The oldBalanceDatasetIdsenum (weapons/mechaFrames/genericUnits/combatConstants) was dropped during the extraction; games register their own dataset descriptors via config and re-tighten the value there. - AI provider: the AI-assist request's
providerfield reusesAIProviderSchemafrom@game-infra/api-schemas-core, the single source of truth across AI endpoints.
Migrating from golem-forge
The old BalanceApiPaths constants and BalancePathResolvers / resolve*Path helpers are gone. Get a URL from the contract itself with contract.pathResolver(params) and the :param route pattern with mapApiContractToPath(contract). 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
balance-tool (the dataset editor frontend and its backend endpoints).