Skip to content

refactor(widget): harden ids, values and type escape hatches - #612

Open
petar-omni wants to merge 8 commits into
mainfrom
refactor/type-hardening
Open

petar-omni wants to merge 8 commits into
mainfrom
refactor/type-hardening

Conversation

@petar-omni

@petar-omni petar-omni commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Decoded ids, keys, hashes and amounts no longer get widened back to string/number, and the escape hatches that bypassed them (as, !, undefined in optional keys) are now lint/compile errors.

f7cbb2a  keep branded ids and exact values past decoding
  EarnValidatorKey (was `ValidatorKey = string`)    fixes subnet validators never showing selected
  BalanceDataKey   route params → init params → position details → positions resource
  Borrow ids       ActionId / TransactionId / MarketId / IntegrationId through API ops + flow state
  Status checks    exhaustive Record<Status, …> maps (borrow action, workflow transaction)
  New brands       TransactionHash, WalletSignature, SignedTransactionPayload,
                   DirectTransactionId, BorrowPositionActionKey
  Numbers          confidential shares (Plain | Encrypted | Revealed), fees, entry limits,
                   TVL, price per share → ExactDecimal / bigint; malformed field drops only itself
16333d0  ban type assertions and enforce exact optional types
  biome            noUnsafeTypeAssertion (src), noNonNullAssertion, useExhaustiveSwitchCases,
                   noFloatingPromises, noMisusedPromises, noUselessTypeConversion
  tsconfig         exactOptionalPropertyTypes, noImplicitReturns
  ast-grep         no-unbranded-domain-identifier (id-like domain fields need a brand/union)
  types            Token-derived token helpers, WalletScopeOwner.address: WalletAddress,
                   EvmChainIds for EVM RPC, honest WalletRoutingId, WalletConnect topic/CAIP brands,
                   ContractAddress, per-event tracking properties, registry-only WidgetPath
  host config      unknown network key / malformed entry → drop entry + warning
f81c657  keep translated URLs as anchor hrefs (regression found in review)
2d4e64f  polyfill stream for wallet crypto dependencies
  vite             nodePolyfills include "stream": cipher-base / hash-base (Solana + Cardano
                   adapters via crypto-browserify) read require('stream').Transform at load
b6351cc  playground tracking log defaults to off
6db27a8  bump dependencies and toolchain
  bumped           effect 4.0.7 (+ .repos/effect pin), @effect/tsgo 0.63, Biome 2.6.3,
                   Angular build/cli 22.2.4, Vite 8.3.5, wagmi, viem, Next, react-router,
                   motion, i18next, knip, dependency-cruiser, jscpd; CI mise v2026.10.19
  biome 2.6        CHANGELOG.md excluded from markdown formatting; noComponentHookFactories
                   off (Effect tag matchers read as components); useReactCompiler ignores
                   "use no memo" → targeted suppression on the two useVirtualizer calls
  held             cosmjs / chain-registry, universal-provider, oxc-transform-react,
                   @solana/web3.js 3, TypeScript 7, @meshsdk/wallet 2 beta
93cf2ee  Effect 4.1; mise owns pnpm
  bumped           effect 4.1.0 (+ .repos/effect pin), @tanstack/react-virtual 3.14.23
  package.json     devEngines removed: pnpm was switching to the 12.14.0 it locked,
                   overriding mise's 12.15.0; stale lock document removed
  @types/node      ^24.19.2 (matches Node 24), declared in widget + Vite/Angular examples

229 src casts → 0, except 11 single-line suppressions, each naming the library constraint (wagmi ×4, Solana adapter ×2, cosmos-kit, viem, Effect Atom.transform, React lazy wrapper ×2).

Evidence

  • Before: the pending-action validator modal stored addresses but SelectValidator checks selected.has(item.key); subnet validators (address:subnetId) never appeared selected.
    After: position-details-action-model.test.ts › "selects subnet validators by key and submits their addresses" — red, then green.
  • Before: { validatorsConfig: { etheruem: … } } silently never applied; a bad entry value rejected the whole host config.
    After: widget-config-boundary.test.ts (9 new) — unknown key / malformed entry dropped with a warning, rest of config applies.
  • Before: routes and init params accepted any balanceId, pendingaction and borrow position action key.
    After: widget-routes.test.ts and param-validation.dom.test.tsx reject values outside the grammar.
  • Before: a malformed fee/TVL/price-per-share stayed a raw string or rejected the yield.
    After: earn-models.test.ts (8 new) — only that field drops.
  • Before: playground first load logged Module "stream" has been externalized … Cannot access "stream.Transform" twice.
    After: same load, no warning; wallet connectors still initialise.
  • Before: pnpm --version in the repo → 12.14.0 (mise launched 12.15.0).
    After: 12.15.0; pnpm install --frozen-lockfile passes.
  • pnpm check: lint, hygiene, 224 unit / 50 dom / 42 browser test files, builds — all pass. pnpm test:smoke: Vite package/bundle, Next.js, Angular hosts pass.

Merge Danger

Door: two-way

Revertable; no persisted-data or API-contract migrations.

Blast Radius: host-config

  • Public TS types: validatorsConfig, preferredTokenYieldsPerNetwork, chainIconMapping are now network-keyed partial records; TypeScript hosts using arbitrary string keys get a compile error. SKTxMeta only widened.
  • Edge/error paths that now fail loudly instead of silently: wagmi connect with no accounts; invalid Cosmos chain id fails before the WalletConnect proposal; Ledger fallback payload (Solana in practice) checked against Ledger's schemaRawTransaction; non-hex direct-tx / permit / unwrap values.
  • Borrow transaction signed but without a returned hash now has hash: null instead of showing the signed payload as a hash.
  • Validator TVL no longer falls back to tvlRaw (base units shown as token units).
  • Removed dead position-label code (yieldLabelDto was always null) and its EN/FR strings.
  • Published build now ships a stream polyfill in the wallet-connector chunks.
  • Contributors: pnpm comes only from mise; npm install and non-mise pnpm are no longer blocked by devEngines.

Decoded ids, keys, hashes and amounts were widened back to string or
number in helpers, feature state and service interfaces, so mixing id
kinds or renaming a literal compiled silently.

- Replace the ValidatorKey alias with EarnValidatorKey. This fixes subnet
  validators never showing as selected in the pending-action modal.
- Carry BalanceDataKey from position routes and init params through the
  position-details flow and the positions resource.
- Keep borrow ActionId, TransactionId, MarketId, IntegrationId and
  TokenAddress through API operations, flow state and activity lookups.
- Classify borrow action and workflow transaction statuses exhaustively;
  decode init params pendingaction and validator to their domain types.
- Type the dashboard page key and yield flow route group as tab | WidgetPath.
- Add TransactionHash, WalletSignature, SignedTransactionPayload,
  DirectTransactionId and BorrowPositionActionKey brands, and remove the
  casts between them.
- Decode confidential balance shares, fees, entry limits, TVL and price
  per share to exact values; a malformed field drops only itself.
Casts, non-null assertions and optional keys set to undefined let values
bypass the branded types the previous change introduced.

- Enable Biome noUnsafeTypeAssertion for widget src, noNonNullAssertion,
  exhaustive switches, promise misuse rules, and tsconfig
  noImplicitReturns and exactOptionalPropertyTypes. Remaining assertions
  are single-line suppressions at third-party library seams.
- Add the no-unbranded-domain-identifier ast-grep rule: id-like domain
  fields must use a brand or literal union.
- Type token helpers from Token, WalletScopeOwner.address as WalletAddress,
  yield-id predicates as YieldId, EVM RPC chain ids as EvmChainIds, and
  wallet routing ids honestly instead of strings disguised as numbers.
- Add ContractAddress and WalletConnect topic, CAIP chain and account
  brands; the route registry alone mints WidgetPath.
- Check tracking properties per event and page at compile time.
- Host config: an unknown network key or malformed entry in
  validatorsConfig, preferredTokenYieldsPerNetwork, chainIconMapping or
  yieldProviderOrder drops only that entry with a warning. Public types for
  these settings are keyed by network.
Trans passes a link's URL to SKAnchor as an array of text children, so
the string-only fallback added with the assertion ban produced href=""
in the help modal and Terms links. Join the text children instead.
@changeset-bot

changeset-bot Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 93cf2ee

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 387 files, which is 237 over the limit of 150.

To get a review, reduce the PR to 150 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to Team to raise the limit.

Usage-priced reviews support at most 300 files.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: 3f212b23-69db-4efe-b8d4-60a9f1d110c7
Commits

Reviewing files that changed from the base of the PR and between 584fac8 and 93cf2ee.

Files ignored due to path filters: 1
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
Files selected for processing: 387
  • .repos/effect
  • biome.json
  • package.json
  • packages/examples/with-angular/package.json
  • packages/examples/with-vite-bundled/package.json
  • packages/examples/with-vite-bundled/src/main.ts
  • packages/examples/with-vite/package.json
  • packages/examples/with-vite/src/main.tsx
  • packages/widget/package.json
  • packages/widget/playground/panel.tsx
  • packages/widget/playground/playground-config.ts
  • packages/widget/scripts/architecture/check-architecture.ts
  • packages/widget/scripts/architecture/dependency-cruiser.config.mts
  • packages/widget/scripts/generated-api/generated-schema-safety.ts
  • packages/widget/scripts/smoke/check-production-host-consumption.ts
  • packages/widget/src/app/composition/providers/theme-wrapper.tsx
  • packages/widget/src/app/composition/providers/widget-presentation.tsx
  • packages/widget/src/app/layouts/dashboard/dashboard-routes.tsx
  • packages/widget/src/app/layouts/dashboard/dashboard-tabs/index.tsx
  • packages/widget/src/app/layouts/dashboard/dashboard-tabs/tab.tsx
  • packages/widget/src/app/runtime/deep-link-coordinator.ts
  • packages/widget/src/domain/action/action-command.ts
  • packages/widget/src/domain/action/direct-transaction.ts
  • packages/widget/src/domain/action/models.ts
  • packages/widget/src/domain/action/pending-action.ts
  • packages/widget/src/domain/borrow/execution/action.ts
  • packages/widget/src/domain/borrow/execution/transaction.ts
  • packages/widget/src/domain/borrow/network.ts
  • packages/widget/src/domain/borrow/positions/position-action-key.ts
  • packages/widget/src/domain/borrow/responses.ts
  • packages/widget/src/domain/borrow/risk/collateral-state.ts
  • packages/widget/src/domain/borrow/risk/market-risk.ts
  • packages/widget/src/domain/decoding/response-schema.ts
  • packages/widget/src/domain/earn/confidential.ts
  • packages/widget/src/domain/earn/kyc.ts
  • packages/widget/src/domain/earn/models.ts
  • packages/widget/src/domain/earn/reward-rate.ts
  • packages/widget/src/domain/earn/stake.ts
  • packages/widget/src/domain/earn/validator.ts
  • packages/widget/src/domain/earn/yield-provider-order.ts
  • packages/widget/src/domain/earn/yield.ts
  • packages/widget/src/domain/finance/funded-balance.ts
  • packages/widget/src/domain/finance/gas.ts
  • packages/widget/src/domain/finance/price.ts
  • packages/widget/src/domain/health/models.ts
  • packages/widget/src/domain/identity/identifiers.ts
  • packages/widget/src/domain/portfolio/models.ts
  • packages/widget/src/domain/portfolio/positions.ts
  • packages/widget/src/domain/portfolio/rewards.ts
  • packages/widget/src/domain/portfolio/token-balance.ts
  • packages/widget/src/domain/token/token.ts
  • packages/widget/src/domain/wallet/models.ts
  • packages/widget/src/domain/wallet/network.ts
  • packages/widget/src/domain/wallet/wallet-policy.ts
  • packages/widget/src/domain/wallet/wallet-scope.ts
  • packages/widget/src/features/activity/model/activity-action-details.ts
  • packages/widget/src/features/activity/model/activity-enrichment.ts
  • packages/widget/src/features/activity/react/activity-action-route.tsx
  • packages/widget/src/features/activity/state/enrichment.ts
  • packages/widget/src/features/activity/state/page-resources.ts
  • packages/widget/src/features/borrow-transaction-flow/model/borrow-completion.ts
  • packages/widget/src/features/borrow-transaction-flow/model/borrow-transaction-flow.ts
  • packages/widget/src/features/borrow-transaction-flow/model/borrow-transaction-workflow.ts
  • packages/widget/src/features/borrow-transaction-flow/state/execution-page.ts
  • packages/widget/src/features/borrow/action-preparation/model/open-position.ts
  • packages/widget/src/features/borrow/action-preparation/model/withdraw.ts
  • packages/widget/src/features/borrow/amount-input/ui/amount-field.tsx
  • packages/widget/src/features/borrow/borrow-entry/model/borrow-entry.ts
  • packages/widget/src/features/borrow/borrow-entry/model/details.ts
  • packages/widget/src/features/borrow/borrow-entry/model/market-groups.ts
  • packages/widget/src/features/borrow/borrow-entry/state/borrow-entry.ts
  • packages/widget/src/features/borrow/borrow-entry/ui/components/asset-selector.tsx
  • packages/widget/src/features/borrow/borrow-entry/ui/components/market-select-modal.tsx
  • packages/widget/src/features/borrow/market-position/model/action-form.ts
  • packages/widget/src/features/borrow/market-position/model/details.ts
  • packages/widget/src/features/borrow/market-position/state/action-form.ts
  • packages/widget/src/features/borrow/market-position/ui/actions.page.tsx
  • packages/widget/src/features/borrow/market-position/ui/components/metric-cards.tsx
  • packages/widget/src/features/borrow/positions/react/use-borrow-positions.ts
  • packages/widget/src/features/borrow/positions/state/positions.ts
  • packages/widget/src/features/earn/model/pending-action-deep-link.ts
  • packages/widget/src/features/earn/state/earn-selection/catalog/catalog.ts
  • packages/widget/src/features/earn/state/earn-selection/model/form.ts
  • packages/widget/src/features/earn/state/earn-selection/model/view.ts
  • packages/widget/src/features/earn/state/earn-selection/state/atoms.ts
  • packages/widget/src/features/earn/state/earn-selection/state/resource-observations.ts
  • packages/widget/src/features/earn/state/earn-selection/types.ts
  • packages/widget/src/features/earn/state/token-selection.ts
  • packages/widget/src/features/earn/ui/compact/earn-page/components/select-provider/index.tsx
  • packages/widget/src/features/earn/ui/compact/earn-page/components/select-validator-section/select-validator-trigger.tsx
  • packages/widget/src/features/earn/ui/compact/earn-page/earn.page.tsx
  • packages/widget/src/features/earn/ui/components/select-opportunity-list-item/index.tsx
  • packages/widget/src/features/earn/ui/components/select-yield-section/select-yield-reward-details.tsx
  • packages/widget/src/features/earn/ui/dashboard/earn-details/components/network-detail-value.tsx
  • packages/widget/src/features/earn/ui/dashboard/earn-details/components/provider-selection-card.tsx
  • packages/widget/src/features/earn/ui/dashboard/earn-details/earn-details-model.tsx
  • packages/widget/src/features/earn/ui/dashboard/earn-details/reward-rate-chart.tsx
  • packages/widget/src/features/navigation/ui/widget-navigate.tsx
  • packages/widget/src/features/portfolio/react/use-position-list-item.ts
  • packages/widget/src/features/portfolio/state/read-models/position-list-item.ts
  • packages/widget/src/features/portfolio/state/read-models/positions.ts
  • packages/widget/src/features/portfolio/state/read-models/summary.ts
  • packages/widget/src/features/portfolio/ui/components/earn-position-list-item.tsx
  • packages/widget/src/features/portfolio/ui/dashboard/positions/hooks/use-position-list-item.ts
  • packages/widget/src/features/position-details/model/exit-receive-token.ts
  • packages/widget/src/features/position-details/model/flow-actions.ts
  • packages/widget/src/features/position-details/model/position-overview.ts
  • packages/widget/src/features/position-details/react/use-pending-actions.ts
  • packages/widget/src/features/position-details/react/use-validator-addresses-handling.ts
  • packages/widget/src/features/position-details/state/actions/pending-action.ts
  • packages/widget/src/features/position-details/state/actions/reveal.ts
  • packages/widget/src/features/position-details/state/details-view.ts
  • packages/widget/src/features/position-details/state/stake-entry.ts
  • packages/widget/src/features/position-details/state/stake-view.ts
  • packages/widget/src/features/position-details/state/workflow-view.ts
  • packages/widget/src/features/position-details/state/workflow.ts
  • packages/widget/src/features/position-details/ui/compact/components/position-balances.tsx
  • packages/widget/src/features/position-details/ui/components/amount-block.tsx
  • packages/widget/src/features/position-details/ui/components/position-details-pending-actions.tsx
  • packages/widget/src/features/position-details/ui/components/position-details-validator-modal.tsx
  • packages/widget/src/features/position-details/ui/components/static-action-block.tsx
  • packages/widget/src/features/position-details/ui/dashboard/components/position-details-stake-actions.tsx
  • packages/widget/src/features/position-details/ui/dashboard/hooks/use-position-details-stake.ts
  • packages/widget/src/features/tracking/react/use-track-event.ts
  • packages/widget/src/features/tracking/react/use-track-page.ts
  • packages/widget/src/features/tracking/state/commands.ts
  • packages/widget/src/features/wallet/state/wallet-modal.ts
  • packages/widget/src/features/wallet/ui/wallet-dialog/chain-icon.tsx
  • packages/widget/src/features/wallet/ui/wallet-dialog/index.tsx
  • packages/widget/src/features/widget-configuration/react/use-widget-config.ts
  • packages/widget/src/features/widget-configuration/state/widget-config.ts
  • packages/widget/src/features/widget-shell/react/use-header.ts
  • packages/widget/src/features/widget-shell/ui/compact/details/components/tab.tsx
  • packages/widget/src/features/widget-shell/ui/compact/details/components/tabs.tsx
  • packages/widget/src/features/yield-entry/model/confidential-token-balance.ts
  • packages/widget/src/features/yield-entry/model/yield-entry.ts
  • packages/widget/src/features/yield-entry/ui/components/select-validator/index.tsx
  • packages/widget/src/features/yield-entry/ui/components/select-validator/meta-info.tsx
  • packages/widget/src/features/yield-entry/ui/components/select-validator/select-validator-list.tsx
  • packages/widget/src/features/yield-summary/model/estimated-rewards.ts
  • packages/widget/src/features/yield-summary/model/yield-details-formatters.ts
  • packages/widget/src/features/yield-summary/model/yield-summary.ts
  • packages/widget/src/features/yield-summary/react/use-yield-meta-info.tsx
  • packages/widget/src/features/yield-summary/ui/components/meta-info/index.tsx
  • packages/widget/src/features/yield-summary/ui/components/reward-token-details/index.tsx
  • packages/widget/src/features/yield-transaction-flow/model/yield-transaction-flow.ts
  • packages/widget/src/features/yield-transaction-flow/model/yield-transaction-workflow.ts
  • packages/widget/src/features/yield-transaction-flow/state/review-page.ts
  • packages/widget/src/features/yield-transaction-flow/state/yield-summary.ts
  • packages/widget/src/features/yield-transaction-flow/ui/complete/hooks/use-complete.hook.ts
  • packages/widget/src/features/yield-transaction-flow/ui/complete/pages/common.page.tsx
  • packages/widget/src/features/yield-transaction-flow/ui/review/hooks/use-pending-review.hook.ts
  • packages/widget/src/features/yield-transaction-flow/ui/review/hooks/use-unstake-review.hook.ts
  • packages/widget/src/features/yield-transaction-flow/ui/review/pages/common-page/components/review-top-section.tsx
  • packages/widget/src/public-api/types.ts
  • packages/widget/src/resources/borrow-positions/borrow-positions.ts
  • packages/widget/src/resources/earn-token-catalog/earn-token-catalog.ts
  • packages/widget/src/resources/gas-token-balances/gas-token-balances.ts
  • packages/widget/src/resources/resource-failure-presentation.ts
  • packages/widget/src/resources/reward-summaries/reward-summaries.ts
  • packages/widget/src/resources/validator-directory/validator-directory.ts
  • packages/widget/src/resources/yield-positions/yield-positions.ts
  • packages/widget/src/services/api/borrow-operations.ts
  • packages/widget/src/services/api/legacy-resource-source.ts
  • packages/widget/src/services/api/operations.ts
  • packages/widget/src/services/api/resource-sources.ts
  • packages/widget/src/services/config/theme-decoder.ts
  • packages/widget/src/services/config/widget-config-boundary.ts
  • packages/widget/src/services/config/widget-config.ts
  • packages/widget/src/services/evm-rpc/evm-rpc.ts
  • packages/widget/src/services/navigation/widget-routes.ts
  • packages/widget/src/services/persistence/widget-persistence.ts
  • packages/widget/src/services/tracking/tracking-service.ts
  • packages/widget/src/services/tracking/types.ts
  • packages/widget/src/services/transaction-workflow/internal/confirmation.ts
  • packages/widget/src/services/transaction-workflow/internal/held-hash-registration.ts
  • packages/widget/src/services/transaction-workflow/internal/model.ts
  • packages/widget/src/services/transaction-workflow/internal/preparation.ts
  • packages/widget/src/services/transaction-workflow/internal/signing.ts
  • packages/widget/src/services/transaction-workflow/internal/submission.ts
  • packages/widget/src/services/transaction-workflow/transaction-workflow-model.ts
  • packages/widget/src/services/translation/English/translations.json
  • packages/widget/src/services/translation/French/translations.json
  • packages/widget/src/services/translation/widget-translation.ts
  • packages/widget/src/services/wallet/default-wagmi-config.ts
  • packages/widget/src/services/wallet/external-provider.ts
  • packages/widget/src/services/wallet/init-params.ts
  • packages/widget/src/services/wallet/internal/adapters/cardano/cardano-connector.ts
  • packages/widget/src/services/wallet/internal/adapters/cardano/driver.ts
  • packages/widget/src/services/wallet/internal/adapters/cosmos/chains.ts
  • packages/widget/src/services/wallet/internal/adapters/cosmos/chains/get-chain-registry.ts
  • packages/widget/src/services/wallet/internal/adapters/cosmos/chains/index.ts
  • packages/widget/src/services/wallet/internal/adapters/cosmos/config.ts
  • packages/widget/src/services/wallet/internal/adapters/cosmos/cosmos-connector.ts
  • packages/widget/src/services/wallet/internal/adapters/cosmos/driver.ts
  • packages/widget/src/services/wallet/internal/adapters/cosmos/extension-wallet.ts
  • packages/widget/src/services/wallet/internal/adapters/cosmos/wallet-connect.ts
  • packages/widget/src/services/wallet/internal/adapters/cosmos/wallet-manager.ts
  • packages/widget/src/services/wallet/internal/adapters/evm/chains.ts
  • packages/widget/src/services/wallet/internal/adapters/evm/driver.ts
  • packages/widget/src/services/wallet/internal/adapters/evm/finery-wallet-list/index.ts
  • packages/widget/src/services/wallet/internal/adapters/evm/injected-availability.ts
  • packages/widget/src/services/wallet/internal/adapters/evm/transaction.ts
  • packages/widget/src/services/wallet/internal/adapters/evm/utils.ts
  • packages/widget/src/services/wallet/internal/adapters/evm/wallets.ts
  • packages/widget/src/services/wallet/internal/adapters/external-provider/driver.ts
  • packages/widget/src/services/wallet/internal/adapters/external-provider/index.ts
  • packages/widget/src/services/wallet/internal/adapters/ledger/config.ts
  • packages/widget/src/services/wallet/internal/adapters/ledger/driver.ts
  • packages/widget/src/services/wallet/internal/adapters/ledger/ledger-connector.ts
  • packages/widget/src/services/wallet/internal/adapters/ledger/ledger-live-connector-meta.ts
  • packages/widget/src/services/wallet/internal/adapters/ledger/polkadot-ledger-transaction.ts
  • packages/widget/src/services/wallet/internal/adapters/ledger/prepare-ledger-live-transaction.ts
  • packages/widget/src/services/wallet/internal/adapters/ledger/utils.ts
  • packages/widget/src/services/wallet/internal/adapters/safe/driver.ts
  • packages/widget/src/services/wallet/internal/adapters/solana/driver.ts
  • packages/widget/src/services/wallet/internal/adapters/solana/solana-connector.ts
  • packages/widget/src/services/wallet/internal/adapters/stellar/driver.ts
  • packages/widget/src/services/wallet/internal/adapters/stellar/stellar-connector.ts
  • packages/widget/src/services/wallet/internal/adapters/substrate/driver.ts
  • packages/widget/src/services/wallet/internal/adapters/substrate/substrate-connector.ts
  • packages/widget/src/services/wallet/internal/adapters/substrate/substrate-wallet-connect.ts
  • packages/widget/src/services/wallet/internal/adapters/ton/driver.ts
  • packages/widget/src/services/wallet/internal/adapters/ton/ton-connector.ts
  • packages/widget/src/services/wallet/internal/adapters/ton/transaction.ts
  • packages/widget/src/services/wallet/internal/adapters/tron/driver.ts
  • packages/widget/src/services/wallet/internal/adapters/tron/tron-connector.ts
  • packages/widget/src/services/wallet/internal/adapters/tron/tron-wallet-connect.ts
  • packages/widget/src/services/wallet/internal/adapters/wagmi-connect-result.ts
  • packages/widget/src/services/wallet/internal/adapters/wagmi-connector-events.ts
  • packages/widget/src/services/wallet/internal/normalize-chain-id.ts
  • packages/widget/src/services/wallet/internal/platform/stellar-wallets-kit-platform.ts
  • packages/widget/src/services/wallet/internal/platform/wagmi-operations.ts
  • packages/widget/src/services/wallet/internal/platform/wallet-connect-presentation.ts
  • packages/widget/src/services/wallet/internal/platform/wallet-connect-protocol.ts
  • packages/widget/src/services/wallet/internal/runtime/external-provider-sync.ts
  • packages/widget/src/services/wallet/internal/runtime/initial-connection.ts
  • packages/widget/src/services/wallet/internal/runtime/router.ts
  • packages/widget/src/services/wallet/internal/runtime/solana-connector-membership.ts
  • packages/widget/src/services/wallet/internal/runtime/solana-runtime.ts
  • packages/widget/src/services/wallet/internal/runtime/solana-wallet-connect-adapter.ts
  • packages/widget/src/services/wallet/internal/runtime/state-projection.ts
  • packages/widget/src/services/wallet/internal/runtime/state.ts
  • packages/widget/src/services/wallet/internal/runtime/wagmi-actions.ts
  • packages/widget/src/services/wallet/internal/runtime/wagmi-config.ts
  • packages/widget/src/services/wallet/internal/wagmi-seam.ts
  • packages/widget/src/services/wallet/wallet-chain-icons.ts
  • packages/widget/src/services/wallet/wallet-commands.ts
  • packages/widget/src/services/wallet/wallet-connectors.ts
  • packages/widget/src/services/wallet/wallet-descriptors.ts
  • packages/widget/src/services/wallet/wallet-transactions.ts
  • packages/widget/src/services/zama/revealed-balances.ts
  • packages/widget/src/services/zama/zama-service.ts
  • packages/widget/src/shared/assets/network-logo.ts
  • packages/widget/src/shared/effect/merge-deep.ts
  • packages/widget/src/shared/effect/pagination.ts
  • packages/widget/src/shared/lib/borrow-token.ts
  • packages/widget/src/shared/lib/formatters.ts
  • packages/widget/src/shared/styles/recipe-variant.ts
  • packages/widget/src/shared/styles/theme/atoms.css.ts
  • packages/widget/src/shared/styles/theme/variant-overrides/finery.ts
  • packages/widget/src/shared/styles/tokens/typography.ts
  • packages/widget/src/shared/ui/components/amount-token-section/index.tsx
  • packages/widget/src/shared/ui/components/collapsible/index.tsx
  • packages/widget/src/shared/ui/components/lazy-component/index.tsx
  • packages/widget/src/shared/ui/components/number-input/index.tsx
  • packages/widget/src/shared/ui/components/select-modal/index.tsx
  • packages/widget/src/shared/ui/components/token-icon/network-icon-image/index.tsx
  • packages/widget/src/shared/ui/components/token-icon/token-icon-container/hooks/use-variant-network-urls.ts
  • packages/widget/src/shared/ui/components/token-icon/token-icon-container/hooks/use-variant-token-urls.ts
  • packages/widget/src/shared/ui/components/token-icon/token-icon-container/index.tsx
  • packages/widget/src/shared/ui/components/token-icon/token-icon-image/index.tsx
  • packages/widget/src/shared/ui/components/virtual-list/index.tsx
  • packages/widget/src/shared/ui/primitives/anchor/index.tsx
  • packages/widget/src/shared/ui/primitives/box/index.tsx
  • packages/widget/src/shared/ui/primitives/content-loader/index.tsx
  • packages/widget/src/shared/ui/primitives/icons/check.tsx
  • packages/widget/src/shared/ui/primitives/icons/copy.tsx
  • packages/widget/src/shared/ui/primitives/image/index.tsx
  • packages/widget/src/shared/ui/primitives/list/list-item.tsx
  • packages/widget/src/shared/ui/primitives/typography/styles.css.ts
  • packages/widget/src/shared/ui/widget-presentation.tsx
  • packages/widget/tests/app/journeys/deep-links-flow/param-validation.dom.test.tsx
  • packages/widget/tests/app/journeys/deep-links-flow/setup.ts
  • packages/widget/tests/app/journeys/staking-flow/setup.ts
  • packages/widget/tests/app/journeys/trust-incentive-apy/setup.ts
  • packages/widget/tests/app/layouts/compact/compact-position-details-redirects.dom.test.tsx
  • packages/widget/tests/app/runtime/application-runtime-identity.dom.test.tsx
  • packages/widget/tests/app/runtime/pending-action-deep-link-route.test.ts
  • packages/widget/tests/app/runtime/transaction-workflow-event-projection.test.ts
  • packages/widget/tests/app/runtime/widget-runtime-services.test.ts
  • packages/widget/tests/domain/action/action-command-truncation.test.ts
  • packages/widget/tests/domain/borrow/risk-position.test.ts
  • packages/widget/tests/domain/confidential.test.ts
  • packages/widget/tests/domain/decoding/api-forward-compatibility.test.ts
  • packages/widget/tests/domain/earn/earn-models.test.ts
  • packages/widget/tests/domain/earn/reward-rate.test.ts
  • packages/widget/tests/domain/finance/funded-balance.test.ts
  • packages/widget/tests/domain/finance/price.test.ts
  • packages/widget/tests/domain/portfolio/dashboard-models.test.ts
  • packages/widget/tests/domain/portfolio/position-derivations.test.ts
  • packages/widget/tests/domain/token/token.test.ts
  • packages/widget/tests/features/activity/activity-action-details.test.ts
  • packages/widget/tests/features/activity/activity-action-list-item.test.ts
  • packages/widget/tests/features/activity/activity-actions.test.ts
  • packages/widget/tests/features/activity/activity-details.dom.test.tsx
  • packages/widget/tests/features/activity/activity-workflow.dom.test.tsx
  • packages/widget/tests/features/borrow-transaction-flow/borrow-execution-flow.browser.test.tsx
  • packages/widget/tests/features/borrow-transaction-flow/borrow-flow-operations.test.ts
  • packages/widget/tests/features/borrow/borrow-entry/atoms.test.ts
  • packages/widget/tests/features/borrow/borrow-entry/market-groups.test.ts
  • packages/widget/tests/features/borrow/market-position/action-form.test.ts
  • packages/widget/tests/features/earn/earn-details-model.test.tsx
  • packages/widget/tests/features/earn/earn-entry-reset.test.ts
  • packages/widget/tests/features/earn/earn-facade.test.ts
  • packages/widget/tests/features/earn/earn-initial-validator.test.ts
  • packages/widget/tests/features/earn/earn-refetch-failure.test.ts
  • packages/widget/tests/features/earn/earn-selection.test.ts
  • packages/widget/tests/features/earn/history-chart-points.test.ts
  • packages/widget/tests/features/earn/validator-selection-limit.test.ts
  • packages/widget/tests/features/mount-animation/mount-animation.test.ts
  • packages/widget/tests/features/portfolio/positions-list-item.browser.test.tsx
  • packages/widget/tests/features/position-details/page-workflow-state.dom.test.tsx
  • packages/widget/tests/features/position-details/position-details-action-model.test.ts
  • packages/widget/tests/features/position-details/position-details-action-tabs.browser.test.tsx
  • packages/widget/tests/features/position-details/position-details-exit-command.test.ts
  • packages/widget/tests/features/position-details/position-details-stake-token.test.ts
  • packages/widget/tests/features/position-details/position-details-stake-validators.test.ts
  • packages/widget/tests/features/position-details/position-details-workflow.test.ts
  • packages/widget/tests/features/position-details/position-details-yield-entry.browser.test.tsx
  • packages/widget/tests/features/position-details/position-overview-model.test.tsx
  • packages/widget/tests/features/position-details/position-source-details.browser.test.tsx
  • packages/widget/tests/features/tracking/tracking-ingress.dom.test.tsx
  • packages/widget/tests/features/wallet/external-provider-lifecycle.dom.test.tsx
  • packages/widget/tests/features/wallet/sk-wallet.dom.test.tsx
  • packages/widget/tests/features/wallet/wallet-scope-route.dom.test.tsx
  • packages/widget/tests/features/yield-entry/yield-entry-input-token.test.ts
  • packages/widget/tests/features/yield-entry/yield-entry-submission.test.ts
  • packages/widget/tests/features/yield-flow-confidential.test.ts
  • packages/widget/tests/features/yield-transaction-flow/yield-completion-urls.test.ts
  • packages/widget/tests/features/yield-transaction-flow/yield-flow-operations.test.ts
  • packages/widget/tests/features/yield-transaction-flow/yield-flow-review-page.test.ts
  • packages/widget/tests/features/yield-transaction-flow/yield-flow-route.dom.test.tsx
  • packages/widget/tests/features/yield-transaction-flow/yield-review-fees.browser.test.tsx
  • packages/widget/tests/features/yield-transaction-flow/yield-steps-view.test.ts
  • packages/widget/tests/features/yield-transaction-flow/yield-transaction-flow-interface.test.ts
  • packages/widget/tests/fixtures/index.ts
  • packages/widget/tests/services/api/api-retries.test.ts
  • packages/widget/tests/services/api/api-service.test.ts
  • packages/widget/tests/services/config/widget-config-boundary.test.ts
  • packages/widget/tests/services/navigation/widget-routes.test.ts
  • packages/widget/tests/services/revealed-balances.test.ts
  • packages/widget/tests/services/semantic-invalidation.test.ts
  • packages/widget/tests/services/tracking/tracking-service.test.ts
  • packages/widget/tests/services/transaction-workflow/confidential-transaction-workflow.test.ts
  • packages/widget/tests/services/transaction-workflow/transaction-workflow-model.test.ts
  • packages/widget/tests/services/transaction-workflow/transaction-workflow-runtime.test.ts
  • packages/widget/tests/services/translation/widget-translation.test.ts
  • packages/widget/tests/services/wallet/ecosystem-connector-gate.dom.test.ts
  • packages/widget/tests/services/wallet/evm-wallet-driver.test.ts
  • packages/widget/tests/services/wallet/evm-wallet-provider.dom.test.ts
  • packages/widget/tests/services/wallet/external-provider-connector.test.ts
  • packages/widget/tests/services/wallet/external-provider-contract.test.ts
  • packages/widget/tests/services/wallet/external-provider-wallet-driver.test.ts
  • packages/widget/tests/services/wallet/prepare-ledger-live-transaction.test.ts
  • packages/widget/tests/services/wallet/solana-wallet-connect-adapter.browser.test.ts
  • packages/widget/tests/services/wallet/stellar-wallets-kit-platform.test.ts
  • packages/widget/tests/services/wallet/tron-wallet-connect.test.ts
  • packages/widget/tests/services/wallet/wagmi-connector-events.test.ts
  • packages/widget/tests/services/wallet/wallet-atoms.test.ts
  • packages/widget/tests/services/wallet/wallet-connect-presentation.test.ts
  • packages/widget/tests/services/wallet/wallet-connect-protocol.test.ts
  • packages/widget/tests/services/wallet/wallet-router.test.ts
  • packages/widget/tests/services/wallet/wallet-state.test.ts
  • packages/widget/tests/services/zama-service.test.ts
  • packages/widget/tests/shared/ui/primitives/anchor.dom.test.tsx
  • packages/widget/tests/utils/services/tracking-service.test.ts
  • packages/widget/tests/utils/services/tracking-service.ts
  • packages/widget/tests/utils/transaction-workflow-test-kit.test.ts
  • packages/widget/tests/utils/wallet-connect-picker.tsx
  • packages/widget/tests/utils/wallet-connect.ts
  • packages/widget/vite/vite.config.base.ts
  • pnpm-workspace.yaml
  • tools/ast-grep/rule-tests/no-unbranded-domain-identifier-test.yml
  • tools/ast-grep/rules/no-unbranded-domain-identifier.yml
  • tools/setup-mise.sh
  • tsconfig.base.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@aws-amplify-eu-central-1

Copy link
Copy Markdown

This pull request is automatically being deployed by Amplify Hosting (learn more).

Access this pull request here: https://pr-612.df4xyoi0xyeak.amplifyapp.com

@aws-amplify-eu-central-1

Copy link
Copy Markdown

This pull request is automatically being deployed by Amplify Hosting (learn more).

Access this pull request here: https://pr-612.d2ribjy8evqo6h.amplifyapp.com

The non-null cleanup moved worker construction into a named arrow inside
page.evaluate. tsx compiles named functions to `__name(...)`, which the
browser page does not define, so the production consumer smoke failed.
cipher-base and hash-base, pulled in by the Solana and Cardano wallet
adapters through crypto-browserify, read require('stream').Transform at
load. Vite externalized stream, so dev logged a warning per package and
the hash classes lost their Transform base. Polyfill stream alongside
buffer and crypto.
Logging every tracked event and page view to the console is noise by
default; enable it from the panel when needed.
Effect 4.0.7 (with the .repos/effect pin), @effect/tsgo 0.63, Biome 2.6.3,
Angular build/cli 22.2.4, Vite 8.3.5, wagmi 3.7.9, viem 2.57.11, Next 16.4.3,
react-router 8.5, motion 14.6, i18next, knip, dependency-cruiser, jscpd,
ledger wallet API and Zama SDK patches; mise v2026.10.19 in CI.

Biome 2.6 formats markdown and adds noComponentHookFactories: exclude the
release-please CHANGELOG, and turn the rule off since Effect tag matchers
read as nested components. Its React Compiler check ignores "use no memo",
so the opted-out virtual lists carry a targeted suppression. The new tsgo
build types the spied startViewTransition as callback-only; the test mock
now declares both accepted forms.

Held: cosmjs, cosmjs-types, chain-registry (cosmos-kit 2.18),
universal-provider (appkit pin), oxc-transform-react (plugin-react peer),
@solana/web3.js 3, TypeScript 7 (Angular peer), @meshsdk/wallet 2 beta,
and Node 24 and pnpm 12.15 (newer releases are under the 3-day age gate).
@socket-security

socket-security Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

@petar-omni
petar-omni force-pushed the refactor/type-hardening branch 2 times, most recently from 22ffd68 to 8f2cf78 Compare October 29, 2026 14:02
Bump Effect to 4.1.0 (with the .repos/effect pin) and
@tanstack/react-virtual to 3.14.23. Declare @types/node (^24.19.2, matching
the Node 24 toolchain) in the widget and the Vite and Angular examples so
peers no longer auto-install a different major.

devEngines.packageManager made pnpm record a version in pnpm-lock.yaml
(12.14.0) and switch to it, overriding the 12.15.0 mise pins locally and
in CI. Drop devEngines and the stale package-manager lock document; the
README and AGENTS.md already make mise the source of the pnpm version.
@petar-omni
petar-omni force-pushed the refactor/type-hardening branch from 8f2cf78 to 93cf2ee Compare October 29, 2026 14:32

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant