Node.js SDK
Node.js SDK Reference
Use Faramesh in your Node.js/JavaScript agents with TypeScript-first SDK. Full type safety and modern async/await API.
Installation
Install from npm or use from source
npm install faracore
# or
npm install @faramesh/sdkBasic Usage
Import and use the SDK:
import { submitAction, getAction, Config } from "faracore";
const config = new Config({
apiBase: "http://127.0.0.1:8000",
agentId: "devops"
});
const action = await submitAction(
{
agentId: "devops",
tool: "github.merge",
operation: "merge",
params: { pr: 17 }
},
config
);
const fetched = await getAction(action.id, config);
console.log(fetched.status);Programmatic Configuration
Configure the SDK with a Config object
import { Config } from "faracore";
const config = new Config({
apiBase: "http://localhost:8000",
agentId: "my-agent",
authToken: "your-token",
timeout: 10000,
maxRetries: 3,
retryBackoffFactor: 0.5
});Submitting Actions
The submitAction function sends an action for evaluation:
const action = await submitAction(
{
agentId: "my-agent",
tool: "shell",
operation: "run",
params: { cmd: "ls -la" },
context: { environment: "production" }
},
config
);
// Response includes:
// - id: Action ID
// - status: Current status
// - decision: Policy decision
// - reason: Policy reason
// - approval_token: Token for approval (if require_approval)Getting Action Status
Check the status of an action:
const action = await getAction(actionId, config);
console.log('Status:', action.status);
console.log('Decision:', action.decision);Listing Actions
Query actions with filters:
import { listActions } from "faracore";
// List all actions
const actions = await listActions(config);
// Filter by status
const pending = await listActions(config, { status: "pending_approval" });
// Filter by agent
const agentActions = await listActions(config, { agentId: "my-agent" });
// Filter by tool
const shellActions = await listActions(config, { tool: "shell" });Error Handling
The SDK provides custom error classes for robust error handling
import {
GovernorError,
GovernorTimeoutError,
GovernorAuthError,
GovernorConnectionError,
PendingAction
} from "faracore";
try {
const action = await submitAction(...);
} catch (error) {
if (error instanceof GovernorAuthError) {
console.error("Authentication failed:", error.message);
} else if (error instanceof GovernorTimeoutError) {
console.error("Request timed out:", error.message);
} else if (error instanceof GovernorConnectionError) {
console.error("Connection failed:", error.message);
} else if (error instanceof PendingAction) {
console.log("Action requires approval:", error.id);
console.log("Approval token:", error.approval_token);
} else {
console.error("Error:", error.message);
}
}Complete Example
A full working example showing the complete async workflow
import { submitAction, getAction, Config } from "faracore";
async function main() {
// Initialize config
const config = new Config({
apiBase: "http://127.0.0.1:8000",
agentId: "test-agent"
});
// Submit an action
const response = await submitAction(
{
agentId: "test-agent",
tool: "shell",
operation: "run",
params: { cmd: "echo 'Hello FaraCore'" }
},
config
);
console.log('Action ID:', response.id);
console.log('Status:', response.status);
// If approval is required, wait for approval
if (response.status === 'pending_approval') {
console.log("Action requires approval. Waiting...");
// In production, you might poll or use SSE to wait for approval
}
// Check final status
const action = await getAction(response.id, config);
console.log('Final status:', action.status);
}
main().catch(console.error);