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 { createClient } from "agihalo-node-sdk/auth";
import { HaloOAuthClient } from "agihalo-node-sdk";
// OEM or application user Authentication.
const halo = createClient(
"https://api.agihalo.com",
HALO_PROJECT_PUBLISHABLE_KEY
);
const { data, error } = await halo.auth.signInWithPassword({
email: "user@example.com",
password: "Secret123!",
});
if (error) throw error;
const { data: user } = await halo.auth.getUser();
// 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"
);createClient(...).auth uses a Project publishable key for application-user signup, managed password sessions, refresh rotation, user lookup, password recovery, and upstream provider PKCE flows.HaloOAuthClient is for Services registered as OAuth Apps. The OAuth App client 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);