feat(sdk): add createZamaConfig, chain definitions, and transport system#272
feat(sdk): add createZamaConfig, chain definitions, and transport system#272ghermet wants to merge 40 commits intoprereleasefrom
Conversation
Squash of feat/create-zama-config branch onto fresh prerelease. Includes: createZamaConfig factory, web()/node()/cleartext() transports, FheChain definitions, CompositeRelayer, userDecrypt, publicDecrypt, sdk.allow(), inferred total supply, scoped isAllowed, session storage namespacing, and updated docs/examples/tests. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Public API ChangesExpand to see full diffdiff -ru a/react-sdk-wagmi.api.md b/react-sdk-wagmi.api.md
--- a/react-sdk-wagmi.api.md 2026-04-21 06:59:07.326913602 +0000
+++ b/react-sdk-wagmi.api.md 2026-04-21 06:59:07.358143279 +0000
@@ -19,6 +19,11 @@
import { WriteContractArgs } from '@zama-fhe/sdk';
import { WriteContractConfig } from '@zama-fhe/sdk';
import { WriteFunctionName } from '@zama-fhe/sdk';
+import { ZamaConfig } from '@zama-fhe/sdk';
+import { ZamaConfigBase } from '@zama-fhe/sdk';
+
+// @public
+export function createZamaConfig(params: ZamaConfigWagmi): ZamaConfig;
// @public
export class WagmiSigner implements GenericSigner {
@@ -47,6 +52,20 @@
config: Config;
}
+// @public
+export interface ZamaConfigWagmi<T = Config> extends ZamaConfigBase {
+ // (undocumented)
+ ethers?: never;
+ // (undocumented)
+ relayer?: never;
+ // (undocumented)
+ signer?: never;
+ // (undocumented)
+ viem?: never;
+ // (undocumented)
+ wagmiConfig: T;
+}
+
// (No @packageDocumentation comment for this package)
diff -ru a/react-sdk.api.md b/react-sdk.api.md +export { ACL_TOPICS }
+export { PaginatedResult } @@ -220,6 +924,12 @@ +export { UserDecryptParams } @@ -340,21 +1050,54 @@ +export { wrapContract } +// Warning: (ae-forgotten-export) The symbol "ZamaProviderConfigProps" needs to be exported by the entry point index.d.ts
+export { zamaQueryKeys } // (No @packageDocumentation comment for this package) diff -ru a/sdk-node.api.md b/sdk-node.api.md // @public (undocumented)
// @public // @public
// @public +// Warning: (ae-forgotten-export) The symbol "ResolvedChainTransport" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "CleartextChainConfig" needs to be exported by the entry point index.d.ts
export { ClearValueType } // @public +// @public // @public // Warning: (ae-forgotten-export) The symbol "EncryptedCredentials" needs to be exported by the entry point index.d.ts // @public
+// @public (undocumented)
export { FheTypeName } @@ -11584,6 +11627,19 @@ +// Warning: (ae-forgotten-export) The symbol "NodeRelayerOptions" needs to be exported by the entry point index.d.ts
// @public @@ -13046,15 +13102,13 @@ // @public
// @public +// @public (undocumented)
// @public // @public +// Warning: (ae-forgotten-export) The symbol "WebRelayerOptions" needs to be exported by the entry point index.d.ts
// @public // @public
+// @public
+// @public
+// @public
+// @public
+// @public // @public
|
…e-hoodi ZamaProvider now accepts either a config object or individual props (relayer, signer, storage, etc.) for backward compatibility with apps that don't use createZamaConfig. Restores example-hoodi to prerelease version which avoids importing @zama-fhe/sdk main entry (and its node:worker_threads chunk) in the Next.js client bundle. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add registryAddresses back to ZamaSDKConfig and ZamaProviderLegacyProps for backward compatibility with test apps that override registry addresses - Revert test-nextjs providers to prerelease legacy API to avoid importing @zama-fhe/sdk main entry (turbopack traces the node:worker_threads chunk) - Rewrite chain-switching node test for single-chain RelayerNode API Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…vider changes Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove workspace build and tarball install steps — example-hoodi now installs SDK packages from the registry via npm ci. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Browser bundles no longer reference relayer-node or node:worker_threads. The node() transport factory and handler are registered via side-effect import in @zama-fhe/sdk/node. Using node() transport without importing that module throws a clear error with remediation guidance. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ZamaProvider now only accepts config: ZamaConfig. Migrated test-nextjs to wagmi createZamaConfig with cleartext transport, and example-hoodi to base createZamaConfig with ethers signer + cleartext transport. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nitions Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…o /node - Extract transport handler registry from resolve.ts into config/relayers.ts - Move relayerUrl validation to synchronous buildRelayer (before async handler) - Remove node() export from config barrel, only export from @zama-fhe/sdk/node - Remove redundant async relayerUrl checks from web/node handlers Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…sport handlers Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove implicit default web transport fallback. Every chain must now have a transport entry in the transports record. Made transports required in ZamaConfigBase and removed redundant overrides in concrete config types. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Type-level chain/transport enforcement via const generics and lazy relayer initialization in CompositeRelayer. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ents 7 tasks covering: FheChain TId generic, TChains config threading, const generic on createZamaConfig, lazy CompositeRelayer, buildRelayer removal, react-sdk wagmi adapter update, and API report regeneration. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Keep EthersSignerConfig as existing mutually exclusive union — no changes to EthersSigner constructor. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move common config resolution logic (storage, chain-transports, relayer) into a shared internal builder. Remove createZamaConfig from main entry. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Introduces ZamaConfigViem (flat publicClient/walletClient/ethereum fields) and createZamaConfig in the /viem entry point. Fixes the resulting import cycle by pointing config/resolve.ts at viem/viem-signer directly instead of the barrel index. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…igWithTransports Clean up after entry-point-scoped createZamaConfig migration: - Remove ZamaConfigViem/Ethers/CustomSigner from config/types.ts (relocated) - Remove CreateZamaConfigBaseParams union type - Remove resolveSigner and ConfigWithTransports from resolve.ts - Update exports in config/index.ts and src/index.ts Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…onfig Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…orts - Add missing createZamaConfig to viem/config.ts and ethers/config.ts - Update react-sdk config tests to use entry-point imports - Fix type-level tests (remove literal ID tests not yet implemented) - Remove custom signer test (path removed) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
07dc1fa to
120bf9e
Compare
…oFheChain Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…heChain oxlint --fix falsely removes the T["chainId"] generic parameter thinking it equals the default, but it actually preserves literal chain ID types. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…me transport enforcement Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nsport enforcement All three entry points (viem, ethers, wagmi) now infer literal chain IDs and require matching transport entries at compile time. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…c API CompositeRelayer now accepts config and constructs relayers on first use per chain instead of eagerly at config creation time. BREAKING CHANGE: buildRelayer removed from public API. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tests now construct CompositeRelayer with config map instead of promise map, using temporary transport handlers to provide mock relayers. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move the transport handler registration from a top-level side-effect into the node() factory itself (lazy, runs once on first call). No separate `import "@zama-fhe/sdk/node"` needed — just calling node() in the transports map handles everything. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace dynamic import("../relayer/relayer-node") with a direct static
import. The /node entry point is Node-only so there's no risk of pulling
node:worker_threads into browser bundles.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…factories Move handler registrations from relayers.ts into the web() and cleartext() factories with static imports. Each factory self-registers on first call. relayers.ts now only provides the registry infrastructure. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rt configs Each transport factory (web, node, cleartext) now attaches a createRelayer function directly to the config object. CompositeRelayer calls it on first use — no registry, no handler lookup, no async. - Delete config/relayers.ts (registry infrastructure) - Remove relayersMap/registerRelayer from all files - Simplify CompositeRelayer — sync createRelayer, no pending map - Move node() exclusively to @zama-fhe/sdk/node - Update all tests Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Wrap createRelayer in try-catch with chain context in CompositeRelayer - Document sync invariant on createRelayer (prevents duplicate relayers) - Remove dead types from config/types.ts (old union types, CustomSigner) - Deduplicate AtLeastOneChain — single definition in chains/types.ts - Add never guards to ZamaConfigEthers for mutual exclusion enforcement Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The package path already namespaces it — no need for the Zama prefix. - Rename in all entry points: /viem, /ethers, react-sdk/wagmi - Update test apps to alias as createZamaConfig where wagmi clash exists - Update test assertions and describe blocks - Fix JSDoc reference in ZamaConfig type - Minor formatting from linter (transports.ts union, assertCondition) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…configs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rename the relayer-pool options parameter from `relayer` to `options` on web(), node(), and their transport config interfaces. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix JSDoc references to old `relayer` field name in transports.ts - Fix JSDoc and error message referencing createZamaConfig in provider.tsx - Regenerate all API report files (etc/*.api.md) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Summary
createZamaConfigfactory for React SDK withweb(),node(), andcleartext()transport helpersFheChaindefinitions and chain registry with./chainsexportCompositeRelayerfor multi-chain support,userDecrypt,publicDecrypt,sdk.allow(), scopedisAllowed, and session storage namespacingTest plan
createZamaConfig,resolve,composite-relayer, and transports pass🤖 Generated with Claude Code