near-kit
TypeScript library for NEAR Protocol blockchain interaction. Use this skill when writing code that interacts with NEAR Protocol, including viewing contract data, calling contract methods, sending NEAR tokens, building transactions, creating type-safe contract wrappers, integrating wallets (Wallet Selector, HOT Connect), React hooks and providers (@near-kit/react), managing keys, testing with sandbox, meta-transactions (NEP-366), and message signing (NEP-413).
git clone --depth 1 https://github.com/internet-court/internet-court-skill /tmp/near-kit && cp -r /tmp/near-kit/vendored/near/near-kit ~/.claude/skills/near-kitSKILL.md
# near-kit
A TypeScript library for NEAR Protocol with an intuitive, fetch-like API.
## Quick Start
```typescript
import { Near } from "near-kit";
// Read-only (no key needed)
const near = new Near({ network: "testnet" });
const data = await near.view("contract.near", "get_data", { key: "value" });
// With signing capability
const near = new Near({
network: "testnet",
privateKey: "ed25519:...",
defaultSignerId: "alice.testnet",
});
await near.call("contract.near", "method", { arg: "value" });
await near.send("bob.testnet", "1 NEAR");
```
## Import Cheatsheet
```typescript
// Core
import { Near } from "near-kit";
// Keys
import { generateKey, parseSeedPhrase, generateSeedPhrase } from "near-kit";
import { RotatingKeyStore, InMemoryKeyStore } from "near-kit";
import { FileKeyStore } from "near-kit/keys/file";
import { NativeKeyStore } from "near-kit/keys/native";
// Wallet adapters
import { fromHotConnect, fromWalletSelector } from "near-kit";
// NEP-413 verification
import { verifyNep413Signature } from "near-kit";
// Utilities
import { Amount, Gas, isValidAccountId } from "near-kit";
```
## Core Operations
### View Methods (Read-Only, Free)
```typescript
const result = await near.view("contract.near", "get_data", { key: "value" });
const balance = await near.getBalance("alice.near");
const exists = await near.accountExists("alice.near");
```
### Call Methods (Requires Signing)
```typescript
await near.call(
"contract.near",
"method",
{ arg: "value" },
{ gas: "30 Tgas", attachedDeposit: "1 NEAR" },
);
```
### Send NEAR Tokens
```typescript
await near.send("bob.near", "5 NEAR");
```
## Type-Safe Contracts
```typescript
import type { Contract } from "near-kit";
type MyContract = Contract<{
view: {
get_balance: (args: { account_id: string }) => Promise<string>;
};
call: {
transfer: (args: { to: string; amount: string }) => Promise<void>;
};
}>;
const contract = near.contract<MyContract>("token.near");
// View (no options needed)
await contract.view.get_balance({ account_id: "alice.near" });
// Call (options as second arg)
await contract.call.transfer(
{ to: "bob.near", amount: "10" },
{ attachedDeposit: "1 yocto" },
);
```
Untyped contract proxy:
```typescript
const guestbook = near.contract("guestbook.near-examples.testnet");
const total = await guestbook.view.total_messages();
const result = await guestbook.call.add_message(
{ text: "Hello!" },
{ gas: "30 Tgas" },
);
```
## Transaction Builder
Chain multiple actions in a single atomic transaction:
```typescript
const result = await near
.transaction("alice.near")
.functionCall("counter.near", "increment", {}, { gas: "30 Tgas" })
.transfer("counter.near", "0.001 NEAR")
.send();
```
**For all transaction actions and meta-transactions, see [references/transactions.md](references/transactions.md)**
## Configuration
### Backend/Scripts
```typescript
// Direct private key
const near = new Near({
network: "testnet",
privateKey: "ed25519:...",
defaultSignerId: "alice.testnet",
});
// File-based keystore
import { FileKeyStore } from "near-kit/keys/file";
const near = new Near({
network: "testnet",
keyStore: new FileKeyStore("~/.near-credentials", "testnet"),
});
// High-throughput with rotating keys
import { RotatingKeyStore } from "near-kit";
const near = new Near({
network: "mainnet",
keyStore: new RotatingKeyStore({
"bot.near": ["ed25519:key1...", "ed25519:key2...", "ed25519:key3..."],
}),
});
```
**For all key stores and utilities, see [references/keys-and-testing.md](references/keys-and-testing.md)**
### Browser Wallets
```typescript
import { NearConnector } from "@hot-labs/near-connect";
import { Near, fromHotConnect } from "near-kit";
const connector = new NearConnector({ network: "mainnet" });
connector.on("wallet:signIn", async (event) => {
const near = new Near({
network: "mainnet",
wallet: fromHotConnect(connector),
});
await near.call("contract.near", "method", { arg: "value" });
});
connector.connect();
```
**For HOT Connect and Wallet Selector integration, see [references/wallets.md](references/wallets.md)**
## React Bindings (@near-kit/react)
```tsx
import { NearProvider, useNear, useView, useCall } from "@near-kit/react";
function App() {
return (
<NearProvider config={{ network: "testnet" }}>
<Counter />
</NearProvider>
);
}
function Counter() {
const { data: count, isLoading } = useView<{}, number>({
contractId: "counter.testnet",
method: "get_count",
});
const { mutate: increment, isPending } = useCall({
contractId: "counter.testnet",
method: "increment",
});
if (isLoading) return <div>Loading...</div>;
return (
<button onClick={() => increment({})} disabled={isPending}>
Count: {count}
</button>
);
}
```
**For all React hooks, React Query/SWR integration, and SSR patterns, see [references/react.md](references/react.md)**
## Testing with Sandbox
```typescript
import { Near } from "near-kit";
import { Sandbox } from "near-kit/sandbox";
const sandbox = await Sandbox.start();
const near = new Near({ network: sandbox });
const testAccount = `test-${Date.now()}.${sandbox.rootAccount.id}`;
await near
.transaction(sandbox.rootAccount.id)
.createAccount(testAccount)
.transfer(testAccount, "10 NEAR")
.send();
await sandbox.stop();
```
**For sandbox patterns and Vitest integration, see [references/keys-and-testing.md](references/keys-and-testing.md)**
## Error Handling
```typescript
import {
InsufficientBalanceError,
FunctionCallError,
NetworkError,
TimeoutError,
} from "near-kit";
try {
await near.call("contract.near", "method", {});
} catch (error) {
if (error instanceof InsufficientBalanceError) {
console.log(`Need ${error.required}, have ${error.available}`);
} else if (error instanceof FunctionCallError) {
console.log(`Panic: ${error.panic}`, `Logs: ${error.logs}`);
}
}
```
## Unit Formatting
All amount0G Compute Network guide for decentralized AI inference, fine-tuning, and GPU services. Covers chatbots, image generation, speech-to-text, SDK integration (0g-serving-broker), processResponse API, broker.inference methods, CLI commands (0g-compute-cli), and account management. Use this skill for any 0G compute, 0G AI, or decentralized GPU question.
Give the AI agent its own EVM wallet with admin-controlled policies the agent CANNOT bypass even under prompt injection. Encrypted keystore (AES-256-GCM, scrypt KDF), policy file the agent has no tool to write, deterministic policy gate on every signing operation, optional local HTTP dashboard. Triggers: agent wallet, give the agent a wallet, agent address, fund the agent, agent autonomy, policy gate, kill switch, agent permissions, bounded autonomy, ERC-4337 alternative, session-key alternative.
Crypto wallet operations via the awal CLI — sign in, check balances, send USDC/ETH/POL/SOL, trade tokens, fund the wallet, and use the x402 payment protocol to discover paid services, pay for API calls, monetize an API, or query onchain data. Use whenever the user mentions signing in, login, authentication, wallet status, balance, address, sending money, paying someone, transferring tokens, ENS names, swapping/trading/converting tokens, funding/topping up/onramp, USDC, ETH, POL, SOL, the x402 bazaar, paid APIs, monetizing an endpoint, or querying onchain data on Base.
Help developers write code that interacts with Alkahest escrow contracts using the TypeScript, Rust, or Python SDK
Interact with Alkahest escrow contracts as a buyer, seller, or oracle using the CLI
Use this skill when the user asks to list, create, inspect, update, disable, re-enable, or revoke AltLLM Portal API keys for external agents or applications. Do NOT use for wallet login, billing history, or payment links.
Use this skill when the user asks to log in or out with a wallet session, fetch a wallet sign-in challenge, verify an externally signed challenge, or troubleshoot AltLLM Portal wallet login for the local altllm CLI. Do NOT use for API key management, billing history, or payment links.
Use this skill when the user asks to inspect AltLLM Portal balance, redeem a promo code, review billing transactions, or view usage analytics by period, model, or API key using the local altllm CLI. Do NOT use for API key lifecycle management or payment-link execution.