Dashboard
SDKs

Node.js SDK

Memory and x402 helpers for TypeScript.

The Node.js SDK provides explicit Memory helpers, legacy router headers, and x402 payment utilities for trusted JavaScript and TypeScript runtimes.

#Install

npm install agihalo-node-sdk ethers

#Authentication & OAuth

import {
  HaloAuthClient,
  HaloOAuthClient,
} from "agihalo-node-sdk";

// OEM or application user Authentication.
const auth = new HaloAuthClient({
  publishableKey: HALO_PROJECT_PUBLISHABLE_KEY,
});

const session = await auth.signInWithPassword(
  "user@example.com",
  "Secret123!"
);
const refreshed = await auth.refreshSession(session.refresh_token);
const user = await auth.getUser(refreshed.access_token);

// Service-side OAuth App client.
const oauth = new HaloOAuthClient({
  clientId: "halo_client_...",
  clientSecret: HALO_OAUTH_CLIENT_SECRET,
});

const tokens = await oauth.exchangeCode(
  callbackCode,
  "https://service.example.com/callback"
);

HaloAuthClient uses a Project publishable key for application-user signup, password sessions, refresh rotation, user lookup, password recovery, and upstream provider PKCE flows.HaloOAuthClient is for Services registered as OAuth Apps. It does not store returned tokens.

#Memory client

import { HaloMemoryClient } from "agihalo-node-sdk";

const memory = new HaloMemoryClient({
  apiKey: process.env.HALO_API_KEY!,
  projectKey: "customer-product",
});

const declaration = memory.functionDeclaration();

const result = await memory.executeRetrieveFunction({
  endUserKey: "user_123",
  sessionData: {
    messages: [
      { role: "user", content: "What are my report preferences?" },
    ],
  },
  limit: 5,
});

// Feed result.functionResponse to your model, then capture the final answer.
await memory.capture({
  endUserKey: "user_123",
  sessionData: {
    messages: [
      { role: "user", content: "What are my report preferences?" },
    ],
  },
  response: {
    role: "assistant",
    content: "You prefer concise reports in the morning.",
  },
});

#Memory deletion

await memory.deleteTopic({
  endUserKey: "user_123",
  topicKey: "report_preferences",
  includeRaw: false,
});

await memory.deleteRawEntry({
  endUserKey: "user_123",
  rawEntryId: "raw_entry_id",
});

#Connected accounts

await memory.registerOAuthProvider({
  providerKey: "google",
  clientId: GOOGLE_CLIENT_ID,
  clientSecret: GOOGLE_CLIENT_SECRET,
  redirectUri:
    "https://connect.example.com/api/v1/memory/oauth/callback/google",
});

const result = await memory.startOAuth({
  scopeId: "memory-scope-uuid",
  connectorId: "google.calendar",
  completionMode: "mobile_deep_link",
  returnUri: "example-app://oauth/complete",
});

#Payment helpers

Use haloSystem for an automatic 402 retry wrapper orHaloPaymentTools when an agent must decide and sign explicitly.

import { HaloPaymentTools } from "agihalo-node-sdk";

const tools = new HaloPaymentTools({
  privateKey: secureWalletPrivateKey,
  apiKey: HALO_API_KEY,
  haloUrl: "https://api.agihalo.com",
});

const decision = await tools.consultJudge(context, "1.00 USDC");
const signature = await tools.signPayment(paymentRequirement);