refactor(sdk): rename .Effect to .effect#227
Conversation
…llet, and builders Renames the .Effect property to .effect on all SDK interfaces (Provider, Wallet, Client, SignBuilder, SubmitBuilder, TransactionResult) to follow JS conventions for instance properties and avoid confusion with the Effect type import. Also includes: - Export Chain and ProviderError from package root - Refactor delegateTo into dedicated pool/drep/both functions - Clean up redundant JSDoc @returns tags - Fix spread order in signing client (wallet before provider)
e3dfc20 to
ce3add9
Compare
There was a problem hiding this comment.
Pull request overview
This PR standardizes the SDK’s Effect-bearing instance property from .Effect to .effect (avoiding confusion with the Effect type), updates related client/provider/wallet/builders wiring, refactors stake delegation helpers, and regenerates module reference docs. It also re-exports Chain and ProviderError from the package root.
Changes:
- Rename
.Effect→.effectacross SDK interfaces and implementations (client, wallet, provider, builders, results). - Refactor
delegateTointo dedicated pool/DRep delegation functions (keeping a deprecated dispatcher). - Regenerate docs and adjust exports (root exports now include
Chainpresets andProviderError).
Reviewed changes
Copilot reviewed 135 out of 136 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/evolution/src/sdk/wallet/WalletNew.ts | Renames Effect property to effect; updates ApiWallet signTx context shape. |
| packages/evolution/src/sdk/provider/Provider.ts | Renames Effect property to effect; trims redundant JSDoc. |
| packages/evolution/src/sdk/provider/Maestro.ts | Provider implementation updated to effect. |
| packages/evolution/src/sdk/provider/Kupmios.ts | Provider implementation updated to effect. |
| packages/evolution/src/sdk/provider/Koios.ts | Provider implementation updated to effect. |
| packages/evolution/src/sdk/provider/Blockfrost.ts | Provider implementation updated to effect. |
| packages/evolution/src/sdk/client/Wallets.ts | Updates wallet constructors to expose effect; improves signer detection & CIP-30 caching. |
| packages/evolution/src/sdk/client/Providers.ts | Minor formatting + docs cleanup for provider constructors. |
| packages/evolution/src/sdk/client/ClientImpl.ts | Switches client composition to .effect; refines effect interface composition. |
| packages/evolution/src/sdk/client/Client.ts | Updates client types to use .effect; removes old ProviderError from this module. |
| packages/evolution/src/sdk/builders/Unfrack.ts | Removes redundant JSDoc @returns. |
| packages/evolution/src/sdk/builders/TxBuilderImpl.ts | Uses provider .effect; minor formatting/log cleanup. |
| packages/evolution/src/sdk/builders/TransactionResult.ts | Renames result Effect property to effect; removes redundant JSDoc. |
| packages/evolution/src/sdk/builders/TransactionBuilder.ts | Uses provider/wallet .effect; doc updates and minor formatting. |
| packages/evolution/src/sdk/builders/SubmitBuilderImpl.ts | Uses provider .effect; renames builder Effect property to effect. |
| packages/evolution/src/sdk/builders/SubmitBuilder.ts | Renames Effect property to effect; removes redundant JSDoc. |
| packages/evolution/src/sdk/builders/SignBuilderImpl.ts | Uses wallet/submit .effect; renames builder Effect property to effect. |
| packages/evolution/src/sdk/builders/SignBuilder.ts | Renames Effect property to effect. |
| packages/evolution/src/sdk/builders/phases/utils.ts | Removes redundant JSDoc @returns. |
| packages/evolution/src/sdk/builders/phases/Evaluation.ts | Uses provider .effect. |
| packages/evolution/src/sdk/builders/operations/Stake.ts | Delegation dispatcher refactor; switches protocol param fetch to provider .effect. |
| packages/evolution/src/sdk/builders/operations/Propose.ts | Uses provider .effect. |
| packages/evolution/src/sdk/builders/operations/Pool.ts | Uses provider .effect. |
| packages/evolution/src/sdk/builders/operations/Mint.ts | Removes redundant JSDoc @returns. |
| packages/evolution/src/sdk/builders/operations/Governance.ts | Uses provider .effect. |
| packages/evolution/src/sdk/builders/EvaluationStateManager.ts | Removes redundant JSDoc @returns. |
| packages/evolution/src/index.ts | Re-exports Chain and ProviderError from the package root. |
| docs/next-env.d.ts | Formatting tweak (adds semicolon). |
| packages/evolution/docs/modules/Withdrawals.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/VrfVkey.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/VrfKeyHash.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/VrfCert.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/VotingProcedures.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/VKey.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/Value.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/UTxO.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/utils/Hash.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/utils/FeeValidation.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/utils/effect-runtime.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/Url.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/uplc/UPLC.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/UnitInterval.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/TxOut.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/TSchema.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/TransactionWitnessSet.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/TransactionOutput.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/TransactionMetadatumLabels.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/TransactionMetadatum.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/TransactionInput.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/TransactionIndex.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/TransactionHash.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/TransactionBody.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/Transaction.ts.md | Regenerated docs (updated narrative for addVKeyWitnessesBytes + nav order). |
| packages/evolution/docs/modules/Time/UnixTime.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/Time/SlotConfig.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/Time/Slot.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/Text128.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/Text.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/StakeReference.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/SingleHostName.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/SingleHostAddr.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/sdk/wallet/WalletNew.ts.md | Regenerated docs for .effect rename + ApiWallet signTx context. |
| packages/evolution/docs/modules/sdk/wallet/Derivation.ts.md | Regenerated docs (adds paymentIndex/stakeIndex options in signature). |
| packages/evolution/docs/modules/sdk/Type.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/sdk/provider/Provider.ts.md | Regenerated docs for .effect rename + awaitTx signature. |
| packages/evolution/docs/modules/sdk/provider/Maestro.ts.md | Regenerated docs for .effect rename + awaitTx signature. |
| packages/evolution/docs/modules/sdk/provider/Kupmios.ts.md | Regenerated docs for .effect rename + awaitTx signature. |
| packages/evolution/docs/modules/sdk/provider/Koios.ts.md | Regenerated docs for .effect rename + awaitTx signature. |
| packages/evolution/docs/modules/sdk/provider/Blockfrost.ts.md | Regenerated docs for .effect rename + awaitTx signature. |
| packages/evolution/docs/modules/sdk/EvalRedeemer.ts.md | Regenerated docs (nav order). |
| packages/evolution/docs/modules/sdk/client/Wallets.ts.md | New generated docs for wallet constructors/factories. |
| packages/evolution/docs/modules/sdk/client/Providers.ts.md | New generated docs for provider constructors. |
| packages/evolution/docs/modules/sdk/client/dual.ts.md | New generated docs for dual/dualify utilities. |
| packages/evolution/docs/modules/sdk/client/ClientImpl.ts.md | Regenerated docs for createClient overloads and categories. |
| packages/evolution/docs/modules/sdk/client/Client.ts.md | Regenerated docs for new Chain-based client API + .effect. |
| packages/evolution/docs/modules/sdk/client/Chain.ts.md | New generated docs for Chain presets/model. |
| packages/evolution/docs/modules/sdk/builders/TransactionResult.ts.md | Regenerated docs for .effect rename. |
| packages/evolution/docs/modules/sdk/builders/TransactionBuilder.ts.md | Regenerated docs for .effect rename and Chain-required builder config. |
| packages/evolution/docs/modules/sdk/builders/SubmitBuilder.ts.md | Regenerated docs for .effect rename. |
| packages/evolution/docs/modules/sdk/builders/SignBuilder.ts.md | Regenerated docs for .effect rename. |
| packages/evolution/docs/modules/sdk/builders/operations/Stake.ts.md | Regenerated docs to mark createDelegateToProgram deprecated + signature change. |
| packages/evolution/docs/modules/blueprint/codegen-config.ts.md | Regenerated docs (config fields/wording updates). |
| docs/content/docs/modules/Withdrawals.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/VrfVkey.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/VrfKeyHash.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/VrfCert.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/VotingProcedures.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/VKey.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/Value.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/UTxO.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/utils/Hash.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/utils/FeeValidation.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/utils/effect-runtime.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/Url.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/uplc/UPLC.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/UnitInterval.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/TxOut.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/TSchema.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/TransactionWitnessSet.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/TransactionOutput.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/TransactionMetadatumLabels.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/TransactionMetadatum.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/TransactionInput.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/TransactionIndex.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/TransactionHash.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/TransactionBody.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/Transaction.mdx | Site docs regen (addVKeyWitnessesBytes narrative + nav order). |
| docs/content/docs/modules/Time/UnixTime.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/Time/SlotConfig.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/Time/Slot.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/Text128.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/Text.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/StakeReference.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/SingleHostName.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/SingleHostAddr.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/sdk/wallet/WalletNew.mdx | Site docs regen for .effect rename + ApiWallet signTx context. |
| docs/content/docs/modules/sdk/wallet/Derivation.mdx | Site docs regen (adds paymentIndex/stakeIndex options). |
| docs/content/docs/modules/sdk/Type.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/sdk/provider/Provider.mdx | Site docs regen for .effect rename + awaitTx signature. |
| docs/content/docs/modules/sdk/provider/Maestro.mdx | Site docs regen for .effect rename + awaitTx signature. |
| docs/content/docs/modules/sdk/provider/Kupmios.mdx | Site docs regen for .effect rename + awaitTx signature. |
| docs/content/docs/modules/sdk/provider/Koios.mdx | Site docs regen for .effect rename + awaitTx signature. |
| docs/content/docs/modules/sdk/provider/Blockfrost.mdx | Site docs regen for .effect rename + awaitTx signature. |
| docs/content/docs/modules/sdk/EvalRedeemer.mdx | Site docs regen (nav order). |
| docs/content/docs/modules/sdk/client/Wallets.mdx | New site docs for wallet constructors/factories. |
| docs/content/docs/modules/sdk/client/Providers.mdx | New site docs for provider constructors. |
| docs/content/docs/modules/sdk/client/dual.mdx | New site docs for dual/dualify utilities. |
| docs/content/docs/modules/sdk/client/ClientImpl.mdx | Site docs regen for createClient overloads. |
| docs/content/docs/modules/sdk/client/Client.mdx | Site docs regen for Chain-based client API + .effect. |
| docs/content/docs/modules/sdk/client/Chain.mdx | New site docs for Chain presets/model. |
| docs/content/docs/modules/sdk/builders/TransactionResult.mdx | Site docs regen for .effect rename. |
| docs/content/docs/modules/sdk/builders/TransactionBuilder.mdx | Site docs regen for .effect rename and Chain-required builder config. |
| docs/content/docs/modules/sdk/builders/SubmitBuilder.mdx | Site docs regen for .effect rename. |
| docs/content/docs/modules/sdk/builders/SignBuilder.mdx | Site docs regen for .effect rename. |
| docs/content/docs/modules/sdk/builders/operations/Stake.mdx | Site docs regen marking createDelegateToProgram deprecated + signature change. |
| docs/content/docs/modules/blueprint/codegen-config.mdx | Site docs regen (config fields/wording updates). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @@ -128,7 +129,7 @@ const createSigningClient = ( | |||
| ): Effect.Effect<TransactionWitnessSet.TransactionWitnessSet, WalletNew.WalletError> => | |||
| Effect.gen(function* () { | |||
| if (context?.referenceUtxos && context.referenceUtxos.length > 0) { | |||
| return yield* wallet.Effect.signTx(txOrHex, context) | |||
| return yield* wallet.effect.signTx(txOrHex, context) | |||
| } | |||
|
|
|||
| const tx = | |||
| @@ -142,37 +143,53 @@ const createSigningClient = ( | |||
|
|
|||
| let referenceUtxos: ReadonlyArray<CoreUTxO.UTxO> = [] | |||
| if (tx.body.referenceInputs && tx.body.referenceInputs.length > 0) { | |||
| referenceUtxos = yield* provider.Effect.getUtxosByOutRef(tx.body.referenceInputs).pipe( | |||
| Effect.mapError( | |||
| (e) => new WalletNew.WalletError({ message: `Failed to fetch reference UTxOs: ${e.message}`, cause: e }) | |||
| referenceUtxos = yield* provider.effect | |||
| .getUtxosByOutRef(tx.body.referenceInputs) | |||
| .pipe( | |||
| Effect.mapError( | |||
| (e) => new WalletNew.WalletError({ message: `Failed to fetch reference UTxOs: ${e.message}`, cause: e }) | |||
| ) | |||
| ) | |||
| ) | |||
| } | |||
|
|
|||
| return yield* wallet.Effect.signTx(txOrHex, { ...context, referenceUtxos }) | |||
| return yield* wallet.effect.signTx(txOrHex, { ...context, referenceUtxos }) | |||
| }) | |||
There was a problem hiding this comment.
In createSigningClient, signTxWithAutoFetch forwards context (and a { ...context, referenceUtxos } object) to wallet.effect.signTx(). For ApiWalletEffect, signTx no longer accepts referenceUtxos, so this call can fail TypeScript excess-property checks and makes the implementation incompatible with ApiWallets. Consider branching on wallet.type === "api" to strip referenceUtxos (and skip auto-fetch) when delegating to an API wallet, while keeping the full context for SigningWallets.
| const fetchPrimaryAddress = (): Promise<CoreAddress.Address> => { | ||
| if (!addressPromise) { | ||
| addressPromise = (async () => { | ||
| const used = await api.getUsedAddresses() | ||
| const unused = await api.getUnusedAddresses() | ||
| const addrStr = used[0] ?? unused[0] | ||
| if (!addrStr) throw new WalletNew.WalletError({ message: "Wallet API returned no addresses", cause: null }) | ||
| try { |
There was a problem hiding this comment.
fetchPrimaryAddress caches the in-flight Promise in addressPromise, but if the first call rejects (e.g., wallet returns no addresses, transient provider issue), the rejected Promise will be cached permanently and subsequent calls will never retry. Consider clearing addressPromise back to null on rejection so later calls can recover.
| const fetchPrimaryRewardAddress = (): Promise<CoreRewardAddress.RewardAddress | null> => { | ||
| if (!rewardAddressPromise) { | ||
| rewardAddressPromise = api | ||
| .getRewardAddresses() | ||
| .then((rewards) => (rewards[0] ? Schema.decodeSync(CoreRewardAddress.RewardAddress)(rewards[0]) : null)) | ||
| } | ||
| return cachedAddress | ||
| return rewardAddressPromise |
There was a problem hiding this comment.
fetchPrimaryRewardAddress caches rewardAddressPromise without resetting it on rejection. A single failure (wallet API error or decode error) will permanently poison the cache for the lifetime of the wallet instance. Consider resetting the cached promise on failure (or caching only successful results).
ce3add9 to
844f45c
Compare
Replace manual Promise-based cache variables with Effect.cached — eliminates the null-reset-on-rejection pattern and the mixed Promise/Effect boundary. Effect.cached allocates a Deferred synchronously (safe for Effect.runSync at construction time) and replays success or failure to all subsequent callers. Caching failures permanently is acceptable here because a failed cip30Wallet instance is tied to a broken wallet-enable session and should be discarded.
- Move signing logic from Wallets.ts to new internal/Signing.ts - Extract client assembly to new internal/Client.ts - Rename WalletNew to Wallet, delete ClientImpl and dual modules - Simplify runEffectPromise: remove stack-cleaning mutation, preserve instanceof - Replace all Effect.runPromise with runEffectPromise across client layer - Unify provider method wiring (spread instead of manual .bind()) - Make ProviderError.cause optional, remove cause: null sentinels
Renames the
.Effectproperty to.effecton all SDK interfaces to follow JS conventions for instance properties and avoid confusion with theEffecttype import from the effect library.Changes
.Effect→.effectacross Provider, Wallet, Client, SignBuilder, SubmitBuilder, and TransactionResultChainandProviderErrorfrom package rootdelegateTointo dedicateddelegateToPool,delegateToDRep,delegateToPoolAndDRepfunctions (old function marked@deprecated)@returnstags across buildersBreaking Changes
All usages of
.Effectmust be updated to.effect: