Skip to content

TypeScript compilation fails with @1inch/aqua-sdk v0.1.0 due to viem version incompatibility #20

Description

@dennisonbertram

TypeScript compilation fails with @1inch/aqua-sdk v0.1.0 due to viem version incompatibility

Description

The @1inch/aqua-sdk v0.1.0 fails TypeScript compilation with "Type instantiation is excessively deep" errors from viem's type definitions, making the SDK unusable in TypeScript projects.

Environment

  • SDK Version: @1inch/aqua-sdk@0.1.0
  • TypeScript: 5.7.2
  • viem: 2.40.0 (resolved from ^2.21.0 dependency)
  • Node: v23.3.0

Minimal Reproduction

  1. Install the SDK:
npm install @1inch/aqua-sdk typescript
  1. Create test.ts:
import { AquaProtocolContract } from '@1inch/aqua-sdk';

const aqua = new AquaProtocolContract(1);
console.log(aqua);
  1. Compile:
npx tsc --noEmit test.ts

Error Output

node_modules/viem/_types/types/multicall.d.ts(12,18): error TS2589: Type instantiation is excessively deep and possibly infinite.

node_modules/viem/_types/utils/abi/parseEventLogs.d.ts(22,308): error TS2344: Type 'eventName extends ContractEventName<abi>[] ? eventName[number] : eventName' does not satisfy the constraint 'ContractEventName<abi>'.

Root Cause

The SDK's package.json specifies viem@^2.21.0, which allows npm to install viem@2.40.0. However, viem versions after 2.21.x contain breaking TypeScript changes that cause compilation errors.

Verification:

$ npm list viem
└─┬ @1inch/aqua-sdk@0.1.0
  └── viem@2.40.0

Proposed Fix

Option 1 (Quick Fix): Pin to viem 2.21.x

"dependencies": {
  "viem": "~2.21.0"
}

Option 2 (Better): Update SDK to work with latest viem

"dependencies": {
  "viem": "^2.40.0"
}

Workaround

Users can bypass the SDK and use viem directly:

import { encodeFunctionData, encodeAbiParameters, keccak256 } from 'viem';

const AQUA_ADDRESS = '0x499943e74fb0ce105688beee8ef2abec5d936d31';

// Encode strategy
const strategyBytes = encodeAbiParameters(
  [{ type: 'address' }, { type: 'address' }, { type: 'uint24' }, { type: 'bytes4' }],
  [token0, token1, feeTier, salt]
);

// Calculate hash
const strategyHash = keccak256(strategyBytes);

Impact

  • Severity: Critical
  • Affected: All TypeScript users
  • Workaround: Available (use viem directly)

Note: The underlying Aqua protocol is excellent and well-designed. This is purely a dependency version management issue in the SDK wrapper.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions