Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

README.md

@qwed-ai/sdk

TypeScript/JavaScript SDK for QWED Verification Protocol

npm version TypeScript

Installation

npm install @qwed-ai/sdk
# or
yarn add @qwed-ai/sdk
# or
pnpm add @qwed-ai/sdk

Quick Start

import { QWEDClient } from '@qwed-ai/sdk';

const client = new QWEDClient({
  apiKey: 'qwed_your_api_key',
  baseUrl: 'http://localhost:8000', // optional
});

// Verify a math query
const result = await client.verify('What is 2+2?');
console.log(result.verified); // true
console.log(result.status);   // 'VERIFIED'

Verification Methods

Natural Language

const result = await client.verify('Is 15% of 200 equal to 30?');

Math Expressions

const result = await client.verifyMath('x**2 + 2*x + 1 = (x+1)**2');
console.log(result.result?.is_valid); // true

Logic (QWED-DSL)

const result = await client.verifyLogic('(AND (GT x 5) (LT y 10))');
console.log(result.result?.satisfiability); // 'SAT'
console.log(result.result?.model);          // { x: 6, y: 9 }

Code Security

const result = await client.verifyCode(`
  import os
  os.system('rm -rf /')
`, { language: 'python' });

console.log(result.verified); // false
console.log(result.result?.vulnerabilities);

Fact Verification

const result = await client.verifyFact(
  'Paris is the capital of France',
  'France is a country in Europe. Its capital city is Paris.'
);
console.log(result.result?.verdict); // 'SUPPORTED'

SQL Validation

const result = await client.verifySQL(
  'SELECT * FROM users WHERE id = 1',
  'CREATE TABLE users (id INT PRIMARY KEY, name TEXT)',
  { dialect: 'postgresql' }
);

Batch Verification

const result = await client.verifyBatch([
  { query: '2+2=4', type: VerificationType.Math },
  { query: '3*3=9', type: VerificationType.Math },
  { query: '(AND (GT x 5))', type: VerificationType.Logic },
]);

console.log(result.summary.success_rate); // 100
console.log(result.items);                // individual results

Attestations

Request cryptographic proof of verification:

const result = await client.verify('2+2=4', {
  includeAttestation: true,
});

if (result.attestation) {
  const parsed = parseAttestation(result.attestation);
  console.log(parsed?.payload.qwed.result.status); // 'VERIFIED'
}

Agent Verification

// Register an agent
const agent = await client.registerAgent({
  agent: {
    name: 'CustomerBot',
    type: 'supervised',
    principal_id: 'org_123',
  },
  permissions: {
    allowed_engines: [VerificationType.SQL, VerificationType.Math],
    allowed_tools: ['database_read'],
  },
  budget: {
    max_daily_cost_usd: 50,
  },
});

// Verify agent action
const decision = await client.verifyAgentAction({
  agent_id: agent.agent_id,
  agent_token: agent.agent_token,
  action: {
    type: 'execute_sql',
    query: 'SELECT * FROM customers',
  },
});

if (decision.decision === 'APPROVED') {
  // Safe to execute
}

Error Handling

import { QWEDClient, QWEDError, QWEDAuthError, QWEDRateLimitError } from '@qwed-ai/sdk';

try {
  const result = await client.verify('test');
} catch (error) {
  if (error instanceof QWEDAuthError) {
    console.error('Invalid API key');
  } else if (error instanceof QWEDRateLimitError) {
    console.error(`Rate limited. Retry after ${error.retryAfter}s`);
  } else if (error instanceof QWEDError) {
    console.error(`Error ${error.code}: ${error.message}`);
  }
}

Types

All types are exported and fully documented:

import {
  VerificationType,
  VerificationStatus,
  VerificationResponse,
  BatchResponse,
  AgentVerificationResponse,
  // ... and more
} from '@qwed-ai/sdk';

Configuration

const client = new QWEDClient({
  apiKey: 'qwed_...',          // Required
  baseUrl: 'https://api.qwed.ai', // Optional, default: localhost:8000
  timeout: 30000,              // Optional, default: 30000ms
  headers: {                   // Optional custom headers
    'X-Custom-Header': 'value',
  },
});

License

Apache 2.0