@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,541 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The types of the canister surface: what `client.canister()` returns, the
|
|
3
|
+
* targets it takes, and the option objects the builders on the client return.
|
|
4
|
+
*
|
|
5
|
+
* Public: {@link Canister} and {@link CanisterTarget}. The rest are helpers the
|
|
6
|
+
* `Client` interface is written with; the package entry does not export them,
|
|
7
|
+
* and an app never names them: it reads them off a call, such as
|
|
8
|
+
* `client.queryOptions(...)`.
|
|
9
|
+
*
|
|
10
|
+
* A generated `Actor` type (from `meant gen` 0.5.1) carries each
|
|
11
|
+
* method's mode as `$.WithMode<mode>`. {@link ReadMethod} and
|
|
12
|
+
* {@link OptInMethod} read it, so that `client.queryOptions()` refuses an
|
|
13
|
+
* update or a oneway method at compile time. A method whose mode the type does
|
|
14
|
+
* not say (an `Actor` written by hand) passes, and the client still checks
|
|
15
|
+
* every mode rule when it builds the call, at run time: that check is the only
|
|
16
|
+
* one for such a method, and for a composite query of a certified canister,
|
|
17
|
+
* which no type tells apart.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import type { ModeOf } from "@meantjs/schema"
|
|
22
|
+
import type {
|
|
23
|
+
DataTag,
|
|
24
|
+
MutationKey,
|
|
25
|
+
QueryFunctionContext,
|
|
26
|
+
QueryKey,
|
|
27
|
+
SkipToken,
|
|
28
|
+
} from "@tanstack/query-core"
|
|
29
|
+
import type { ReactorError } from "./errors.js"
|
|
30
|
+
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// The unwrap rule, as types
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
/** An arm's payload: its `value`, or `null` for an arm that carries nothing. */
|
|
36
|
+
type ArmPayload<Arm> = Arm extends { value: infer V } ? V : null
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* `{ ok, err }` when `R` is exactly a two-arm variant spelled `Ok`/`Err` (or
|
|
40
|
+
* `ok`/`err` when `OkTag`/`ErrTag` say so), else `never`: an extra arm, a
|
|
41
|
+
* missing one, or a type that is not a variant at all.
|
|
42
|
+
*/
|
|
43
|
+
type ResultArmsAs<R, OkTag extends string, ErrTag extends string> = [
|
|
44
|
+
Exclude<R, { tag: OkTag } | { tag: ErrTag }>,
|
|
45
|
+
] extends [never]
|
|
46
|
+
? [Extract<R, { tag: OkTag }>] extends [never]
|
|
47
|
+
? never
|
|
48
|
+
: [Extract<R, { tag: ErrTag }>] extends [never]
|
|
49
|
+
? never
|
|
50
|
+
: {
|
|
51
|
+
ok: ArmPayload<Extract<R, { tag: OkTag }>>
|
|
52
|
+
err: ArmPayload<Extract<R, { tag: ErrTag }>>
|
|
53
|
+
}
|
|
54
|
+
: never
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The arms of a result reply, or `never`. Mirrors `isResultSchema` from
|
|
58
|
+
* `@meantjs/schema/validate`, which decides at run time: exactly an ok arm
|
|
59
|
+
* and an err arm, spelled `Ok`/`Err` or `ok`/`err`, never the two mixed. A
|
|
60
|
+
* type test (`tests/canister.test-d.ts`) pins the two to the same answer for
|
|
61
|
+
* the generated fixtures.
|
|
62
|
+
*/
|
|
63
|
+
type ResultArms<R> = [R] extends [never]
|
|
64
|
+
? never
|
|
65
|
+
: [ResultArmsAs<R, "Ok", "Err">] extends [never]
|
|
66
|
+
? ResultArmsAs<R, "ok", "err">
|
|
67
|
+
: ResultArmsAs<R, "Ok", "Err">
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* What a call resolves with for a reply of type `R`: the `Ok` payload when
|
|
71
|
+
* `R` is a result (see {@link ResultArms}), else `R` itself.
|
|
72
|
+
*/
|
|
73
|
+
export type Unwrap<R> = [ResultArms<R>] extends [never]
|
|
74
|
+
? R
|
|
75
|
+
: ResultArms<R>["ok"]
|
|
76
|
+
|
|
77
|
+
/** The `Err` payload of a result reply, or `never` for any other reply. */
|
|
78
|
+
export type ErrOf<R> = [ResultArms<R>] extends [never]
|
|
79
|
+
? never
|
|
80
|
+
: ResultArms<R>["err"]
|
|
81
|
+
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// Methods, arguments and replies
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
|
|
86
|
+
/** The argument tuple of a generated `Actor` method. */
|
|
87
|
+
export type ArgsOf<F> = F extends (...args: infer P) => Promise<unknown>
|
|
88
|
+
? P
|
|
89
|
+
: never
|
|
90
|
+
|
|
91
|
+
/** The reply type of a generated `Actor` method, before unwrapping. */
|
|
92
|
+
export type ReplyOf<F> = F extends (...args: never[]) => Promise<infer R>
|
|
93
|
+
? R
|
|
94
|
+
: never
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* The variables a builder takes for a method (DECISIONS Q3): nothing for a
|
|
98
|
+
* method without arguments, the value itself for one argument, and the tuple
|
|
99
|
+
* for two or more. `mutate(arg)`, not `mutate([arg])`.
|
|
100
|
+
*/
|
|
101
|
+
export type Vars<P extends readonly unknown[]> = P extends readonly []
|
|
102
|
+
? void
|
|
103
|
+
: P extends readonly [infer One]
|
|
104
|
+
? One
|
|
105
|
+
: P
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* The variables of a method whose type is `any`, as it is when the method is
|
|
109
|
+
* given as `any` (`client.queryOptions<A, any>(canister, method, vars)` for a
|
|
110
|
+
* method named by data): every value but a symbol. The client still applies
|
|
111
|
+
* the run-time rule of {@link Vars} (the value for one argument, the tuple
|
|
112
|
+
* for several, nothing or `[]` for none) and checks the value against the
|
|
113
|
+
* method's schemas when it encodes it.
|
|
114
|
+
*
|
|
115
|
+
* Not `unknown`: `skipToken` is assignable to `unknown`, so a read of such a
|
|
116
|
+
* method would always keep `SkipToken` in its `queryFn` (see
|
|
117
|
+
* {@link QueryArgs}). The cost is that, on this path only, a symbol cannot be
|
|
118
|
+
* given to a method whose one argument is Candid `reserved`.
|
|
119
|
+
*/
|
|
120
|
+
export type AnyVars =
|
|
121
|
+
string | number | bigint | boolean | object | null | undefined
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* The variables of method `M` of `A`: {@link Vars} of its arguments, or
|
|
125
|
+
* {@link AnyVars} when the method is given as `any`. It checks `M`, which
|
|
126
|
+
* reaches a `Canister<A>` with a generic `A` in `queryOptions`, and the
|
|
127
|
+
* method's type `A[M]`, which reaches the builders that declare
|
|
128
|
+
* `M extends keyof A & string` (under that constraint a check on `M` never
|
|
129
|
+
* takes its `any` branch). With a generic `A`, those builders still see
|
|
130
|
+
* `VarsOf<A, any>` unresolved.
|
|
131
|
+
*/
|
|
132
|
+
export type VarsOf<A, M extends keyof A> = 0 extends 1 & M
|
|
133
|
+
? AnyVars
|
|
134
|
+
: 0 extends 1 & A[M]
|
|
135
|
+
? AnyVars
|
|
136
|
+
: Vars<ArgsOf<A[M]>>
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* The methods of `A` a read may be built from with `{ update: "idempotent" }`:
|
|
140
|
+
* every one not known to be a `oneway`, which has no reply to cache whatever
|
|
141
|
+
* the options say.
|
|
142
|
+
*
|
|
143
|
+
* A method of a generated `Actor` carries its mode (`$.WithMode<"query">`).
|
|
144
|
+
* One written by hand carries none, and `ModeOf` reads it as any of the four,
|
|
145
|
+
* which passes here and is checked at run time.
|
|
146
|
+
*/
|
|
147
|
+
export type OptInMethod<A> = {
|
|
148
|
+
[K in keyof A & string]: [ModeOf<A[K]>] extends ["oneway"] ? never : K
|
|
149
|
+
}[keyof A & string]
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* The methods of `A` a read may be built from without the opt-in: the
|
|
153
|
+
* methods of {@link OptInMethod} not known to be an `update`. For a generated
|
|
154
|
+
* `Actor`, its `query` and `composite_query` methods.
|
|
155
|
+
*/
|
|
156
|
+
export type ReadMethod<A> = {
|
|
157
|
+
[K in keyof A & string]: K extends OptInMethod<A>
|
|
158
|
+
? [ModeOf<A[K]>] extends ["update"]
|
|
159
|
+
? never
|
|
160
|
+
: K
|
|
161
|
+
: never
|
|
162
|
+
}[keyof A & string]
|
|
163
|
+
|
|
164
|
+
/** What method `M` of `A` resolves with. */
|
|
165
|
+
export type DataOf<A, M extends keyof A> = Unwrap<ReplyOf<A[M]>>
|
|
166
|
+
|
|
167
|
+
/** The `Err` payload of method `M` of `A`, or `never`. */
|
|
168
|
+
export type ErrorOf<A, M extends keyof A> = ErrOf<ReplyOf<A[M]>>
|
|
169
|
+
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
// Public types
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Carries the `Actor` type a {@link Canister} was made for, so that the
|
|
176
|
+
* builders infer it from the canister they are given. Type-level only: no
|
|
177
|
+
* canister object has this property.
|
|
178
|
+
*/
|
|
179
|
+
declare const actorType: unique symbol
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* A canister, as `client.canister<Actor>(actor, target)` returns it: a frozen
|
|
183
|
+
* object with one plain async method per Candid method of the service, typed
|
|
184
|
+
* from the generated `Actor`.
|
|
185
|
+
*
|
|
186
|
+
* Each method encodes its arguments with the service schema, sends the call
|
|
187
|
+
* as the caller signed in at the moment it is called, decodes the reply, and
|
|
188
|
+
* resolves with it the way the generated `Actor` types it: `undefined` for a
|
|
189
|
+
* method with no results, the value for one, the tuple for several. A method
|
|
190
|
+
* whose one result is an `Ok`/`Err` variant resolves with the `Ok` payload and
|
|
191
|
+
* rejects the `Err` one as a `ReactorError` of kind `"canister_err"`, whose
|
|
192
|
+
* `err` is typed.
|
|
193
|
+
*
|
|
194
|
+
* Every failure rejects with a `ReactorError`; read `mayHaveExecuted` before
|
|
195
|
+
* trying a write again. An update re-sends itself only when the failure proves
|
|
196
|
+
* the first attempt never got in (reject code 2, or HTTP 429, from any
|
|
197
|
+
* canister but `aaaaa-aa`), at most twice; a direct read re-sends only after a
|
|
198
|
+
* failure the classifier marks retryable, at most twice.
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```ts
|
|
202
|
+
* import { actor, type Actor } from "./canisters/icrc1"
|
|
203
|
+
*
|
|
204
|
+
* const ledger = client.canister<Actor>(actor, { id: "ryjl3-tyaaa-aaaaa-aaaba-cai" })
|
|
205
|
+
* const fee = await ledger.icrc1_fee()
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
export type Canister<A> = {
|
|
209
|
+
readonly [K in keyof A]: A[K] extends (...args: infer P) => Promise<infer R>
|
|
210
|
+
? (...args: P) => Promise<Unwrap<R>>
|
|
211
|
+
: never
|
|
212
|
+
} & { readonly [actorType]?: A }
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Which canister `client.canister()` calls: by its id, or by the name the
|
|
216
|
+
* `ic_env` cookie gives it.
|
|
217
|
+
*
|
|
218
|
+
* - `{ id }`: principal text. Text that is not a canonical principal throws a
|
|
219
|
+
* `TypeError` that names it, when the canister is made.
|
|
220
|
+
* - `{ name }`: read from the cookie's `PUBLIC_CANISTER_ID:<name>` entry when a
|
|
221
|
+
* call or a key is built, and only where the network trusts the cookie.
|
|
222
|
+
* Unresolved (on a server, on an untrusted host, or with no such entry),
|
|
223
|
+
* every call rejects `invalid_args` with code `"canister_id_unresolved"` and
|
|
224
|
+
* sends nothing, and keys carry `"$unresolved:<name>"` in place of the id.
|
|
225
|
+
* - `certified: true` makes another canister object, whose `query` methods are
|
|
226
|
+
* sent as replicated calls so that their replies are certified, and whose
|
|
227
|
+
* keys end in `"certified"`. A `composite_query` has no certified path: on
|
|
228
|
+
* such a canister its direct call rejects `invalid_args` (code
|
|
229
|
+
* `"no_certified_path"`) and `queryOptions` throws a `TypeError`.
|
|
230
|
+
* - `timeoutMs` bounds how long each call made through the canister object
|
|
231
|
+
* waits for its answer, from the moment it is called: its direct calls, its
|
|
232
|
+
* reads made with `queryOptions`, its mutations (unless `mutationOptions`
|
|
233
|
+
* gives its own), and `client.time()` on it. Without it, a request that gets
|
|
234
|
+
* no HTTP answer waits as long as the `fetch` in use does. When it passes,
|
|
235
|
+
* the call rejects with code `"timeout"`: `cancelled` with `mayHaveExecuted:
|
|
236
|
+
* false` for a read, and for a write before its request went out; a write
|
|
237
|
+
* whose request went out (an `{ update: "idempotent" }` read's included), or
|
|
238
|
+
* a re-send of a write `client.resendOf()` offered at any point, rejects
|
|
239
|
+
* `outcome_unknown` with `mayHaveExecuted: true`, an unknown outcome to
|
|
240
|
+
* reconcile (read the state back, or `client.resendOf()` with this same
|
|
241
|
+
* canister object), never one to send again blindly. Nothing is sent again
|
|
242
|
+
* for it, and the request itself is not torn down: only the waiting stops. A
|
|
243
|
+
* number of milliseconds from 1 to 2147483647; anything else throws a
|
|
244
|
+
* `TypeError`. Another `timeoutMs` makes another canister object, with the
|
|
245
|
+
* same keys: a read observed through two of them is bounded by the options
|
|
246
|
+
* TanStack Query was given last.
|
|
247
|
+
*/
|
|
248
|
+
export type CanisterTarget =
|
|
249
|
+
| {
|
|
250
|
+
readonly id: string
|
|
251
|
+
readonly name?: never
|
|
252
|
+
readonly certified?: boolean
|
|
253
|
+
readonly timeoutMs?: number
|
|
254
|
+
}
|
|
255
|
+
| {
|
|
256
|
+
readonly name: string
|
|
257
|
+
readonly id?: never
|
|
258
|
+
readonly certified?: boolean
|
|
259
|
+
readonly timeoutMs?: number
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// ---------------------------------------------------------------------------
|
|
263
|
+
// What the builders return
|
|
264
|
+
// ---------------------------------------------------------------------------
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* What `client.queryOptions()` returns: plain TanStack Query options for
|
|
268
|
+
* `useQuery`, `queryClient.fetchQuery`, a `QueryObserver` and the like.
|
|
269
|
+
*
|
|
270
|
+
* `D` is the method's data and `E` its `Err` payload. The key is tagged with
|
|
271
|
+
* both, so `queryClient.getQueryData(options.queryKey)` is typed `D` and the
|
|
272
|
+
* query's `error` is `ReactorError<E>`.
|
|
273
|
+
*
|
|
274
|
+
* `S` is what `queryFn` may be besides the query function: `SkipToken` when
|
|
275
|
+
* the variables the options were built from may be `skipToken`, and `never`
|
|
276
|
+
* when they cannot be, so that `useSuspenseQuery` and `useSuspenseQueries`,
|
|
277
|
+
* which take no `skipToken`, accept the options as they are. A compiler
|
|
278
|
+
* message or a hover prints `SkipToken` as `unique symbol`:
|
|
279
|
+
* `CanisterQueryOptions<bigint, never, unique symbol>` is options that may be
|
|
280
|
+
* skipped.
|
|
281
|
+
*/
|
|
282
|
+
export interface CanisterQueryOptions<D, E, S extends SkipToken = SkipToken> {
|
|
283
|
+
/** `['ic-reactor', network, caller, canisterId, method, args]`, plus `'certified'` for a certified canister. */
|
|
284
|
+
readonly queryKey: DataTag<QueryKey, D, ReactorError<E>>
|
|
285
|
+
/** Calls the method as the caller in the key, or rejects `cancelled` once that caller is no longer current. `skipToken` for a skipped read. */
|
|
286
|
+
readonly queryFn: ((context: QueryFunctionContext) => Promise<D>) | S
|
|
287
|
+
/**
|
|
288
|
+
* Retries only a failure that proves the call was not delivered, at most 3
|
|
289
|
+
* times, never on a server.
|
|
290
|
+
*
|
|
291
|
+
* It takes any error, as `useQueries` and `useSuspenseQueries` type it
|
|
292
|
+
* (they type a query's error from its `throwOnError` alone, `unknown`
|
|
293
|
+
* without one), and its last signature takes `ReactorError<E>`, from which
|
|
294
|
+
* `useQuery` and a `QueryObserver` type the query's `error`.
|
|
295
|
+
*/
|
|
296
|
+
readonly retry: ((failureCount: number, error: unknown) => boolean) &
|
|
297
|
+
((failureCount: number, error: ReactorError<E>) => boolean)
|
|
298
|
+
/** `Infinity` for an update read with `{ update: "idempotent" }`; absent otherwise. */
|
|
299
|
+
readonly staleTime?: number
|
|
300
|
+
/** `false` for an update read with `{ update: "idempotent" }`; absent otherwise. */
|
|
301
|
+
readonly refetchOnMount?: boolean
|
|
302
|
+
/** `false` for an update read with `{ update: "idempotent" }`; absent otherwise. */
|
|
303
|
+
readonly refetchOnWindowFocus?: boolean
|
|
304
|
+
/** `false` for an update read with `{ update: "idempotent" }`; absent otherwise. */
|
|
305
|
+
readonly refetchOnReconnect?: boolean
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Carries the type of what the `onMutate` of `client.mutationOptions()`
|
|
310
|
+
* returns. Type-level only: no object has this property.
|
|
311
|
+
*/
|
|
312
|
+
declare const mutationTargets: unique symbol
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* What the `onMutate` of `client.mutationOptions()` returns, and TanStack
|
|
316
|
+
* Query hands to its `onSettled`: the canister one run of the mutation writes
|
|
317
|
+
* to and the reads it invalidates, resolved when the run starts. Opaque: pass
|
|
318
|
+
* it on to `onSettled`, or spread it into what an `onMutate` of your own
|
|
319
|
+
* returns.
|
|
320
|
+
*/
|
|
321
|
+
export interface MutationTargets {
|
|
322
|
+
readonly [mutationTargets]: true
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* What `client.mutationOptions()` returns: plain TanStack Query options for
|
|
327
|
+
* `useMutation` or a `MutationObserver`. `V` is the method's variables, `D`
|
|
328
|
+
* its data and `E` its `Err` payload.
|
|
329
|
+
*
|
|
330
|
+
* The canister a run writes to and the reads it invalidates are resolved
|
|
331
|
+
* once, when the run starts (`onMutate`; or, from TanStack Query 5.89,
|
|
332
|
+
* `mutationFn` when an `onMutate` of the app's replaced this one), so a
|
|
333
|
+
* `{ name }` whose `ic_env` cookie entry changes while the update is in
|
|
334
|
+
* flight (a local redeploy) still has the reads of the canister it wrote to
|
|
335
|
+
* invalidated, and not those of the one the cookie names now.
|
|
336
|
+
*/
|
|
337
|
+
export interface CanisterMutationOptions<V, D, E> {
|
|
338
|
+
/**
|
|
339
|
+
* `['ic-reactor', network, canisterId, method]`, and then the caller for
|
|
340
|
+
* the options of a view `useClient()` returned: a prefix match on the
|
|
341
|
+
* shorter key finds both.
|
|
342
|
+
*/
|
|
343
|
+
readonly mutationKey: MutationKey
|
|
344
|
+
/**
|
|
345
|
+
* Resolves the canister this run writes to and the reads it invalidates,
|
|
346
|
+
* and returns them; TanStack Query runs it before `mutationFn` and hands
|
|
347
|
+
* what it returns to `onSettled`.
|
|
348
|
+
*
|
|
349
|
+
* `context` is the function context TanStack Query 5.89 and later passes
|
|
350
|
+
* to `onMutate`, `mutationFn` and `onSettled` alike, through which
|
|
351
|
+
* `mutationFn` finds this run. To add an `onMutate` of your own, call this
|
|
352
|
+
* one from it with both arguments, and return its result or spread it
|
|
353
|
+
* into yours: `{ ...options.onMutate(variables, context), previous }`.
|
|
354
|
+
* One that replaces this one instead (TanStack's optimistic-update recipe
|
|
355
|
+
* as written) leaves the resolving to `mutationFn`, which keeps the write
|
|
356
|
+
* and its invalidation together only from 5.89 on. It keeps the caller on
|
|
357
|
+
* the client's own `queryClient` either way (see `mutationFn`).
|
|
358
|
+
*/
|
|
359
|
+
readonly onMutate: (variables: V, context?: unknown) => MutationTargets
|
|
360
|
+
/**
|
|
361
|
+
* Calls the method as the caller current when `mutate()` was called, or
|
|
362
|
+
* not at all: when someone else is current by the time it is sent
|
|
363
|
+
* (TanStack held the write back offline, or behind another mutation of its
|
|
364
|
+
* `scope`, or retried it, and the account was switched meanwhile), it
|
|
365
|
+
* rejects with `kind: "cancelled"`, `code: "caller_changed"`,
|
|
366
|
+
* `mayHaveExecuted: false`, and sends nothing. Built by a view of the
|
|
367
|
+
* client (what `useClient()` returns), it also calls only as the view's
|
|
368
|
+
* principal, and rejects the same way while someone else is current. It
|
|
369
|
+
* calls at the canister `onMutate` resolved for this run.
|
|
370
|
+
*
|
|
371
|
+
* On the client's own `queryClient`, the caller of each run is read by its
|
|
372
|
+
* `MutationCache` when `mutate()` starts the run, whatever the options'
|
|
373
|
+
* `onMutate` is, so an `onMutate` of the app's that replaces this one
|
|
374
|
+
* keeps the rule. On another `QueryClient` it is the one this `onMutate`
|
|
375
|
+
* read. Refused the same way, because the caller of the run is not known:
|
|
376
|
+
* a mutation TanStack restored from a persister (it runs no `onMutate` for
|
|
377
|
+
* one; call `mutate()` again), a run on another `QueryClient` whose
|
|
378
|
+
* `onMutate` replaced this one (5.89 and later), and, without a context
|
|
379
|
+
* (before 5.89), a run on another `QueryClient` whose options object
|
|
380
|
+
* (what TanStack calls `onMutate` and `mutationFn` on) this `onMutate`
|
|
381
|
+
* read nothing for: called from an `onMutate` of the app's, or given new
|
|
382
|
+
* options by a later render. Also refused before 5.89: a run whose
|
|
383
|
+
* observer has another run pending that started as someone else, on any
|
|
384
|
+
* `QueryClient`, since every run of one observer shares its options
|
|
385
|
+
* object and `mutationFn` cannot tell them apart. Exceptions, which go out as the caller
|
|
386
|
+
* current when they are sent: a call by hand (no context, and no
|
|
387
|
+
* `onMutate` of this one ever ran without one for the method), and,
|
|
388
|
+
* before 5.89, a run on another `QueryClient` whose `onMutate` replaced
|
|
389
|
+
* this one, or one restored there.
|
|
390
|
+
*
|
|
391
|
+
* It finds that run through `context`, which TanStack Query passes from
|
|
392
|
+
* 5.89 on. When `onMutate` resolved nothing for that context (an
|
|
393
|
+
* `onMutate` of the app's replaced this one), it resolves the run when it
|
|
394
|
+
* starts and keeps it for `onSettled`, which gets the same context.
|
|
395
|
+
* Without a context (TanStack Query before 5.89, a direct call) it
|
|
396
|
+
* resolves the canister when it starts. Before 5.89 that leaves a gap: a
|
|
397
|
+
* `{ name }` whose cookie entry is rewritten between `onMutate` and
|
|
398
|
+
* `mutationFn` is written to at the new canister while `onSettled`
|
|
399
|
+
* invalidates the old one's reads. TanStack runs the two back to back,
|
|
400
|
+
* with no other task in between, unless the mutation is paused (offline)
|
|
401
|
+
* or waits for its `scope`.
|
|
402
|
+
*/
|
|
403
|
+
readonly mutationFn: (variables: V, context?: unknown) => Promise<D>
|
|
404
|
+
/** A mutation is never retried by TanStack: an update re-sent after an unknown outcome can run twice. */
|
|
405
|
+
readonly retry: false
|
|
406
|
+
/**
|
|
407
|
+
* Invalidates the reads the write may have changed, unless the failure
|
|
408
|
+
* proves it changed nothing: the reads resolved for this run. It finds
|
|
409
|
+
* them through `context`, the run's function context (TanStack Query 5.89
|
|
410
|
+
* and later), which holds what `mutationFn` wrote with, or else in
|
|
411
|
+
* `onMutateResult`, what `onMutate` returned. When neither carries the run
|
|
412
|
+
* (before 5.89, an `onMutate` of the app's that replaced this one and
|
|
413
|
+
* returned something else; or a call by hand), it resolves them when it
|
|
414
|
+
* runs. To add an `onSettled` of your own, call this one from it with
|
|
415
|
+
* every argument it gets.
|
|
416
|
+
*/
|
|
417
|
+
readonly onSettled: (
|
|
418
|
+
data: D | undefined,
|
|
419
|
+
error: ReactorError<E> | null,
|
|
420
|
+
variables: V,
|
|
421
|
+
onMutateResult?: unknown,
|
|
422
|
+
context?: unknown
|
|
423
|
+
) => Promise<void>
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* The arguments of `client.queryOptions()` after the method: the variables
|
|
428
|
+
* (or `skipToken`), then the options. The variables may be left out for a
|
|
429
|
+
* method without arguments, as in `client.queryOptions(ledger, "icrc1_fee")`.
|
|
430
|
+
* `S` is what may stand in for the variables: `SkipToken`, or `never` for
|
|
431
|
+
* variables that cannot be skipped. Variables of a type `skipToken` is
|
|
432
|
+
* assignable to, such as `unknown` (a method whose one argument is Candid
|
|
433
|
+
* `reserved`) or `{}`, may hold `skipToken` whatever their value, so with `S`
|
|
434
|
+
* `never` they accept nothing: such a read always takes the call with `S`
|
|
435
|
+
* `SkipToken`, and its `queryFn` keeps `SkipToken`.
|
|
436
|
+
*/
|
|
437
|
+
export type QueryArgs<A, M extends keyof A, S extends SkipToken = SkipToken> = [
|
|
438
|
+
VarsOf<A, M>,
|
|
439
|
+
] extends [void]
|
|
440
|
+
? [vars?: void | S, options?: QueryOptionsOptions]
|
|
441
|
+
: [
|
|
442
|
+
vars: [S] extends [never]
|
|
443
|
+
? [SkipToken] extends [VarsOf<A, M>]
|
|
444
|
+
? never
|
|
445
|
+
: VarsOf<A, M>
|
|
446
|
+
: VarsOf<A, M> | S,
|
|
447
|
+
options?: QueryOptionsOptions,
|
|
448
|
+
]
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* The arguments of `client.queryOptions()` after the method, for a read that
|
|
452
|
+
* opts in with `{ update: "idempotent" }`: the variables of {@link QueryArgs},
|
|
453
|
+
* required, even `undefined` for a method without arguments, then the
|
|
454
|
+
* options.
|
|
455
|
+
*/
|
|
456
|
+
export type OptInQueryArgs<
|
|
457
|
+
A,
|
|
458
|
+
M extends keyof A,
|
|
459
|
+
S extends SkipToken = SkipToken,
|
|
460
|
+
> = [vars: QueryArgs<A, M, S>[0], options: QueryOptionsOptions]
|
|
461
|
+
|
|
462
|
+
/** The fourth argument of `client.queryOptions()`. */
|
|
463
|
+
export interface QueryOptionsOptions {
|
|
464
|
+
/**
|
|
465
|
+
* `"idempotent"` lets an `update` method be read like a query. Only for an
|
|
466
|
+
* update that returns the same answer however often it runs, such as
|
|
467
|
+
* ckBTC's `get_btc_address`.
|
|
468
|
+
*/
|
|
469
|
+
readonly update: "idempotent"
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/** The fourth argument of `client.resendOf()`. */
|
|
473
|
+
export interface ResendOptions<V> {
|
|
474
|
+
/**
|
|
475
|
+
* What makes the canister answer this argument at most once, read from it:
|
|
476
|
+
* `(arg) => arg.created_at_time` for an ICRC-1 transfer. `undefined` or
|
|
477
|
+
* `null` means the argument carries no such key, and nothing is offered.
|
|
478
|
+
* The client cannot check that the canister deduplicates on it: the app
|
|
479
|
+
* states it.
|
|
480
|
+
*/
|
|
481
|
+
readonly dedupedBy: (arg: V) => unknown
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* What `client.resendOf()` offers: a write whose outcome is unknown, to send
|
|
486
|
+
* again exactly as it was sent (the same bytes, to the same canister id), and
|
|
487
|
+
* only as whoever sent it.
|
|
488
|
+
*/
|
|
489
|
+
export interface Resend<V, D> {
|
|
490
|
+
/**
|
|
491
|
+
* The argument the attempt sent: the very object `mutate` or the call was
|
|
492
|
+
* given (the list, for several arguments). `mutate(resend.arg)` sends it
|
|
493
|
+
* again through a mutation, as the same write or not at all: as `from`
|
|
494
|
+
* (else code `caller_changed`), to the method and canister id the attempt
|
|
495
|
+
* went to (else `target_changed`), and while it still encodes to the bytes
|
|
496
|
+
* the attempt sent (else `arg_changed`). A refusal sends nothing and
|
|
497
|
+
* rejects `outcome_unknown`, since the attempt may have run. Do not change
|
|
498
|
+
* it: build a new argument for a new write.
|
|
499
|
+
*/
|
|
500
|
+
readonly arg: V
|
|
501
|
+
/** The principal that sent the attempt, as text: the only caller a re-send goes out as. */
|
|
502
|
+
readonly from: string
|
|
503
|
+
/**
|
|
504
|
+
* The Candid bytes the attempt sent, which `send()` sends again. A getter
|
|
505
|
+
* that returns a new copy on every read, so changing it changes nothing
|
|
506
|
+
* that is sent: read it once and keep the copy.
|
|
507
|
+
*/
|
|
508
|
+
readonly bytes: Uint8Array
|
|
509
|
+
/**
|
|
510
|
+
* Sends again now the bytes the attempt sent, to the canister id it went
|
|
511
|
+
* to (for `aaaaa-aa`, routed by the same effective canister id), as `from`, whatever became of `arg` or of a `{ name }` since. If
|
|
512
|
+
* someone else is the caller by then, it sends nothing and rejects
|
|
513
|
+
* `outcome_unknown` (code `caller_changed`). Settles as a direct call
|
|
514
|
+
* does, except that a re-send that did not run (refused, or turned away
|
|
515
|
+
* with an HTTP 4xx or reject code 1 to 3) rejects `outcome_unknown` with
|
|
516
|
+
* `mayHaveExecuted: true`: the attempt it re-sends may have run.
|
|
517
|
+
*/
|
|
518
|
+
send(): Promise<D>
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/** A read to invalidate after a write: every read of a canister, or of one of its methods. */
|
|
522
|
+
export type InvalidationTarget =
|
|
523
|
+
Canister<object> | readonly [canister: Canister<object>, method: string]
|
|
524
|
+
|
|
525
|
+
/** The third argument of `client.mutationOptions()`. */
|
|
526
|
+
export interface MutationOptionsOptions {
|
|
527
|
+
/**
|
|
528
|
+
* The reads to invalidate after the write settles, for every caller,
|
|
529
|
+
* certified or not. Defaults to every read of the canister written to, an
|
|
530
|
+
* update read with `{ update: "idempotent" }` included (it runs again);
|
|
531
|
+
* `[]` invalidates nothing.
|
|
532
|
+
*/
|
|
533
|
+
readonly invalidates?: readonly InvalidationTarget[]
|
|
534
|
+
/**
|
|
535
|
+
* How long each run waits for its answer, in place of the canister
|
|
536
|
+
* target's `timeoutMs`; the same rules. A run whose request went out
|
|
537
|
+
* rejects `outcome_unknown` with `mayHaveExecuted: true` when it passes:
|
|
538
|
+
* reconcile it, never re-send it blindly.
|
|
539
|
+
*/
|
|
540
|
+
readonly timeoutMs?: number
|
|
541
|
+
}
|