@defuse-protocol/intents-sdk 0.31.0 → 0.32.0

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.
@@ -10,11 +10,13 @@ const Chains = {
10
10
  Bitcoin: "bip122:000000000019d6689c085ae165831e93",
11
11
  Zcash: "bip122:00040fe8ec8471911baa1db1266ea15d",
12
12
  Dogecoin: "bip122:1a91e3dace36e2be3bf030a65679fe82",
13
+ Litecoin: "bip122:12a765e31ffd4059bada1e25190f6e98",
13
14
  Ethereum: "eip155:1",
14
15
  Optimism: "eip155:10",
15
16
  BNB: "eip155:56",
16
17
  Gnosis: "eip155:100",
17
18
  Polygon: "eip155:137",
19
+ LayerX: "eip155:196",
18
20
  Base: "eip155:8453",
19
21
  Arbitrum: "eip155:42161",
20
22
  Avalanche: "eip155:43114",
@@ -6,11 +6,13 @@ declare const Chains: {
6
6
  readonly Bitcoin: "bip122:000000000019d6689c085ae165831e93";
7
7
  readonly Zcash: "bip122:00040fe8ec8471911baa1db1266ea15d";
8
8
  readonly Dogecoin: "bip122:1a91e3dace36e2be3bf030a65679fe82";
9
+ readonly Litecoin: "bip122:12a765e31ffd4059bada1e25190f6e98";
9
10
  readonly Ethereum: "eip155:1";
10
11
  readonly Optimism: "eip155:10";
11
12
  readonly BNB: "eip155:56";
12
13
  readonly Gnosis: "eip155:100";
13
14
  readonly Polygon: "eip155:137";
15
+ readonly LayerX: "eip155:196";
14
16
  readonly Base: "eip155:8453";
15
17
  readonly Arbitrum: "eip155:42161";
16
18
  readonly Avalanche: "eip155:43114";
@@ -6,11 +6,13 @@ declare const Chains: {
6
6
  readonly Bitcoin: "bip122:000000000019d6689c085ae165831e93";
7
7
  readonly Zcash: "bip122:00040fe8ec8471911baa1db1266ea15d";
8
8
  readonly Dogecoin: "bip122:1a91e3dace36e2be3bf030a65679fe82";
9
+ readonly Litecoin: "bip122:12a765e31ffd4059bada1e25190f6e98";
9
10
  readonly Ethereum: "eip155:1";
10
11
  readonly Optimism: "eip155:10";
11
12
  readonly BNB: "eip155:56";
12
13
  readonly Gnosis: "eip155:100";
13
14
  readonly Polygon: "eip155:137";
15
+ readonly LayerX: "eip155:196";
14
16
  readonly Base: "eip155:8453";
15
17
  readonly Arbitrum: "eip155:42161";
16
18
  readonly Avalanche: "eip155:43114";
@@ -8,11 +8,13 @@ const Chains = {
8
8
  Bitcoin: "bip122:000000000019d6689c085ae165831e93",
9
9
  Zcash: "bip122:00040fe8ec8471911baa1db1266ea15d",
10
10
  Dogecoin: "bip122:1a91e3dace36e2be3bf030a65679fe82",
11
+ Litecoin: "bip122:12a765e31ffd4059bada1e25190f6e98",
11
12
  Ethereum: "eip155:1",
12
13
  Optimism: "eip155:10",
13
14
  BNB: "eip155:56",
14
15
  Gnosis: "eip155:100",
15
16
  Polygon: "eip155:137",
17
+ LayerX: "eip155:196",
16
18
  Base: "eip155:8453",
17
19
  Arbitrum: "eip155:42161",
18
20
  Avalanche: "eip155:43114",
@@ -4,8 +4,8 @@ let __defuse_protocol_internal_utils = require("@defuse-protocol/internal-utils"
4
4
  __defuse_protocol_internal_utils = require_rolldown_runtime.__toESM(__defuse_protocol_internal_utils);
5
5
  let viem = require("viem");
6
6
  viem = require_rolldown_runtime.__toESM(viem);
7
- let __noble_hashes_sha256 = require("@noble/hashes/sha256");
8
- __noble_hashes_sha256 = require_rolldown_runtime.__toESM(__noble_hashes_sha256);
7
+ let __noble_hashes_sha2 = require("@noble/hashes/sha2");
8
+ __noble_hashes_sha2 = require_rolldown_runtime.__toESM(__noble_hashes_sha2);
9
9
  let __scure_base = require("@scure/base");
10
10
  __scure_base = require_rolldown_runtime.__toESM(__scure_base);
11
11
  let __solana_web3_js = require("@solana/web3.js");
@@ -15,12 +15,12 @@ ripple_address_codec = require_rolldown_runtime.__toESM(ripple_address_codec);
15
15
 
16
16
  //#region src/lib/validateAddress.ts
17
17
  function validateAddress(address, blockchain) {
18
- if (blockchain.startsWith("eip155:")) return validateEthAddress(address);
19
18
  switch (blockchain) {
20
19
  case require_caip2.Chains.Near: return __defuse_protocol_internal_utils.utils.validateNearAddress(address);
21
20
  case require_caip2.Chains.Bitcoin: return validateBtcAddress(address);
22
21
  case require_caip2.Chains.Solana: return validateSolAddress(address);
23
22
  case require_caip2.Chains.Dogecoin: return validateDogeAddress(address);
23
+ case require_caip2.Chains.Litecoin: return validateLitecoinAddress(address);
24
24
  case require_caip2.Chains.XRPL: return validateXrpAddress(address);
25
25
  case require_caip2.Chains.Zcash: return validateZcashAddress(address);
26
26
  case require_caip2.Chains.Tron: return validateTronAddress(address);
@@ -29,6 +29,16 @@ function validateAddress(address, blockchain) {
29
29
  case require_caip2.Chains.Stellar: return validateStellarAddress(address);
30
30
  case require_caip2.Chains.Aptos: return validateAptosAddress(address);
31
31
  case require_caip2.Chains.Cardano: return validateCardanoAddress(address);
32
+ case require_caip2.Chains.Ethereum:
33
+ case require_caip2.Chains.Optimism:
34
+ case require_caip2.Chains.BNB:
35
+ case require_caip2.Chains.Gnosis:
36
+ case require_caip2.Chains.Polygon:
37
+ case require_caip2.Chains.LayerX:
38
+ case require_caip2.Chains.Base:
39
+ case require_caip2.Chains.Arbitrum:
40
+ case require_caip2.Chains.Avalanche:
41
+ case require_caip2.Chains.Berachain: return validateEthAddress(address);
32
42
  default: return false;
33
43
  }
34
44
  }
@@ -91,7 +101,7 @@ function validateTronBase58Address(address) {
91
101
  if (decoded.length !== 25) return false;
92
102
  const data = decoded.slice(0, 21);
93
103
  const checksum = decoded.slice(21);
94
- const expectedChecksum = (0, __noble_hashes_sha256.sha256)((0, __noble_hashes_sha256.sha256)(data)).slice(0, 4);
104
+ const expectedChecksum = (0, __noble_hashes_sha2.sha256)((0, __noble_hashes_sha2.sha256)(data)).slice(0, 4);
95
105
  for (let i = 0; i < 4; i++) if (checksum[i] !== expectedChecksum[i]) return false;
96
106
  return data[0] === 65;
97
107
  } catch {
@@ -132,6 +142,59 @@ function validateCardanoAddress(address) {
132
142
  return false;
133
143
  }
134
144
  }
145
+ function validateLitecoinAddress(address) {
146
+ const first = address[0];
147
+ if (first === "L") return validateLitecoinBase58Address(address, 48);
148
+ if (first === "M") return validateLitecoinBase58Address(address, 50);
149
+ if (first === "3") return validateLitecoinBase58Address(address, 5);
150
+ if (!address.toLowerCase().startsWith("ltc1")) return false;
151
+ return validateLitecoinBech32Address(address);
152
+ }
153
+ function validateLitecoinBase58Address(address, expectedVersion) {
154
+ let decoded;
155
+ try {
156
+ decoded = __scure_base.base58.decode(address);
157
+ } catch {
158
+ return false;
159
+ }
160
+ if (decoded.length !== 25) return false;
161
+ if (decoded[0] !== expectedVersion) return false;
162
+ const payload = decoded.subarray(0, 21);
163
+ const checksum = decoded.subarray(21, 25);
164
+ const expectedChecksum = (0, __noble_hashes_sha2.sha256)((0, __noble_hashes_sha2.sha256)(payload)).subarray(0, 4);
165
+ for (let i = 0; i < 4; i++) if (checksum[i] !== expectedChecksum[i]) return false;
166
+ return true;
167
+ }
168
+ function validateLitecoinBech32Address(address) {
169
+ let decoded;
170
+ let isBech32m = false;
171
+ try {
172
+ decoded = __scure_base.bech32.decode(address);
173
+ } catch {
174
+ try {
175
+ decoded = __scure_base.bech32m.decode(address);
176
+ isBech32m = true;
177
+ } catch {
178
+ return false;
179
+ }
180
+ }
181
+ if (decoded.prefix.toLowerCase() !== "ltc") return false;
182
+ const { words } = decoded;
183
+ if (!words || words.length < 1) return false;
184
+ const version = words[0];
185
+ if (version == null || version < 0 || version > 16) return false;
186
+ const progLen = __scure_base.bech32.fromWords(words.slice(1)).length;
187
+ if (progLen < 2 || progLen > 40) return false;
188
+ if (version === 0) {
189
+ if (isBech32m) return false;
190
+ return progLen === 20 || progLen === 32;
191
+ }
192
+ if (version === 1) {
193
+ if (!isBech32m) return false;
194
+ return progLen === 32;
195
+ }
196
+ return false;
197
+ }
135
198
 
136
199
  //#endregion
137
200
  exports.validateAddress = validateAddress;
@@ -1,19 +1,19 @@
1
1
  import { Chains } from "./caip2.js";
2
2
  import { utils } from "@defuse-protocol/internal-utils";
3
3
  import { isAddress } from "viem";
4
- import { sha256 } from "@noble/hashes/sha256";
4
+ import { sha256 } from "@noble/hashes/sha2";
5
5
  import { base58, bech32, bech32m, hex } from "@scure/base";
6
6
  import { PublicKey } from "@solana/web3.js";
7
7
  import { isValidClassicAddress, isValidXAddress } from "ripple-address-codec";
8
8
 
9
9
  //#region src/lib/validateAddress.ts
10
10
  function validateAddress(address, blockchain) {
11
- if (blockchain.startsWith("eip155:")) return validateEthAddress(address);
12
11
  switch (blockchain) {
13
12
  case Chains.Near: return utils.validateNearAddress(address);
14
13
  case Chains.Bitcoin: return validateBtcAddress(address);
15
14
  case Chains.Solana: return validateSolAddress(address);
16
15
  case Chains.Dogecoin: return validateDogeAddress(address);
16
+ case Chains.Litecoin: return validateLitecoinAddress(address);
17
17
  case Chains.XRPL: return validateXrpAddress(address);
18
18
  case Chains.Zcash: return validateZcashAddress(address);
19
19
  case Chains.Tron: return validateTronAddress(address);
@@ -22,6 +22,16 @@ function validateAddress(address, blockchain) {
22
22
  case Chains.Stellar: return validateStellarAddress(address);
23
23
  case Chains.Aptos: return validateAptosAddress(address);
24
24
  case Chains.Cardano: return validateCardanoAddress(address);
25
+ case Chains.Ethereum:
26
+ case Chains.Optimism:
27
+ case Chains.BNB:
28
+ case Chains.Gnosis:
29
+ case Chains.Polygon:
30
+ case Chains.LayerX:
31
+ case Chains.Base:
32
+ case Chains.Arbitrum:
33
+ case Chains.Avalanche:
34
+ case Chains.Berachain: return validateEthAddress(address);
25
35
  default: return false;
26
36
  }
27
37
  }
@@ -125,6 +135,59 @@ function validateCardanoAddress(address) {
125
135
  return false;
126
136
  }
127
137
  }
138
+ function validateLitecoinAddress(address) {
139
+ const first = address[0];
140
+ if (first === "L") return validateLitecoinBase58Address(address, 48);
141
+ if (first === "M") return validateLitecoinBase58Address(address, 50);
142
+ if (first === "3") return validateLitecoinBase58Address(address, 5);
143
+ if (!address.toLowerCase().startsWith("ltc1")) return false;
144
+ return validateLitecoinBech32Address(address);
145
+ }
146
+ function validateLitecoinBase58Address(address, expectedVersion) {
147
+ let decoded;
148
+ try {
149
+ decoded = base58.decode(address);
150
+ } catch {
151
+ return false;
152
+ }
153
+ if (decoded.length !== 25) return false;
154
+ if (decoded[0] !== expectedVersion) return false;
155
+ const payload = decoded.subarray(0, 21);
156
+ const checksum = decoded.subarray(21, 25);
157
+ const expectedChecksum = sha256(sha256(payload)).subarray(0, 4);
158
+ for (let i = 0; i < 4; i++) if (checksum[i] !== expectedChecksum[i]) return false;
159
+ return true;
160
+ }
161
+ function validateLitecoinBech32Address(address) {
162
+ let decoded;
163
+ let isBech32m = false;
164
+ try {
165
+ decoded = bech32.decode(address);
166
+ } catch {
167
+ try {
168
+ decoded = bech32m.decode(address);
169
+ isBech32m = true;
170
+ } catch {
171
+ return false;
172
+ }
173
+ }
174
+ if (decoded.prefix.toLowerCase() !== "ltc") return false;
175
+ const { words } = decoded;
176
+ if (!words || words.length < 1) return false;
177
+ const version = words[0];
178
+ if (version == null || version < 0 || version > 16) return false;
179
+ const progLen = bech32.fromWords(words.slice(1)).length;
180
+ if (progLen < 2 || progLen > 40) return false;
181
+ if (version === 0) {
182
+ if (isBech32m) return false;
183
+ return progLen === 20 || progLen === 32;
184
+ }
185
+ if (version === 1) {
186
+ if (!isBech32m) return false;
187
+ return progLen === 32;
188
+ }
189
+ return false;
190
+ }
128
191
 
129
192
  //#endregion
130
193
  export { validateAddress };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defuse-protocol/intents-sdk",
3
- "version": "0.31.0",
3
+ "version": "0.32.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -38,8 +38,8 @@
38
38
  "ripple-address-codec": "^5.0.0",
39
39
  "valibot": "^1.0.0",
40
40
  "viem": "^2.0.0",
41
- "@defuse-protocol/contract-types": "0.3.0",
42
- "@defuse-protocol/internal-utils": "0.18.3"
41
+ "@defuse-protocol/internal-utils": "0.19.0",
42
+ "@defuse-protocol/contract-types": "0.3.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "tsdown": "0.15.5",