{"_id":"@ainvirion/aiproxyguard-npm-sdk","_rev":"4-ae1826cf88e0dcc0acb7346a1d567f4f","name":"@ainvirion/aiproxyguard-npm-sdk","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.14":{"name":"@ainvirion/aiproxyguard-npm-sdk","version":"1.0.14","keywords":["aiproxyguard","llm","security","prompt-injection","ai","sdk","typescript"],"author":{"name":"AINVIRION","email":"support@ainvirion.com"},"license":"Apache-2.0","_id":"@ainvirion/aiproxyguard-npm-sdk@1.0.14","maintainers":[{"name":"oscarvalenzuelab","email":"oscar.valenzuela.b@gmail.com"}],"homepage":"https://ainvirion.github.io/aiproxyguard/","bugs":{"url":"https://github.com/AInvirion/aiproxyguard-npm-sdk/issues"},"dist":{"shasum":"6b00224f8242a7b2909c5ba3d57491510310897f","tarball":"https://registry.npmjs.org/@ainvirion/aiproxyguard-npm-sdk/-/aiproxyguard-npm-sdk-1.0.14.tgz","fileCount":17,"integrity":"sha512-53/wxgOi5T9EZiT6UgS1URRkm2FqpvFb4D5dbMaAp+D1+Hj42CnnVZuD1BqFO83IPZ/r85vb346qnwt7iemr0A==","signatures":[{"sig":"MEUCIB6wk2A7E1qZxhpltN1lVIhlfqQcO+hLC3FpXmhvSiAjAiEApBM+ZDHdl/BG889GihjlEcY3YzbcvXzoLoxYedleYiM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145316},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./middleware":{"types":"./dist/middleware/express.d.ts","import":"./dist/middleware/express.mjs","require":"./dist/middleware/express.js"}},"gitHead":"00cd3aedbad235e676baae5e5f7df15e203c54e2","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"oscarvalenzuelab","email":"oscar.valenzuela.b@gmail.com"},"repository":{"url":"git+https://github.com/AInvirion/aiproxyguard-npm-sdk.git","type":"git"},"_npmVersion":"11.4.2","description":"Official TypeScript/JavaScript SDK for AIProxyGuard - LLM security proxy for prompt injection detection","directories":{},"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^1.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"peerDependenciesMeta":{"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aiproxyguard-npm-sdk_1.0.14_1775238031028_0.3038222321658328","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"@ainvirion/aiproxyguard-npm-sdk","version":"1.0.15","keywords":["aiproxyguard","llm","security","prompt-injection","ai","sdk","typescript"],"author":{"name":"AINVIRION","email":"support@ainvirion.com"},"license":"Apache-2.0","_id":"@ainvirion/aiproxyguard-npm-sdk@1.0.15","maintainers":[{"name":"oscarvalenzuelab","email":"oscar.valenzuela.b@gmail.com"}],"homepage":"https://ainvirion.github.io/aiproxyguard/","bugs":{"url":"https://github.com/AInvirion/aiproxyguard-npm-sdk/issues"},"dist":{"shasum":"e9d7970527ae469659c88d5bbb494c50e6cc4774","tarball":"https://registry.npmjs.org/@ainvirion/aiproxyguard-npm-sdk/-/aiproxyguard-npm-sdk-1.0.15.tgz","fileCount":17,"integrity":"sha512-Gydzhu8RZfO7CV3tnaUv93fObNNmTmmm0FCYs+ACmCmnViQdk/8aEdwYMahOvkIqQb4b8dpGDLPwvCKqfAhKKQ==","signatures":[{"sig":"MEUCIH2OmeR1HULoAqWG0btP10P9Xt8DhOAWWt42UefAU3rsAiEAwW3a+VycAqZp/c+PHrIRfqZe7v844JfBeSA6mkIkyz4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145316},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./middleware":{"types":"./dist/middleware/express.d.ts","import":"./dist/middleware/express.mjs","require":"./dist/middleware/express.js"}},"gitHead":"0c1259d22bc5fa14117d00ee5a2c338037910ade","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"oscarvalenzuelab","email":"oscar.valenzuela.b@gmail.com"},"repository":{"url":"git+https://github.com/AInvirion/aiproxyguard-npm-sdk.git","type":"git"},"_npmVersion":"11.4.2","description":"Official TypeScript/JavaScript SDK for AIProxyGuard - LLM security proxy for prompt injection detection","directories":{},"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^1.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"peerDependenciesMeta":{"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aiproxyguard-npm-sdk_1.0.15_1775238291853_0.40834788149046486","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"@ainvirion/aiproxyguard-npm-sdk","version":"1.0.20","keywords":["aiproxyguard","llm","security","prompt-injection","ai","sdk","typescript"],"author":{"name":"AINVIRION","email":"support@ainvirion.com"},"license":"Apache-2.0","_id":"@ainvirion/aiproxyguard-npm-sdk@1.0.20","maintainers":[{"name":"oscarvalenzuelab","email":"oscar.valenzuela.b@gmail.com"}],"homepage":"https://ainvirion.github.io/aiproxyguard/","bugs":{"url":"https://github.com/AInvirion/aiproxyguard-npm-sdk/issues"},"dist":{"shasum":"184bc6e15cb8bb8aa16d5b6a523dd3ead088b493","tarball":"https://registry.npmjs.org/@ainvirion/aiproxyguard-npm-sdk/-/aiproxyguard-npm-sdk-1.0.20.tgz","fileCount":17,"integrity":"sha512-C8GaqjKlynAz9lEeTM5Dc4LZPsHTioe8EFf+D+JmPGiQ7dxrLAX4HyM6b/3Kp//TB6mUHFEneFrMfrK45Bd1RQ==","signatures":[{"sig":"MEUCIQCpz7gaOnL1CuPqTCU1FMB7Wbgusi5DV6GTh50Y3Ybu2AIgYURMeBhM6tjESz8Vzl08lYkfLVCf8uRZi/mrlJqqqBg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145316},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./middleware":{"types":"./dist/middleware/express.d.ts","import":"./dist/middleware/express.mjs","require":"./dist/middleware/express.js"}},"gitHead":"ef42561848cd60d6ac29ead8dca3f9889fedf22b","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"oscarvalenzuelab","email":"oscar.valenzuela.b@gmail.com"},"repository":{"url":"git+https://github.com/AInvirion/aiproxyguard-npm-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"Official TypeScript/JavaScript SDK for AIProxyGuard - LLM security proxy for prompt injection detection","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^1.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"peerDependenciesMeta":{"express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/aiproxyguard-npm-sdk_1.0.20_1775239854183_0.9092381999264194","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ainvirion/aiproxyguard-npm-sdk","version":"1.2.0","description":"Official TypeScript/JavaScript SDK for AIProxyGuard - LLM security proxy for prompt injection detection","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./middleware":{"types":"./dist/middleware/express.d.ts","import":"./dist/middleware/express.mjs","require":"./dist/middleware/express.js"}},"scripts":{"sync-version":"node -e \"const v=require('./package.json').version; require('fs').writeFileSync('src/version.ts', '/**\\n * SDK version - auto-synced from package.json\\n */\\nexport const version = \\x27'+v+'\\x27;\\n')\"","prebuild":"npm run sync-version","build":"tsup","test":"vitest run","test:watch":"vitest","lint":"tsc --noEmit","prepublishOnly":"npm run build"},"keywords":["aiproxyguard","llm","security","prompt-injection","ai","sdk","typescript"],"author":{"name":"AINVIRION","email":"support@ainvirion.com"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/AInvirion/aiproxyguard-npm-sdk.git"},"homepage":"https://ainvirion.github.io/aiproxyguard/","bugs":{"url":"https://github.com/AInvirion/aiproxyguard-npm-sdk/issues"},"engines":{"node":">=18.0.0"},"devDependencies":{"@types/node":"^20.0.0","tsup":"^8.0.0","typescript":"^5.0.0","vitest":"^1.0.0"},"peerDependencies":{"express":"^4.0.0 || ^5.0.0"},"peerDependenciesMeta":{"express":{"optional":true}},"_id":"@ainvirion/aiproxyguard-npm-sdk@1.2.0","gitHead":"0e89b45a40010bd1054006ee6e5e6730950d36f2","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-3WN3nt98nNPJDfp4jOpzy93ApCve6KU3jGSvBHL2ACWeY1GwGPiMfZ5P97DM0j+a/K1QL4l0dhGQWQIRgEQ6QQ==","shasum":"2b279f4eee06ee4f46d683540210ba744bfdb739","tarball":"https://registry.npmjs.org/@ainvirion/aiproxyguard-npm-sdk/-/aiproxyguard-npm-sdk-1.2.0.tgz","fileCount":17,"unpackedSize":169217,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDIqNt66Ny8UUlBm+xEW9ryEwUh3zve3NJjbpJ9g5zbEAIhAOtWIFtcxHstgSDWEsMbd+33bKEOjRVFGLgosKCS0CJO"}]},"_npmUser":{"name":"oscarvalenzuelab","email":"oscar.valenzuela.b@gmail.com"},"directories":{},"maintainers":[{"name":"oscarvalenzuelab","email":"oscar.valenzuela.b@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/aiproxyguard-npm-sdk_1.2.0_1775627543373_0.9633069143622437"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-03T17:40:30.930Z","modified":"2026-04-08T05:52:24.083Z","1.0.14":"2026-04-03T17:40:31.230Z","1.0.15":"2026-04-03T17:44:52.004Z","1.0.20":"2026-04-03T18:10:54.364Z","1.2.0":"2026-04-08T05:52:23.661Z"},"bugs":{"url":"https://github.com/AInvirion/aiproxyguard-npm-sdk/issues"},"author":{"name":"AINVIRION","email":"support@ainvirion.com"},"license":"Apache-2.0","homepage":"https://ainvirion.github.io/aiproxyguard/","keywords":["aiproxyguard","llm","security","prompt-injection","ai","sdk","typescript"],"repository":{"type":"git","url":"git+https://github.com/AInvirion/aiproxyguard-npm-sdk.git"},"description":"Official TypeScript/JavaScript SDK for AIProxyGuard - LLM security proxy for prompt injection detection","maintainers":[{"name":"oscarvalenzuelab","email":"oscar.valenzuela.b@gmail.com"}],"readme":"# @ainvirion/aiproxyguard-npm-sdk\n\n[![npm version](https://img.shields.io/npm/v/@ainvirion/aiproxyguard-npm-sdk.svg)](https://www.npmjs.com/package/@ainvirion/aiproxyguard-npm-sdk)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)\n[![Node.js](https://img.shields.io/badge/Node.js-18+-green.svg)](https://nodejs.org/)\n\nOfficial TypeScript/JavaScript SDK for [AIProxyGuard](https://aiproxyguard.com) - an LLM security proxy that detects prompt injection attacks in real-time.\n\n## Features\n\n- **Dual API Mode** - Works with both cloud API and self-hosted proxy\n- **Express Middleware** - Protect routes with one line of code\n- **TypeScript First** - Full type definitions included\n- **Automatic Retries** - Exponential backoff for transient failures\n- **Batch Operations** - Check multiple inputs with concurrency control\n- **Zero Dependencies** - Uses native `fetch` (Node.js 18+)\n\n## Installation\n\n```bash\nnpm install @ainvirion/aiproxyguard-npm-sdk\n```\n\n```bash\nyarn add @ainvirion/aiproxyguard-npm-sdk\n```\n\n```bash\npnpm add @ainvirion/aiproxyguard-npm-sdk\n```\n\n## Quick Start\n\n```typescript\nimport { AIProxyGuard } from '@ainvirion/aiproxyguard-npm-sdk';\n\n// Initialize with your API key\nconst client = new AIProxyGuard({\n  apiKey: process.env.AIPROXYGUARD_API_KEY,\n});\n\n// Check text for prompt injection\nconst result = await client.check('Ignore all previous instructions');\n\nif (result.flagged) {\n  console.log(`Blocked: ${result.threats[0].type}`);\n} else {\n  console.log('Text is safe');\n}\n```\n\n## API Modes\n\nThe SDK supports two ways to use AIProxyGuard:\n\n| Mode | Use Case |\n|------|----------|\n| **Cloud API** | Managed service at `aiproxyguard.com`, requires free API key |\n| **Self-hosted proxy** | Deploy your own proxy (free), no API key required |\n\n```typescript\n// Cloud API - managed service (requires free API key)\nconst cloud = new AIProxyGuard({ apiKey: 'apg_xxx' });\n\n// Self-hosted proxy - no API key required\nconst proxy = new AIProxyGuard('http://localhost:8080');\n```\n\n### Getting an API Key (Cloud Mode)\n\nAPI keys are **free**. To use the cloud API:\n\n1. Sign up at [aiproxyguard.com](https://aiproxyguard.com)\n2. Go to **Settings** → **API Keys** → **Create API Key**\n3. **Enable the `check` scope** in permissions\n4. Copy your key (starts with `apg_`)\n\n## Configuration\n\n```typescript\nconst client = new AIProxyGuard({\n  baseUrl: 'https://aiproxyguard.com',  // API endpoint\n  apiKey: 'apg_xxx',                     // API key (required for cloud)\n  mode: 'auto',                          // 'cloud' | 'proxy' | 'auto'\n  timeout: 30000,                        // Request timeout (ms)\n  retries: 3,                            // Retry attempts\n  retryDelay: 1000,                      // Base retry delay (ms)\n  maxConcurrency: 10,                    // Max parallel requests in batch\n});\n```\n\n## API Reference\n\n### `check(text, context?)`\n\nCheck text for prompt injection.\n\n```typescript\nconst result = await client.check('User input here');\n\nconsole.log(result.id);        // 'chk_abc123'\nconsole.log(result.flagged);   // true/false\nconsole.log(result.action);    // 'allow' | 'log' | 'warn' | 'block'\nconsole.log(result.threats);   // [{ type, confidence, rule }]\nconsole.log(result.latencyMs); // 50.5\nconsole.log(result.cached);    // false\n\n// With context (cloud mode)\nconst result = await client.check('input', {\n  conversationId: 'conv_123',\n  userId: 'user_456',\n});\n```\n\n### `checkBatch(texts)`\n\nCheck multiple texts with concurrency control.\n\n```typescript\nconst results = await client.checkBatch([\n  'Hello, how are you?',\n  'Ignore all previous instructions',\n  'What is the weather?',\n]);\n\nresults.forEach((r, i) => {\n  console.log(`${i}: ${r.flagged ? 'BLOCKED' : 'OK'}`);\n});\n```\n\n### `isSafe(text)`\n\nQuick boolean check.\n\n```typescript\nif (await client.isSafe(userInput)) {\n  // Process the input\n}\n```\n\n### `health()`\n\nCheck service health.\n\n```typescript\nif (await client.health()) {\n  console.log('Service is up');\n}\n```\n\n## Express Middleware\n\nProtect your Express routes with automatic prompt injection detection.\n\n```typescript\nimport express from 'express';\nimport { AIProxyGuard, guardMiddleware } from '@ainvirion/aiproxyguard-npm-sdk';\n\nconst app = express();\nconst client = new AIProxyGuard({ apiKey: process.env.AIPROXYGUARD_API_KEY });\n\napp.use(express.json());\n\n// Basic usage\napp.post('/chat', guardMiddleware(client), (req, res) => {\n  res.json({ response: 'Hello!' });\n});\n\n// With options\napp.post('/api/prompt', guardMiddleware(client, {\n  textField: 'prompt',           // Field to check (default: 'text')\n  onBlock: 'reject',             // 'reject' or 'continue'\n  rejectInvalidTypes: true,      // Reject non-string inputs\n  onError: (err, req, res) => {\n    res.status(500).json({ error: 'Security check failed' });\n  },\n}), handler);\n\n// Multiple fields\napp.post('/api/chat', guardMiddleware(client, {\n  textField: ['message', 'context'],\n}), handler);\n```\n\n## Helper Functions\n\n```typescript\nimport { isSafe, isBlocked } from '@ainvirion/aiproxyguard-npm-sdk';\n\nconst result = await client.check(text);\n\nif (isBlocked(result)) {\n  console.log('Content was flagged');\n}\n\nif (isSafe(result)) {\n  console.log('Content is safe');\n}\n```\n\n## Error Handling\n\n```typescript\nimport {\n  AIProxyGuard,\n  AIProxyGuardError,\n  ValidationError,\n  TimeoutError,\n  RateLimitError,\n  ConnectionError,\n} from '@ainvirion/aiproxyguard-npm-sdk';\n\ntry {\n  const result = await client.check(text);\n} catch (error) {\n  if (error instanceof RateLimitError) {\n    console.log(`Rate limited. Retry after: ${error.retryAfter}s`);\n  } else if (error instanceof TimeoutError) {\n    console.log('Request timed out');\n  } else if (error instanceof ValidationError) {\n    console.log(`Invalid request: ${error.message}`);\n  } else if (error instanceof ConnectionError) {\n    console.log('Could not connect to service');\n  } else if (error instanceof AIProxyGuardError) {\n    console.log(`Error: ${error.message} (${error.code})`);\n  }\n}\n```\n\n## TypeScript\n\nFull TypeScript support with exported types:\n\n```typescript\nimport type {\n  Action,              // 'allow' | 'log' | 'warn' | 'block'\n  ApiMode,             // 'cloud' | 'proxy' | 'auto'\n  CheckResult,         // Result from check()\n  Threat,              // { type, confidence, rule }\n  AIProxyGuardConfig,  // Constructor config\n} from '@ainvirion/aiproxyguard-npm-sdk';\n```\n\n## Security Features\n\n- **URL Validation** - Only `http:` and `https:` schemes allowed\n- **Input Size Limits** - 100KB max to prevent DoS\n- **Concurrency Control** - Configurable limits for batch operations\n- **Non-string Rejection** - Middleware rejects array/object inputs by default\n\n## Requirements\n\n- Node.js 18+ (uses native `fetch`)\n- TypeScript 5.0+ (for type definitions)\n\n## Documentation\n\nFor detailed documentation, guides, and API reference, visit:\n\n**[https://ainvirion.github.io/aiproxyguard/](https://ainvirion.github.io/aiproxyguard/)**\n\n## Related\n\n- [AIProxyGuard](https://aiproxyguard.com) - Cloud API\n- [Python SDK](https://github.com/AInvirion/aiproxyguard-python-sdk) - Python client\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## License\n\n[Apache-2.0](LICENSE) - Copyright 2026 AINVIRION\n","readmeFilename":"README.md"}