@@ -60,6 +60,32 @@ const TON_RAW_ADDR = "0:00000000000000000000000000000000000000000000000000000000
6060/** Module-level SDK reference (set in tools(sdk) factory) */
6161let _sdk = null ;
6262
63+ // ---------------------------------------------------------------------------
64+ // Address helpers
65+ // ---------------------------------------------------------------------------
66+
67+ /**
68+ * Normalize any valid TON address to raw format (0:xxxx…hex) required by
69+ * the TONCO GraphQL indexer. The indexer's server-side resolver calls
70+ * Address.parseRaw() internally, which crashes with "The first argument must
71+ * be of type string…" when it receives a bounceable/user-friendly address
72+ * (EQ…/UQ…) instead of the raw 0:hex form.
73+ *
74+ * @param {string } addr - Any TON address (EQ…, UQ…, or 0:hex)
75+ * @returns {string } Raw address in "0:xxxx…" form, or the original string
76+ * if parsing fails (the indexer will then return its own error)
77+ */
78+ function normalizeToRaw ( addr ) {
79+ if ( typeof addr !== "string" || ! addr . trim ( ) ) return addr ;
80+ try {
81+ const parsed = Address . parse ( addr . trim ( ) ) ;
82+ return `0:${ parsed . hash . toString ( "hex" ) } ` ;
83+ } catch ( e ) {
84+ console . warn ( `[tonco-dex] normalizeToRaw: failed to parse address "${ addr } ", using as-is:` , e . message ) ;
85+ return addr . trim ( ) ;
86+ }
87+ }
88+
6389// ---------------------------------------------------------------------------
6490// GraphQL helper
6591// ---------------------------------------------------------------------------
@@ -340,7 +366,7 @@ const toncoGetPoolStats = {
340366
341367 execute : async ( params ) => {
342368 try {
343- const poolAddr = params . pool_address . trim ( ) ;
369+ const poolAddr = normalizeToRaw ( params . pool_address ) ;
344370
345371 const query = `
346372 query GetPool($where: PoolWhere) {
@@ -625,8 +651,8 @@ const toncoSwapQuote = {
625651 const isTonIn = tokenInAddr . toUpperCase ( ) === "TON" ;
626652 const isTonOut = tokenOutAddr . toUpperCase ( ) === "TON" ;
627653
628- const resolvedInAddr = isTonIn ? TON_RAW_ADDR : tokenInAddr ;
629- const resolvedOutAddr = isTonOut ? TON_RAW_ADDR : tokenOutAddr ;
654+ const resolvedInAddr = isTonIn ? TON_RAW_ADDR : normalizeToRaw ( tokenInAddr ) ;
655+ const resolvedOutAddr = isTonOut ? TON_RAW_ADDR : normalizeToRaw ( tokenOutAddr ) ;
630656
631657 // Fetch pool data for this pair from indexer.
632658 // We query both orderings (jetton0/jetton1 vs jetton1/jetton0) because the indexer
@@ -834,8 +860,8 @@ const toncoExecuteSwap = {
834860 const isTonOut = tokenOutAddr . toUpperCase ( ) === "TON" ;
835861
836862 // Use the same TON_RAW_ADDR constant as tonco_swap_quote for consistent address resolution
837- const resolvedInAddr = isTonIn ? TON_RAW_ADDR : tokenInAddr ;
838- const resolvedOutAddr = isTonOut ? TON_RAW_ADDR : tokenOutAddr ;
863+ const resolvedInAddr = isTonIn ? TON_RAW_ADDR : normalizeToRaw ( tokenInAddr ) ;
864+ const resolvedOutAddr = isTonOut ? TON_RAW_ADDR : normalizeToRaw ( tokenOutAddr ) ;
839865
840866 // Fetch pool from indexer
841867 const query = `
@@ -1076,7 +1102,7 @@ const toncoGetPositions = {
10761102
10771103 const where = {
10781104 owner : ownerAddr ,
1079- ...( params . pool_address ? { pool : params . pool_address . trim ( ) } : { } ) ,
1105+ ...( params . pool_address ? { pool : normalizeToRaw ( params . pool_address ) } : { } ) ,
10801106 } ;
10811107
10821108 // NOTE: orderDirection is broken server-side; fetch more and sort client-side.
@@ -1220,7 +1246,7 @@ const toncoGetPositionFees = {
12201246 const { liquidity, tickLow, tickHigh, feeGrowthInside0LastX128, feeGrowthInside1LastX128 } = positionInfo ;
12211247
12221248 // Get pool address from indexer if not provided
1223- let poolAddress = params . pool_address ?. trim ( ) ;
1249+ let poolAddress = params . pool_address ? normalizeToRaw ( params . pool_address ) : undefined ;
12241250 if ( ! poolAddress ) {
12251251 const nftData = await positionContract . getData ( ) ;
12261252 const collectionAddr = nftData ?. collection ?. toString ( ) ;
0 commit comments