Generate Canton TypeScript API
Generate a clean, developer-friendly TypeScript API from Daml smart contracts.
STEP 1: Discover Daml Projects
Look for Daml project configuration:
- •Check for
multi-package.yamlin workspace root - if exists, parse to find all project paths - •Check for
daml.yamlin workspace root - single project setup - •Check for
**/daml.yaml- scan for projects in subdirectories
For each project found, extract:
- •Project name (from
name:field in daml.yaml) - •Project path
- •SDK version
If multiple projects are found, use AskUserQuestion to ask the user:
"Which Daml project should I generate the API for?"
Options should list all discovered project names.
STEP 2: Build Daml Project
cd <project-path> && daml build
If build fails, report error and stop.
STEP 3: Discover DAR Files
After successful build, find all DAR files needed for codegen:
- •Main project DAR:
<project-path>/.daml/dist/<project-name>-*.dar - •Dependencies in
.lib/:<project-path>/.lib/*.dar
Build the codegen command dynamically with all discovered DARs.
STEP 4: Generate JavaScript Bindings
Run daml codegen js with all discovered DAR files:
cd <project-path> && daml codegen js -o <sdk-path>/daml-js <all-dar-files>
Where:
- •
<sdk-path>defaults to<project-path>/sdk- the SDK output directory - •
<all-dar-files>is the space-separated list of all DARs from Step 3
STEP 5: Run API Generator (GENERATES ALL CODE)
The generator script produces ALL SDK code including:
- •Core types (primitives, interfaces)
- •Template IDs and type definitions
- •Template namespaces (each with Payload, create(), and choice functions)
- •Query helpers, TypeGuards, MockFactories
- •Error classes and retry helpers
- •Utils (amounts, ids, datetime, damlMap)
cd <sdk-path> && npx ts-node <path-to-skill>/scripts/generate-canton-api.ts daml-js . <project-name>
Where:
- •
<path-to-skill>is the absolute path to this skill's directory - •
<sdk-path>defaults to<project-path>/sdk - •
<project-name>is the name discovered in Step 1
STEP 6: Validate TypeScript
cd <sdk-path> && npx tsc --noEmit
Fix any errors before proceeding.
STEP 7: Generate React Layer (GENERATES ALL REACT CODE)
Run the React hooks generator:
cd <sdk-path> && npx ts-node <path-to-skill>/scripts/generate-canton-react.ts . <project-name>
Generates:
- •
react/context/LedgerContext.tsx- React context provider - •
react/context/useLedger.ts- Context hook - •
react/hooks/core.ts- Generic hooks (useContractQuery, useChoiceMutation) - •
react/hooks/queries.ts- Typed query hooks for each template - •
react/hooks/mutations.ts- Typed create + choice mutation hooks (action-first naming) and grouped actions per template - •
react/hooks/keys.ts- Query key factories aligned with core query keys (so invalidation works) - •
react/index.ts- Barrel export
STEP 8: Validate & Document
Read prompts/enhance-api.md for validation checklist:
- •Verify all templates have namespaces with Payload, create(), and choices
- •Check TypeScript compiles with strict mode
- •Create
docs/SDK.mddocumentation (required)
This step validates generated code and creates user documentation.
Debugging JSON API Auth (curl)
If you manually call the JSON API (e.g. with curl) and see:
missing Authorization header with OAuth 2.0 Bearer Token
Remember:
- •The JSON API needs
Authorization: Bearer <JWT> - •Unsigned sandbox JWTs must end with a trailing
. - •Always quote the header string to avoid shell mangling
The generated SDK README includes a copy‑pasteable curl + token snippet.
OUTPUT
Report when complete:
- •Project name:
<project-name> - •Project path:
<project-path> - •SDK path:
<sdk-path> - •DAR files processed: (list count)
- •Templates discovered (by role: workflow/factory/asset/state)
- •TypeScript validation: ✅/❌
- •Documentation created: ✅/❌
Next Steps
After SDK generation is complete, suggest:
"SDK generated successfully! To generate integration tests, run the
canton-test-generatorskill."
The test generator will:
- •Look for DAML test scripts in
daml/Scripts/tests/ - •Generate TypeScript tests that mirror the DAML workflows
- •Or generate basic template tests if no DAML scripts exist