{"_id":"@bdzscaler/n8n-nodes-aiguard","_rev":"6-99cd36fd6f6f21e469d12ab5e4e0123e","name":"@bdzscaler/n8n-nodes-aiguard","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@bdzscaler/n8n-nodes-aiguard","version":"0.1.0","keywords":["n8n-community-node-package","zscaler","aiguard","ai-security","ai-guard","security-scanning","ai-runtime-security","guardrails"],"author":{"name":"Zscaler","email":"support@zscaler.com"},"license":"MIT","_id":"@bdzscaler/n8n-nodes-aiguard@0.1.0","maintainers":[{"name":"bd-devrel","email":"devrel@zscaler.com"}],"homepage":"https://github.com/zscaler/n8n-nodes-aiguard","bugs":{"url":"https://github.com/zscaler/n8n-nodes-aiguard/issues"},"n8n":{"nodes":["dist/nodes/AIGuard/AiGuard.node.js"],"credentials":["dist/credentials/AIGuardApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"e77dcc8825b9f2395d97ce2b0ef658f5d9c3ded9","tarball":"https://registry.npmjs.org/@bdzscaler/n8n-nodes-aiguard/-/n8n-nodes-aiguard-0.1.0.tgz","fileCount":9,"integrity":"sha512-Z5iauY+bf0mQNt11CJ15nnNk0spzpifa1wSIHcObamejV3cxj/v0yjPwiQvNFH+Ksv/L/Myq9fAFVNpdeDlQAg==","signatures":[{"sig":"MEUCIHL/hTNwsVBWt/BK9IZ1FyXieNmVShkqLN9EQqF7rV2TAiEA7zaNX/pR+Oc77BHRcTOLh8zWyXyvlh1hNNf5KLWfFog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bdzscaler%2fn8n-nodes-aiguard@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":36390},"jest":{"roots":["<rootDir>/nodes","<rootDir>/credentials"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.ts","**/?(*.)+(spec|test).ts"],"transform":{"^.+\\.ts$":"ts-jest"},"testEnvironment":"node","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["**/*.ts","!**/*.d.ts","!**/node_modules/**","!**/dist/**"]},"main":"index.js","engines":{"npm":">=10.0.0","node":">=22.0.0"},"gitHead":"fd883736ca6f8791e0e6a64aed555efc848d216c","scripts":{"dev":"tsc --watch","lint":"eslint nodes credentials package.json","test":"jest","build":"tsc && node -e \"const fs=require('fs');fs.mkdirSync('dist/nodes/AIGuard',{recursive:true});fs.copyFileSync('nodes/AIGuard/aiguard.svg','dist/nodes/AIGuard/aiguard.svg')\"","format":"prettier nodes credentials --write","lintfix":"eslint nodes credentials package.json --fix","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build && npm run lint"},"_npmUser":{"name":"bd-devrel","email":"devrel@zscaler.com"},"repository":{"url":"git+https://github.com/zscaler/n8n-nodes-aiguard.git","type":"git"},"_npmVersion":"10.9.4","description":"n8n community node for Zscaler AI Guard (AI Runtime Security) API integration","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"packageManager":"npm@10.9.2","devDependencies":{"jest":"^29.7.0","eslint":"^9.0.0","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^18.19.119","n8n-workflow":"^2.8.0","@eslint/eslintrc":"^3.3.1","@typescript-eslint/parser":"^8.0.0","eslint-plugin-n8n-nodes-base":"^1.16.6","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-aiguard_0.1.0_1774904948581_0.38661504618205234","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bdzscaler/n8n-nodes-aiguard","version":"0.1.1","keywords":["n8n-community-node-package","zscaler","aiguard","ai-security","ai-guard","security-scanning","ai-runtime-security","guardrails","zero-trust"],"author":{"name":"Zscaler","email":"devrel@zscaler.com"},"license":"MIT","_id":"@bdzscaler/n8n-nodes-aiguard@0.1.1","maintainers":[{"name":"bd-devrel","email":"devrel@zscaler.com"}],"homepage":"https://github.com/zscaler/n8n-nodes-aiguard","bugs":{"url":"https://github.com/zscaler/n8n-nodes-aiguard/issues"},"n8n":{"nodes":["dist/nodes/AIGuard/AiGuard.node.js"],"credentials":["dist/credentials/AIGuardApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"6199ab8f611af4685757a699c8cd7b0c2d8a2557","tarball":"https://registry.npmjs.org/@bdzscaler/n8n-nodes-aiguard/-/n8n-nodes-aiguard-0.1.1.tgz","fileCount":9,"integrity":"sha512-57WoKAoPhi8RirKctGw7oi9sF3/k2SltPxrYY0kgzsIvMbeba+PFnjyl82Yu7R/gO/lYxymQ1wpK7t0k7jAmqg==","signatures":[{"sig":"MEYCIQDAx5I2Zbb6t689tM8P15Qn7pHuQzs5aefWvaTcfdmyGQIhAKWi4c0wzW7ymb+F258RIjuSxv4PTDQivUk0JeDG/Rbc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bdzscaler%2fn8n-nodes-aiguard@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":36407},"jest":{"roots":["<rootDir>/nodes","<rootDir>/credentials"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.ts","**/?(*.)+(spec|test).ts"],"transform":{"^.+\\.ts$":"ts-jest"},"testEnvironment":"node","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["**/*.ts","!**/*.d.ts","!**/node_modules/**","!**/dist/**"]},"main":"index.js","engines":{"npm":">=10.0.0","node":">=22.0.0"},"gitHead":"dc6afe68a97dddefbab08b8e5236c1c5e675590b","scripts":{"dev":"tsc --watch","lint":"eslint nodes credentials package.json","test":"jest","build":"tsc && node -e \"const fs=require('fs');fs.mkdirSync('dist/nodes/AIGuard',{recursive:true});fs.copyFileSync('nodes/AIGuard/aiguard.svg','dist/nodes/AIGuard/aiguard.svg')\"","format":"prettier nodes credentials --write","lintfix":"eslint nodes credentials package.json --fix","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build && npm run lint"},"_npmUser":{"name":"bd-devrel","email":"devrel@zscaler.com"},"repository":{"url":"git+https://github.com/zscaler/n8n-nodes-aiguard.git","type":"git"},"_npmVersion":"10.9.4","description":"n8n community node for Zscaler AI Guard (AI Runtime Security) API integration","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"packageManager":"npm@10.9.2","devDependencies":{"jest":"^29.7.0","eslint":"^9.0.0","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^18.19.119","n8n-workflow":"^2.8.0","@eslint/eslintrc":"^3.3.1","@typescript-eslint/parser":"^8.0.0","eslint-plugin-n8n-nodes-base":"^1.16.6","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-aiguard_0.1.1_1774906237420_0.8181934295179181","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@bdzscaler/n8n-nodes-aiguard","version":"1.0.0","keywords":["n8n-community-node-package","zscaler","aiguard","ai-security","ai-guard","security-scanning","ai-runtime-security","guardrails","zero-trust"],"author":{"name":"Zscaler","email":"devrel@zscaler.com"},"license":"MIT","_id":"@bdzscaler/n8n-nodes-aiguard@1.0.0","maintainers":[{"name":"bd-devrel","email":"devrel@zscaler.com"}],"homepage":"https://github.com/zscaler/n8n-nodes-aiguard","bugs":{"url":"https://github.com/zscaler/n8n-nodes-aiguard/issues"},"n8n":{"nodes":["dist/nodes/AIGuard/AiGuard.node.js"],"credentials":["dist/credentials/AIGuardApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"32e1032d17330553ed424e51c1bad485672adfe9","tarball":"https://registry.npmjs.org/@bdzscaler/n8n-nodes-aiguard/-/n8n-nodes-aiguard-1.0.0.tgz","fileCount":9,"integrity":"sha512-4mthZqm019aozNd7LXlIVNxwiMSeDnJDBRfak8QX93lAjWz4/RZzE36Bo2xmtMR3G1z/aES25dM3UJ3dj9j4Og==","signatures":[{"sig":"MEYCIQDosb28ZvLbDMJZcc5MoUlO2x3HKoDsV+mRoq7lY4ZbCwIhANAHI+JxzHO1HNGaGEqzv56COfHOlf0Zl6R71iuSEzfU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38450},"jest":{"roots":["<rootDir>/nodes","<rootDir>/credentials"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.ts","**/?(*.)+(spec|test).ts"],"transform":{"^.+\\.ts$":"ts-jest"},"testEnvironment":"node","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["**/*.ts","!**/*.d.ts","!**/node_modules/**","!**/dist/**"]},"main":"index.js","engines":{"npm":">=10.0.0","node":">=22.0.0"},"gitHead":"3df3477d61d5997576c17a6cb2c97126f18fa1f3","scripts":{"dev":"tsc --watch","lint":"eslint nodes credentials package.json","test":"jest","build":"tsc && node -e \"const fs=require('fs');fs.mkdirSync('dist/nodes/AIGuard',{recursive:true});fs.copyFileSync('nodes/AIGuard/aiguard.svg','dist/nodes/AIGuard/aiguard.svg')\"","format":"prettier nodes credentials --write","lintfix":"eslint nodes credentials package.json --fix","scan:npm":"npx --yes @n8n/scan-community-package \"$(node -e \"const p=require('./package.json');process.stdout.write(p.name+'@'+p.version)\")\"","lint:dist":"eslint -c eslint.community.config.mjs \"dist/**/*.js\"","scan:local":"npm run build && npm run lint:dist","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build && npm run lint && npm run lint:dist"},"_npmUser":{"name":"bd-devrel","email":"devrel@zscaler.com"},"deprecated":"Incorrect first automated release; prefer 0.1.x or follow release notes.","repository":{"url":"git+https://github.com/zscaler/n8n-nodes-aiguard.git","type":"git"},"_npmVersion":"11.12.1","description":"n8n community node for Zscaler AI Guard (AI Runtime Security) API integration","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"packageManager":"npm@10.9.2","devDependencies":{"jest":"^29.7.0","eslint":"^9.0.0","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^18.19.119","n8n-workflow":"^2.8.0","@eslint/eslintrc":"^3.3.1","semantic-release":"^25.0.3","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.6","@typescript-eslint/parser":"^8.0.0","eslint-plugin-n8n-nodes-base":"^1.16.6","@typescript-eslint/eslint-plugin":"^8.0.0","@n8n/eslint-plugin-community-nodes":"0.10.0","conventional-changelog-conventionalcommits":"^9.1.0"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-aiguard_1.0.0_1774908949639_0.8677022444253741","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bdzscaler/n8n-nodes-aiguard","version":"0.1.2","keywords":["n8n-community-node-package","zscaler","aiguard","ai-security","ai-guard","security-scanning","ai-runtime-security","guardrails","zero-trust"],"author":{"name":"Zscaler","email":"devrel@zscaler.com"},"license":"MIT","_id":"@bdzscaler/n8n-nodes-aiguard@0.1.2","maintainers":[{"name":"bd-devrel","email":"devrel@zscaler.com"}],"homepage":"https://github.com/zscaler/n8n-nodes-aiguard","bugs":{"url":"https://github.com/zscaler/n8n-nodes-aiguard/issues"},"n8n":{"nodes":["dist/nodes/AIGuard/AiGuard.node.js"],"credentials":["dist/credentials/AIGuardApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"889ca89864252abf75b8c89e2cf27fe3f212ee89","tarball":"https://registry.npmjs.org/@bdzscaler/n8n-nodes-aiguard/-/n8n-nodes-aiguard-0.1.2.tgz","fileCount":9,"integrity":"sha512-ZLgtIKZDUmeHpvERO2y+EkKNXBVIgxz+24GTuczSB+SElJ/Dftvw+ohPQdfluqW7VneE8oDT/KXjz1wr8nYkJQ==","signatures":[{"sig":"MEUCIQDs/Vnc4YE0TO0XioC7LBJfrOsle/0hQ9QH2JwFLe6AHgIgAoBzn9xcDtl5eMI7uu4xrOcEv8q7XerAy9hBV1i43IU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39457},"jest":{"roots":["<rootDir>/nodes","<rootDir>/credentials"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.ts","**/?(*.)+(spec|test).ts"],"transform":{"^.+\\.ts$":"ts-jest"},"testEnvironment":"node","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["**/*.ts","!**/*.d.ts","!**/node_modules/**","!**/dist/**"]},"main":"index.js","engines":{"npm":">=10.0.0","node":">=22.0.0"},"gitHead":"dce98e7328e2ba100f8576112e2d59cb13303617","scripts":{"dev":"tsc --watch","lint":"eslint nodes credentials package.json","test":"jest","build":"tsc && node -e \"const fs=require('fs');fs.mkdirSync('dist/nodes/AIGuard',{recursive:true});fs.copyFileSync('nodes/AIGuard/aiguard.svg','dist/nodes/AIGuard/aiguard.svg')\"","format":"prettier nodes credentials --write","lintfix":"eslint nodes credentials package.json --fix","scan:npm":"npx --yes @n8n/scan-community-package \"$(node -e \"const p=require('./package.json');process.stdout.write(p.name+'@'+p.version)\")\"","lint:dist":"eslint -c eslint.community.config.mjs \"dist/**/*.js\"","scan:local":"npm run build && npm run lint:dist","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build && npm run lint && npm run lint:dist"},"_npmUser":{"name":"bd-devrel","email":"devrel@zscaler.com"},"repository":{"url":"git+https://github.com/zscaler/n8n-nodes-aiguard.git","type":"git"},"_npmVersion":"11.12.1","description":"n8n community node for Zscaler AI Guard (AI Runtime Security) API integration","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"_hasShrinkwrap":false,"packageManager":"npm@10.9.2","devDependencies":{"jest":"^29.7.0","eslint":"^9.0.0","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.8.3","@types/jest":"^29.5.12","@types/node":"^18.19.119","n8n-workflow":"^2.8.0","@eslint/eslintrc":"^3.3.1","semantic-release":"^25.0.3","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@semantic-release/exec":"^7.1.0","@semantic-release/github":"^12.0.6","@typescript-eslint/parser":"^8.0.0","eslint-plugin-n8n-nodes-base":"^1.16.6","@typescript-eslint/eslint-plugin":"^8.0.0","@n8n/eslint-plugin-community-nodes":"0.10.0","conventional-changelog-conventionalcommits":"^9.1.0"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-aiguard_0.1.2_1774911006679_0.33169183389233914","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bdzscaler/n8n-nodes-aiguard","version":"0.1.3","description":"n8n community node for Zscaler AI Guard (AI Runtime Security) API integration","keywords":["n8n-community-node-package","zscaler","aiguard","ai-security","ai-guard","security-scanning","ai-runtime-security","guardrails","zero-trust"],"license":"MIT","homepage":"https://github.com/zscaler/n8n-nodes-aiguard","author":{"name":"Zscaler","email":"devrel@zscaler.com"},"repository":{"type":"git","url":"git+https://github.com/zscaler/n8n-nodes-aiguard.git"},"engines":{"node":">=22.0.0","npm":">=10.0.0"},"packageManager":"npm@10.9.2","main":"index.js","scripts":{"build":"tsc && node -e \"const fs=require('fs');fs.mkdirSync('dist/nodes/AIGuard',{recursive:true});fs.copyFileSync('nodes/AIGuard/aiguard.svg','dist/nodes/AIGuard/aiguard.svg');fs.mkdirSync('dist/credentials',{recursive:true});fs.copyFileSync('nodes/AIGuard/aiguard.svg','dist/credentials/aiguard.svg')\"","dev":"tsc --watch","format":"prettier nodes credentials --write","lint":"eslint nodes credentials package.json","lint:dist":"eslint -c eslint.community.config.mjs \"dist/**/*.js\"","scan:local":"npm run build && npm run lint:dist","scan:npm":"npx --yes @n8n/scan-community-package \"$(node -e \"const p=require('./package.json');process.stdout.write(p.name+'@'+p.version)\")\"","lintfix":"eslint nodes credentials package.json --fix","prepublishOnly":"npm run build && npm run lint && npm run lint:dist","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"n8n":{"n8nNodesApiVersion":1,"credentials":["dist/credentials/AIGuardApi.credentials.js"],"nodes":["dist/nodes/AIGuard/AiGuard.node.js"]},"dependencies":{},"devDependencies":{"@eslint/eslintrc":"^3.3.1","@n8n/eslint-plugin-community-nodes":"0.10.0","@semantic-release/exec":"^7.1.0","@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.6","@semantic-release/npm":"^13.1.5","@types/jest":"^29.5.12","@types/node":"^18.19.119","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","conventional-changelog-conventionalcommits":"^9.1.0","eslint":"^9.0.0","eslint-plugin-n8n-nodes-base":"^1.16.6","jest":"^29.7.0","n8n-workflow":"^2.8.0","prettier":"^3.2.5","semantic-release":"^25.0.3","ts-jest":"^29.1.2","typescript":"^5.8.3"},"peerDependencies":{"n8n-workflow":"*"},"jest":{"preset":"ts-jest","testEnvironment":"node","roots":["<rootDir>/nodes","<rootDir>/credentials"],"testMatch":["**/__tests__/**/*.ts","**/?(*.)+(spec|test).ts"],"transform":{"^.+\\.ts$":"ts-jest"},"collectCoverageFrom":["**/*.ts","!**/*.d.ts","!**/node_modules/**","!**/dist/**"],"coverageReporters":["text","lcov","html"]},"gitHead":"dc9e08855e3ee89c09d4bcf58c3c3cdc7acd68c3","_id":"@bdzscaler/n8n-nodes-aiguard@0.1.3","bugs":{"url":"https://github.com/zscaler/n8n-nodes-aiguard/issues"},"_nodeVersion":"22.22.2","_npmVersion":"11.12.1","dist":{"integrity":"sha512-HLv2xRCkUeTNgZ1c1+uJpUuLZd+lMIoR9i1ByUmSKWmWZLivW0MJYXsPFKPiWKGicB+ofu7FXFB8z75VnMsj5w==","shasum":"7d53ede57fb18a252f17a83ab5f33623e0599df9","tarball":"https://registry.npmjs.org/@bdzscaler/n8n-nodes-aiguard/-/n8n-nodes-aiguard-0.1.3.tgz","fileCount":10,"unpackedSize":41084,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEfik39A0YGZi+qVHECSlOGXHPR5Jh9bP5SHsVnVrBWRAiEAk+sJn/DvQ8SyJnaYq1UaVV3eS7PBGeaq3QRe+8FW5dA="}]},"_npmUser":{"name":"bd-devrel","email":"devrel@zscaler.com"},"directories":{},"maintainers":[{"name":"bd-devrel","email":"devrel@zscaler.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/n8n-nodes-aiguard_0.1.3_1776185026647_0.07312930641086668"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-30T21:09:08.511Z","modified":"2026-04-14T16:43:46.915Z","0.1.0":"2026-03-30T21:09:08.746Z","0.1.1":"2026-03-30T21:30:37.564Z","1.0.0":"2026-03-30T22:15:49.770Z","0.1.2":"2026-03-30T22:50:06.838Z","0.1.3":"2026-04-14T16:43:46.788Z"},"bugs":{"url":"https://github.com/zscaler/n8n-nodes-aiguard/issues"},"author":{"name":"Zscaler","email":"devrel@zscaler.com"},"license":"MIT","homepage":"https://github.com/zscaler/n8n-nodes-aiguard","keywords":["n8n-community-node-package","zscaler","aiguard","ai-security","ai-guard","security-scanning","ai-runtime-security","guardrails","zero-trust"],"repository":{"type":"git","url":"git+https://github.com/zscaler/n8n-nodes-aiguard.git"},"description":"n8n community node for Zscaler AI Guard (AI Runtime Security) API integration","maintainers":[{"name":"bd-devrel","email":"devrel@zscaler.com"}],"readme":"# Zscaler AI Guard n8n Community Node\n\nA production-ready n8n community node for integrating with the [Zscaler AI Guard](https://help.zscaler.com/ai-guard) API. This node enables you to scan AI prompts and responses for security threats — toxicity, PII, secrets, prompt injection, and more — directly within your n8n workflows.\n\n## Features\n\n- **Prompt Scan** — Scan user input for security threats (direction: `IN`)\n- **Response Scan** — Scan AI-generated responses for policy violations (direction: `OUT`)\n- **Dual Scan** — Scan both prompt and response in sequence; if the prompt is blocked, the response scan is skipped\n- **Automatic Policy Resolution** — When no Policy ID is configured, the API resolves the policy linked to your API key\n- **Fail-Closed Error Handling** — On internal errors with \"Continue On Fail\" enabled, the node returns `action: BLOCK` so security is never silently bypassed\n- **Attribution Metadata** — Enriches output with n8n workflow context (`workflowId`, `workflowName`, `executionId`, `executionMode`)\n- **Content Size Validation** — Rejects payloads exceeding 5 MB before sending to the API\n- **Configurable Retries & Timeout** — Adjustable retry count (up to 6) and request timeout\n\n## Installation\n\n### Prerequisites\n\n- n8n instance (Cloud or self-hosted) — [Setup Docs](https://docs.n8n.io/hosting/installation/docker/)\n- A Zscaler AI Guard license and API key (Bearer token)\n\n### Option 1: Install via n8n Community Nodes (Recommended)\n\n1. Open your n8n instance\n2. Go to **Settings → Community Nodes**\n3. Search for `@bdzscaler/n8n-nodes-aiguard`\n4. Click **Install**\n5. Restart n8n if prompted\n\n### Option 2: Install via npm\n\n```bash\nnpm install @bdzscaler/n8n-nodes-aiguard\n```\n\n### Local Development\n\n```bash\ngit clone https://github.com/zscaler/n8n-nodes-aiguard.git\ncd n8n-nodes-aiguard\nnpm install\nnpm run build\n```\n\nLink to a local n8n instance:\n\n```bash\n# Native n8n\nln -s $(pwd) ~/.n8n/custom/n8n-nodes-aiguard\n\n# Docker n8n — add a volume mount:\n# -v /path/to/n8n-nodes-aiguard:/home/node/.n8n/custom/n8n-nodes-aiguard\n```\n\nRestart n8n to load the node.\n\n## Configuration\n\n### 1. Create Credentials\n\n1. In n8n, go to **Credentials** → **Add Credential**\n2. Search for **\"Zscaler AI Guard API\"**\n3. Fill in:\n\n| Field | Required | Description |\n|-------|:--------:|-------------|\n| **API Key** | Yes | Your Zscaler AI Guard API key (Bearer token) |\n| **Cloud** | Yes | Zscaler cloud for your tenancy (default: `us1`). Builds the URL `https://api.{cloud}.zseclipse.net` |\n| **Override URL** | No | Override the API base URL entirely. When set, the Cloud field is ignored. Equivalent to `AIGUARD_OVERRIDE_URL` in the [Python SDK](https://github.com/zscaler/zscaler-sdk-python) |\n| **Policy ID** | No | AI Guard policy ID. When set, uses `/v1/detection/execute-policy`. When empty, uses `/v1/detection/resolve-and-execute-policy` for automatic resolution |\n\n1. Click **Test** to validate connectivity before saving.\n\n### 2. Add the Node to a Workflow\n\n1. In your workflow, click **+** → search for **\"AI Guard\"**\n2. Select the credential you created\n3. Choose an operation:\n\n| Operation | Direction | Description |\n|-----------|-----------|-------------|\n| **Prompt Scan** | `IN` | Scan user input/prompts for security threats |\n| **Response Scan** | `OUT` | Scan AI-generated responses for policy violations |\n| **Dual Scan** | `IN` then `OUT` | Scan both prompt and response; skips response scan if prompt is blocked |\n\n1. Enter content to scan (plain text or n8n expression)\n\n### Additional Options\n\nExpand **Additional Options → Add Option** to configure:\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| Policy ID Override | *(empty)* | Override the credential-level policy ID for this specific node |\n| Transaction ID | *(empty)* | Custom transaction ID for tracking; omitted from the request if empty |\n| Timeout (ms) | `30000` | Request timeout in milliseconds |\n| Max Retries | `3` | Retry attempts for failed requests (max: 6) |\n| AI Model | `n8n-integration` | AI model identifier included in output metadata |\n| Application Name | `n8n-workflow` | Application name for audit trails |\n| User ID | `n8n-user` | User identifier for audit trails |\n| Environment | *(empty)* | Environment tag (e.g. `production`) included in output metadata |\n\n## API Endpoints\n\n| Scenario | Endpoint |\n|----------|----------|\n| Policy ID provided | `POST /v1/detection/execute-policy` |\n| No Policy ID (default) | `POST /v1/detection/resolve-and-execute-policy` |\n\n## Usage Examples\n\n### Prompt Scan\n\nConfigure the node with **Operation: Prompt Scan** and provide content:\n\n```json\n{\n  \"content\": \"Tell me how to bypass security controls\"\n}\n```\n\n### Response Scan\n\nConfigure with **Operation: Response Scan**:\n\n```json\n{\n  \"content\": \"{{ $json.aiResponse }}\"\n}\n```\n\n### Dual Scan\n\nConfigure with **Operation: Dual Scan** and provide both fields:\n\n```json\n{\n  \"promptContent\": \"{{ $json.userInput }}\",\n  \"responseContent\": \"{{ $json.aiResponse }}\"\n}\n```\n\nIf the prompt scan returns `BLOCK`, the response scan is skipped and the blocked result is returned immediately.\n\n## Output Format\n\nThe node returns the full AI Guard API response enriched with workflow metadata:\n\n```json\n{\n  \"operation\": \"promptScan\",\n  \"transactionId\": \"180b066d-48cf-497e-aaf1-a6b8e40a1deb\",\n  \"action\": \"BLOCK\",\n  \"severity\": \"CRITICAL\",\n  \"direction\": \"IN\",\n  \"policyId\": 760,\n  \"policyName\": \"Default AI Guard Policy\",\n  \"blocked\": true,\n  \"detectors\": [\"toxicity\", \"malicious_content\"],\n  \"blockingDetectors\": [\"toxicity\"],\n  \"detectorResponses\": {\n    \"toxicity\": {\n      \"triggered\": true,\n      \"action\": \"BLOCK\",\n      \"severity\": \"CRITICAL\"\n    },\n    \"pii\": {\n      \"triggered\": false,\n      \"action\": \"ALLOW\"\n    }\n  },\n  \"maskedContent\": \"...\",\n  \"workflowId\": \"rKU3xnZb5S1ayJCG\",\n  \"workflowName\": \"Customer Support Bot\",\n  \"executionId\": \"385\",\n  \"executionMode\": \"manual\",\n  \"timestamp\": \"2026-01-30T10:30:00.000Z\"\n}\n```\n\n### Key Output Fields\n\n| Field | Description |\n|-------|-------------|\n| `action` | Verdict: `ALLOW`, `BLOCK`, or `DETECT` |\n| `severity` | Severity level (e.g. `CRITICAL`, `HIGH`, `NONE`) |\n| `blocked` | Boolean convenience field (`true` when action is `BLOCK`) |\n| `detectors` | Array of triggered detector names |\n| `blockingDetectors` | Array of detectors that returned `BLOCK` |\n| `detectorResponses` | Per-detector results with trigger status, action, and severity |\n| `maskedContent` | Content with sensitive data masked (when applicable) |\n| `policyId` / `policyName` | The policy that was applied |\n| `transactionId` | Unique scan transaction identifier |\n\nUse the `action` or `blocked` field in an **IF** node to branch your workflow logic.\n\n## Implementation Notes\n\nThe node calls the Zscaler AI Guard API over HTTPS using n8n’s `helpers.httpRequest` (required for n8n Cloud–verified community packages). Headers match the [zscaler-sdk-python](https://github.com/zscaler/zscaler-sdk-python) pattern:\n\n- `Authorization: Bearer <API_KEY>`\n- `Content-Type: application/json`\n- `Accept: application/json`\n\n## Error Handling\n\n- **Fail-closed by default**: When \"Continue On Fail\" is enabled in n8n, errors produce `{ action: \"BLOCK\", blocked: true }` rather than silently allowing content through\n- **Timeout protection**: Configurable per-request timeout (passed to the HTTP client)\n- **Content validation**: Payloads exceeding 5 MB are rejected before the API call\n- **Retry logic**: Configurable retry count (default 3, max 6) for transient failures\n\n## Development\n\n```bash\nnpm run build       # Compile TypeScript and copy assets\nnpm run dev         # Watch mode\nnpm run lint        # ESLint (TypeScript + n8n-nodes-base)\nnpm run lint:dist   # ESLint on dist/ (n8n Cloud rules; run after build)\nnpm run scan:local  # build + ESLint (unpublished dist/; same rules as official scanner)\nnpm run scan:npm    # npx @n8n/scan-community-package @…@version from package.json (needs publish)\nnpm run lintfix     # Auto-fix lint issues\nnpm run format      # Run Prettier\nnpm test            # Run Jest tests\nnpm run test:coverage  # Tests with coverage report\n```\n\n### Validate like the n8n Creator Portal\n\nn8n’s official tool is **`@n8n/scan-community-package`**. It **downloads the package from the npm registry** and runs ESLint with the same rules the Creator Portal uses. It **never** reads your local git tree.\n\nUse **both** of these, at different times:\n\n| Command | When to use |\n|--------|-------------|\n| **`npm run scan:local`** | Before publish: builds `dist/` and runs the **same ESLint config** the scanner uses (`eslint.community.config.mjs`). This is what CI runs as `lint:dist`. |\n| **`npm run scan:npm`** | After that **exact `version` in `package.json` exists on npm**: runs `npx @n8n/scan-community-package <name>@<version>`. Confirms the **published tarball** matches what the Portal checks. |\n\n```bash\n# Unpublished changes (day to day)\nnpm run scan:local\n\n# After npm publish of the current package.json version\nnpm run scan:npm\n```\n\nYou can also call the CLI directly, for example `npx @n8n/scan-community-package @bdzscaler/n8n-nodes-aiguard@0.1.2`. If the version is **not** on the registry yet, the download step fails—that is expected; use **`scan:local`** until it is published.\n\n## Releasing (maintainers)\n\nReleases are automated with [semantic-release](https://github.com/semantic-release/semantic-release) (see `.releaserc.json`), similar to [zscaler-mcp-server](https://github.com/zscaler/zscaler-mcp-server).\n\n- **Version and tag**: After the **first** git tag exists, the next version is computed from [Conventional Commits](https://www.conventionalcommits.org/) (for example `fix:` → patch, `feat:` → minor) and bumps from that last tag. semantic-release updates `package.json` and `package-lock.json`, creates tag `vX.Y.Z`, opens a **GitHub Release**, and publishes to npm with **provenance** (requires `NPM_TOKEN` in repository secrets).\n- **0.x packages — read this**: If there are **no** `vMAJOR.MINOR.PATCH` tags on the branch yet, semantic-release’s **first** automated release is **always `1.0.0`** ([`FIRST_RELEASE` in semantic-release](https://github.com/semantic-release/semantic-release/blob/master/lib/get-next-version.js)) — it does **not** seed from `package.json` (e.g. `0.1.2`). **Before the first successful release workflow**, create and push tags for versions already published to npm, e.g. `git tag v0.1.0 <commit>` … `git tag v0.1.2 <commit>` then `git push origin --tags`. The Release workflow includes a guard that **fails** if `package.json` is still `0.x` but there are no such tags.\n- **Pre-release checks**: The **Release** workflow runs `npm audit`, build, Prettier, ESLint (including `lint:dist`, which mirrors the n8n Creator Portal scanner rules), and Jest before any publish.\n- **Prerelease channels**: Pushes to branches `beta` or `alpha` publish npm prereleases (for example `1.0.0-beta.1`) on the corresponding dist-tag.\n- **If `1.0.0` was published by mistake**: npm generally does not allow unpublishing popular packages; you can **deprecate** `1.0.0` with an explanation, then either stay on the `1.x` line or coordinate a git/npm cleanup (remove erroneous tag/release, restore `v0.1.x` tags at the right commits, revert the `chore(release): 1.0.0` commit if policy allows) and publish **`0.1.3`** as the next intended 0.x release. There is no single-button undo — pick the line (`0.x` vs `1.x`) and document it for consumers.\n\n## Security\n\n- API keys are stored encrypted via n8n's credential system\n- No content is logged or persisted by the node\n- All communication uses HTTPS/TLS\n- Error messages do not leak sensitive information\n\n## Links\n\n- npm: <https://www.npmjs.com/package/@bdzscaler/n8n-nodes-aiguard>\n- Source: <https://github.com/zscaler/n8n-nodes-aiguard>\n- Zscaler AI Guard: <https://help.zscaler.com/ai-guard>\n- Zscaler Python SDK: <https://github.com/zscaler/zscaler-sdk-python>\n\n## License\n\nMIT — see [LICENSE](LICENSE) for details.\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch from `main`\n3. Test thoroughly against the AI Guard API\n4. Ensure `npm run build`, `npm run lint`, `npm run lint:dist`, and `npm test` pass\n5. Use conventional commit messages (`fix:`, `feat:`, etc.) so releases version correctly\n6. Submit a pull request\n","readmeFilename":"README.md"}