@lifi/sdk 3.8.11 → 3.9.0-beta.1

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.
Files changed (128) hide show
  1. package/package.json +3 -2
  2. package/src/_cjs/core/EVM/EVM.js +2 -2
  3. package/src/_cjs/core/EVM/EVM.js.map +1 -1
  4. package/src/_cjs/core/EVM/EVMStepExecutor.js +24 -22
  5. package/src/_cjs/core/EVM/EVMStepExecutor.js.map +1 -1
  6. package/src/_cjs/core/EVM/publicClient.js +8 -0
  7. package/src/_cjs/core/EVM/publicClient.js.map +1 -1
  8. package/src/_cjs/core/EVM/{getENSAddress.js → resolveENSAddress.js} +4 -4
  9. package/src/_cjs/core/EVM/resolveENSAddress.js.map +1 -0
  10. package/src/_cjs/core/EVM/resolveEVMAddress.js +11 -0
  11. package/src/_cjs/core/EVM/resolveEVMAddress.js.map +1 -0
  12. package/src/_cjs/core/EVM/uns/constants.js +78 -0
  13. package/src/_cjs/core/EVM/uns/constants.js.map +1 -0
  14. package/src/_cjs/core/EVM/uns/resolveUNSAddress.js +82 -0
  15. package/src/_cjs/core/EVM/uns/resolveUNSAddress.js.map +1 -0
  16. package/src/_cjs/core/Solana/Solana.js +2 -2
  17. package/src/_cjs/core/Solana/Solana.js.map +1 -1
  18. package/src/_cjs/core/Solana/resolveSolanaAddress.js +8 -0
  19. package/src/_cjs/core/Solana/resolveSolanaAddress.js.map +1 -0
  20. package/src/_cjs/core/Sui/Sui.js +2 -2
  21. package/src/_cjs/core/Sui/Sui.js.map +1 -1
  22. package/src/_cjs/core/Sui/resolveSuiAddress.js +8 -0
  23. package/src/_cjs/core/Sui/resolveSuiAddress.js.map +1 -0
  24. package/src/_cjs/core/UTXO/UTXO.js +2 -3
  25. package/src/_cjs/core/UTXO/UTXO.js.map +1 -1
  26. package/src/_cjs/core/UTXO/UTXOStepExecutor.js +25 -1
  27. package/src/_cjs/core/UTXO/UTXOStepExecutor.js.map +1 -1
  28. package/src/_cjs/core/UTXO/resolveUTXOAddress.js +7 -0
  29. package/src/_cjs/core/UTXO/resolveUTXOAddress.js.map +1 -0
  30. package/src/_cjs/core/UTXO/utils.js +3 -0
  31. package/src/_cjs/core/UTXO/utils.js.map +1 -1
  32. package/src/_cjs/core/prepareRestart.js +1 -1
  33. package/src/_cjs/core/prepareRestart.js.map +1 -1
  34. package/src/_cjs/core/waitForDestinationChainTransaction.js +3 -2
  35. package/src/_cjs/core/waitForDestinationChainTransaction.js.map +1 -1
  36. package/src/_cjs/index.js.map +1 -1
  37. package/src/_cjs/version.js +1 -1
  38. package/src/_cjs/version.js.map +1 -1
  39. package/src/_esm/core/EVM/EVM.js +2 -2
  40. package/src/_esm/core/EVM/EVM.js.map +1 -1
  41. package/src/_esm/core/EVM/EVMStepExecutor.js +28 -24
  42. package/src/_esm/core/EVM/EVMStepExecutor.js.map +1 -1
  43. package/src/_esm/core/EVM/publicClient.js +9 -0
  44. package/src/_esm/core/EVM/publicClient.js.map +1 -1
  45. package/src/_esm/core/EVM/{getENSAddress.js → resolveENSAddress.js} +2 -2
  46. package/src/_esm/core/EVM/resolveENSAddress.js.map +1 -0
  47. package/src/_esm/core/EVM/resolveEVMAddress.js +8 -0
  48. package/src/_esm/core/EVM/resolveEVMAddress.js.map +1 -0
  49. package/src/_esm/core/EVM/uns/constants.js +74 -0
  50. package/src/_esm/core/EVM/uns/constants.js.map +1 -0
  51. package/src/_esm/core/EVM/uns/resolveUNSAddress.js +80 -0
  52. package/src/_esm/core/EVM/uns/resolveUNSAddress.js.map +1 -0
  53. package/src/_esm/core/Solana/Solana.js +2 -2
  54. package/src/_esm/core/Solana/Solana.js.map +1 -1
  55. package/src/_esm/core/Solana/resolveSolanaAddress.js +5 -0
  56. package/src/_esm/core/Solana/resolveSolanaAddress.js.map +1 -0
  57. package/src/_esm/core/Sui/Sui.js +2 -2
  58. package/src/_esm/core/Sui/Sui.js.map +1 -1
  59. package/src/_esm/core/Sui/resolveSuiAddress.js +5 -0
  60. package/src/_esm/core/Sui/resolveSuiAddress.js.map +1 -0
  61. package/src/_esm/core/UTXO/UTXO.js +2 -4
  62. package/src/_esm/core/UTXO/UTXO.js.map +1 -1
  63. package/src/_esm/core/UTXO/UTXOStepExecutor.js +35 -4
  64. package/src/_esm/core/UTXO/UTXOStepExecutor.js.map +1 -1
  65. package/src/_esm/core/UTXO/resolveUTXOAddress.js +5 -0
  66. package/src/_esm/core/UTXO/resolveUTXOAddress.js.map +1 -0
  67. package/src/_esm/core/UTXO/utils.js +2 -0
  68. package/src/_esm/core/UTXO/utils.js.map +1 -1
  69. package/src/_esm/core/prepareRestart.js +1 -1
  70. package/src/_esm/core/prepareRestart.js.map +1 -1
  71. package/src/_esm/core/waitForDestinationChainTransaction.js +5 -2
  72. package/src/_esm/core/waitForDestinationChainTransaction.js.map +1 -1
  73. package/src/_esm/index.js.map +1 -1
  74. package/src/_esm/version.js +1 -1
  75. package/src/_esm/version.js.map +1 -1
  76. package/src/_types/core/EVM/EVMStepExecutor.d.ts +3 -5
  77. package/src/_types/core/EVM/EVMStepExecutor.d.ts.map +1 -1
  78. package/src/_types/core/EVM/publicClient.d.ts.map +1 -1
  79. package/src/_types/core/EVM/resolveENSAddress.d.ts +2 -0
  80. package/src/_types/core/EVM/resolveENSAddress.d.ts.map +1 -0
  81. package/src/_types/core/EVM/resolveEVMAddress.d.ts +3 -0
  82. package/src/_types/core/EVM/resolveEVMAddress.d.ts.map +1 -0
  83. package/src/_types/core/EVM/uns/constants.d.ts +51 -0
  84. package/src/_types/core/EVM/uns/constants.d.ts.map +1 -0
  85. package/src/_types/core/EVM/uns/resolveUNSAddress.d.ts +3 -0
  86. package/src/_types/core/EVM/uns/resolveUNSAddress.d.ts.map +1 -0
  87. package/src/_types/core/Solana/resolveSolanaAddress.d.ts +2 -0
  88. package/src/_types/core/Solana/resolveSolanaAddress.d.ts.map +1 -0
  89. package/src/_types/core/Sui/resolveSuiAddress.d.ts +2 -0
  90. package/src/_types/core/Sui/resolveSuiAddress.d.ts.map +1 -0
  91. package/src/_types/core/UTXO/UTXO.d.ts.map +1 -1
  92. package/src/_types/core/UTXO/UTXOStepExecutor.d.ts.map +1 -1
  93. package/src/_types/core/UTXO/resolveUTXOAddress.d.ts +2 -0
  94. package/src/_types/core/UTXO/resolveUTXOAddress.d.ts.map +1 -0
  95. package/src/_types/core/UTXO/utils.d.ts +1 -0
  96. package/src/_types/core/UTXO/utils.d.ts.map +1 -1
  97. package/src/_types/core/prepareRestart.d.ts.map +1 -1
  98. package/src/_types/core/types.d.ts +4 -3
  99. package/src/_types/core/types.d.ts.map +1 -1
  100. package/src/_types/core/waitForDestinationChainTransaction.d.ts.map +1 -1
  101. package/src/_types/index.d.ts +1 -1
  102. package/src/_types/index.d.ts.map +1 -1
  103. package/src/_types/version.d.ts +1 -1
  104. package/src/_types/version.d.ts.map +1 -1
  105. package/src/core/EVM/EVM.ts +2 -2
  106. package/src/core/EVM/EVMStepExecutor.ts +35 -37
  107. package/src/core/EVM/publicClient.ts +13 -1
  108. package/src/core/EVM/{getENSAddress.ts → resolveENSAddress.ts} +1 -1
  109. package/src/core/EVM/resolveEVMAddress.ts +15 -0
  110. package/src/core/EVM/uns/constants.ts +81 -0
  111. package/src/core/EVM/uns/resolveUNSAddress.ts +123 -0
  112. package/src/core/Solana/Solana.ts +2 -2
  113. package/src/core/Solana/resolveSolanaAddress.ts +7 -0
  114. package/src/core/Sui/Sui.ts +2 -2
  115. package/src/core/Sui/resolveSuiAddress.ts +7 -0
  116. package/src/core/UTXO/UTXO.ts +2 -4
  117. package/src/core/UTXO/UTXOStepExecutor.ts +48 -4
  118. package/src/core/UTXO/resolveUTXOAddress.ts +6 -0
  119. package/src/core/UTXO/utils.ts +4 -0
  120. package/src/core/prepareRestart.ts +2 -1
  121. package/src/core/types.ts +9 -2
  122. package/src/core/waitForDestinationChainTransaction.ts +6 -2
  123. package/src/index.ts +5 -1
  124. package/src/version.ts +1 -1
  125. package/src/_cjs/core/EVM/getENSAddress.js.map +0 -1
  126. package/src/_esm/core/EVM/getENSAddress.js.map +0 -1
  127. package/src/_types/core/EVM/getENSAddress.d.ts +0 -2
  128. package/src/_types/core/EVM/getENSAddress.d.ts.map +0 -1
@@ -1,7 +1,15 @@
1
1
  import type { Client, ReplacementReason } from '@bigmi/core'
2
- import { signPsbt, waitForTransaction, withTimeout } from '@bigmi/core'
2
+ import {
3
+ AddressType,
4
+ getAddressInfo,
5
+ hexToUnit8Array,
6
+ signPsbt,
7
+ waitForTransaction,
8
+ withTimeout,
9
+ } from '@bigmi/core'
10
+ import * as ecc from '@bitcoinerlab/secp256k1'
3
11
  import { ChainId } from '@lifi/types'
4
- import { address, networks, Psbt } from 'bitcoinjs-lib'
12
+ import { address, initEccLib, networks, Psbt } from 'bitcoinjs-lib'
5
13
  import { config } from '../../config.js'
6
14
  import { LiFiErrorCode } from '../../errors/constants.js'
7
15
  import { TransactionError } from '../../errors/errors.js'
@@ -17,7 +25,7 @@ import type {
17
25
  import { waitForDestinationChainTransaction } from '../waitForDestinationChainTransaction.js'
18
26
  import { getUTXOPublicClient } from './getUTXOPublicClient.js'
19
27
  import { parseUTXOErrors } from './parseUTXOErrors.js'
20
- import { isPsbtFinalized } from './utils.js'
28
+ import { isPsbtFinalized, toXOnly } from './utils.js'
21
29
 
22
30
  export interface UTXOStepExecutorOptions extends StepExecutorOptions {
23
31
  client: Client
@@ -143,8 +151,44 @@ export class UTXOStepExecutor extends BaseStepExecutor {
143
151
 
144
152
  const psbtHex = transactionRequest.data
145
153
 
154
+ // Initialize ECC library required for Taproot operations
155
+ // https://github.com/bitcoinjs/bitcoinjs-lib?tab=readme-ov-file#using-taproot
156
+ initEccLib(ecc)
157
+
146
158
  const psbt = Psbt.fromHex(psbtHex, { network: networks.bitcoin })
147
159
 
160
+ psbt.data.inputs.forEach((input, index) => {
161
+ const accountAddress = input.witnessUtxo
162
+ ? address.fromOutputScript(
163
+ input.witnessUtxo.script,
164
+ networks.bitcoin
165
+ )
166
+ : (this.client.account?.address as string)
167
+ const addressInfo = getAddressInfo(accountAddress)
168
+ if (addressInfo.type === AddressType.p2tr) {
169
+ // Taproot (P2TR) addresses require specific PSBT fields for proper signing
170
+
171
+ // tapInternalKey: Required for Taproot key-path spending
172
+ // Most wallets / libraries usually handle this already
173
+ if (!input.tapInternalKey) {
174
+ const pubKey = this.client.account?.publicKey
175
+ if (pubKey) {
176
+ const tapInternalKey = toXOnly(hexToUnit8Array(pubKey))
177
+ psbt.updateInput(index, {
178
+ tapInternalKey,
179
+ })
180
+ }
181
+ }
182
+ // sighashType: Required by bitcoinjs-lib even though the bitcoin protocol allows defaults
183
+ // check if sighashType is default (0) or not set (undefined)
184
+ if (!input.sighashType) {
185
+ psbt.updateInput(index, {
186
+ sighashType: 1, // Default to Transaction.SIGHASH_ALL - 1
187
+ })
188
+ }
189
+ }
190
+ })
191
+
148
192
  const inputsToSign = Array.from(
149
193
  psbt.data.inputs
150
194
  .reduce((map, input, index) => {
@@ -172,7 +216,7 @@ export class UTXOStepExecutor extends BaseStepExecutor {
172
216
  const signedPsbtHex = await withTimeout(
173
217
  () =>
174
218
  signPsbt(this.client, {
175
- psbt: psbtHex,
219
+ psbt: psbt.toHex(),
176
220
  inputsToSign: inputsToSign,
177
221
  finalize: false,
178
222
  }),
@@ -0,0 +1,6 @@
1
+ export async function resolveUTXOAddress(
2
+ name: string
3
+ ): Promise<string | undefined> {
4
+ // Not supported on UTXO yet
5
+ return name
6
+ }
@@ -8,3 +8,7 @@ export function isPsbtFinalized(psbt: Psbt): boolean {
8
8
  return false
9
9
  }
10
10
  }
11
+
12
+ // helper function to convert full public key (33 bytes) to x-only compressed format (32 bytes) required after taproot update
13
+ export const toXOnly = (pubKey: Uint8Array) =>
14
+ pubKey.length === 32 ? pubKey : pubKey.subarray(1, 33)
@@ -6,7 +6,8 @@ export const prepareRestart = async (route: RouteExtended) => {
6
6
  if (step.execution) {
7
7
  // Find the index of the last process that has tx hash
8
8
  const lastValidIndex = step.execution.process.findLastIndex(
9
- (process) => !!process.txHash && process.status !== 'FAILED'
9
+ (process) =>
10
+ (!!process.txHash || !!process.taskId) && process.status !== 'FAILED'
10
11
  )
11
12
 
12
13
  // Keep all processes up to the one with tx hash
package/src/core/types.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import type {
2
+ ChainId,
2
3
  ChainType,
4
+ CoinKey,
3
5
  FeeCost,
4
6
  GasCost,
5
7
  LiFiStep,
@@ -14,7 +16,11 @@ import type { Client } from 'viem'
14
16
  export interface SDKProvider {
15
17
  readonly type: ChainType
16
18
  isAddress(address: string): boolean
17
- resolveAddress(name: string): Promise<string | undefined>
19
+ resolveAddress(
20
+ name: string,
21
+ chainId?: ChainId,
22
+ token?: CoinKey
23
+ ): Promise<string | undefined>
18
24
  getStepExecutor(options: StepExecutorOptions): Promise<StepExecutor>
19
25
  getBalance(walletAddress: string, tokens: Token[]): Promise<TokenAmount[]>
20
26
  }
@@ -146,8 +152,9 @@ export type Process = {
146
152
  substatus?: Substatus
147
153
  chainId?: number
148
154
  txHash?: string
149
- multisigTxHash?: string
155
+ taskId?: string
150
156
  txLink?: string
157
+ txType?: TransactionMethodType
151
158
  actionRequiredAt?: number
152
159
  doneAt?: number
153
160
  failedAt?: number
@@ -17,7 +17,9 @@ export async function waitForDestinationChainTransaction(
17
17
  statusManager: StatusManager,
18
18
  pollingInterval?: number
19
19
  ): Promise<LiFiStepExtended> {
20
- const transactionHash = process.txHash
20
+ // At this point, we should have a txHash or taskId
21
+ // taskId is used for custom integrations that don't use the standard transaction hash
22
+ const transactionHash = process.txHash || process.taskId
21
23
  let processType = process.type
22
24
  try {
23
25
  // Wait for the transaction status on the destination chain
@@ -52,7 +54,9 @@ export async function waitForDestinationChainTransaction(
52
54
  substatus: statusResponse.substatus,
53
55
  substatusMessage: statusResponse.substatusMessage,
54
56
  txHash: statusReceiving?.txHash,
55
- txLink: `${toChain.metamask.blockExplorerUrls[0]}tx/${statusReceiving?.txHash}`,
57
+ txLink:
58
+ statusReceiving?.txLink ||
59
+ `${toChain.metamask.blockExplorerUrls[0]}tx/${statusReceiving?.txHash}`,
56
60
  })
57
61
 
58
62
  // Update execution status
package/src/index.ts CHANGED
@@ -18,7 +18,11 @@ export {
18
18
  isGaslessStep,
19
19
  isRelayerStep,
20
20
  } from './core/EVM/typeguards.js'
21
- export type { EVMProvider, EVMProviderOptions } from './core/EVM/types.js'
21
+ export type {
22
+ EVMProvider,
23
+ EVMProviderOptions,
24
+ WalletCallReceipt,
25
+ } from './core/EVM/types.js'
22
26
  export { isEVM } from './core/EVM/types.js'
23
27
  export {
24
28
  convertExtendedChain,
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/sdk'
2
- export const version = '3.8.11'
2
+ export const version = '3.9.0-beta.1'
@@ -1 +0,0 @@
1
- {"version":3,"file":"getENSAddress.js","sourceRoot":"","sources":["../../../core/EVM/getENSAddress.ts"],"names":[],"mappings":";;;AAAA,uCAAqC;AACrC,kCAAmD;AACnD,uDAAmD;AAE5C,MAAM,aAAa,GAAG,KAAK,EAChC,IAAY,EACiB,EAAE;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAe,EAAC,eAAO,CAAC,GAAG,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAa,EAAC,MAAM,EAAE;YAC1C,IAAI,EAAE,IAAA,eAAS,EAAC,IAAI,CAAC;SACtB,CAAC,CAAA;QACF,OAAO,OAA6B,CAAA;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAEX,OAAM;IACR,CAAC;AACH,CAAC,CAAA;AAbY,QAAA,aAAa,iBAazB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"getENSAddress.js","sourceRoot":"","sources":["../../../core/EVM/getENSAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,IAAY,EACiB,EAAE;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE;YAC1C,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC;SACtB,CAAC,CAAA;QACF,OAAO,OAA6B,CAAA;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,SAAS;QACT,OAAM;IACR,CAAC;AACH,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare const getENSAddress: (name: string) => Promise<string | undefined>;
2
- //# sourceMappingURL=getENSAddress.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getENSAddress.d.ts","sourceRoot":"","sources":["../../../core/EVM/getENSAddress.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,GACxB,MAAM,MAAM,KACX,OAAO,CAAC,MAAM,GAAG,SAAS,CAW5B,CAAA"}