@ic-reactor/mcp 0.0.0-stage → 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug_report.yml +108 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +77 -0
- package/.github/actions/setup-rust-wasm/action.yml +25 -0
- package/.github/dependabot.yml +107 -0
- package/.github/workflows/auth-latest.yml +67 -0
- package/.github/workflows/b3pay-site.yml +49 -0
- package/.github/workflows/ci.yml +430 -0
- package/.github/workflows/codeql.yml +41 -0
- package/.github/workflows/dependency-review.yml +68 -0
- package/.github/workflows/docs-check.yml +98 -0
- package/.github/workflows/docs.yml +265 -0
- package/.github/workflows/e2e.yml +90 -0
- package/.github/workflows/examples-published.yml +97 -0
- package/.github/workflows/release.yml +326 -0
- package/.husky/pre-commit +12 -0
- package/.prettierignore +109 -0
- package/.prettierrc +6 -0
- package/AGENTS.md +103 -0
- package/CHANGELOG.md +3268 -0
- package/CLAUDE.md +93 -0
- package/CNAME +1 -0
- package/CODE_OF_CONDUCT.md +7 -0
- package/CONTRIBUTING.md +433 -0
- package/LICENSE +21 -0
- package/README.md +2 -2
- package/SECURITY.md +74 -0
- package/b3pay-module.json +194 -0
- package/docs/.remarkrc.json +10 -0
- package/docs/README.md +64 -0
- package/docs/astro.config.mjs +205 -0
- package/docs/favicon.svg +15 -0
- package/docs/package.json +39 -0
- package/docs/public/favicon.svg +15 -0
- package/docs/public/ic-reactor-social-card.png +0 -0
- package/docs/scripts/b3pay-static.mjs +22 -0
- package/docs/scripts/check-example-docs.mjs +214 -0
- package/docs/scripts/check-links.mjs +212 -0
- package/docs/scripts/fix-dist-links.js +125 -0
- package/docs/scripts/fix-frontmatter.js +71 -0
- package/docs/scripts/remove-redundant-h1.cjs +48 -0
- package/docs/scripts/rewrite-typedoc-links.js +110 -0
- package/docs/scripts/split-index.js +69 -0
- package/docs/src/assets/ic-reactor-hero-dark.svg +23 -0
- package/docs/src/assets/ic-reactor-hero-light.svg +23 -0
- package/docs/src/assets/ic-reactor-lockup-dark.svg +15 -0
- package/docs/src/assets/ic-reactor-lockup-light.svg +15 -0
- package/docs/src/assets/ic-reactor-mark-dark.svg +14 -0
- package/docs/src/assets/ic-reactor-mark-light.svg +14 -0
- package/docs/src/assets/layers/candid-core-layer-icon-dark.svg +4 -0
- package/docs/src/assets/layers/candid-core-layer-icon-light.svg +4 -0
- package/docs/src/assets/layers/candid-profile-layer-icon-dark.svg +4 -0
- package/docs/src/assets/layers/candid-profile-layer-icon-light.svg +4 -0
- package/docs/src/assets/layers/ic-reactor-layer-icon-dark.svg +4 -0
- package/docs/src/assets/layers/ic-reactor-layer-icon-light.svg +4 -0
- package/docs/src/components/LibraryCards.astro +172 -0
- package/docs/src/components/LibraryIcon.astro +28 -0
- package/docs/src/components/SiteTitle.astro +241 -0
- package/docs/src/content/docs/404.mdx +19 -0
- package/docs/src/content/docs/build/agent-tools.mdx +593 -0
- package/docs/src/content/docs/build/icrc1-wallet.mdx +619 -0
- package/docs/src/content/docs/build/ssr-per-user.mdx +552 -0
- package/docs/src/content/docs/examples/canister-studio.mdx +95 -0
- package/docs/src/content/docs/examples/icrc-ledger.mdx +45 -0
- package/docs/src/content/docs/examples/index.mdx +38 -0
- package/docs/src/content/docs/examples/next-ssr.mdx +73 -0
- package/docs/src/content/docs/examples/node-agent-tool.mdx +80 -0
- package/docs/src/content/docs/examples/vite-wallet.mdx +71 -0
- package/docs/src/content/docs/guides/auth.mdx +1181 -0
- package/docs/src/content/docs/guides/client.mdx +551 -0
- package/docs/src/content/docs/guides/deploy.mdx +180 -0
- package/docs/src/content/docs/guides/errors.mdx +475 -0
- package/docs/src/content/docs/guides/getting-started.mdx +620 -0
- package/docs/src/content/docs/guides/reads.mdx +586 -0
- package/docs/src/content/docs/guides/ssr.mdx +529 -0
- package/docs/src/content/docs/guides/testing.mdx +401 -0
- package/docs/src/content/docs/guides/values.mdx +261 -0
- package/docs/src/content/docs/guides/vite-plugin.mdx +690 -0
- package/docs/src/content/docs/guides/writes.mdx +572 -0
- package/docs/src/content/docs/ic-reactor/index.mdx +167 -0
- package/docs/src/content/docs/index.mdx +65 -0
- package/docs/src/content/docs/migrating-from-3.mdx +535 -0
- package/docs/src/content/docs/packages/core.mdx +186 -0
- package/docs/src/content/docs/packages/mcp.mdx +163 -0
- package/docs/src/content/docs/packages/react.mdx +207 -0
- package/docs/src/content/docs/packages/vite-plugin.mdx +73 -0
- package/docs/src/content/docs/versioning.mdx +104 -0
- package/docs/src/content.config.ts +7 -0
- package/docs/src/styles/custom.css +189 -0
- package/docs/tsconfig.typedoc.json +26 -0
- package/docs/typedoc-entry.ts +17 -0
- package/docs/typedoc.json +37 -0
- package/e2e/Cargo.lock +646 -0
- package/e2e/Cargo.toml +3 -0
- package/e2e/README.md +101 -0
- package/e2e/frontends/build.mjs +94 -0
- package/e2e/frontends/index.html +10 -0
- package/e2e/global-setup.ts +65 -0
- package/e2e/icp.yaml +38 -0
- package/e2e/package.json +40 -0
- package/e2e/setup.ts +6 -0
- package/e2e/src/actor/Cargo.toml +14 -0
- package/e2e/src/actor/hello_actor.did +10 -0
- package/e2e/src/actor/src/lib.rs +73 -0
- package/e2e/src/calls.test.ts +132 -0
- package/e2e/src/declarations/hello_actor.envelope.json +175 -0
- package/e2e/src/declarations/hello_actor.ts +15 -0
- package/e2e/src/errors.test.ts +107 -0
- package/e2e/src/frontend-headers.test.ts +253 -0
- package/e2e/src/identity.test.ts +61 -0
- package/e2e/src/react.test.tsx +59 -0
- package/e2e/src/replica.ts +70 -0
- package/e2e/src/vite-env.test.ts +108 -0
- package/e2e/test.sh +47 -0
- package/e2e/tsconfig.json +20 -0
- package/e2e/tsconfig.typecheck.json +9 -0
- package/e2e/vitest.config.ts +22 -0
- package/eslint.config.mjs +100 -0
- package/evals/PREREGISTRATION.md +1346 -0
- package/evals/README.md +756 -0
- package/evals/conditions/thin/condition.json +8 -0
- package/evals/conditions/thin/docs/candid-core-cli.README.md +90 -0
- package/evals/conditions/thin/docs/candid-core-schema.README.md +339 -0
- package/evals/conditions/thin/package.json +25 -0
- package/evals/conditions/thin/starter/src/generated/icrc1.ts +57 -0
- package/evals/conditions/thin-guide/condition.json +10 -0
- package/evals/conditions/thin-guide/docs/llms.txt +292 -0
- package/evals/conditions/v3/condition.json +9 -0
- package/evals/conditions/v3/docs/ic-reactor-core.llms.txt +232 -0
- package/evals/conditions/v3/docs/ic-reactor-react.llms.txt +280 -0
- package/evals/conditions/v3/docs/llms-full.txt +1053 -0
- package/evals/conditions/v3/package.json +26 -0
- package/evals/conditions/v3/starter/src/declarations/icrc1.did.d.ts +95 -0
- package/evals/conditions/v3/starter/src/declarations/icrc1.did.js +140 -0
- package/evals/conditions/v4/PORTING.md +384 -0
- package/evals/conditions/v4/README.md +106 -0
- package/evals/conditions/v4/condition.json +5 -0
- package/evals/conditions/v4/docs/llms.txt +323 -0
- package/evals/conditions/v4/package.json +27 -0
- package/evals/conditions/v4/starter/src/generated/icrc1.ts +78 -0
- package/evals/conditions/v4-proto/condition.json +6 -0
- package/evals/conditions/v4-proto/docs/llms.txt +291 -0
- package/evals/conditions/v4-proto/lib/SHIM-NOTES.md +20 -0
- package/evals/conditions/v4-proto/lib/package.json +27 -0
- package/evals/conditions/v4-proto/lib/src/client.ts +471 -0
- package/evals/conditions/v4-proto/lib/src/errors.ts +214 -0
- package/evals/conditions/v4-proto/lib/src/index.ts +36 -0
- package/evals/conditions/v4-proto/lib/src/principal.ts +175 -0
- package/evals/conditions/v4-proto/lib/src/service.ts +69 -0
- package/evals/conditions/v4-proto/lib/src/types.ts +174 -0
- package/evals/conditions/v4-proto/lib/test/runtime.test.ts +170 -0
- package/evals/conditions/v4-proto/lib/test/tsconfig.json +10 -0
- package/evals/conditions/v4-proto/lib/test/types.test-d.ts +145 -0
- package/evals/conditions/v4-proto/lib/test/vitest.config.mjs +8 -0
- package/evals/conditions/v4-proto/lib/tsconfig.json +17 -0
- package/evals/conditions/v4-proto/package.json +26 -0
- package/evals/conditions/v4-proto/starter/src/generated/icrc1.service.ts +19 -0
- package/evals/conditions/v4-proto/starter/src/generated/icrc1.ts +57 -0
- package/evals/drive.mjs +1221 -0
- package/evals/gate.mjs +161 -0
- package/evals/harness/aggregate.mjs +534 -0
- package/evals/harness/aggregate.test.mjs +344 -0
- package/evals/harness/assemble.mjs +216 -0
- package/evals/harness/assemble.test.mjs +143 -0
- package/evals/harness/auth.mjs +91 -0
- package/evals/harness/check-docs.mjs +157 -0
- package/evals/harness/declarations/icrc1.did.d.ts +95 -0
- package/evals/harness/declarations/icrc1.did.js +140 -0
- package/evals/harness/drive-auth.test.mjs +584 -0
- package/evals/harness/drive.test.mjs +509 -0
- package/evals/harness/fake-auth.ts +67 -0
- package/evals/harness/fake-ledger.ts +178 -0
- package/evals/harness/gate-plan.mjs +104 -0
- package/evals/harness/gate-plan.test.mjs +243 -0
- package/evals/harness/icrc1.did +88 -0
- package/evals/harness/judge.mjs +63 -0
- package/evals/harness/judge.test.mjs +81 -0
- package/evals/harness/leak-scan.mjs +1373 -0
- package/evals/harness/leak-scan.test.mjs +1300 -0
- package/evals/harness/probes/amounts.ts +14 -0
- package/evals/harness/probes/node-tool.probe.ts +48 -0
- package/evals/harness/probes/probe.mjs +149 -0
- package/evals/harness/probes/react-wallet.probe.ts +96 -0
- package/evals/harness/public/support/auth.ts +38 -0
- package/evals/harness/public/support/fake-replica.d.ts +28 -0
- package/evals/harness/public/support/fake-replica.js +434 -0
- package/evals/harness/public/support/ledger.idl.d.ts +95 -0
- package/evals/harness/public/support/ledger.idl.js +140 -0
- package/evals/harness/public/support/world.ts +179 -0
- package/evals/harness/runs.mjs +139 -0
- package/evals/harness/sandbox.mjs +88 -0
- package/evals/harness/sandbox.test.mjs +134 -0
- package/evals/harness/ship.mjs +264 -0
- package/evals/harness/ship.test.mjs +552 -0
- package/evals/harness/world.ts +291 -0
- package/evals/package.json +26 -0
- package/evals/pnpm-lock.yaml +1537 -0
- package/evals/pnpm-workspace.yaml +12 -0
- package/evals/results/2026-09-30T14-22-05-924Z/pilot.json +384 -0
- package/evals/results/2026-09-30T14-22-05-924Z/pilot.rescanned.json +404 -0
- package/evals/results/2026-09-30T14-22-05-924Z/pilot.rescanned.rescored.json +404 -0
- package/evals/results/2026-09-30T14-22-05-924Z/plan.json +240 -0
- package/evals/results/2026-09-30T14-22-05-924Z/summary.json +1800 -0
- package/evals/results/2026-09-30T14-22-05-924Z/summary.rescanned.json +1843 -0
- package/evals/results/2026-09-30T14-22-05-924Z/summary.rescanned.rescored.json +2100 -0
- package/evals/results/2026-09-30T15-48-23-343Z/pilot.json +404 -0
- package/evals/results/2026-09-30T15-48-23-343Z/pilot.rescored.json +404 -0
- package/evals/results/2026-09-30T15-48-23-343Z/plan.json +242 -0
- package/evals/results/2026-09-30T15-48-23-343Z/summary.json +1843 -0
- package/evals/results/2026-09-30T15-48-23-343Z/summary.rescored.json +2195 -0
- package/evals/results/2026-10-03-beta1-gate/pilot.json +162 -0
- package/evals/results/2026-10-03-beta1-gate/plan.json +141 -0
- package/evals/results/2026-10-03-beta1-gate/summary.json +983 -0
- package/evals/results/2026-10-05-ga-gate/contaminated-run.json +55 -0
- package/evals/results/2026-10-05-ga-gate/pilot.json +162 -0
- package/evals/results/2026-10-05-ga-gate/plan.json +457 -0
- package/evals/results/2026-10-05-ga-gate/summary.json +1037 -0
- package/evals/results/2026-10-05-ga-gate/summary.rescanned.json +1037 -0
- package/evals/results/README.md +31 -0
- package/evals/runs-pilot.log +150 -0
- package/evals/runs-pilot2.log +150 -0
- package/evals/score.mjs +256 -0
- package/evals/setup.mjs +547 -0
- package/evals/tasks/node-tool/faulty/thin-accepts-exponent/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-accepts-exponent/src/index.ts +121 -0
- package/evals/tasks/node-tool/faulty/thin-anonymous-transfer/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-anonymous-transfer/src/index.ts +116 -0
- package/evals/tasks/node-tool/faulty/thin-every-reject-may-have-executed/meta.json +9 -0
- package/evals/tasks/node-tool/faulty/thin-every-reject-may-have-executed/src/index.ts +118 -0
- package/evals/tasks/node-tool/faulty/thin-fetches-root-key-off-local/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-fetches-root-key-off-local/src/index.ts +118 -0
- package/evals/tasks/node-tool/faulty/thin-ignores-root-key/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-ignores-root-key/src/index.ts +117 -0
- package/evals/tasks/node-tool/faulty/thin-misclassifies-reject-codes/meta.json +9 -0
- package/evals/tasks/node-tool/faulty/thin-misclassifies-reject-codes/src/index.ts +119 -0
- package/evals/tasks/node-tool/faulty/thin-no-nat64-cap/meta.json +9 -0
- package/evals/tasks/node-tool/faulty/thin-no-nat64-cap/src/index.ts +118 -0
- package/evals/tasks/node-tool/faulty/thin-number-amount/meta.json +10 -0
- package/evals/tasks/node-tool/faulty/thin-number-amount/src/index.ts +117 -0
- package/evals/tasks/node-tool/faulty/thin-truncates-fraction-digits/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-truncates-fraction-digits/src/index.ts +120 -0
- package/evals/tasks/node-tool/faulty/thin-unvalidated-recipient/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-unvalidated-recipient/src/index.ts +118 -0
- package/evals/tasks/node-tool/faulty/v3-retry-call-errors/meta.json +11 -0
- package/evals/tasks/node-tool/faulty/v3-retry-call-errors/src/index.ts +149 -0
- package/evals/tasks/node-tool/faulty/v4-anonymous-identity-sent/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/v4-anonymous-identity-sent/src/index.ts +71 -0
- package/evals/tasks/node-tool/faulty/v4-never-may-have-executed/meta.json +9 -0
- package/evals/tasks/node-tool/faulty/v4-never-may-have-executed/src/index.ts +84 -0
- package/evals/tasks/node-tool/faulty/v4-proto-never-may-have-executed/meta.json +9 -0
- package/evals/tasks/node-tool/faulty/v4-proto-never-may-have-executed/src/index.ts +72 -0
- package/evals/tasks/node-tool/faulty/v4-proto-refuses-nat64-max/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/v4-proto-refuses-nat64-max/src/index.ts +72 -0
- package/evals/tasks/node-tool/faulty/v4-refuses-nat64-max/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/v4-refuses-nat64-max/src/index.ts +84 -0
- package/evals/tasks/node-tool/hidden/node-tool.test.ts +312 -0
- package/evals/tasks/node-tool/prompt.md +55 -0
- package/evals/tasks/node-tool/prompt.minimal.md +30 -0
- package/evals/tasks/node-tool/solutions/thin/reference/src/index.ts +118 -0
- package/evals/tasks/node-tool/solutions/thin/reference-module-scope/src/index.ts +145 -0
- package/evals/tasks/node-tool/solutions/thin-guide/reference/src/index.ts +118 -0
- package/evals/tasks/node-tool/solutions/thin-guide/reference-module-scope/src/index.ts +145 -0
- package/evals/tasks/node-tool/solutions/v3/reference/src/index.ts +140 -0
- package/evals/tasks/node-tool/solutions/v3/reference-module-scope/src/index.ts +153 -0
- package/evals/tasks/node-tool/solutions/v4/reference/src/index.ts +84 -0
- package/evals/tasks/node-tool/solutions/v4/reference-module-scope/src/index.ts +105 -0
- package/evals/tasks/node-tool/solutions/v4-proto/reference/src/index.ts +72 -0
- package/evals/tasks/node-tool/solutions/v4-proto/reference-module-scope/src/index.ts +87 -0
- package/evals/tasks/node-tool/starter/src/contract.ts +31 -0
- package/evals/tasks/node-tool/starter/src/index.ts +7 -0
- package/evals/tasks/node-tool/starter/test/smoke.test.ts +22 -0
- package/evals/tasks/node-tool/starter/tsconfig.json +17 -0
- package/evals/tasks/node-tool/task.json +63 -0
- package/evals/tasks/react-wallet/faulty/thin-accepts-exponent/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-accepts-exponent/src/Wallet.tsx +216 -0
- package/evals/tasks/react-wallet/faulty/thin-anonymous-transfer/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-anonymous-transfer/src/Wallet.tsx +212 -0
- package/evals/tasks/react-wallet/faulty/thin-both-auth-buttons/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-both-auth-buttons/src/Wallet.tsx +210 -0
- package/evals/tasks/react-wallet/faulty/thin-constant-balance-key/meta.json +8 -0
- package/evals/tasks/react-wallet/faulty/thin-constant-balance-key/src/Wallet.tsx +213 -0
- package/evals/tasks/react-wallet/faulty/thin-no-nat64-cap/meta.json +9 -0
- package/evals/tasks/react-wallet/faulty/thin-no-nat64-cap/src/Wallet.tsx +213 -0
- package/evals/tasks/react-wallet/faulty/thin-number-balance/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-number-balance/src/Wallet.tsx +213 -0
- package/evals/tasks/react-wallet/faulty/thin-transfer-as-query/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-transfer-as-query/src/Wallet.tsx +254 -0
- package/evals/tasks/react-wallet/faulty/thin-truncates-fraction-digits/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-truncates-fraction-digits/src/Wallet.tsx +215 -0
- package/evals/tasks/react-wallet/faulty/thin-unguarded-balance-effect/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-unguarded-balance-effect/src/Wallet.tsx +214 -0
- package/evals/tasks/react-wallet/faulty/v3-http-4xx-unknown/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v3-http-4xx-unknown/src/Wallet.tsx +224 -0
- package/evals/tasks/react-wallet/faulty/v3-mutation-retry-3/meta.json +12 -0
- package/evals/tasks/react-wallet/faulty/v3-mutation-retry-3/src/Wallet.tsx +225 -0
- package/evals/tasks/react-wallet/faulty/v3-unknown-as-error/meta.json +11 -0
- package/evals/tasks/react-wallet/faulty/v3-unknown-as-error/src/Wallet.tsx +182 -0
- package/evals/tasks/react-wallet/faulty/v4-every-reject-unknown/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-every-reject-unknown/src/Wallet.tsx +160 -0
- package/evals/tasks/react-wallet/faulty/v4-keep-previous-data/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-keep-previous-data/src/Wallet.tsx +166 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-every-reject-unknown/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-every-reject-unknown/src/Wallet.tsx +161 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-keep-previous-data/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-keep-previous-data/src/Wallet.tsx +163 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-retry-spread/meta.json +12 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-retry-spread/src/Wallet.tsx +162 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-status-not-idle/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-status-not-idle/src/Wallet.tsx +163 -0
- package/evals/tasks/react-wallet/faulty/v4-retry-spread/meta.json +12 -0
- package/evals/tasks/react-wallet/faulty/v4-retry-spread/src/Wallet.tsx +163 -0
- package/evals/tasks/react-wallet/faulty/v4-status-not-idle/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-status-not-idle/src/Wallet.tsx +162 -0
- package/evals/tasks/react-wallet/hidden/react-wallet.test.ts +536 -0
- package/evals/tasks/react-wallet/prompt.md +88 -0
- package/evals/tasks/react-wallet/prompt.minimal.md +51 -0
- package/evals/tasks/react-wallet/solutions/thin/reference/src/Wallet.tsx +213 -0
- package/evals/tasks/react-wallet/solutions/thin/reference-module-scope/src/Wallet.tsx +227 -0
- package/evals/tasks/react-wallet/solutions/thin-guide/reference/src/Wallet.tsx +213 -0
- package/evals/tasks/react-wallet/solutions/thin-guide/reference-module-scope/src/Wallet.tsx +227 -0
- package/evals/tasks/react-wallet/solutions/v3/reference/src/Wallet.tsx +224 -0
- package/evals/tasks/react-wallet/solutions/v3/reference-module-scope/src/Wallet.tsx +230 -0
- package/evals/tasks/react-wallet/solutions/v4/reference/src/Wallet.tsx +160 -0
- package/evals/tasks/react-wallet/solutions/v4/reference-module-scope/src/Wallet.tsx +178 -0
- package/evals/tasks/react-wallet/solutions/v4-proto/reference/src/Wallet.tsx +161 -0
- package/evals/tasks/react-wallet/solutions/v4-proto/reference-module-scope/src/Wallet.tsx +161 -0
- package/evals/tasks/react-wallet/starter/src/Wallet.tsx +12 -0
- package/evals/tasks/react-wallet/starter/src/auth.ts +16 -0
- package/evals/tasks/react-wallet/starter/src/config.ts +14 -0
- package/evals/tasks/react-wallet/starter/src/ii-auth.ts +43 -0
- package/evals/tasks/react-wallet/starter/src/main.tsx +15 -0
- package/evals/tasks/react-wallet/starter/test/smoke.test.ts +34 -0
- package/evals/tasks/react-wallet/starter/tsconfig.json +18 -0
- package/evals/tasks/react-wallet/task.json +84 -0
- package/examples/canister-studio/.stackblitzrc +4 -0
- package/examples/canister-studio/README.md +183 -0
- package/examples/canister-studio/did/ckbtc_minter.did +806 -0
- package/examples/canister-studio/did/icp_ledger.did +586 -0
- package/examples/canister-studio/did/icrc1.did +88 -0
- package/examples/canister-studio/package.json +45 -0
- package/examples/canister-studio/scripts/smoke.ts +188 -0
- package/examples/canister-studio/src/calls/CacheKeyPanel.tsx +104 -0
- package/examples/canister-studio/src/calls/ConfirmWrite.tsx +265 -0
- package/examples/canister-studio/src/calls/ErrorPanel.test.tsx +113 -0
- package/examples/canister-studio/src/calls/ErrorPanel.tsx +214 -0
- package/examples/canister-studio/src/calls/MethodRunner.test.tsx +354 -0
- package/examples/canister-studio/src/calls/MethodRunner.tsx +57 -0
- package/examples/canister-studio/src/calls/ReadRunner.tsx +244 -0
- package/examples/canister-studio/src/calls/ResendPanel.tsx +165 -0
- package/examples/canister-studio/src/calls/ShareLink.tsx +59 -0
- package/examples/canister-studio/src/calls/WriteRunner.test.tsx +678 -0
- package/examples/canister-studio/src/calls/WriteRunner.tsx +670 -0
- package/examples/canister-studio/src/calls/dedupe.ts +189 -0
- package/examples/canister-studio/src/calls/error-info.ts +168 -0
- package/examples/canister-studio/src/calls/history.test.ts +284 -0
- package/examples/canister-studio/src/calls/history.ts +287 -0
- package/examples/canister-studio/src/calls/kinds.ts +68 -0
- package/examples/canister-studio/src/calls/prepare.ts +32 -0
- package/examples/canister-studio/src/calls/query-options.ts +30 -0
- package/examples/canister-studio/src/calls/read.ts +47 -0
- package/examples/canister-studio/src/calls/readback.ts +100 -0
- package/examples/canister-studio/src/calls/record.ts +123 -0
- package/examples/canister-studio/src/calls/safe-calls.test.ts +299 -0
- package/examples/canister-studio/src/calls/share.ts +46 -0
- package/examples/canister-studio/src/calls/testing/doubles.tsx +108 -0
- package/examples/canister-studio/src/calls/testing/fixtures.ts +185 -0
- package/examples/canister-studio/src/calls/useCanisterHandle.ts +35 -0
- package/examples/canister-studio/src/canisters/ckbtc_minter.envelope.json +4228 -0
- package/examples/canister-studio/src/canisters/ckbtc_minter.ts +868 -0
- package/examples/canister-studio/src/canisters/icp_ledger.envelope.json +3454 -0
- package/examples/canister-studio/src/canisters/icp_ledger.ts +584 -0
- package/examples/canister-studio/src/canisters/icrc1.envelope.json +840 -0
- package/examples/canister-studio/src/canisters/icrc1.ts +78 -0
- package/examples/canister-studio/src/components/ActionButton.tsx +32 -0
- package/examples/canister-studio/src/components/AppHeader.tsx +83 -0
- package/examples/canister-studio/src/components/AppShell.tsx +29 -0
- package/examples/canister-studio/src/components/AuthButton.tsx +79 -0
- package/examples/canister-studio/src/components/Badge.tsx +79 -0
- package/examples/canister-studio/src/components/CanisterHeader.tsx +200 -0
- package/examples/canister-studio/src/components/CanisterJump.tsx +130 -0
- package/examples/canister-studio/src/components/Card.tsx +64 -0
- package/examples/canister-studio/src/components/Code.tsx +101 -0
- package/examples/canister-studio/src/components/CopyButton.tsx +126 -0
- package/examples/canister-studio/src/components/Disclosure.tsx +34 -0
- package/examples/canister-studio/src/components/EmptyState.tsx +34 -0
- package/examples/canister-studio/src/components/MethodList.test.tsx +137 -0
- package/examples/canister-studio/src/components/MethodList.tsx +244 -0
- package/examples/canister-studio/src/components/Notice.tsx +36 -0
- package/examples/canister-studio/src/components/ProvenanceBadge.tsx +44 -0
- package/examples/canister-studio/src/components/RouteError.tsx +42 -0
- package/examples/canister-studio/src/components/SectionBoundary.tsx +76 -0
- package/examples/canister-studio/src/components/Spinner.tsx +33 -0
- package/examples/canister-studio/src/components/Tabs.tsx +96 -0
- package/examples/canister-studio/src/components/canister/CanisterLoadFailure.test.tsx +56 -0
- package/examples/canister-studio/src/components/canister/CanisterLoadFailure.tsx +165 -0
- package/examples/canister-studio/src/components/canister/CanisterNotFound.tsx +59 -0
- package/examples/canister-studio/src/components/canister/CanisterPending.tsx +33 -0
- package/examples/canister-studio/src/components/canister/MethodOverview.tsx +93 -0
- package/examples/canister-studio/src/components/canister/MethodWorkspace.test.tsx +201 -0
- package/examples/canister-studio/src/components/canister/MethodWorkspace.tsx +187 -0
- package/examples/canister-studio/src/components/canister/shared-call.test.ts +186 -0
- package/examples/canister-studio/src/components/canister/shared-call.ts +133 -0
- package/examples/canister-studio/src/components/canister/shared-link-loader.test.ts +116 -0
- package/examples/canister-studio/src/components/canister/use-canister-page.ts +44 -0
- package/examples/canister-studio/src/components/canister/workspace-key.test.ts +27 -0
- package/examples/canister-studio/src/components/canister/workspace-key.ts +36 -0
- package/examples/canister-studio/src/components/canister-id-input.ts +69 -0
- package/examples/canister-studio/src/components/canister-names.ts +11 -0
- package/examples/canister-studio/src/components/download.ts +34 -0
- package/examples/canister-studio/src/components/fallbacks.tsx +33 -0
- package/examples/canister-studio/src/components/helpers.test.ts +107 -0
- package/examples/canister-studio/src/components/history/HistoryList.tsx +284 -0
- package/examples/canister-studio/src/components/home/FeaturedLedger.tsx +149 -0
- package/examples/canister-studio/src/components/home/OpenCanister.tsx +99 -0
- package/examples/canister-studio/src/components/home/featured.test.tsx +92 -0
- package/examples/canister-studio/src/components/home/featured.ts +64 -0
- package/examples/canister-studio/src/components/interface/CandidTab.tsx +38 -0
- package/examples/canister-studio/src/components/interface/CompatReport.tsx +92 -0
- package/examples/canister-studio/src/components/interface/CompatibilityTab.tsx +190 -0
- package/examples/canister-studio/src/components/interface/ProjectTab.tsx +196 -0
- package/examples/canister-studio/src/components/interface/TypeScriptTab.tsx +114 -0
- package/examples/canister-studio/src/components/interface/tools.test.tsx +169 -0
- package/examples/canister-studio/src/components/modes.ts +31 -0
- package/examples/canister-studio/src/components/playground/MethodPicker.tsx +67 -0
- package/examples/canister-studio/src/components/playground/PlaygroundForms.tsx +112 -0
- package/examples/canister-studio/src/components/playground/PlaygroundTools.tsx +219 -0
- package/examples/canister-studio/src/components/playground/sample.ts +43 -0
- package/examples/canister-studio/src/components/playground/target.test.tsx +86 -0
- package/examples/canister-studio/src/components/primitives.test.tsx +121 -0
- package/examples/canister-studio/src/components/provenance.ts +38 -0
- package/examples/canister-studio/src/components/route-render.test.tsx +71 -0
- package/examples/canister-studio/src/components/use-task.ts +56 -0
- package/examples/canister-studio/src/components/wallet/BalancePanel.tsx +110 -0
- package/examples/canister-studio/src/components/wallet/LedgerSummary.tsx +63 -0
- package/examples/canister-studio/src/components/wallet/MinterPanel.tsx +255 -0
- package/examples/canister-studio/src/components/wallet/SendPanel.test.tsx +297 -0
- package/examples/canister-studio/src/components/wallet/SendPanel.tsx +446 -0
- package/examples/canister-studio/src/components/wallet/ledgers.test.ts +36 -0
- package/examples/canister-studio/src/components/wallet/ledgers.ts +111 -0
- package/examples/canister-studio/src/forms/JsonPanel.tsx +157 -0
- package/examples/canister-studio/src/forms/MethodForm.test.tsx +369 -0
- package/examples/canister-studio/src/forms/MethodForm.tsx +368 -0
- package/examples/canister-studio/src/forms/TypedForm.tsx +55 -0
- package/examples/canister-studio/src/forms/context.ts +62 -0
- package/examples/canister-studio/src/forms/convert.ts +131 -0
- package/examples/canister-studio/src/forms/edge.test.ts +252 -0
- package/examples/canister-studio/src/forms/engine.test.ts +358 -0
- package/examples/canister-studio/src/forms/engine.ts +1492 -0
- package/examples/canister-studio/src/forms/fields/BytesField.tsx +210 -0
- package/examples/canister-studio/src/forms/fields/Field.tsx +106 -0
- package/examples/canister-studio/src/forms/fields/FieldShell.tsx +101 -0
- package/examples/canister-studio/src/forms/fields/Group.tsx +74 -0
- package/examples/canister-studio/src/forms/fields/ListField.tsx +256 -0
- package/examples/canister-studio/src/forms/fields/Segmented.tsx +78 -0
- package/examples/canister-studio/src/forms/fields/TimestampField.tsx +108 -0
- package/examples/canister-studio/src/forms/fields/UnitsField.tsx +119 -0
- package/examples/canister-studio/src/forms/fields/composites.tsx +389 -0
- package/examples/canister-studio/src/forms/fields/leaves.tsx +350 -0
- package/examples/canister-studio/src/forms/fields.test.tsx +396 -0
- package/examples/canister-studio/src/forms/helpers.test.ts +225 -0
- package/examples/canister-studio/src/forms/hints.ts +128 -0
- package/examples/canister-studio/src/forms/json.ts +119 -0
- package/examples/canister-studio/src/forms/parsing.test.ts +217 -0
- package/examples/canister-studio/src/forms/useMethodForm.ts +251 -0
- package/examples/canister-studio/src/interface/browser.test.ts +23 -0
- package/examples/canister-studio/src/interface/browser.ts +153 -0
- package/examples/canister-studio/src/interface/cache.ts +68 -0
- package/examples/canister-studio/src/interface/cli-cache.test.ts +155 -0
- package/examples/canister-studio/src/interface/cli-cache.ts +125 -0
- package/examples/canister-studio/src/interface/compile.server.test.ts +198 -0
- package/examples/canister-studio/src/interface/compile.server.ts +262 -0
- package/examples/canister-studio/src/interface/compile.test.ts +108 -0
- package/examples/canister-studio/src/interface/compile.ts +305 -0
- package/examples/canister-studio/src/interface/docs.test.ts +75 -0
- package/examples/canister-studio/src/interface/docs.ts +100 -0
- package/examples/canister-studio/src/interface/functions.test.ts +42 -0
- package/examples/canister-studio/src/interface/functions.ts +200 -0
- package/examples/canister-studio/src/interface/live-candid.server.ts +91 -0
- package/examples/canister-studio/src/interface/live-loader.test.ts +515 -0
- package/examples/canister-studio/src/interface/live-loader.ts +364 -0
- package/examples/canister-studio/src/interface/load.test.ts +328 -0
- package/examples/canister-studio/src/interface/load.ts +249 -0
- package/examples/canister-studio/src/interface/read-candid.test.ts +185 -0
- package/examples/canister-studio/src/interface/read-candid.ts +233 -0
- package/examples/canister-studio/src/interface/server-result.ts +42 -0
- package/examples/canister-studio/src/interface/typed.ts +68 -0
- package/examples/canister-studio/src/interface/types.ts +121 -0
- package/examples/canister-studio/src/lib/format.test.ts +107 -0
- package/examples/canister-studio/src/lib/format.ts +139 -0
- package/examples/canister-studio/src/lib/hex.test.ts +43 -0
- package/examples/canister-studio/src/lib/hex.ts +33 -0
- package/examples/canister-studio/src/lib/ids.test.ts +70 -0
- package/examples/canister-studio/src/lib/ids.ts +93 -0
- package/examples/canister-studio/src/lib/reactor.test.ts +55 -0
- package/examples/canister-studio/src/lib/reactor.ts +55 -0
- package/examples/canister-studio/src/lib/registry.test.ts +74 -0
- package/examples/canister-studio/src/lib/registry.ts +238 -0
- package/examples/canister-studio/src/lib/schema.ts +148 -0
- package/examples/canister-studio/src/routeTree.gen.ts +227 -0
- package/examples/canister-studio/src/router.test.ts +290 -0
- package/examples/canister-studio/src/router.tsx +127 -0
- package/examples/canister-studio/src/routes/__root.tsx +58 -0
- package/examples/canister-studio/src/routes/canister.$canisterId.index.tsx +172 -0
- package/examples/canister-studio/src/routes/canister.$canisterId.interface.tsx +98 -0
- package/examples/canister-studio/src/routes/canister.$canisterId.tsx +91 -0
- package/examples/canister-studio/src/routes/history.tsx +55 -0
- package/examples/canister-studio/src/routes/index.tsx +169 -0
- package/examples/canister-studio/src/routes/playground.tsx +286 -0
- package/examples/canister-studio/src/routes/safety.tsx +57 -0
- package/examples/canister-studio/src/routes/wallet.tsx +213 -0
- package/examples/canister-studio/src/safety/LabTransferForm.tsx +84 -0
- package/examples/canister-studio/src/safety/RequestLog.tsx +79 -0
- package/examples/canister-studio/src/safety/SafetyLab.test.tsx +89 -0
- package/examples/canister-studio/src/safety/SafetyLab.tsx +140 -0
- package/examples/canister-studio/src/safety/ScenarioCard.tsx +262 -0
- package/examples/canister-studio/src/safety/lab-run.ts +283 -0
- package/examples/canister-studio/src/safety/mock-ledger.test.ts +99 -0
- package/examples/canister-studio/src/safety/mock-ledger.ts +263 -0
- package/examples/canister-studio/src/safety/scenarios.test.ts +157 -0
- package/examples/canister-studio/src/safety/scenarios.ts +924 -0
- package/examples/canister-studio/src/styles.css +3453 -0
- package/examples/canister-studio/src/styles.test.ts +46 -0
- package/examples/canister-studio/src/values/CallPreview.test.tsx +86 -0
- package/examples/canister-studio/src/values/CallPreview.tsx +148 -0
- package/examples/canister-studio/src/values/ErrValueView.tsx +66 -0
- package/examples/canister-studio/src/values/Inspector.tsx +133 -0
- package/examples/canister-studio/src/values/ReplyView.test.tsx +341 -0
- package/examples/canister-studio/src/values/ReplyView.tsx +164 -0
- package/examples/canister-studio/src/values/candid-text.test.ts +516 -0
- package/examples/canister-studio/src/values/candid-text.ts +479 -0
- package/examples/canister-studio/src/values/hints.ts +58 -0
- package/examples/canister-studio/src/values/json.test.ts +66 -0
- package/examples/canister-studio/src/values/json.ts +31 -0
- package/examples/canister-studio/src/values/leaves.tsx +309 -0
- package/examples/canister-studio/src/values/schema.test.ts +123 -0
- package/examples/canister-studio/src/values/schema.ts +78 -0
- package/examples/canister-studio/src/values/test-router.tsx +21 -0
- package/examples/canister-studio/src/values/tree.tsx +670 -0
- package/examples/canister-studio/src/values/use-sha256.ts +29 -0
- package/examples/canister-studio/tsconfig.json +20 -0
- package/examples/canister-studio/vite.config.ts +50 -0
- package/examples/canister-studio/vitest.config.ts +20 -0
- package/examples/icrc-ledger/.stackblitzrc +4 -0
- package/examples/icrc-ledger/README.md +100 -0
- package/examples/icrc-ledger/ckbtc_minter.did +12 -0
- package/examples/icrc-ledger/icp_ledger.did +147 -0
- package/examples/icrc-ledger/icrc1.did +88 -0
- package/examples/icrc-ledger/index.html +13 -0
- package/examples/icrc-ledger/package.json +40 -0
- package/examples/icrc-ledger/scripts/smoke.ts +151 -0
- package/examples/icrc-ledger/src/App.tsx +71 -0
- package/examples/icrc-ledger/src/ErrorPanel.tsx +105 -0
- package/examples/icrc-ledger/src/MainnetTab.tsx +450 -0
- package/examples/icrc-ledger/src/SandboxTab.test.tsx +379 -0
- package/examples/icrc-ledger/src/SandboxTab.tsx +761 -0
- package/examples/icrc-ledger/src/blocks.test.ts +247 -0
- package/examples/icrc-ledger/src/blocks.ts +140 -0
- package/examples/icrc-ledger/src/canisters/ckbtc_minter.envelope.json +96 -0
- package/examples/icrc-ledger/src/canisters/ckbtc_minter.ts +16 -0
- package/examples/icrc-ledger/src/canisters/icp_ledger.envelope.json +690 -0
- package/examples/icrc-ledger/src/canisters/icp_ledger.ts +223 -0
- package/examples/icrc-ledger/src/canisters/icrc1.envelope.json +840 -0
- package/examples/icrc-ledger/src/canisters/icrc1.ts +78 -0
- package/examples/icrc-ledger/src/format.test.ts +41 -0
- package/examples/icrc-ledger/src/format.ts +68 -0
- package/examples/icrc-ledger/src/ledger.ts +15 -0
- package/examples/icrc-ledger/src/main.tsx +10 -0
- package/examples/icrc-ledger/src/minter.ts +16 -0
- package/examples/icrc-ledger/src/sandbox.test.ts +464 -0
- package/examples/icrc-ledger/src/sandbox.ts +281 -0
- package/examples/icrc-ledger/src/styles.css +391 -0
- package/examples/icrc-ledger/src/transfer-form.test.ts +62 -0
- package/examples/icrc-ledger/src/transfer-form.ts +97 -0
- package/examples/icrc-ledger/tsconfig.json +19 -0
- package/examples/icrc-ledger/vite.config.ts +44 -0
- package/examples/icrc-ledger/vitest.config.ts +12 -0
- package/examples/next-ssr/.stackblitzrc +4 -0
- package/examples/next-ssr/README.md +112 -0
- package/examples/next-ssr/icrc1.did +88 -0
- package/examples/next-ssr/next.config.ts +10 -0
- package/examples/next-ssr/package.json +41 -0
- package/examples/next-ssr/scripts/smoke.ts +169 -0
- package/examples/next-ssr/src/app/account/CertifiedBalances.tsx +58 -0
- package/examples/next-ssr/src/app/account/account.test.tsx +165 -0
- package/examples/next-ssr/src/app/account/page.tsx +82 -0
- package/examples/next-ssr/src/app/api/balance/[ledger]/[principal]/route.ts +10 -0
- package/examples/next-ssr/src/app/globals.css +278 -0
- package/examples/next-ssr/src/app/layout.tsx +34 -0
- package/examples/next-ssr/src/app/page.tsx +46 -0
- package/examples/next-ssr/src/app/providers.browser.test.tsx +127 -0
- package/examples/next-ssr/src/app/providers.test.tsx +73 -0
- package/examples/next-ssr/src/app/providers.tsx +60 -0
- package/examples/next-ssr/src/canisters/icrc1.envelope.json +840 -0
- package/examples/next-ssr/src/canisters/icrc1.ts +78 -0
- package/examples/next-ssr/src/components/BalanceTable.tsx +43 -0
- package/examples/next-ssr/src/components/LedgerCard.test.tsx +96 -0
- package/examples/next-ssr/src/components/LedgerCard.tsx +230 -0
- package/examples/next-ssr/src/components/LedgerError.tsx +32 -0
- package/examples/next-ssr/src/components/LedgerSections.tsx +22 -0
- package/examples/next-ssr/src/components/MyBalances.test.tsx +253 -0
- package/examples/next-ssr/src/components/MyBalances.tsx +129 -0
- package/examples/next-ssr/src/components/SessionBadge.tsx +18 -0
- package/examples/next-ssr/src/components/hydration.test.tsx +259 -0
- package/examples/next-ssr/src/components/server-data.ts +10 -0
- package/examples/next-ssr/src/format.ts +46 -0
- package/examples/next-ssr/src/ledgers.ts +38 -0
- package/examples/next-ssr/src/server/balance-route.test.ts +151 -0
- package/examples/next-ssr/src/server/balance-route.ts +157 -0
- package/examples/next-ssr/src/server/error-summary.test.ts +34 -0
- package/examples/next-ssr/src/server/error-summary.ts +37 -0
- package/examples/next-ssr/src/server/parse-owner.test.ts +39 -0
- package/examples/next-ssr/src/server/parse-owner.ts +34 -0
- package/examples/next-ssr/src/server/prefetch-ledgers.test.ts +137 -0
- package/examples/next-ssr/src/server/prefetch-ledgers.ts +70 -0
- package/examples/next-ssr/src/server/read-balances.test.ts +103 -0
- package/examples/next-ssr/src/server/read-balances.ts +78 -0
- package/examples/next-ssr/src/server/request-client.rsc.test.tsx +110 -0
- package/examples/next-ssr/src/server/request-client.ts +24 -0
- package/examples/next-ssr/src/testing/mock-ledgers.ts +115 -0
- package/examples/next-ssr/src/testing/react-server-dom-turbopack.d.ts +15 -0
- package/examples/next-ssr/src/testing/setup.ts +10 -0
- package/examples/next-ssr/tsconfig.json +31 -0
- package/examples/next-ssr/vitest.config.ts +59 -0
- package/examples/node-agent-tool/.stackblitzrc +4 -0
- package/examples/node-agent-tool/README.md +165 -0
- package/examples/node-agent-tool/icp.yaml +11 -0
- package/examples/node-agent-tool/icrc1.did +88 -0
- package/examples/node-agent-tool/package.json +32 -0
- package/examples/node-agent-tool/src/canisters/icrc1.envelope.json +840 -0
- package/examples/node-agent-tool/src/canisters/icrc1.ts +78 -0
- package/examples/node-agent-tool/src/cli.test.ts +64 -0
- package/examples/node-agent-tool/src/cli.ts +23 -0
- package/examples/node-agent-tool/src/command-line.ts +159 -0
- package/examples/node-agent-tool/src/commands/balance.ts +73 -0
- package/examples/node-agent-tool/src/commands/demo.test.ts +51 -0
- package/examples/node-agent-tool/src/commands/demo.ts +359 -0
- package/examples/node-agent-tool/src/commands/info.ts +69 -0
- package/examples/node-agent-tool/src/commands/reads.test.ts +133 -0
- package/examples/node-agent-tool/src/commands/resend.test.ts +363 -0
- package/examples/node-agent-tool/src/commands/transfer.test.ts +313 -0
- package/examples/node-agent-tool/src/commands/transfer.ts +415 -0
- package/examples/node-agent-tool/src/commands/watch.test.ts +159 -0
- package/examples/node-agent-tool/src/commands/watch.ts +135 -0
- package/examples/node-agent-tool/src/commands/whoami.ts +36 -0
- package/examples/node-agent-tool/src/context.ts +20 -0
- package/examples/node-agent-tool/src/dispatch.ts +70 -0
- package/examples/node-agent-tool/src/failure.test.ts +59 -0
- package/examples/node-agent-tool/src/failure.ts +176 -0
- package/examples/node-agent-tool/src/identity.test.ts +242 -0
- package/examples/node-agent-tool/src/identity.ts +228 -0
- package/examples/node-agent-tool/src/input.ts +110 -0
- package/examples/node-agent-tool/src/ledgers.test.ts +74 -0
- package/examples/node-agent-tool/src/ledgers.ts +62 -0
- package/examples/node-agent-tool/src/mock-ledger.ts +211 -0
- package/examples/node-agent-tool/src/network.test.ts +128 -0
- package/examples/node-agent-tool/src/network.ts +101 -0
- package/examples/node-agent-tool/src/output.test.ts +208 -0
- package/examples/node-agent-tool/src/output.ts +163 -0
- package/examples/node-agent-tool/src/run.ts +73 -0
- package/examples/node-agent-tool/src/test-kit.ts +167 -0
- package/examples/node-agent-tool/tsconfig.json +18 -0
- package/examples/node-agent-tool/vitest.config.ts +8 -0
- package/examples/vite-wallet/.stackblitzrc +4 -0
- package/examples/vite-wallet/Cargo.lock +646 -0
- package/examples/vite-wallet/Cargo.toml +5 -0
- package/examples/vite-wallet/README.md +107 -0
- package/examples/vite-wallet/backend/Cargo.toml +12 -0
- package/examples/vite-wallet/backend/backend.did +37 -0
- package/examples/vite-wallet/backend/src/lib.rs +133 -0
- package/examples/vite-wallet/icp.yaml +44 -0
- package/examples/vite-wallet/index.html +13 -0
- package/examples/vite-wallet/ledger.did +54 -0
- package/examples/vite-wallet/package.json +46 -0
- package/examples/vite-wallet/public/.ic-assets.json5 +26 -0
- package/examples/vite-wallet/scripts/faucet-args.test.ts +30 -0
- package/examples/vite-wallet/scripts/faucet-args.ts +41 -0
- package/examples/vite-wallet/scripts/faucet.ts +41 -0
- package/examples/vite-wallet/src/AddressBook.test.tsx +191 -0
- package/examples/vite-wallet/src/AddressBook.tsx +147 -0
- package/examples/vite-wallet/src/App.tsx +53 -0
- package/examples/vite-wallet/src/Balance.test.tsx +57 -0
- package/examples/vite-wallet/src/Balance.tsx +58 -0
- package/examples/vite-wallet/src/EnvironmentPanel.test.tsx +83 -0
- package/examples/vite-wallet/src/EnvironmentPanel.tsx +103 -0
- package/examples/vite-wallet/src/ErrorNote.tsx +70 -0
- package/examples/vite-wallet/src/Profile.test.tsx +145 -0
- package/examples/vite-wallet/src/Profile.tsx +92 -0
- package/examples/vite-wallet/src/SendIcp.test.tsx +231 -0
- package/examples/vite-wallet/src/SendIcp.tsx +244 -0
- package/examples/vite-wallet/src/SendToContact.test.tsx +113 -0
- package/examples/vite-wallet/src/SendToContact.tsx +102 -0
- package/examples/vite-wallet/src/SignIn.test.tsx +106 -0
- package/examples/vite-wallet/src/SignIn.tsx +120 -0
- package/examples/vite-wallet/src/Wallet.test.tsx +89 -0
- package/examples/vite-wallet/src/account-switch.test.tsx +108 -0
- package/examples/vite-wallet/src/auth/dev-accounts.test.ts +113 -0
- package/examples/vite-wallet/src/auth/dev-accounts.ts +216 -0
- package/examples/vite-wallet/src/auth/local-page.test.ts +28 -0
- package/examples/vite-wallet/src/auth/local-page.ts +20 -0
- package/examples/vite-wallet/src/auth/wallet-auth.test.ts +159 -0
- package/examples/vite-wallet/src/auth/wallet-auth.ts +131 -0
- package/examples/vite-wallet/src/canisters/backend.envelope.json +275 -0
- package/examples/vite-wallet/src/canisters/backend.ts +58 -0
- package/examples/vite-wallet/src/canisters/ledger.envelope.json +451 -0
- package/examples/vite-wallet/src/canisters/ledger.ts +56 -0
- package/examples/vite-wallet/src/client.ts +45 -0
- package/examples/vite-wallet/src/main.tsx +18 -0
- package/examples/vite-wallet/src/optimistic-contacts.ts +113 -0
- package/examples/vite-wallet/src/refusal.ts +17 -0
- package/examples/vite-wallet/src/styles.css +282 -0
- package/examples/vite-wallet/src/test/test-wallet.tsx +322 -0
- package/examples/vite-wallet/src/token.ts +50 -0
- package/examples/vite-wallet/src/transfer.test.ts +178 -0
- package/examples/vite-wallet/src/transfer.ts +110 -0
- package/examples/vite-wallet/src/use-canisters.ts +49 -0
- package/examples/vite-wallet/tsconfig.json +19 -0
- package/examples/vite-wallet/vite.config.ts +47 -0
- package/examples/vite-wallet/vitest.config.ts +17 -0
- package/package.json +9 -4
- package/packages/core/.size-limit.js +47 -0
- package/packages/core/LICENSE +21 -0
- package/packages/core/README.md +84 -0
- package/packages/core/llms.txt +610 -0
- package/packages/core/package.json +89 -0
- package/packages/core/src/call.ts +961 -0
- package/packages/core/src/canister.ts +259 -0
- package/packages/core/src/client.ts +2061 -0
- package/packages/core/src/errors.ts +1079 -0
- package/packages/core/src/hydration.ts +239 -0
- package/packages/core/src/index.ts +23 -0
- package/packages/core/src/keys.ts +108 -0
- package/packages/core/src/management.ts +138 -0
- package/packages/core/src/network.ts +1020 -0
- package/packages/core/src/options.ts +1000 -0
- package/packages/core/src/runtime.ts +50 -0
- package/packages/core/src/testing/fake-replica.ts +1166 -0
- package/packages/core/src/testing/index.ts +16 -0
- package/packages/core/src/testing/test-auth.ts +340 -0
- package/packages/core/src/testing/test-client.ts +559 -0
- package/packages/core/src/types.ts +541 -0
- package/packages/core/src/units.ts +299 -0
- package/packages/core/src/version.ts +4 -0
- package/packages/core/tests/canister-helpers.ts +187 -0
- package/packages/core/tests/canister-id.test.ts +158 -0
- package/packages/core/tests/canister-unwrap.test.ts +94 -0
- package/packages/core/tests/canister.test-d.ts +406 -0
- package/packages/core/tests/canister.test.ts +1921 -0
- package/packages/core/tests/client-account-change.test.ts +131 -0
- package/packages/core/tests/client-agents.test.ts +402 -0
- package/packages/core/tests/client-auth-network.test.ts +719 -0
- package/packages/core/tests/client-disposed.test.ts +403 -0
- package/packages/core/tests/client-helpers.ts +136 -0
- package/packages/core/tests/client-hydration.test.ts +166 -0
- package/packages/core/tests/client-pinned.test.ts +626 -0
- package/packages/core/tests/client-session.test.ts +348 -0
- package/packages/core/tests/client.test-d.ts +181 -0
- package/packages/core/tests/client.test.ts +1162 -0
- package/packages/core/tests/encode.test.ts +171 -0
- package/packages/core/tests/env-canister-id.test.ts +666 -0
- package/packages/core/tests/env-cookie-copies.test.ts +182 -0
- package/packages/core/tests/error-guard.test.ts +222 -0
- package/packages/core/tests/errors.test-d.ts +280 -0
- package/packages/core/tests/errors.test.ts +1359 -0
- package/packages/core/tests/fixtures/README.md +28 -0
- package/packages/core/tests/fixtures/accounts.did +21 -0
- package/packages/core/tests/fixtures/accounts.envelope.json +367 -0
- package/packages/core/tests/fixtures/accounts.ts +26 -0
- package/packages/core/tests/fixtures/archive.did +31 -0
- package/packages/core/tests/fixtures/archive.envelope.json +259 -0
- package/packages/core/tests/fixtures/archive.ts +55 -0
- package/packages/core/tests/fixtures/icrc1.did +88 -0
- package/packages/core/tests/fixtures/icrc1.envelope.json +840 -0
- package/packages/core/tests/fixtures/icrc1.ts +78 -0
- package/packages/core/tests/fixtures/management.did +724 -0
- package/packages/core/tests/fixtures/management.envelope.json +4455 -0
- package/packages/core/tests/fixtures/management.ts +486 -0
- package/packages/core/tests/fixtures/shapes.did +33 -0
- package/packages/core/tests/fixtures/shapes.envelope.json +440 -0
- package/packages/core/tests/fixtures/shapes.ts +56 -0
- package/packages/core/tests/fixtures/skippable.did +15 -0
- package/packages/core/tests/fixtures/skippable.envelope.json +182 -0
- package/packages/core/tests/fixtures/skippable.ts +33 -0
- package/packages/core/tests/func.test.ts +154 -0
- package/packages/core/tests/identity-attributes.test.ts +214 -0
- package/packages/core/tests/keys.test.ts +289 -0
- package/packages/core/tests/management.test.ts +206 -0
- package/packages/core/tests/network-helpers.ts +121 -0
- package/packages/core/tests/network.test-d.ts +78 -0
- package/packages/core/tests/network.test.ts +1051 -0
- package/packages/core/tests/options.test.ts +1594 -0
- package/packages/core/tests/redirect-sign-in.test.ts +393 -0
- package/packages/core/tests/resend.test-d.ts +81 -0
- package/packages/core/tests/resend.test.ts +723 -0
- package/packages/core/tests/skip.test-d.ts +125 -0
- package/packages/core/tests/testing-entry.test.ts +73 -0
- package/packages/core/tests/testing-fake-replica.test.ts +1242 -0
- package/packages/core/tests/testing-test-auth.test-d.ts +84 -0
- package/packages/core/tests/testing-test-auth.test.ts +483 -0
- package/packages/core/tests/testing-test-client.test-d.ts +184 -0
- package/packages/core/tests/testing-test-client.test.ts +1272 -0
- package/packages/core/tests/time-realm.test.ts +63 -0
- package/packages/core/tests/time.test.ts +238 -0
- package/packages/core/tests/traps/README.md +39 -0
- package/packages/core/tests/traps/anonymous-write.test.ts +145 -0
- package/packages/core/tests/traps/classification-table.test.ts +256 -0
- package/packages/core/tests/traps/err-arm.test.ts +144 -0
- package/packages/core/tests/traps/fetch-spy.ts +39 -0
- package/packages/core/tests/traps/invalidation-after-write.test.ts +178 -0
- package/packages/core/tests/traps/ledger.ts +248 -0
- package/packages/core/tests/traps/root-key-off-local.test.ts +130 -0
- package/packages/core/tests/traps/stale-data-across-users.test.ts +173 -0
- package/packages/core/tests/traps/unresolved-name.test.ts +155 -0
- package/packages/core/tests/traps/update-as-query.test.ts +244 -0
- package/packages/core/tests/traps/update-not-resent.test.ts +126 -0
- package/packages/core/tests/traps/update-resent-when-never-delivered.test.ts +159 -0
- package/packages/core/tests/traps.test-d.ts +476 -0
- package/packages/core/tests/units.test-d.ts +118 -0
- package/packages/core/tests/units.test.ts +634 -0
- package/packages/core/tsconfig.json +19 -0
- package/packages/core/tsconfig.typecheck.json +16 -0
- package/packages/core/vitest.config.ts +13 -0
- package/packages/mcp/LICENSE +21 -0
- package/packages/mcp/README.md +189 -0
- package/packages/mcp/package.json +62 -0
- package/packages/mcp/src/candid/candid-text.test.ts +455 -0
- package/packages/mcp/src/candid/candid-text.ts +501 -0
- package/packages/mcp/src/candid/contract.test.ts +398 -0
- package/packages/mcp/src/candid/formats.ts +155 -0
- package/packages/mcp/src/candid/hex.ts +29 -0
- package/packages/mcp/src/candid/json-schema.test.ts +758 -0
- package/packages/mcp/src/candid/json-schema.ts +454 -0
- package/packages/mcp/src/candid/json.test.ts +1207 -0
- package/packages/mcp/src/candid/json.ts +1053 -0
- package/packages/mcp/src/candid/schema-walk.ts +189 -0
- package/packages/mcp/src/candid/type-text.test.ts +179 -0
- package/packages/mcp/src/candid/type-text.ts +238 -0
- package/packages/mcp/src/cli.ts +134 -0
- package/packages/mcp/src/identity.ts +188 -0
- package/packages/mcp/src/interface/cache.test.ts +48 -0
- package/packages/mcp/src/interface/cache.ts +68 -0
- package/packages/mcp/src/interface/cli-cache.test.ts +150 -0
- package/packages/mcp/src/interface/cli-cache.ts +122 -0
- package/packages/mcp/src/interface/compile-worker.test.ts +246 -0
- package/packages/mcp/src/interface/compile-worker.ts +290 -0
- package/packages/mcp/src/interface/compile.test.ts +155 -0
- package/packages/mcp/src/interface/compile.ts +281 -0
- package/packages/mcp/src/interface/docs.test.ts +105 -0
- package/packages/mcp/src/interface/docs.ts +86 -0
- package/packages/mcp/src/interface/fixtures/icrc1.did +88 -0
- package/packages/mcp/src/interface/hex.ts +8 -0
- package/packages/mcp/src/interface/ids.test.ts +71 -0
- package/packages/mcp/src/interface/ids.ts +87 -0
- package/packages/mcp/src/interface/loader.test.ts +804 -0
- package/packages/mcp/src/interface/loader.ts +519 -0
- package/packages/mcp/src/interface/read-candid.test.ts +300 -0
- package/packages/mcp/src/interface/read-candid.ts +259 -0
- package/packages/mcp/src/interface/types.ts +113 -0
- package/packages/mcp/src/network.ts +122 -0
- package/packages/mcp/src/options.ts +149 -0
- package/packages/mcp/src/server/approval.ts +159 -0
- package/packages/mcp/src/server/naming.ts +43 -0
- package/packages/mcp/src/server/results.ts +102 -0
- package/packages/mcp/src/server/server.ts +797 -0
- package/packages/mcp/src/server/tools.ts +116 -0
- package/packages/mcp/src/usage.ts +40 -0
- package/packages/mcp/tests/approval.test.ts +60 -0
- package/packages/mcp/tests/identity.test.ts +234 -0
- package/packages/mcp/tests/naming.test.ts +62 -0
- package/packages/mcp/tests/options.test.ts +140 -0
- package/packages/mcp/tests/server.test.ts +997 -0
- package/packages/mcp/tsconfig.json +19 -0
- package/packages/mcp/tsconfig.typecheck.json +10 -0
- package/packages/mcp/vitest.config.ts +10 -0
- package/packages/react/LICENSE +21 -0
- package/packages/react/README.md +328 -0
- package/packages/react/llms.txt +95 -0
- package/packages/react/package.json +95 -0
- package/packages/react/src/index.tsx +678 -0
- package/packages/react/tests/abandoned-render.test.tsx +816 -0
- package/packages/react/tests/auth.test.tsx +315 -0
- package/packages/react/tests/caller-keys.test.tsx +2334 -0
- package/packages/react/tests/client-time.test.ts +40 -0
- package/packages/react/tests/entry.test.ts +52 -0
- package/packages/react/tests/helpers.tsx +291 -0
- package/packages/react/tests/hydration.test.tsx +262 -0
- package/packages/react/tests/ownership.test.tsx +260 -0
- package/packages/react/tests/provider.server.test.tsx +169 -0
- package/packages/react/tests/query-client.test.tsx +107 -0
- package/packages/react/tests/strict-mode.test.tsx +288 -0
- package/packages/react/tests/suspense.test-d.tsx +357 -0
- package/packages/react/tests/two-query-cores.test.tsx +135 -0
- package/packages/react/tests/types.test-d.tsx +63 -0
- package/packages/react/tsconfig.json +23 -0
- package/packages/react/tsconfig.test.json +8 -0
- package/packages/react/tsconfig.typecheck.json +16 -0
- package/packages/react/vitest.config.ts +39 -0
- package/packages/vite-plugin/LICENSE +21 -0
- package/packages/vite-plugin/README.md +532 -0
- package/packages/vite-plugin/package.json +76 -0
- package/packages/vite-plugin/src/describe-value.test.ts +43 -0
- package/packages/vite-plugin/src/describe-value.ts +167 -0
- package/packages/vite-plugin/src/dev-environment.test.ts +747 -0
- package/packages/vite-plugin/src/dev-environment.ts +510 -0
- package/packages/vite-plugin/src/env.ts +431 -0
- package/packages/vite-plugin/src/fetch.ts +348 -0
- package/packages/vite-plugin/src/file-identity.ts +106 -0
- package/packages/vite-plugin/src/generate.ts +691 -0
- package/packages/vite-plugin/src/index.test.ts +1243 -0
- package/packages/vite-plugin/src/index.ts +2565 -0
- package/packages/vite-plugin/src/interface.ts +339 -0
- package/packages/vite-plugin/src/local-host.ts +34 -0
- package/packages/vite-plugin/src/options.ts +641 -0
- package/packages/vite-plugin/src/principal-text.test.ts +87 -0
- package/packages/vite-plugin/src/principal-text.ts +98 -0
- package/packages/vite-plugin/tests/close.test.ts +141 -0
- package/packages/vite-plugin/tests/environment-mode.test.ts +136 -0
- package/packages/vite-plugin/tests/fake-ic.ts +214 -0
- package/packages/vite-plugin/tests/fetch-sdk.test.ts +27 -0
- package/packages/vite-plugin/tests/fetch.test.ts +1196 -0
- package/packages/vite-plugin/tests/fixtures/fake-cli/bin.js +90 -0
- package/packages/vite-plugin/tests/fixtures/fake-cli/package.json +8 -0
- package/packages/vite-plugin/tests/fixtures/icrc1.did +88 -0
- package/packages/vite-plugin/tests/generation.test.ts +1036 -0
- package/packages/vite-plugin/tests/icp-command.test.ts +194 -0
- package/packages/vite-plugin/tests/icp-timeout.test.ts +83 -0
- package/packages/vite-plugin/tests/no-process-exit.test.ts +83 -0
- package/packages/vite-plugin/tests/on-generated.test.ts +323 -0
- package/packages/vite-plugin/tests/output-collision.test.ts +329 -0
- package/packages/vite-plugin/tests/package.test.ts +62 -0
- package/packages/vite-plugin/tests/project.test.ts +2993 -0
- package/packages/vite-plugin/tests/support.ts +339 -0
- package/packages/vite-plugin/tests/timeout.test.ts +107 -0
- package/packages/vite-plugin/tsconfig.json +23 -0
- package/packages/vite-plugin/tsconfig.typecheck.json +16 -0
- package/packages/vite-plugin/vitest.config.ts +9 -0
- package/pnpm-workspace.yaml +23 -0
- package/scripts/ai-context-files.js +72 -0
- package/scripts/assemble-docs-site.mjs +485 -0
- package/scripts/assemble-docs-site.test.mjs +568 -0
- package/scripts/build-examples.js +58 -0
- package/scripts/check-ai-context.js +963 -0
- package/scripts/check-ai-context.test.mjs +811 -0
- package/scripts/check-exports.mjs +767 -0
- package/scripts/check-exports.test.mjs +1136 -0
- package/scripts/check-snippets/ambient.d.ts +428 -0
- package/scripts/check-snippets/app/generated/backend.did +7 -0
- package/scripts/check-snippets/app/generated/backend.ts +15 -0
- package/scripts/check-snippets/app/generated/icrc1.did +88 -0
- package/scripts/check-snippets/app/generated/icrc1.ts +78 -0
- package/scripts/check-snippets/app/globals.ts +26 -0
- package/scripts/check-snippets/docs/guides/App.tsx +21 -0
- package/scripts/check-snippets/docs/guides/app/providers.tsx +23 -0
- package/scripts/check-snippets/docs/guides/auth-client.ts +47 -0
- package/scripts/check-snippets/docs/guides/canisters/backend.ts +3 -0
- package/scripts/check-snippets/docs/guides/canisters/icrc1.ts +3 -0
- package/scripts/check-snippets/docs/guides/components/LedgerCard.tsx +26 -0
- package/scripts/check-snippets/docs/guides/components/shell.tsx +11 -0
- package/scripts/check-snippets/docs/guides/components/sign-in-page.tsx +29 -0
- package/scripts/check-snippets/docs/guides/components/slow-section.tsx +5 -0
- package/scripts/check-snippets/docs/guides/generated/accounts.ts +95 -0
- package/scripts/check-snippets/docs/guides/generated/ckbtc_minter.ts +40 -0
- package/scripts/check-snippets/docs/guides/generated/icp_ledger.ts +267 -0
- package/scripts/check-snippets/docs/guides/ledger.ts +10 -0
- package/scripts/check-snippets/docs/guides/server/request-client.ts +8 -0
- package/scripts/check-snippets.mjs +993 -0
- package/scripts/check-snippets.test.mjs +338 -0
- package/scripts/check-stack.mjs +501 -0
- package/scripts/check-stack.test.mjs +800 -0
- package/scripts/clean-node-modules.js +67 -0
- package/scripts/example-projects.js +58 -0
- package/scripts/export-budget.mjs +145 -0
- package/scripts/faults.json +6749 -0
- package/scripts/lib/fault-workspace.mjs +210 -0
- package/scripts/lib/io.mjs +29 -0
- package/scripts/lib/io.test.mjs +38 -0
- package/scripts/lib/markdown-fences.mjs +56 -0
- package/scripts/lib/markdown-fences.test.mjs +84 -0
- package/scripts/lib/package-exports.mjs +54 -0
- package/scripts/lib/package-exports.test.mjs +66 -0
- package/scripts/lib/release-pr-steps.mjs +47 -0
- package/scripts/release-tag.mjs +95 -0
- package/scripts/release-tag.test.mjs +278 -0
- package/scripts/release-workflow.test.mjs +98 -0
- package/scripts/release.js +167 -0
- package/scripts/release.test.mjs +347 -0
- package/scripts/removed-v3-names.js +125 -0
- package/scripts/size-app/.size-limit.js +90 -0
- package/scripts/size-app/core.js +3 -0
- package/scripts/size-app/package.json +24 -0
- package/scripts/size-app/react.js +4 -0
- package/scripts/size-app.test.mjs +73 -0
- package/scripts/sync-ai-context-versions.js +102 -0
- package/scripts/sync-example-versions.js +151 -0
- package/scripts/test-examples-published.mjs +1585 -0
- package/scripts/test-examples-published.test.mjs +1586 -0
- package/scripts/traps/any-method-vars-not-a-list.json +5 -0
- package/scripts/traps/canister-method-unknown.json +5 -0
- package/scripts/traps/client-says-who-calls-once.json +5 -0
- package/scripts/traps/client-says-who-calls.json +5 -0
- package/scripts/traps/err-only-on-canister-err.json +14 -0
- package/scripts/traps/format-units-refuses-missing-value.json +5 -0
- package/scripts/traps/format-units-refuses-number.json +5 -0
- package/scripts/traps/format-units-unknown-option.json +5 -0
- package/scripts/traps/guard-err-is-the-methods.json +5 -0
- package/scripts/traps/guard-false-keeps-every-kind.json +5 -0
- package/scripts/traps/internals-not-exported.json +9 -0
- package/scripts/traps/network-refuses-unknown-name.json +5 -0
- package/scripts/traps/never-err-has-no-type.json +5 -0
- package/scripts/traps/options-method-unknown.json +5 -0
- package/scripts/traps/options-vars-wrong-type.json +5 -0
- package/scripts/traps/parse-units-refuses-number.json +5 -0
- package/scripts/traps/parse-units-unknown-option.json +5 -0
- package/scripts/traps/principal-is-not-plain-text.json +14 -0
- package/scripts/traps/query-options-refuses-oneway.json +5 -0
- package/scripts/traps/query-options-refuses-update.json +5 -0
- package/scripts/traps/refuse-next-unknown-option.json +5 -0
- package/scripts/traps/resend-key-reads-the-methods-arg.json +5 -0
- package/scripts/traps/resend-states-its-dedupe-key.json +5 -0
- package/scripts/traps/suspense-refuses-argument-skip.json +5 -0
- package/scripts/traps/suspense-refuses-skippable-read.json +5 -0
- package/scripts/traps/suspense-refuses-vars-skip-fits.json +5 -0
- package/scripts/traps/test-handler-method-unknown.json +5 -0
- package/scripts/traps/test-handler-nat-is-bigint.json +5 -0
- package/scripts/traps/test-handler-takes-the-domain-value.json +5 -0
- package/scripts/traps/vars-of-two-arguments-are-the-tuple.json +5 -0
- package/scripts/typecheck-examples.js +122 -0
- package/scripts/verify-faults.mjs +375 -0
- package/scripts/verify-faults.test.mjs +402 -0
- package/scripts/verify-package-artifacts.mjs +590 -0
- package/scripts/verify-peer-floors.js +399 -0
- package/scripts/verify-peer-floors.test.mjs +422 -0
- package/scripts/verify-test-fails-rules.mjs +104 -0
- package/scripts/verify-test-fails-rules.test.mjs +215 -0
- package/scripts/verify-test-fails.js +371 -0
- package/scripts/verify-traps.mjs +505 -0
- package/scripts/verify-traps.test.mjs +521 -0
- package/scripts/verify-typescript-floor.js +239 -0
- package/skill-packages/ic-reactor/SKILL.md +103 -0
- package/stack.json +8 -0
- package/tsconfig.base.json +23 -0
- package/tsconfig.json +8 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "thin",
|
|
3
|
+
"library": "Available library: `@candid-core/schema` 0.2.0, with the module `candid-core-cli gen` generated from the ledger's `.did` in `src/generated/icrc1.ts`; use it with `@icp-sdk/core`, `@icp-sdk/auth` and TanStack Query (`@tanstack/react-query`, `@tanstack/query-core`) directly — no other framework. Its documentation is in `docs/`; read it before you start.",
|
|
4
|
+
"docs": [
|
|
5
|
+
"docs/candid-core-schema.README.md",
|
|
6
|
+
"docs/candid-core-cli.README.md"
|
|
7
|
+
]
|
|
8
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# @candid-core/cli
|
|
2
|
+
|
|
3
|
+
Candid `.did` interfaces to [`@candid-core/schema`] runtimes, with no Rust
|
|
4
|
+
toolchain: the [candid-core] compiler and its TypeScript generator compiled
|
|
5
|
+
to WebAssembly, usable as a Node CLI and as a browser library. Data in, data
|
|
6
|
+
out — no eval, no network, and nothing generated is ever executed.
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
npx @candid-core/cli gen ./service.did -o ./generated
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
That emits three things:
|
|
13
|
+
|
|
14
|
+
- **`service.ts`** — the generated `@candid-core/schema` module: one reviewed
|
|
15
|
+
type alias and one invariantly-annotated schema builder per declaration,
|
|
16
|
+
byte-identical to what the Rust-native generator emits;
|
|
17
|
+
- **`service.envelope.json`** — the one-document `ContractEnvelope`: the
|
|
18
|
+
canonical Contract plus its field-name table under the
|
|
19
|
+
`org.candid-core.field-names/v1` extension, byte-identical to
|
|
20
|
+
`candid-core compile ./service.did --envelope`, ready to hand whole to
|
|
21
|
+
`schemaFromContract`;
|
|
22
|
+
- the printed **content-addressed identities** (`contract`, and `interface`
|
|
23
|
+
when the service has an actor) — the same
|
|
24
|
+
`candid-core:contract:v1:sha256:…` addresses the Rust toolchain computes,
|
|
25
|
+
usable to pin an interface and detect drift.
|
|
26
|
+
|
|
27
|
+
Imports are resolved from the entry file's directory: every `.did` beneath
|
|
28
|
+
it is handed to the compiler as an in-memory bundle, so relative imports
|
|
29
|
+
work without any filesystem access from the wasm side. Every generation runs
|
|
30
|
+
twice and the tool refuses to write on any byte mismatch — determinism is
|
|
31
|
+
enforced, not assumed.
|
|
32
|
+
|
|
33
|
+
## The library
|
|
34
|
+
|
|
35
|
+
```js
|
|
36
|
+
import { didToContract, didToModule } from "@candid-core/cli";
|
|
37
|
+
|
|
38
|
+
const envelope = await didToContract("service : { ping : () -> () };");
|
|
39
|
+
// → the ContractEnvelope document ("contract" in envelope), or
|
|
40
|
+
// { ok: false, diagnostics } with the compiler's diagnostics verbatim.
|
|
41
|
+
|
|
42
|
+
const generated = await didToModule({
|
|
43
|
+
entry: "main.did",
|
|
44
|
+
files: {
|
|
45
|
+
"main.did": 'import "types.did";\nservice : { get : () -> (Item) query };',
|
|
46
|
+
"types.did": "type Item = record { id : nat };",
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
// → { ok: true, module } with the generated TypeScript text, or
|
|
50
|
+
// { ok: false, diagnostics }.
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Both functions accept either a string of Candid text or
|
|
54
|
+
`{ entry, files: { name: text } }` for a multi-file bundle. In a browser the
|
|
55
|
+
wasm is fetched relative to the module automatically; call
|
|
56
|
+
`init(bytesOrUrl)` first to supply it yourself. Feed `didToContract`'s
|
|
57
|
+
result straight to `schemaFromContract` from [`@candid-core/schema`] — the
|
|
58
|
+
envelope carries the field names, so one document is the whole hand-off:
|
|
59
|
+
|
|
60
|
+
```js
|
|
61
|
+
import { didToContract } from "@candid-core/cli";
|
|
62
|
+
import { schemaFromContract } from "@candid-core/schema/contract";
|
|
63
|
+
|
|
64
|
+
const built = schemaFromContract(await didToContract(didText));
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Failures
|
|
68
|
+
|
|
69
|
+
Nothing throws for data errors and nothing half-succeeds: a compile failure
|
|
70
|
+
is `{ ok: false, diagnostics }` with [candid-core]'s structured diagnostics
|
|
71
|
+
passed through verbatim (stable codes such as `did_parse_error`,
|
|
72
|
+
`did_file_read_error` analogues, resource bounds included), a generator
|
|
73
|
+
refusal is one diagnostic under the stable code `ts_generation_refused` with
|
|
74
|
+
the generator's fail-closed message verbatim, and a malformed request is
|
|
75
|
+
`invalid_request`. The CLI prints the failing document on stdout and exits 1;
|
|
76
|
+
usage errors exit 64 with usage on stderr, in the native binary's
|
|
77
|
+
convention.
|
|
78
|
+
|
|
79
|
+
## Version pairing
|
|
80
|
+
|
|
81
|
+
This package embeds exact revisions, recorded per release in
|
|
82
|
+
[CHANGELOG.md](./CHANGELOG.md): the `candid-core` compiler crate and the
|
|
83
|
+
`candid-core-ts` generator (unpublishable on crates.io by design; embedding
|
|
84
|
+
it in this wasm artifact is an owner decision recorded on the repository's
|
|
85
|
+
issue tracker) are built from one repository commit, and the parity gates
|
|
86
|
+
prove the emitted module and contract are byte-identical to that commit's
|
|
87
|
+
Rust-native outputs over the golden fixtures.
|
|
88
|
+
|
|
89
|
+
[candid-core]: https://github.com/b3hr4d/candid-core
|
|
90
|
+
[`@candid-core/schema`]: https://www.npmjs.com/package/@candid-core/schema
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
# @candid-core/schema
|
|
2
|
+
|
|
3
|
+
A Zod-style schema runtime for [Candid], driven by [candid-core]'s canonical
|
|
4
|
+
Contract model: schema builders with static inference, structural validation,
|
|
5
|
+
a TypeScript-native Candid binary codec, typed actors over a transport-only
|
|
6
|
+
agent, and UI-agnostic form metadata.
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
npm install @candid-core/schema
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
That is the whole install. The `@icp-sdk/core` peer is needed only by the
|
|
13
|
+
[`./transport-icp`](#calling-a-canister) subpath, at runtime, for exactly
|
|
14
|
+
whoever imports it — every other module is self-contained, principal typing
|
|
15
|
+
included ([the decoded-value contract](#the-icp-sdk-peer) below).
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { c, type Infer } from "@candid-core/schema";
|
|
19
|
+
import { validate } from "@candid-core/schema/validate";
|
|
20
|
+
import { encode, decode } from "@candid-core/schema/codec";
|
|
21
|
+
|
|
22
|
+
const Account = c.record({ owner: c.principal, balance: c.nat });
|
|
23
|
+
type Account = Infer<typeof Account>; // { owner: PrincipalValue; balance: bigint }
|
|
24
|
+
|
|
25
|
+
const value: Account = { owner: { toText: () => "aaaaa-aa" }, balance: 5n };
|
|
26
|
+
|
|
27
|
+
validate(Account, value); // { ok: true } | { ok: false, issues }
|
|
28
|
+
const encoded = encode(Account, value); // { ok: true, bytes } | { ok: false, issues }
|
|
29
|
+
if (encoded.ok) {
|
|
30
|
+
decode(Account, encoded.bytes);
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Modules, each a subpath export:
|
|
35
|
+
|
|
36
|
+
- **`.`** — the schema core: the `c` builders, `Schema<in out T>` (deliberately
|
|
37
|
+
invariant), `Infer`, and the node interfaces walkers narrow on — plus
|
|
38
|
+
`resolveSchema` and `serviceMethods` for reading one back, since a schema
|
|
39
|
+
reached by name is a `rec` indirection and a service's methods are a table.
|
|
40
|
+
- **`./validate`** — bounded, fail-closed structural validation; never throws
|
|
41
|
+
on any value; issues carry stable codes and `$`-rooted paths — plus
|
|
42
|
+
`isResultSchema` and `unwrapResult`, the schema-directed read of the
|
|
43
|
+
`variant { ok; err }` convention [below](#unwrapping-okerr-results).
|
|
44
|
+
- **`./contract`** — build the same schemas at runtime from a canonical
|
|
45
|
+
Contract JSON document — or from a one-document `ContractEnvelope` carrying
|
|
46
|
+
its hash-enforced field-name table.
|
|
47
|
+
- **`./codec`** — the Candid binary wire format, schema-directed, with the
|
|
48
|
+
spec's coercion relation on decode and explicit resource budgets. Verified
|
|
49
|
+
bidirectionally against the reference implementation's vectors.
|
|
50
|
+
- **`./actor`** — `createActor`/`callFunc` over a two-method byte-pipe
|
|
51
|
+
`Transport`; the agent never sees a schema.
|
|
52
|
+
- **`./transport-icp`** — the compiled, tested `Transport` adapter over
|
|
53
|
+
`@icp-sdk/core`'s `HttpAgent` (peer `>= 6`; importing this subpath is what
|
|
54
|
+
makes the peer a runtime requirement).
|
|
55
|
+
- **`./forms`** — form-generation metadata: per-kind controls, constraints,
|
|
56
|
+
labels, lazy recursion, and validation-issue-to-form-node resolution.
|
|
57
|
+
- **`./labels`** — the Candid label hash and the `_N_` rendering convention.
|
|
58
|
+
|
|
59
|
+
## The icp-sdk peer
|
|
60
|
+
|
|
61
|
+
`@icp-sdk/core` is a peer only the [`./transport-icp`](#calling-a-canister)
|
|
62
|
+
subpath uses — at runtime, `>= 6`, for exactly whoever imports it. No other
|
|
63
|
+
shipped module imports the SDK at all, at runtime or in its declarations, so
|
|
64
|
+
every other subpath compiles and runs with no `@icp-sdk/core` installed —
|
|
65
|
+
under strict TypeScript with `skipLibCheck` off included. (Earlier releases
|
|
66
|
+
typed `c.principal` against the SDK's `Principal` class, which made the peer
|
|
67
|
+
a silent type-level requirement everywhere; the structural `PrincipalValue`
|
|
68
|
+
removed it.)
|
|
69
|
+
|
|
70
|
+
### Decoded principal values
|
|
71
|
+
|
|
72
|
+
`c.principal` types as `PrincipalValue` — `{ toText(): string }`, exported
|
|
73
|
+
from the root — which is the truth in both directions:
|
|
74
|
+
|
|
75
|
+
- **What you get.** The codec is self-contained and never constructs an SDK
|
|
76
|
+
class: a decoded principal carries exactly `toText()`. It is *not* a
|
|
77
|
+
`Principal` instance — `instanceof` is `false`, and class methods like
|
|
78
|
+
`.toUint8Array()` do not exist on it. Code that wants the class re-wraps:
|
|
79
|
+
`Principal.fromText(value.toText())`.
|
|
80
|
+
- **What you can give.** Validation and encoding are structural — any object
|
|
81
|
+
whose `toText()` returns canonical principal text — and the SDK class
|
|
82
|
+
satisfies that shape, so values built with `Principal.fromText(…)` encode
|
|
83
|
+
unchanged.
|
|
84
|
+
|
|
85
|
+
## From a `.did` file
|
|
86
|
+
|
|
87
|
+
There is no JavaScript-only path from Candid source to schemas yet — compiling
|
|
88
|
+
`.did` needs the Rust crate — but the route that exists today produces exactly
|
|
89
|
+
the schemas the generated modules carry, and it is two commands.
|
|
90
|
+
|
|
91
|
+
Install the compiler. `candid-core` is pre-1.0 with only prereleases on
|
|
92
|
+
crates.io, so the version has to be explicit: a bare `cargo install
|
|
93
|
+
candid-core` fails with `could not find candid-core in registry crates-io with
|
|
94
|
+
version *`.
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
cargo install candid-core --version 0.1.0-beta.3 --locked
|
|
98
|
+
candid-core compile ./service.did --envelope > ./service.json
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
`compile --envelope` prints one self-describing document: a `ContractEnvelope`
|
|
102
|
+
holding the canonical `contract` plus an `extensions` map whose
|
|
103
|
+
`org.candid-core.field-names/v1` entry carries the field-name table. A
|
|
104
|
+
semantic Contract stores authoritative field-label *ids*, not text, so names
|
|
105
|
+
travel side-band — and envelope extensions live outside the canonical
|
|
106
|
+
identities by design, so carrying them never moves a `contract_id`.
|
|
107
|
+
`schemaFromContract` consumes the document whole:
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
import { readFileSync } from "node:fs";
|
|
111
|
+
import { schemaFromContract } from "@candid-core/schema/contract";
|
|
112
|
+
|
|
113
|
+
const built = schemaFromContract(JSON.parse(readFileSync("./service.json", "utf8")));
|
|
114
|
+
if (!built.ok) {
|
|
115
|
+
throw new Error(JSON.stringify(built.issues));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
built.schemas.Account; // one Schema per declaration, in declaration order
|
|
119
|
+
built.actor; // the service schema, when the document has one
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
The two-file flow also works: plain `compile` (no `--envelope`) prints
|
|
123
|
+
`{ ok, contract, source_info }`, and the named `[container, id, name]` triples in
|
|
124
|
+
`source_info.field_labels` — entries whose `label.kind` is `"named"` — pass as
|
|
125
|
+
the `names` option alongside the bare `contract`:
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
import { schemaFromContract, type FieldNameEntry } from "@candid-core/schema/contract";
|
|
129
|
+
|
|
130
|
+
declare const compiled: { contract: unknown };
|
|
131
|
+
declare const names: FieldNameEntry[];
|
|
132
|
+
|
|
133
|
+
schemaFromContract(compiled.contract, { names });
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Both routes yield verdict-for-verdict identical schemas, and an explicit
|
|
137
|
+
`names` option always wins over envelope-carried names — the envelope's table
|
|
138
|
+
is then not consulted at all.
|
|
139
|
+
|
|
140
|
+
Positional and numeric labels carry no name and are skipped; those fields
|
|
141
|
+
render by the ecosystem's `_id_` convention, exactly as the generator renders
|
|
142
|
+
them. Every name — envelope-carried or caller-supplied alike — is
|
|
143
|
+
hash-enforced: it must be the Candid preimage of its id, so a table that lies
|
|
144
|
+
fails closed instead of quietly renaming a field. Passing no table at all is
|
|
145
|
+
legal and renders every field as `_id_`, which is also what
|
|
146
|
+
`compile --no-source-info` leaves you with.
|
|
147
|
+
|
|
148
|
+
## Calling a canister
|
|
149
|
+
|
|
150
|
+
`createActor` needs a `Transport`: two methods that move Candid bytes, nothing
|
|
151
|
+
more. Identity, ingress expiry, polling, certificate verification, and reject
|
|
152
|
+
classification all stay on the agent's side of that pipe, and the agent never
|
|
153
|
+
sees a schema. The `@icp-sdk/core` adapter ships compiled and tested as its
|
|
154
|
+
own subpath, `./transport-icp`:
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
import { c, type Infer } from "@candid-core/schema";
|
|
158
|
+
import { createActor } from "@candid-core/schema/actor";
|
|
159
|
+
import { httpTransport } from "@candid-core/schema/transport-icp";
|
|
160
|
+
|
|
161
|
+
const Tokens = c.record({ e8s: c.nat64 });
|
|
162
|
+
const Account = c.record({ owner: c.principal, subaccount: c.opt(c.vec(c.nat8)) });
|
|
163
|
+
|
|
164
|
+
const Ledger = c.service({
|
|
165
|
+
balance_of: c.func([Account], [Tokens], "query"),
|
|
166
|
+
transfer: c.func([Account, Tokens], [c.nat], "update"),
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
type Ledger = {
|
|
170
|
+
balance_of(account: Infer<typeof Account>): Promise<Infer<typeof Tokens>>;
|
|
171
|
+
transfer(to: Infer<typeof Account>, amount: Infer<typeof Tokens>): Promise<bigint>;
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export const ledger = createActor<Ledger>(
|
|
175
|
+
Ledger,
|
|
176
|
+
"ryjl3-tyaaa-aaaaa-aaaba-cai",
|
|
177
|
+
httpTransport({ host: "https://icp-api.io" }),
|
|
178
|
+
);
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Importing `./transport-icp` is what makes `@icp-sdk/core` a **runtime**
|
|
182
|
+
requirement, and the peer range `>= 6` is load-bearing: on v6 `agent.update`
|
|
183
|
+
submits, polls to completion, and verifies the certificate in one shot, which
|
|
184
|
+
is exactly what the adapter's `call` relies on — older majors resolved at
|
|
185
|
+
submission and need their own submit-and-poll adapter, deliberately not
|
|
186
|
+
written here. Consumers who never import this subpath need no `@icp-sdk/core`
|
|
187
|
+
at all — [the peer](#the-icp-sdk-peer) exists for exactly this module.
|
|
188
|
+
|
|
189
|
+
`httpTransport` exposes the two knobs a plain consumer needs — `host`, and
|
|
190
|
+
`rootKey` for local networks (omit it on mainnet). Everything beyond them —
|
|
191
|
+
identity, retries, ingress options — belongs to an agent you build yourself
|
|
192
|
+
and pass as `agent`, alone: configuring a supplied agent from the other
|
|
193
|
+
options would silently discard what it was built with, so the combination
|
|
194
|
+
throws `TypeError`. There is deliberately no logging hook; wrapping the
|
|
195
|
+
returned `Transport` composes cleanly.
|
|
196
|
+
|
|
197
|
+
The actor interface travels explicitly because `c.rec` erases method
|
|
198
|
+
structure from a schema's *type* — schemas carry values, not calls — so it
|
|
199
|
+
cannot be re-derived from `typeof`. Generated modules emit it as
|
|
200
|
+
`export type Actor = { … }`; hand-written it looks like the `Ledger` type
|
|
201
|
+
above.
|
|
202
|
+
|
|
203
|
+
A codec failure rejects the call promise with an `ActorError` carrying the
|
|
204
|
+
issues; transport failures propagate untouched, including the plain `Error`
|
|
205
|
+
the adapter throws for a rejected query — `` `${methodName} rejected
|
|
206
|
+
(${code}): ${message}` ``.
|
|
207
|
+
|
|
208
|
+
## Unwrapping ok/err results
|
|
209
|
+
|
|
210
|
+
`variant { ok : T; err : E }` is the universal canister result convention, and
|
|
211
|
+
the usual way to unwrap one generically is to probe the decoded *value* for
|
|
212
|
+
`ok`/`err` keys — a guess that misfires on any record legitimately carrying
|
|
213
|
+
those field names, and one that cannot type the error payload. Whether a reply
|
|
214
|
+
*is* a result, and what each arm carries, is a schema fact:
|
|
215
|
+
|
|
216
|
+
```ts
|
|
217
|
+
import { c, type Infer } from "@candid-core/schema";
|
|
218
|
+
import { isResultSchema, unwrapResult } from "@candid-core/schema/validate";
|
|
219
|
+
|
|
220
|
+
const TransferError = c.variant({
|
|
221
|
+
bad_fee: c.record({ expected_fee: c.nat }),
|
|
222
|
+
too_old: c.null,
|
|
223
|
+
});
|
|
224
|
+
const TransferResult = c.variant({ ok: c.nat, err: TransferError });
|
|
225
|
+
|
|
226
|
+
isResultSchema(TransferResult); // true
|
|
227
|
+
isResultSchema(c.record({ ok: c.bool, err: c.opt(c.text) })); // false: a record is not a variant
|
|
228
|
+
|
|
229
|
+
declare const reply: unknown; // whatever the call decoded to
|
|
230
|
+
|
|
231
|
+
const outcome = unwrapResult(TransferResult, reply);
|
|
232
|
+
if (outcome.issues) {
|
|
233
|
+
// Not a value of this schema at all: the issues `validate` would report.
|
|
234
|
+
throw new Error(outcome.issues[0].message);
|
|
235
|
+
} else if (outcome.ok) {
|
|
236
|
+
const blockIndex: bigint = outcome.value;
|
|
237
|
+
void blockIndex;
|
|
238
|
+
} else {
|
|
239
|
+
const failure: Infer<typeof TransferError> = outcome.error;
|
|
240
|
+
void failure;
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Both spellings are recognised, as *pairs*: `ok`/`err`, which Motoko's
|
|
245
|
+
`Result.Result` produces, and `Ok`/`Err`, which Rust's candid derive produces
|
|
246
|
+
— in either arm order, and with exactly those two arms. A variant that adds a
|
|
247
|
+
third arm is not a result, because mapping it onto two states would drop one.
|
|
248
|
+
A bare-tag arm (`variant { ok; err : text }`) unwraps to `null`, the single
|
|
249
|
+
value of the Candid `null` it declares.
|
|
250
|
+
|
|
251
|
+
An `err` arm is a value, not an exception: nothing throws for one, and a
|
|
252
|
+
malformed value comes back as `{ ok: false, issues }` rather than as an
|
|
253
|
+
exception either. A schema that is not a result variant *is* a programmer
|
|
254
|
+
error, and throws `TypeError`.
|
|
255
|
+
|
|
256
|
+
## Support matrix
|
|
257
|
+
|
|
258
|
+
Measured against the packed tarball — the artifact `npm pack` produces,
|
|
259
|
+
extracted and consumed as a dependency — with `@arethetypeswrong/cli` and
|
|
260
|
+
direct compiles, not inferred from the manifest.
|
|
261
|
+
|
|
262
|
+
| | |
|
|
263
|
+
| --- | --- |
|
|
264
|
+
| TypeScript | **≥ 5.0** |
|
|
265
|
+
| `moduleResolution` | `node16`, `nodenext`, `bundler` |
|
|
266
|
+
| Module format | **ESM only** — no CommonJS build ships |
|
|
267
|
+
| Node, from ESM | **≥ 16** for the seven peer-free subpaths (16.20, 18.20, 20.19, 22.12, 25.9 exercised) |
|
|
268
|
+
| Node, for `./transport-icp` | **≥ 20.19** — what the pinned `@icp-sdk/core` tree's own `engines` declare |
|
|
269
|
+
| Node, from CommonJS `require()` | **≥ 20.19 / ≥ 22.12**, else `await import()` |
|
|
270
|
+
| TypeScript, from a CommonJS project | **≥ 5.8 with `"module": "nodenext"`** |
|
|
271
|
+
|
|
272
|
+
**TypeScript 5.0** is a hard floor, and it is a *parse* error below it, not a
|
|
273
|
+
type error: `c.tuple` is declared with a `const` type parameter — the 5.0
|
|
274
|
+
feature that keeps a tuple's element types from widening — so 4.9 stops at
|
|
275
|
+
`error TS1139: Type parameter declaration expected.` in `dist/schema.d.ts`
|
|
276
|
+
before it type-checks anything.
|
|
277
|
+
|
|
278
|
+
**`node10` resolution cannot see this package at all.** There is no top-level
|
|
279
|
+
`main` or `types` field, only an `exports` map, so every import fails with
|
|
280
|
+
`TS2307` — TypeScript's own message tells you to move to `node16`, `nodenext`,
|
|
281
|
+
or `bundler`.
|
|
282
|
+
|
|
283
|
+
**Supporting ESM is not by itself enough for Node.** The build targets ES2020
|
|
284
|
+
and does not down-level, so optional chaining and nullish coalescing reach
|
|
285
|
+
`dist/` verbatim — they appear in six of the eight modules — and those are
|
|
286
|
+
V8 8.0 syntax, which no Node before 14 can parse. The floor above is the
|
|
287
|
+
oldest release this package is actually run on rather than the oldest that
|
|
288
|
+
might work: 16.20.2 is exercised and passes every peer-free subpath, and
|
|
289
|
+
nothing older is claimed. `./transport-icp` is the exception and has its own
|
|
290
|
+
row: it is the one subpath that loads `@icp-sdk/core`, whose pinned dependency
|
|
291
|
+
tree declares `node >= 20.19.0`, so the peer's floor governs there rather than
|
|
292
|
+
this package's syntax.
|
|
293
|
+
|
|
294
|
+
**From CommonJS**, the two floors are independent. At runtime, `require()` of
|
|
295
|
+
an ES module is what Node added in 20.19 and 22.12; below those it throws
|
|
296
|
+
`ERR_REQUIRE_ESM`, while `await import("@candid-core/schema")` succeeded on
|
|
297
|
+
every version tested. At the type level, a `"type": "commonjs"` project needs
|
|
298
|
+
TypeScript 5.8 *and* `"module": "nodenext"` — `"module": "node16"` is pinned
|
|
299
|
+
to Node 16 semantics and still refuses with `TS1479` on every compiler tested,
|
|
300
|
+
up to and including 7.0.
|
|
301
|
+
|
|
302
|
+
There is deliberately **no `engines` field**. Both floors are narrow — an
|
|
303
|
+
ES2020-capable Node for ESM, a `require(esm)`-capable one for CommonJS — and
|
|
304
|
+
enforcing either in install metadata would warn, or fail under
|
|
305
|
+
`engine-strict`, for consumers it does not apply to. They are documented here
|
|
306
|
+
instead.
|
|
307
|
+
|
|
308
|
+
## The domain shapes (a deliberate decision)
|
|
309
|
+
|
|
310
|
+
Types describe the modern domain, not the agent-js runtime shapes: `opt T` is
|
|
311
|
+
`T | null` (collapsing opts fail closed at generation), variants are
|
|
312
|
+
`{ tag, value }` discriminated unions, anonymous `vec nat8` is `Uint8Array`,
|
|
313
|
+
`nat`/`int`/64-bit integers are `bigint`, and principals are the structural
|
|
314
|
+
[`PrincipalValue`](#decoded-principal-values) the codec actually delivers.
|
|
315
|
+
Compatibility with agent-js value shapes is an explicit non-goal, recorded on
|
|
316
|
+
the project's issue tracker.
|
|
317
|
+
|
|
318
|
+
## Verification
|
|
319
|
+
|
|
320
|
+
Every release runs a packaged-consumer gate on the commit it publishes from,
|
|
321
|
+
before anything is uploaded: the tarball `npm pack` produces at that commit is
|
|
322
|
+
extracted into a clean project, compiled under strict TypeScript with
|
|
323
|
+
`skipLibCheck` off, and executed — root and every subpath export, a real
|
|
324
|
+
encode/validate round-trip. The publish step then builds and uploads from that
|
|
325
|
+
same commit. The TypeScript in this file
|
|
326
|
+
is compiled by that same gate, against the packed artifact, so an example here
|
|
327
|
+
cannot drift away from the package it documents. The codec is additionally
|
|
328
|
+
verified in both directions against the reference implementation's own wire
|
|
329
|
+
vectors.
|
|
330
|
+
|
|
331
|
+
## Provenance
|
|
332
|
+
|
|
333
|
+
Generated bindings, the Contract model, and the conformance gates live in the
|
|
334
|
+
[candid-core] repository; this package versions independently (pre-1.0).
|
|
335
|
+
[CHANGELOG.md](./CHANGELOG.md) ships in the tarball and records, for every
|
|
336
|
+
release, the `candid-core` generator version it pairs with.
|
|
337
|
+
|
|
338
|
+
[Candid]: https://github.com/dfinity/candid
|
|
339
|
+
[candid-core]: https://github.com/b3hr4d/candid-core
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "condition-thin",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"dependencies": {
|
|
6
|
+
"@candid-core/schema": "0.2.0",
|
|
7
|
+
"@icp-sdk/auth": "10.0.1",
|
|
8
|
+
"@icp-sdk/core": "6.1.0",
|
|
9
|
+
"@noble/curves": "2.4.0",
|
|
10
|
+
"@tanstack/query-core": "5.104.0",
|
|
11
|
+
"@tanstack/react-query": "5.104.0",
|
|
12
|
+
"react": "19.3.0",
|
|
13
|
+
"react-dom": "19.3.0"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@testing-library/dom": "10.4.2",
|
|
17
|
+
"@testing-library/react": "16.3.3",
|
|
18
|
+
"@types/node": "26.6.3",
|
|
19
|
+
"@types/react": "19.3.0",
|
|
20
|
+
"@types/react-dom": "19.3.0",
|
|
21
|
+
"jsdom": "30.1.1",
|
|
22
|
+
"typescript": "6.0.3",
|
|
23
|
+
"vitest": "5.0.2"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Generated by candid-core-ts from a candid-core Contract. Do not edit.
|
|
2
|
+
import { c, type Schema } from "@candid-core/schema";
|
|
3
|
+
import type { PrincipalValue } from "@candid-core/schema";
|
|
4
|
+
|
|
5
|
+
export type Account = { owner: PrincipalValue; subaccount: Subaccount | null };
|
|
6
|
+
export const Account: Schema<Account> = c.rec(() => c.record({ owner: c.principal, subaccount: c.opt(Subaccount) }));
|
|
7
|
+
|
|
8
|
+
export type BlockIndex = bigint;
|
|
9
|
+
export const BlockIndex: Schema<BlockIndex> = c.rec(() => c.nat);
|
|
10
|
+
|
|
11
|
+
export type Duration = bigint;
|
|
12
|
+
export const Duration: Schema<Duration> = c.rec(() => c.nat64);
|
|
13
|
+
|
|
14
|
+
export type InitArgs = { token_symbol: string; transfer_fee: Duration; metadata: Array<[string, Value]>; minting_account: Account; initial_balances: Array<[Account, Duration]>; archive_options: { num_blocks_to_archive: Duration; trigger_threshold: Duration; max_message_size_bytes: Duration | null; cycles_for_archive_creation: Duration | null; node_max_memory_size_bytes: Duration | null; controller_id: PrincipalValue }; token_name: string };
|
|
15
|
+
export const InitArgs: Schema<InitArgs> = c.rec(() => c.record({ token_symbol: c.text, transfer_fee: Duration, metadata: c.vec(c.tuple([c.text, Value])), minting_account: Account, initial_balances: c.vec(c.tuple([Account, Duration])), archive_options: c.record({ num_blocks_to_archive: Duration, trigger_threshold: Duration, max_message_size_bytes: c.opt(Duration), cycles_for_archive_creation: c.opt(Duration), node_max_memory_size_bytes: c.opt(Duration), controller_id: c.principal }), token_name: c.text }));
|
|
16
|
+
|
|
17
|
+
export type LedgerArg = { tag: "Upgrade"; value: UpgradeArgs | null } | { tag: "Init"; value: InitArgs };
|
|
18
|
+
export const LedgerArg: Schema<LedgerArg> = c.rec(() => c.variant({ Upgrade: c.opt(UpgradeArgs), Init: InitArgs }));
|
|
19
|
+
|
|
20
|
+
export type Subaccount = Uint8Array;
|
|
21
|
+
export const Subaccount: Schema<Subaccount> = c.rec(() => c.blob());
|
|
22
|
+
|
|
23
|
+
export type Timestamp = Duration;
|
|
24
|
+
export const Timestamp: Schema<Timestamp> = c.rec(() => Duration);
|
|
25
|
+
|
|
26
|
+
export type Tokens = BlockIndex;
|
|
27
|
+
export const Tokens: Schema<Tokens> = c.rec(() => BlockIndex);
|
|
28
|
+
|
|
29
|
+
export type TransferArg = { to: Account; fee: BlockIndex | null; memo: Subaccount | null; from_subaccount: Subaccount | null; created_at_time: Duration | null; amount: BlockIndex };
|
|
30
|
+
export const TransferArg: Schema<TransferArg> = c.rec(() => c.record({ to: Account, fee: c.opt(BlockIndex), memo: c.opt(Subaccount), from_subaccount: c.opt(Subaccount), created_at_time: c.opt(Duration), amount: BlockIndex }));
|
|
31
|
+
|
|
32
|
+
export type TransferError = { tag: "GenericError"; value: { message: string; error_code: BlockIndex } } | { tag: "TemporarilyUnavailable" } | { tag: "BadBurn"; value: { min_burn_amount: BlockIndex } } | { tag: "Duplicate"; value: { duplicate_of: BlockIndex } } | { tag: "BadFee"; value: { expected_fee: BlockIndex } } | { tag: "CreatedInFuture"; value: { ledger_time: Duration } } | { tag: "TooOld" } | { tag: "InsufficientFunds"; value: { balance: BlockIndex } };
|
|
33
|
+
export const TransferError: Schema<TransferError> = c.rec(() => c.variant({ GenericError: c.record({ message: c.text, error_code: BlockIndex }), TemporarilyUnavailable: c.null, BadBurn: c.record({ min_burn_amount: BlockIndex }), Duplicate: c.record({ duplicate_of: BlockIndex }), BadFee: c.record({ expected_fee: BlockIndex }), CreatedInFuture: c.record({ ledger_time: Duration }), TooOld: c.null, InsufficientFunds: c.record({ balance: BlockIndex }) }));
|
|
34
|
+
|
|
35
|
+
export type TransferResult = { tag: "Ok"; value: BlockIndex } | { tag: "Err"; value: TransferError };
|
|
36
|
+
export const TransferResult: Schema<TransferResult> = c.rec(() => c.variant({ Ok: BlockIndex, Err: TransferError }));
|
|
37
|
+
|
|
38
|
+
export type UpgradeArgs = { token_symbol: string | null; transfer_fee: Duration | null; metadata: Array<[string, Value]> | null; token_name: string | null };
|
|
39
|
+
export const UpgradeArgs: Schema<UpgradeArgs> = c.rec(() => c.record({ token_symbol: c.opt(c.text), transfer_fee: c.opt(Duration), metadata: c.opt(c.vec(c.tuple([c.text, Value]))), token_name: c.opt(c.text) }));
|
|
40
|
+
|
|
41
|
+
export type Value = { tag: "Int"; value: bigint } | { tag: "Nat"; value: BlockIndex } | { tag: "Blob"; value: Subaccount } | { tag: "Text"; value: string };
|
|
42
|
+
export const Value: Schema<Value> = c.rec(() => c.variant({ Int: c.int, Nat: BlockIndex, Blob: Subaccount, Text: c.text }));
|
|
43
|
+
|
|
44
|
+
export const actor: Schema<PrincipalValue> = c.rec(() => c.service({ icrc1_balance_of: c.func([Account], [BlockIndex], "query"), icrc1_decimals: c.func([], [c.nat8], "query"), icrc1_fee: c.func([], [BlockIndex], "query"), icrc1_supported_standards: c.func([], [c.vec(c.record({ url: c.text, name: c.text }))], "query"), icrc1_metadata: c.func([], [c.vec(c.tuple([c.text, Value]))], "query"), icrc1_symbol: c.func([], [c.text], "query"), icrc1_minting_account: c.func([], [c.opt(Account)], "query"), icrc1_name: c.func([], [c.text], "query"), icrc1_total_supply: c.func([], [BlockIndex], "query"), icrc1_transfer: c.func([TransferArg], [TransferResult], "update") }));
|
|
45
|
+
export type Actor = {
|
|
46
|
+
icrc1_balance_of: (arg0: Account) => Promise<BlockIndex>;
|
|
47
|
+
icrc1_decimals: () => Promise<number>;
|
|
48
|
+
icrc1_fee: () => Promise<BlockIndex>;
|
|
49
|
+
icrc1_supported_standards: () => Promise<Array<{ url: string; name: string }>>;
|
|
50
|
+
icrc1_metadata: () => Promise<Array<[string, Value]>>;
|
|
51
|
+
icrc1_symbol: () => Promise<string>;
|
|
52
|
+
icrc1_minting_account: () => Promise<Account | null>;
|
|
53
|
+
icrc1_name: () => Promise<string>;
|
|
54
|
+
icrc1_total_supply: () => Promise<BlockIndex>;
|
|
55
|
+
icrc1_transfer: (arg0: TransferArg) => Promise<TransferResult>;
|
|
56
|
+
};
|
|
57
|
+
// Note: the actor is a service class; init args are install-time metadata not exposed here (issue #104).
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "thin-guide",
|
|
3
|
+
"base": "thin",
|
|
4
|
+
"library": "Available library: `@candid-core/schema` 0.2.0, with the module `candid-core-cli gen` generated from the ledger's `.did` in `src/generated/icrc1.ts`; use it with `@icp-sdk/core`, `@icp-sdk/auth` and TanStack Query (`@tanstack/react-query`, `@tanstack/query-core`) directly — no other framework. Its documentation is in `docs/`; read it before you start (start with `docs/llms.txt`).",
|
|
5
|
+
"docs": [
|
|
6
|
+
"docs/candid-core-schema.README.md",
|
|
7
|
+
"docs/candid-core-cli.README.md",
|
|
8
|
+
"docs/llms.txt"
|
|
9
|
+
]
|
|
10
|
+
}
|