resolves #67 Co-authored-by: johba <johba@harb.eth> Reviewed-on: https://codeberg.org/johba/harb/pulls/70
3.4 KiB
3.4 KiB
Kraiken Library - Agent Guide
Shared TypeScript helpers used by the landing app, txnBot, and other services to talk to KRAIKEN contracts and the Ponder GraphQL API.
Responsibilities
- Provide type-safe contract interaction helpers (encoding inputs, parsing results).
- Supply Ponder GraphQL query helpers and generated types for protocol stats and staking positions.
- Centralise staking math (tax calculations, snatch selection, share conversions) for reuse across clients.
Key Modules
src/kraiken.ts- Token-facing helpers and supply utilities.src/stake.ts- Staking math, Harberger tax helpers, snatch scoring.src/chains.ts- Chain constants and deployment metadata.src/queries/- GraphQL operations that target the Ponder schema.src/__generated__/graphql.ts- Codegen output consumed throughout the stack.src/abis.ts- Contract ABIs imported directly fromonchain/out/forge artifacts. Single source of truth for all ABI consumers.src/taxRates.ts- Generated fromonchain/src/Stake.solbyscripts/sync-tax-rates.mjs; never edit by hand.src/version.ts- Version validation system trackingKRAIKEN_LIB_VERSIONandCOMPATIBLE_CONTRACT_VERSIONSfor runtime dependency checking.
GraphQL Code Generation
- Schema source points to the Ponder GraphQL endpoint for the active environment.
- Scalar mappings:
BigInt->string,BigDecimal->string,Bytes->string,Int8->number. - Always import the generated DocumentNodes; avoid
anycasts to keep inference intact.
Package Scripts
npm install --legacy-peer-depsnpm run compile- Regenerate GraphQL types.npm run watch- Continuously regenerate on schema changes.npm test- Execute Jest suite for helper coverage.
Integration Notes
- Landing app consumes helpers for UI projections and staking copy.
- txnBot relies on the same helpers to evaluate profitability and tax windows.
- When the Ponder schema changes, rerun
npm run compileand commit regenerated types to prevent drift.
ES Module Architecture
- Module Type: This package is built as ES modules (
"type": "module"in package.json). All consumers must support ES modules. - Import Extensions: All relative imports in TypeScript source files MUST include
.jsextensions (e.g.,from "./helpers.js"). This is required for ES module resolution even though the source files are.ts. - JSON Imports: JSON files (like ABI artifacts) must use import assertions:
import Foo from './path.json' assert { type: 'json' }. - TypeScript Config:
tsconfig.jsonmust specify:"module": "esnext"- Generate ES module syntax"moduleResolution": "node"- Enable proper module resolution"rootDir": "./src"- Ensure flat output structure indist/
- Build Output: Running
npx tscproduces ES module.jsfiles indist/that can be consumed by both browser (Vite) and Node.js (≥14 with"type": "module"). - Container Mount: Podman/Docker services now bind-mount
dist/read-only from the host. Run./scripts/build-kraiken-lib.shbeforepodman-compose upor keepscripts/watch-kraiken-lib.shrunning to rebuild automatically.
Quality Guidelines
- Keep helpers pure and side-effect free; they should accept explicit dependencies.
- Prefer narrow exports so downstream consumers can tree-shake bundles.
- Extend typings instead of loosening them; reject
anyas a quick fix.