Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Universal cross-chain swap & bridge skill for OpenClaw using the NEAR Intents 1Click SDK. Supports 14+ blockchains including NEAR, Base, Ethereum, Solana, an...
Universal cross-chain swap & bridge skill for OpenClaw using the NEAR Intents 1Click SDK. Supports 14+ blockchains including NEAR, Base, Ethereum, Solana, an...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
What it does: Universal cross-chain swap & bridge tool powered by the 1Click API and the @defuse-protocol/one-click-sdk-typescript SDK. Supported chains: NEAR, Base, Ethereum, Arbitrum, Solana, BSC, Gnosis, Starknet, Bitcoin, Dogecoin, Zcash, Litecoin. How it works: Get a quote from the 1Click API → receive a deposit address Send tokens to the deposit address on the origin chain 1Click handles the swap/bridge automatically Tokens arrive at the recipient address on the destination chain Key facts: Minimum ~$0.10 USD per swap NEAR account only required when the origin asset is on NEAR No NEAR account needed for cross-chain swaps from other chains (e.g., Arb USDC → Sol USDC) JWT authentication optional but avoids 0.2% fee → register at partners.near-intents.org
All swaps go through the 1Click API (https://1click.chaindefuser.com): User Wallet ──► [Deposit to 1Click address] ──► Market Makers ──► Recipient on Destination Chain There is no need to interact with intents.near directly — the 1Click API abstracts everything.
The single entry point exported by index.ts: import { executeIntent } from './index'; const result = await executeIntent({ assetIn: 'NEAR', // Origin token (see Asset Naming below) assetOut: 'base:USDC', // Destination token amount: '1.0', // Human-readable amount recipient: '0x...', // Destination address (optional if same-chain NEAR) mode: 'auto', // 'auto' (default) or 'manual' swapType: 'EXACT_INPUT', // 'EXACT_INPUT' (default) or 'EXACT_OUTPUT' });
ParameterTypeRequiredDescriptionassetInstring✅Origin asset symbol (e.g., 'NEAR', 'base:USDC', 'arb:ARB')assetOutstring✅Destination asset symbolamountstring✅Human-readable amount (e.g., '1.0', '0.5')recipientstring❌Destination address. Required for cross-chain. Defaults to NEAR accountrefundAddressstring⚠️REQUIRED for non-NEAR origins. Address on origin chain for refunds if swap fails. CRITICAL for fund safety!modestring❌'auto' sends deposit automatically from NEAR account. 'manual' returns quote + deposit address for user to send manuallyswapTypestring❌'EXACT_INPUT' (amount = input), 'EXACT_OUTPUT' (amount = desired output)
When assetIn is on a non-NEAR chain (e.g., 'base:USDC', 'arb:ARB', 'btc:BTC'): refundAddress is REQUIRED — the function will throw an error if missing ALWAYS ask the user for their wallet address on the origin chain NEVER assume or guess — using the wrong address = permanent fund loss Explain to the user: "If the swap fails, your tokens will be refunded to this address" Example: // ❌ WRONG - Missing refundAddress for non-NEAR origin await executeIntent({ assetIn: 'base:USDC', // Base origin assetOut: 'NEAR', amount: '0.5', recipient: 'user.near', mode: 'manual' }); // → Error: Cross-chain swap from base:USDC requires refundAddress parameter // ✅ CORRECT - User's Base wallet address provided await executeIntent({ assetIn: 'base:USDC', assetOut: 'NEAR', amount: '0.5', recipient: 'user.near', refundAddress: '0x123...', // User's Base address mode: 'manual' }); Why this matters: Swaps can fail due to market conditions, liquidity issues, or timing Failed swaps trigger automatic refunds to refundAddress on the origin chain If refundAddress is wrong or belongs to someone else, funds are permanently lost
Auto mode: "Swap Successful! 1.0 NEAR → 0.97 USDC\nTransaction: https://nearblocks.io/txns/...\nExplorer: https://explorer.near-intents.org/transactions/..." Manual mode: Formatted instructions with deposit address, amounts, tracking URL, and deadline
Use chain:SYMBOL format. Omit chain prefix for NEAR-native tokens. ChainPrefixExamplesNEAR(none)NEAR, USDC, USDT, wNEARBasebase:base:USDCEthereumeth:eth:ETH, eth:USDCArbitrumarb:arb:USDC, arb:ARBSolanasol:sol:SOL, sol:USDCBSCbsc:bsc:USDCBitcoinbtc:btc:BTC (native only)Dogecoindoge:doge:DOGE (native only)Zcashzec:zec:ZEC (native only)Litecoinltc:ltc:LTC (native only) Case-insensitive: near, NEAR, Near all work UTXO chains (BTC, DOGE, ZEC, LTC): native tokens only — no wrapped/ERC-20 equivalents
Automatically sends the deposit from the configured NEAR account. Use when: Origin asset is on NEAR and agent has NEAR credentials in .env. await executeIntent({ assetIn: 'NEAR', assetOut: 'base:USDC', amount: '1.0', recipient: '0xYourBaseAddress', });
Returns a quote with deposit address — the user (or agent) sends tokens separately. Use when: Origin is on a non-NEAR chain, or you want to show the user a quote first. const quote = await executeIntent({ assetIn: 'arb:USDC', assetOut: 'sol:USDC', amount: '5.0', recipient: 'YourSolanaAddress', mode: 'manual', }); // Returns deposit address + instructions
Specify the desired output amount; the 1Click API tells you how much to send. const quote = await executeIntent({ assetIn: 'USDT', assetOut: 'base:USDC', amount: '10.0', // Want exactly 10 USDC out recipient: '0x...', mode: 'manual', swapType: 'EXACT_OUTPUT', });
await executeIntent({ assetIn: 'NEAR', assetOut: 'base:USDC', amount: '1.0', recipient: '0xYourBaseAddress', });
const quote = await executeIntent({ assetIn: 'arb:USDC', assetOut: 'sol:USDC', amount: '5.0', recipient: 'YourSolanaAddress', refundAddress: '0xYourArbitrumAddress', // REQUIRED for refunds mode: 'manual', }); // User sends 5 USDC to the deposit address on Arbitrum
await executeIntent({ assetIn: 'NEAR', assetOut: 'USDC', amount: '2.0', });
const quote = await executeIntent({ assetIn: 'NEAR', assetOut: 'arb:USDC', amount: '10.0', recipient: '0xYourArbAddress', mode: 'manual', swapType: 'EXACT_OUTPUT', });
const quote = await executeIntent({ assetIn: 'btc:BTC', assetOut: 'NEAR', amount: '0.01', recipient: 'yourname.near', refundAddress: 'bc1q...', // REQUIRED - Your Bitcoin address mode: 'manual', }); // User sends 0.01 BTC to the deposit address on Bitcoin
NEAR_ACCOUNT_ID=your-account.near NEAR_PRIVATE_KEY=ed25519:your_private_key_here NEAR_RPC_URL=https://rpc.mainnet.fastnear.com NEAR_NETWORK_ID=mainnet ONE_CLICK_JWT=optional_jwt_token ONE_CLICK_JWT: Register at partners.near-intents.org to avoid the 0.2% fee. Skip .env entirely if only using manual mode for non-NEAR-origin swaps. ⚠️ Never commit .env to version control!
executeIntent() │ ├─ 1. resolveToken(assetIn) → { symbol, decimals, assetId } ├─ 2. resolveToken(assetOut) → { symbol, decimals, assetId } ├─ 3. toSmallestUnit(amount, decimals) │ ├─ 4. OneClickService.getQuote({ │ originAsset, destinationAsset, amount, │ refundTo, recipient, deadline, ... │ }) │ → Returns { depositAddress, amountIn, amountOut } │ ├─ [manual mode] → return quote instructions │ ├─ 5. account.transfer() → send deposit to depositAddress ├─ 6. OneClickService.submitDepositTx() → (optional, speeds up) └─ 7. OneClickService.getExecutionStatus() → poll until SUCCESS
StatusMeaningPENDING_DEPOSITWaiting for depositPROCESSINGDeposit detected, market makers executingSUCCESSTokens delivered to recipientINCOMPLETE_DEPOSITDeposit below required amountREFUNDEDSwap failed, tokens returned to refund addressFAILEDSwap failed due to error
The code includes a static TOKEN_MAP for common tokens: KeyAsset ID (NEP-141)DecimalsNEARnep141:wrap.near24USDCnep141:17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a16USDTnep141:usdt.tether-token.near6base:USDCnep141:base-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.omft.near6arb:USDCnep141:arb-0xaf88d065e77c8cc2239327c5edb3a432268e5831.omft.near6arb:ARBnep141:arb-0x912ce59144191c1204e64559fe8253a0e49e6548.omft.near18eth:ETHnep141:eth.omft.near18eth:USDCnep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near6sol:SOLnep141:sol.omft.near9sol:USDCnep141:sol-5ce3bf3a31af18be40ba30f721101b4341690186.omft.near6 To add more tokens: use OneClickService.getTokens() or check TOKENS.md.
TokenDecimals"1.0" → smallest unitNEAR241000000000000000000000000USDC61000000USDT61000000ETH181000000000000000000SOL91000000000BTC8100000000 Decimal conversion is handled automatically by index.ts using decimal.js.
NEAR transactions: https://nearblocks.io/txns/<txHash> 1Click swap status: https://explorer.near-intents.org/transactions/<depositAddress>
ErrorSolutionToken not found: XCheck symbol and chain prefix. See TOKEN_MAP or TOKENS.mdNo deposit address in quote responseSolver couldn't match the pair/amount. Try a different amount or pairNEAR_ACCOUNT_ID and NEAR_PRIVATE_KEY must be setConfigure .env or use mode: 'manual'Swap failed with status: REFUNDEDTokens returned to refund address. Retry with different amountStatus polling timed outCheck explorer URL manually. Swap may still complete401 Authentication errorJWT is invalid or expired. Register at partners.near-intents.org
{ "@defuse-protocol/one-click-sdk-typescript": "0.1.1", "@near-js/accounts": "^2.2.4", "@near-js/crypto": "^2.2.4", "@near-js/providers": "^2.2.4", "@near-js/signers": "^2.2.4", "@near-js/tokens": "^2.2.4", "decimal.js": "^10.4.3", "dotenv": "^16.3.1" }
FilePurposeindex.tsMain entry — exports executeIntent()lib-1click/Step-by-step 1Click SDK examples (get tokens, get quote, send deposit, etc.)SKILL.mdThis file — primary AI agent referenceAI-AGENT-GUIDE.mdDetailed agent workflow guideTOKENS.mdFull token reference with decimals and asset IDsmanifest.jsonSkill manifest for OpenClawREADME.mdProject documentationUSAGE_GUIDE.mdUsage patterns and troubleshooting
v2.0.0 — Powered by 1Click SDK and NEAR Intents
MIT
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.