@heyanon/sdk 2.3.8 → 2.3.10

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.
package/dist/index.js CHANGED
@@ -606,6 +606,34 @@ function isAddress(value) {
606
606
 
607
607
  // src/utils/get-timestamp.ts
608
608
  var getTimestamp = () => Math.floor(Date.now() / 1e3);
609
+ var { NATIVE_ADDRESS: NATIVE_ADDRESS2, WETH9: WETH92 } = evm_exports.constants;
610
+ var { isEvmChain: isEvmChain2 } = evm_exports.utils;
611
+ function normalizeAddress(chain, address) {
612
+ const { valid } = isAddress(address);
613
+ if (!valid)
614
+ throw new Error(`This is not a address: ${address}`);
615
+ if (address.toLowerCase() === NATIVE_ADDRESS2.toLowerCase()) {
616
+ if (isEvmChain2(chain)) {
617
+ const weth9 = WETH92[chain];
618
+ if (!weth9)
619
+ throw new Error(`WETH9 not found for ${chain}`);
620
+ return weth9.address;
621
+ }
622
+ if (chain === "solana" /* SOLANA */) {
623
+ return "So11111111111111111111111111111111111111112";
624
+ }
625
+ if (chain === "ton" /* TON */) {
626
+ return "0:0000000000000000000000000000000000000000000000000000000000000000";
627
+ }
628
+ }
629
+ if (isEvmChain2(chain))
630
+ return viem.getAddress(address);
631
+ if (chain === "ton" /* TON */) {
632
+ const tonAddress = ton.Address.parse(address);
633
+ return tonAddress.toRawString();
634
+ }
635
+ return address;
636
+ }
609
637
 
610
638
  // src/adapter/transformers/toResult.ts
611
639
  function toResult(data, error = false) {
@@ -643,6 +671,7 @@ exports.allChains = allChains;
643
671
  exports.allEvmChains = allEvmChains;
644
672
  exports.getTimestamp = getTimestamp;
645
673
  exports.isAddress = isAddress;
674
+ exports.normalizeAddress = normalizeAddress;
646
675
  exports.retry = retry;
647
676
  exports.sleep = sleep;
648
677
  exports.stringify = stringify;
package/dist/index.mjs CHANGED
@@ -604,6 +604,34 @@ function isAddress(value) {
604
604
 
605
605
  // src/utils/get-timestamp.ts
606
606
  var getTimestamp = () => Math.floor(Date.now() / 1e3);
607
+ var { NATIVE_ADDRESS: NATIVE_ADDRESS2, WETH9: WETH92 } = evm_exports.constants;
608
+ var { isEvmChain: isEvmChain2 } = evm_exports.utils;
609
+ function normalizeAddress(chain, address) {
610
+ const { valid } = isAddress(address);
611
+ if (!valid)
612
+ throw new Error(`This is not a address: ${address}`);
613
+ if (address.toLowerCase() === NATIVE_ADDRESS2.toLowerCase()) {
614
+ if (isEvmChain2(chain)) {
615
+ const weth9 = WETH92[chain];
616
+ if (!weth9)
617
+ throw new Error(`WETH9 not found for ${chain}`);
618
+ return weth9.address;
619
+ }
620
+ if (chain === "solana" /* SOLANA */) {
621
+ return "So11111111111111111111111111111111111111112";
622
+ }
623
+ if (chain === "ton" /* TON */) {
624
+ return "0:0000000000000000000000000000000000000000000000000000000000000000";
625
+ }
626
+ }
627
+ if (isEvmChain2(chain))
628
+ return getAddress(address);
629
+ if (chain === "ton" /* TON */) {
630
+ const tonAddress = Address.parse(address);
631
+ return tonAddress.toRawString();
632
+ }
633
+ return address;
634
+ }
607
635
 
608
636
  // src/adapter/transformers/toResult.ts
609
637
  function toResult(data, error = false) {
@@ -631,4 +659,4 @@ var AdapterTag = /* @__PURE__ */ ((AdapterTag2) => {
631
659
  return AdapterTag2;
632
660
  })(AdapterTag || {});
633
661
 
634
- export { AdapterTag, Chain, evm_exports as EVM, solana_exports as Solana, ton_exports as TON, WalletType, allChains, allEvmChains, getTimestamp, isAddress, retry, sleep, stringify, toResult };
662
+ export { AdapterTag, Chain, evm_exports as EVM, solana_exports as Solana, ton_exports as TON, WalletType, allChains, allEvmChains, getTimestamp, isAddress, normalizeAddress, retry, sleep, stringify, toResult };
@@ -3,3 +3,4 @@ export * from './sleep';
3
3
  export * from './stringify';
4
4
  export * from './is-address';
5
5
  export * from './get-timestamp';
6
+ export * from './normalize-address';
@@ -0,0 +1,82 @@
1
+ import { Chain } from '../blockchain';
2
+ /**
3
+ * Normalizes a blockchain address to its canonical form for a specific chain
4
+ *
5
+ * This function performs chain-specific address normalization:
6
+ * - Converts native token address (0xEee...eEe) to wrapped token address (WETH, WMATIC, etc.)
7
+ * - Converts TON addresses to raw string format
8
+ * - Validates address format before normalization
9
+ *
10
+ * @param chain - The blockchain network (Ethereum, Polygon, Solana, TON, etc.)
11
+ * @param address - The address to normalize
12
+ * @returns Normalized address in canonical format
13
+ * @throws Error if address is invalid or WETH9 is not found for the chain
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // EVM: Convert native address to WETH9
18
+ * const normalized = normalizeAddress(
19
+ * Chain.ETHEREUM,
20
+ * '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'
21
+ * );
22
+ * // Returns: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' (WETH on Ethereum)
23
+ *
24
+ * // Polygon: Native to Wrapped
25
+ * const wmatic = normalizeAddress(
26
+ * Chain.POLYGON,
27
+ * '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'
28
+ * );
29
+ * // Returns: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270' (WMATIC)
30
+ *
31
+ * // Solana: Native address to wrapped SOL
32
+ * const wsol = normalizeAddress(
33
+ * Chain.SOLANA,
34
+ * '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE'
35
+ * );
36
+ * // Returns: 'So11111111111111111111111111111111111111112' (Wrapped SOL)
37
+ *
38
+ * // TON: Convert to raw format
39
+ * const tonRaw = normalizeAddress(
40
+ * Chain.TON,
41
+ * 'EQD4FPq-PRDieyQKkizFTRtSDyucUIqrj0v_zXJmqaDp6_0t'
42
+ * );
43
+ * // Returns: '0:...' (raw format)
44
+ *
45
+ * // Regular EVM address (no change)
46
+ * const usdcAddress = normalizeAddress(
47
+ * Chain.ETHEREUM,
48
+ * '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
49
+ * );
50
+ * // Returns: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' (unchanged)
51
+ *
52
+ * // Token swap with normalization
53
+ * async function swapTokens(
54
+ * chain: Chain,
55
+ * tokenIn: string,
56
+ * tokenOut: string,
57
+ * amount: bigint
58
+ * ) {
59
+ * // Normalize addresses for consistent processing
60
+ * const normalizedTokenIn = normalizeAddress(chain, tokenIn);
61
+ * const normalizedTokenOut = normalizeAddress(chain, tokenOut);
62
+ *
63
+ * const swapData = await buildSwapTransaction(
64
+ * chain,
65
+ * normalizedTokenIn,
66
+ * normalizedTokenOut,
67
+ * amount
68
+ * );
69
+ *
70
+ * return swapData;
71
+ * }
72
+ *
73
+ * // Usage: Swap native ETH to USDC
74
+ * await swapTokens(
75
+ * Chain.ETHEREUM,
76
+ * '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE', // Native ETH
77
+ * '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
78
+ * BigInt('1000000000000000000')
79
+ * );
80
+ * ```
81
+ */
82
+ export declare function normalizeAddress(chain: Chain, address: string): string;
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heyanon/sdk",
3
- "version": "2.3.8",
3
+ "version": "2.3.10",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",