@snowmonster_defi/sdk 1.0.3
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/README.md +368 -0
- package/dist/index.d.mts +177 -0
- package/dist/index.d.ts +177 -0
- package/dist/index.js +211 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +180 -0
- package/dist/index.mjs.map +1 -0
- package/dist/react/index.d.mts +133 -0
- package/dist/react/index.d.ts +133 -0
- package/dist/react/index.js +270 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/index.mjs +242 -0
- package/dist/react/index.mjs.map +1 -0
- package/package.json +103 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/react/hooks/useQuote.ts","../../src/types.ts","../../src/client.ts","../../src/react/hooks/useSwap.ts"],"sourcesContent":["/**\n * useQuote Hook\n * \n * Fetch the best quote for a token swap\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { AvaxRouter, QuoteParams, QuoteResult, AvaxRouterConfig } from '../..';\n\nexport interface UseQuoteOptions extends QuoteParams {\n /** SDK configuration */\n config?: AvaxRouterConfig;\n /** Auto-fetch on mount (default: true) */\n autoFetch?: boolean;\n /** Refresh interval in ms (default: 10000) */\n refreshInterval?: number;\n}\n\nexport interface UseQuoteResult {\n /** Quote result */\n quote: QuoteResult | null;\n /** Loading state */\n loading: boolean;\n /** Error if any */\n error: Error | null;\n /** Manually refetch */\n refetch: () => Promise<void>;\n}\n\nexport function useQuote(options: UseQuoteOptions): UseQuoteResult {\n const { config, autoFetch = true, refreshInterval = 10000, ...quoteParams } = options;\n \n const [quote, setQuote] = useState<QuoteResult | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const client = new AvaxRouter(config);\n\n const fetchQuote = useCallback(async () => {\n if (!quoteParams.tokenIn || !quoteParams.tokenOut || !quoteParams.amountIn) {\n return;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const result = await client.getBestQuote(quoteParams);\n setQuote(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setLoading(false);\n }\n }, [quoteParams.tokenIn, quoteParams.tokenOut, quoteParams.amountIn, config]);\n\n useEffect(() => {\n if (autoFetch) {\n fetchQuote();\n }\n }, [fetchQuote, autoFetch]);\n\n // Auto-refresh\n useEffect(() => {\n if (!autoFetch || !refreshInterval) return;\n\n const interval = setInterval(fetchQuote, refreshInterval);\n return () => clearInterval(interval);\n }, [autoFetch, refreshInterval, fetchQuote]);\n\n return {\n quote,\n loading,\n error,\n refetch: fetchQuote,\n };\n}","/**\n * AVAX Router SDK Types\n */\n\nexport interface AvaxRouterConfig {\n /** API base URL (default: https://api.avaxrouter.com) */\n apiUrl?: string;\n /** Partner ID for fee sharing */\n partnerId?: string;\n /** Partner fee in basis points (max 50 = 0.50%) */\n partnerFeeBps?: number;\n /** Partner address to receive fees */\n partnerAddress?: string;\n}\n\nexport interface TokenInfo {\n address: string;\n symbol: string;\n name: string;\n decimals: number;\n logoURI?: string;\n}\n\nexport interface QuoteParams {\n /** Input token address or symbol */\n tokenIn: string;\n /** Output token address or symbol */\n tokenOut: string;\n /** Amount of input tokens (in human-readable format) */\n amountIn: string;\n}\n\nexport interface QuoteResult {\n /** Input token address */\n tokenIn: string;\n /** Output token address */\n tokenOut: string;\n /** Amount in (raw) */\n amountIn: bigint;\n /** Expected amount out (raw) */\n amountOut: bigint;\n /** Amount out formatted for display */\n amountOutFormatted: string;\n /** Best DEX for this route */\n bestDex: string;\n /** All quotes from different DEXes */\n allQuotes: DexQuote[];\n /** Price impact */\n priceImpact?: number;\n /** Route path (for multi-hop) */\n route?: string[];\n /** Protocol fee in basis points */\n protocolFeeBps: number;\n /** Partner fee in basis points (if applicable) */\n partnerFeeBps?: number;\n /** Estimated gas cost */\n estimatedGas?: bigint;\n}\n\nexport interface DexQuote {\n /** DEX name */\n dex: string;\n /** Output amount (raw) */\n amountOut: bigint;\n /** Output amount formatted */\n amountOutFormatted: string;\n /** Whether this quote is the best */\n isBest: boolean;\n}\n\nexport interface SwapParams extends QuoteParams {\n /** Minimum output amount (slippage protection) */\n minAmountOut?: string;\n /** Slippage tolerance in percent (default: 0.5) */\n slippagePercent?: number;\n /** Recipient address (defaults to connected wallet) */\n recipient?: string;\n /** Deadline in seconds (default: 1200 = 20 min) */\n deadline?: number;\n}\n\nexport interface SwapResult {\n /** Transaction hash */\n txHash: string;\n /** Amount of tokens swapped */\n amountIn: string;\n /** Amount of tokens received */\n amountOut: string;\n /** DEX used for the swap */\n dexUsed: string;\n /** Protocol fee paid */\n protocolFee: string;\n /** Partner fee paid (if applicable) */\n partnerFee?: string;\n}\n\nexport interface SwapStatus {\n status: 'pending' | 'confirmed' | 'failed';\n txHash?: string;\n blockNumber?: number;\n gasUsed?: bigint;\n amountIn?: string;\n amountOut?: string;\n error?: string;\n}\n\n// Avalanche token addresses\nexport const AVALANCHE_TOKENS = {\n AVAX: '0x0000000000000000000000000000000000000000',\n WAVAX: '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7',\n USDC: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',\n USDT: '0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7',\n JOE: '0x6e84a6216eA6dACC71eE8E6b0a5B7322EEbC0fDd',\n PNG: '0x60781C2586D68229fde47564546784ab3fACA982',\n} as const;\n\n// DexRouter contract address on Avalanche\nexport const DEX_ROUTER_ADDRESS = '0xYourDeployedContractAddress' as `0x${string}`;\n\n// API endpoints\nexport const API_ENDPOINTS = {\n mainnet: 'https://api.avaxrouter.com',\n testnet: 'https://api-testnet.avaxrouter.com',\n local: 'http://localhost:3000',\n} as const;","/**\n * AVAX Router SDK Client\n * \n * Main entry point for interacting with AVAX Router\n */\n\nimport {\n AvaxRouterConfig,\n QuoteParams,\n QuoteResult,\n SwapParams,\n SwapResult,\n SwapStatus,\n API_ENDPOINTS,\n} from './types';\n\nexport class AvaxRouter {\n private apiUrl: string;\n private partnerId?: string;\n private partnerFeeBps?: number;\n private partnerAddress?: string;\n\n constructor(config: AvaxRouterConfig = {}) {\n this.apiUrl = config.apiUrl || API_ENDPOINTS.mainnet;\n this.partnerId = config.partnerId;\n this.partnerFeeBps = config.partnerFeeBps;\n this.partnerAddress = config.partnerAddress;\n\n // Validate partner config\n if (this.partnerFeeBps && this.partnerFeeBps > 50) {\n throw new Error('Partner fee cannot exceed 50 basis points (0.50%)');\n }\n if (this.partnerFeeBps && !this.partnerAddress) {\n throw new Error('Partner address required when partner fee is set');\n }\n }\n\n /**\n * Get the best quote across all DEXes\n */\n async getBestQuote(params: QuoteParams): Promise<QuoteResult> {\n const queryParams = new URLSearchParams({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n });\n\n if (this.partnerId) {\n queryParams.append('partnerId', this.partnerId);\n }\n\n const response = await fetch(`${this.apiUrl}/quote?${queryParams}`);\n \n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: 'Unknown error' }));\n throw new Error(error.message || `API error: ${response.status}`);\n }\n\n const data = await response.json();\n \n return {\n ...data,\n amountIn: BigInt(data.amountIn),\n amountOut: BigInt(data.amountOut),\n allQuotes: data.allQuotes.map((q: any) => ({\n ...q,\n amountOut: BigInt(q.amountOut),\n })),\n estimatedGas: data.estimatedGas ? BigInt(data.estimatedGas) : undefined,\n };\n }\n\n /**\n * Get quotes from all DEXes\n */\n async getAllQuotes(params: QuoteParams): Promise<QuoteResult[]> {\n const queryParams = new URLSearchParams({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n allDexes: 'true',\n });\n\n const response = await fetch(`${this.apiUrl}/quote?${queryParams}`);\n \n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: 'Unknown error' }));\n throw new Error(error.message || `API error: ${response.status}`);\n }\n\n return response.json();\n }\n\n /**\n * Prepare a swap transaction (returns unsigned transaction data)\n */\n async prepareSwap(params: SwapParams): Promise<{\n to: string;\n data: string;\n value: string;\n gasLimit?: string;\n }> {\n const body: any = {\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n slippagePercent: params.slippagePercent ?? 0.5,\n recipient: params.recipient,\n };\n\n if (this.partnerAddress && this.partnerFeeBps) {\n body.partner = this.partnerAddress;\n body.partnerFeeBps = this.partnerFeeBps;\n }\n\n const response = await fetch(`${this.apiUrl}/swap/prepare`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: 'Unknown error' }));\n throw new Error(error.message || `API error: ${response.status}`);\n }\n\n return response.json();\n }\n\n /**\n * Execute a swap (requires signer - use with ethers.js or viem)\n * \n * @example\n * // With ethers.js\n * const router = new AvaxRouter();\n * const signer = await ethers.getSigner();\n * const result = await router.swap({ tokenIn: 'AVAX', tokenOut: 'USDC', amountIn: '1.0' }, signer);\n */\n async swap(params: SwapParams, signer: any): Promise<SwapResult> {\n // Prepare the transaction\n const txData = await this.prepareSwap(params);\n \n // Execute via signer\n const tx = await signer.sendTransaction({\n to: txData.to,\n data: txData.data,\n value: txData.value,\n });\n\n // Wait for confirmation\n const receipt = await tx.wait();\n\n return {\n txHash: receipt.hash,\n amountIn: params.amountIn,\n amountOut: '0', // Would need to parse from logs\n dexUsed: 'unknown', // Would need to parse from logs\n protocolFee: '0',\n };\n }\n\n /**\n * Get the status of a swap transaction\n */\n async getSwapStatus(txHash: string): Promise<SwapStatus> {\n const response = await fetch(`${this.apiUrl}/swap/status/${txHash}`);\n \n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: 'Unknown error' }));\n throw new Error(error.message || `API error: ${response.status}`);\n }\n\n const data = await response.json();\n \n return {\n ...data,\n gasUsed: data.gasUsed ? BigInt(data.gasUsed) : undefined,\n };\n }\n\n /**\n * Get list of supported tokens\n */\n async getSupportedTokens(): Promise<Array<{\n address: string;\n symbol: string;\n name: string;\n decimals: number;\n logoURI?: string;\n }>> {\n const response = await fetch(`${this.apiUrl}/tokens`);\n \n if (!response.ok) {\n throw new Error(`API error: ${response.status}`);\n }\n\n return response.json();\n }\n\n /**\n * Get list of supported DEXes\n */\n async getSupportedDexes(): Promise<Array<{\n name: string;\n adapter: string;\n version: string;\n }>> {\n const response = await fetch(`${this.apiUrl}/dexes`);\n \n if (!response.ok) {\n throw new Error(`API error: ${response.status}`);\n }\n\n return response.json();\n }\n}\n\n// Export singleton for convenience\nlet defaultClient: AvaxRouter | null = null;\n\nexport function getClient(config?: AvaxRouterConfig): AvaxRouter {\n if (!defaultClient || config) {\n defaultClient = new AvaxRouter(config);\n }\n return defaultClient;\n}","/**\n * useSwap Hook\n * \n * Execute a token swap\n */\n\nimport { useState, useCallback } from 'react';\nimport { AvaxRouter, SwapParams, SwapResult, AvaxRouterConfig } from '../..';\n\nexport interface UseSwapOptions {\n /** SDK configuration */\n config?: AvaxRouterConfig;\n}\n\nexport interface UseSwapResult {\n /** Execute the swap */\n swap: (params: SwapParams, signer: any) => Promise<SwapResult>;\n /** Transaction hash after swap */\n txHash: string | null;\n /** Loading state */\n loading: boolean;\n /** Error if any */\n error: Error | null;\n /** Reset state */\n reset: () => void;\n}\n\nexport function useSwap(options: UseSwapOptions = {}): UseSwapResult {\n const { config } = options;\n \n const [txHash, setTxHash] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const client = new AvaxRouter(config);\n\n const swap = useCallback(async (params: SwapParams, signer: any): Promise<SwapResult> => {\n setLoading(true);\n setError(null);\n setTxHash(null);\n\n try {\n const result = await client.swap(params, signer);\n setTxHash(result.txHash);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n throw error;\n } finally {\n setLoading(false);\n }\n }, [config]);\n\n const reset = useCallback(() => {\n setTxHash(null);\n setLoading(false);\n setError(null);\n }, []);\n\n return {\n swap,\n txHash,\n loading,\n error,\n reset,\n };\n}"],"mappings":"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","names":["useState","useCallback","useState","useCallback","error"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@snowmonster_defi/sdk",
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"description": "🚀 The most powerful DEX aggregator SDK on Avalanche by SnowMonster DeFi. Get the best swap rates across Trader Joe, Pangolin & more with a single API call. Features React hooks, TypeScript support, and partner fee sharing up to 0.50%.",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./react": {
|
|
15
|
+
"types": "./dist/react/index.d.ts",
|
|
16
|
+
"import": "./dist/react/index.mjs",
|
|
17
|
+
"require": "./dist/react/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsup",
|
|
25
|
+
"dev": "tsup --watch",
|
|
26
|
+
"lint": "eslint src/**/*.ts",
|
|
27
|
+
"clean": "rm -rf dist"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"ethers": "^6.9.0"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"@rainbow-me/rainbowkit": "^2.0.0",
|
|
34
|
+
"react": ">=18",
|
|
35
|
+
"viem": "^2.0.0",
|
|
36
|
+
"wagmi": "^2.0.0"
|
|
37
|
+
},
|
|
38
|
+
"peerDependenciesMeta": {
|
|
39
|
+
"@rainbow-me/rainbowkit": {
|
|
40
|
+
"optional": true
|
|
41
|
+
},
|
|
42
|
+
"react": {
|
|
43
|
+
"optional": true
|
|
44
|
+
},
|
|
45
|
+
"viem": {
|
|
46
|
+
"optional": true
|
|
47
|
+
},
|
|
48
|
+
"wagmi": {
|
|
49
|
+
"optional": true
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/node": "^20.10.0",
|
|
54
|
+
"@types/react": "^18.2.43",
|
|
55
|
+
"tsup": "^8.0.1",
|
|
56
|
+
"typescript": "^5.3.2"
|
|
57
|
+
},
|
|
58
|
+
"keywords": [
|
|
59
|
+
"avalanche",
|
|
60
|
+
"avax",
|
|
61
|
+
"dex",
|
|
62
|
+
"dex-aggregator",
|
|
63
|
+
"router",
|
|
64
|
+
"swap",
|
|
65
|
+
"trader-joe",
|
|
66
|
+
"pangolin",
|
|
67
|
+
"defi",
|
|
68
|
+
"react",
|
|
69
|
+
"react-hooks",
|
|
70
|
+
"typescript",
|
|
71
|
+
"sdk",
|
|
72
|
+
"web3",
|
|
73
|
+
"crypto",
|
|
74
|
+
"trading",
|
|
75
|
+
"amm",
|
|
76
|
+
"liquidity",
|
|
77
|
+
"price",
|
|
78
|
+
"best-price",
|
|
79
|
+
"token-swap",
|
|
80
|
+
"ethereum",
|
|
81
|
+
"arbitrage",
|
|
82
|
+
"partner-fees",
|
|
83
|
+
"monetization"
|
|
84
|
+
],
|
|
85
|
+
"author": "SnowMonster DeFi",
|
|
86
|
+
"license": "MIT",
|
|
87
|
+
"homepage": "https://github.com/danaszova/avax-router#readme",
|
|
88
|
+
"bugs": {
|
|
89
|
+
"url": "https://github.com/danaszova/avax-router/issues"
|
|
90
|
+
},
|
|
91
|
+
"repository": {
|
|
92
|
+
"type": "git",
|
|
93
|
+
"url": "git+https://github.com/danaszova/avax-router.git"
|
|
94
|
+
},
|
|
95
|
+
"funding": {
|
|
96
|
+
"type": "github",
|
|
97
|
+
"url": "https://github.com/sponsors/danaszova"
|
|
98
|
+
},
|
|
99
|
+
"engines": {
|
|
100
|
+
"node": ">=16"
|
|
101
|
+
},
|
|
102
|
+
"sideEffects": false
|
|
103
|
+
}
|