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);