# @hot-labs/near-connect Zero-dependency, secure wallet connector for NEAR blockchain. ## Installation ```bash npm install @hot-labs/near-connect # or yarn add @hot-labs/near-connect ``` CDN alternative: ```html ``` ## Quick Start ```typescript import { NearConnector } from "@hot-labs/near-connect"; const connector = new NearConnector({ network: "mainnet" }); connector.on("wallet:signIn", async (t) => { const wallet = await connector.wallet(); const address = t.accounts[0].accountId; }); connector.on("wallet:signOut", async () => {}); // Check if already signed in try { const wallet = await connector.wallet(); const accounts = await wallet.getAccounts(); if (accounts.length > 0) { console.log("Already signed in:", accounts[0].accountId); } } catch (e) { // Not signed in } ``` ## NearConnector Options ```typescript interface NearConnectorOptions { network?: "mainnet" | "testnet"; features?: Partial; // Filter wallets by features excludedWallets?: string[]; // Wallet IDs to exclude autoConnect?: boolean; // Default: true walletConnect?: { projectId: string; metadata: any }; signIn?: { contractId?: string; methodNames?: string[] }; footerBranding?: null | { icon: string; heading: string; link: string; linkText: string }; } ``` ## NearConnector Methods ```typescript // Connect to wallet (shows selector popup if no ID provided) await connector.connect(walletId?: string): Promise // Disconnect current wallet await connector.disconnect(): Promise // Get current or specific wallet instance await connector.wallet(id?: string): Promise // Show wallet selector popup await connector.selectWallet(): Promise // Switch network (disconnects current wallet) await connector.switchNetwork(network: "mainnet" | "testnet"): Promise // Get available wallets filtered by features connector.availableWallets: NearWalletBase[] ``` ## Events ```typescript connector.on("wallet:signIn", ({ wallet, accounts, success }) => {}); connector.on("wallet:signOut", ({ success }) => {}); connector.on("selector:walletsChanged", () => {}); // Also: once(), off(), removeAllListeners() ``` ## Wallet Interface All wallets implement `NearWalletBase`: ```typescript interface NearWalletBase { manifest: WalletManifest; signIn(data?: { network?: Network; contractId?: string; methodNames?: string[]; }): Promise; signOut(data?: { network?: Network }): Promise; getAccounts(data?: { network?: Network }): Promise; signAndSendTransaction(params: { signerId?: string; receiverId: string; actions: Action[]; network?: Network; }): Promise; signAndSendTransactions(params: { transactions: Transaction[]; network?: Network; }): Promise; signMessage(params: { message: string; recipient: string; nonce: Uint8Array; network?: Network; }): Promise; } ``` ## Types ```typescript interface Account { accountId: string; publicKey: string; } interface SignedMessage { accountId: string; publicKey: string; signature: string; } type Network = "mainnet" | "testnet"; ``` ## Wallet Features Filter ```typescript const connector = new NearConnector({ features: { signMessage: true, testnet: true } }); ``` Available features: `signMessage`, `signTransaction`, `signAndSendTransaction`, `signAndSendTransactions`, `signInWithoutAddKey`, `testnet`, `mainnet`. ## Action Formats Two formats supported for `signAndSendTransaction` actions: **1. near-wallet-selector format (legacy):** ```typescript { type: "FunctionCall", params: { methodName: "ft_transfer", args: { receiver_id: "bob.near", amount: "1000000000000000000000000" }, gas: "30000000000000", deposit: "1" } } ``` **2. near-api-js format (recommended):** ```typescript import { transactions } from "near-api-js"; transactions.functionCall("ft_transfer", { receiver_id: "bob.near", amount: "1000000000000000000000000" }, "30000000000000", "1"); ``` ## WalletConnect Support (Optional) ```typescript import SignClient from "@walletconnect/sign-client"; const walletConnect = SignClient.init({ projectId: "...", metadata: {} }); const connector = new NearConnector({ walletConnect }); ``` Some wallets require WalletConnect to appear as connection options. ## Supported Wallets HOT Wallet, Meteor Wallet, Intear Wallet, MyNearWallet, Nightly Wallet, NEAR Mobile, Unity Wallet, OKX Wallet, and any wallet via WalletConnect. ## Transaction Example ```typescript const connector = new NearConnector({ network: "mainnet" }); await connector.connect(); const wallet = await connector.wallet(); const result = await wallet.signAndSendTransaction({ receiverId: "contract.near", actions: [ { type: "FunctionCall", params: { methodName: "ft_transfer", args: { receiver_id: "bob.near", amount: "1000000000000000000000000" }, gas: "30000000000000", deposit: "1" } } ] }); console.log("Transaction hash:", result.transaction.hash); ```