Node.js Examples

Node.js Examples

Integrate GovernanceAI with Node.js applications.

Installation

$npm install axios dotenv

Basic Setup

1require('dotenv').config();
2const axios = require('axios');
3
4const API_KEY = process.env.GOVERNANCEAI_API_KEY;
5const ORG_ID = process.env.GOVERNANCEAI_ORG_ID;
6const BASE_URL = 'https://api.governanceai.com/v1';
7
8const client = axios.create({
9 baseURL: BASE_URL,
10 headers: {
11 'Authorization': `Bearer ${API_KEY}`,
12 'Content-Type': 'application/json'
13 }
14});

Evaluate Guardrails

1async function evaluateGuardrails(userMessage, userId) {
2 try {
3 const response = await client.post('/guardrails/evaluate', {
4 messages: [
5 {
6 role: 'user',
7 content: userMessage
8 }
9 ],
10 context: {
11 org_id: ORG_ID,
12 user_id: userId
13 }
14 });
15
16 return {
17 decision: response.data.decision,
18 riskScore: response.data.risk_score,
19 violations: response.data.policy_violations
20 };
21 } catch (error) {
22 console.error('Guardrail evaluation failed:', error.message);
23 throw error;
24 }
25}
26
27// Usage
28const result = await evaluateGuardrails(
29 "What is the capital of France?",
30 "user_123"
31);
32console.log(`Decision: ${result.decision}`);
33console.log(`Risk Score: ${result.riskScore}`);

Create Policy

1async function createPolicy(policyName, guardrailIds) {
2 const response = await client.post('/policies', {
3 name: policyName,
4 guardrail_ids: guardrailIds,
5 scope: 'organization',
6 enforcement: {
7 mode: 'blocking',
8 log_violations: true
9 }
10 });
11
12 return response.data;
13}
14
15// Usage
16const policy = await createPolicy(
17 'Production Safety',
18 ['guardrail_pii', 'guardrail_toxic']
19);
20console.log(`Policy created: ${policy.policy_id}`);

Run Scan with Async/Await

1async function runScan(scanType, repositories) {
2 // Start scan
3 const scanResponse = await client.post('/scans', {
4 scan_type: scanType,
5 repositories: repositories
6 });
7
8 const scanId = scanResponse.data.scan_id;
9 console.log(`Scan started: ${scanId}`);
10
11 // Poll for completion
12 let completed = false;
13 let results = null;
14
15 while (!completed) {
16 const statusResponse = await client.get(`/scans/${scanId}`);
17 const scan = statusResponse.data;
18
19 if (scan.status === 'completed') {
20 completed = true;
21 results = scan;
22 } else {
23 // Wait 5 seconds before polling again
24 await new Promise(resolve => setTimeout(resolve, 5000));
25 }
26 }
27
28 return results;
29}
30
31// Usage
32const scanResults = await runScan('code_scan', ['repo_1', 'repo_2']);
33console.log(`Found ${scanResults.models_found} models`);

Error Handling

1async function makeRequest(method, endpoint, data = null) {
2 try {
3 let response;
4
5 if (method === 'GET') {
6 response = await client.get(endpoint);
7 } else if (method === 'POST') {
8 response = await client.post(endpoint, data);
9 }
10
11 return response.data;
12 } catch (error) {
13 if (error.response?.status === 401) {
14 throw new Error('Invalid API key');
15 } else if (error.response?.status === 403) {
16 throw new Error('Insufficient permissions');
17 } else if (error.response?.status >= 500) {
18 throw new Error('Server error - try again later');
19 } else if (error.message === 'Network Error') {
20 throw new Error('Network error - check your connection');
21 }
22
23 throw error;
24 }
25}

TypeScript Support

1interface GuardrailEvaluationResult {
2 decision: 'allow' | 'block' | 'transform';
3 riskScore: number;
4 violations: any[];
5}
6
7async function evaluateGuardrails(
8 userMessage: string,
9 userId: string
10): Promise<GuardrailEvaluationResult> {
11 const response = await client.post('/guardrails/evaluate', {
12 messages: [{ role: 'user', content: userMessage }],
13 context: { org_id: ORG_ID, user_id: userId }
14 });
15
16 return {
17 decision: response.data.decision,
18 riskScore: response.data.risk_score,
19 violations: response.data.policy_violations
20 };
21}

Next Steps