{"_id":"@bolyra/gateway","_rev":"8-25cbe13b12248c92a75f1dc78d751c0c","name":"@bolyra/gateway","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.0":{"name":"@bolyra/gateway","version":"0.1.0","keywords":["bolyra","mcp","gateway","proxy","zkp","agent-authentication","model-context-protocol","reverse-proxy"],"license":"Apache-2.0","_id":"@bolyra/gateway@0.1.0","maintainers":[{"name":"saneguy","email":"kondojuviswanadha@gmail.com"}],"homepage":"https://github.com/bolyra/bolyra#readme","bugs":{"url":"https://github.com/bolyra/bolyra/issues"},"bin":{"bolyra-gateway":"dist/cli.js"},"dist":{"shasum":"b508f13ddd73ee72d1b86042100cddb2170965cb","tarball":"https://registry.npmjs.org/@bolyra/gateway/-/gateway-0.1.0.tgz","fileCount":31,"integrity":"sha512-DczIRLCNX4F7qi85nRFjx0kN2tUL+zn0ks+sXrgE/YZkNtvXh7Izyy9/oW7Erc3I3wYMU+zaNB5JA5MhEZaK7g==","signatures":[{"sig":"MEUCIEwXYtmJMXFI+NhfOigPP+dUrf+FXHEfr/Knf2IBjRtmAiEAvmPP0YnC/4HkKzFuRbVg5zHi2vHUe1n4hnSUV0urxUk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":126168},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"74dbc9034d817567dbc66c453342fb89f7288baf","scripts":{"test":"jest --passWithNoTests","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"saneguy","email":"kondojuviswanadha@gmail.com"},"overrides":{"qs":"6.15.2","ws":"8.21.0","tmp":"0.2.7","hono":"4.12.23","fast-uri":"3.1.2","ip-address":"10.2.0","underscore":"1.13.8","circom_tester":{"snarkjs":"0.7.6"}},"repository":{"url":"git+https://github.com/bolyra/bolyra.git","type":"git"},"_npmVersion":"11.6.2","description":"Bolyra MCP Auth Gateway — standalone reverse proxy that verifies agent ZKP credentials before forwarding to upstream MCP servers.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"yaml":"^2.7.0","@bolyra/mcp":"~0.6.0","@bolyra/sdk":"^0.5.0","@noble/hashes":"^1.7.0","@bolyra/receipts":"~0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.2.0","typescript":"^5.5.0","@types/jest":"^30.0.0","@types/node":"^25.9.1"},"peerDependencies":{"@bolyra/sdk":">=0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/gateway_0.1.0_1781757728863_0.27354663568243565","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bolyra/gateway","version":"0.2.0","keywords":["bolyra","mcp","gateway","proxy","zkp","agent-authentication","model-context-protocol","reverse-proxy"],"license":"Apache-2.0","_id":"@bolyra/gateway@0.2.0","maintainers":[{"name":"saneguy","email":"kondojuviswanadha@gmail.com"}],"homepage":"https://github.com/bolyra/bolyra#readme","bugs":{"url":"https://github.com/bolyra/bolyra/issues"},"bin":{"bolyra-gateway":"dist/cli.js"},"dist":{"shasum":"8b69898693448c1fdd6e6e77e001bb657dff1335","tarball":"https://registry.npmjs.org/@bolyra/gateway/-/gateway-0.2.0.tgz","fileCount":34,"integrity":"sha512-Zvs7rLjQE22eLM4JcqfLqTcS8cgBmHOy+W+8S9eM8mhmIlk5TD2EJsuaatm/WkHnt3M9svoKR4vbgveJKccYmQ==","signatures":[{"sig":"MEYCIQDq64sWgSDYaM/WU/SKj3uB2cWIgWOdLg8oxn11wmfCogIhAO5+lbIsqoWLXhAUvMItjqWWkoY0XTNFcE8Xoalp/Pq+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bolyra%2fgateway@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":139448},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"bf8e6ac7e59b338abf77e3cef04b0d299a897667","scripts":{"test":"jest --passWithNoTests","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50e9e18c-8aad-4ce5-8d65-1a862f29cda2"}},"repository":{"url":"git+https://github.com/bolyra/bolyra.git","type":"git"},"_npmVersion":"11.17.0","description":"Bolyra MCP Auth Gateway — standalone reverse proxy that verifies agent ZKP credentials before forwarding to upstream MCP servers.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"yaml":"^2.7.0","redis":"^4.7.1","@bolyra/mcp":"~0.6.0","@bolyra/sdk":">=0.5.0","@noble/hashes":"^1.7.0","@bolyra/receipts":"~0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.2.0","typescript":"^5.5.0","@types/jest":"^30.0.0","@types/node":"^25.9.1"},"peerDependencies":{"@bolyra/sdk":">=0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/gateway_0.2.0_1781890617730_0.016289670011871316","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bolyra/gateway","version":"0.2.1","keywords":["bolyra","mcp","gateway","proxy","zkp","agent-authentication","model-context-protocol","reverse-proxy"],"license":"Apache-2.0","_id":"@bolyra/gateway@0.2.1","maintainers":[{"name":"saneguy","email":"kondojuviswanadha@gmail.com"}],"homepage":"https://github.com/bolyra/bolyra#readme","bugs":{"url":"https://github.com/bolyra/bolyra/issues"},"bin":{"bolyra-gateway":"dist/cli.js"},"dist":{"shasum":"c9ad1724a656c41105c71ad36d91d53846744f7f","tarball":"https://registry.npmjs.org/@bolyra/gateway/-/gateway-0.2.1.tgz","fileCount":34,"integrity":"sha512-Jx2Y3ikmbBdg7Noa2vbkaofDFCzbspFW9IMb9SimDWnXt4XN/0DWP4fPnbEcS+N12+O2T0RcB65avhLh9uelTA==","signatures":[{"sig":"MEQCIAItM/4jq/pYvmMKOLWCLg3K7iWQdY792hhWrdgQ5RZhAiBndRkNLnE5DFSjTYvPOfOxq0Md6YDBenRmZo/0qGi39A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bolyra%2fgateway@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":140938},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"5a3e293c931386c11f14cc3a1021796bf5f95c88","mcpName":"io.github.bolyra/gateway","scripts":{"test":"jest --passWithNoTests","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50e9e18c-8aad-4ce5-8d65-1a862f29cda2"}},"repository":{"url":"git+https://github.com/bolyra/bolyra.git","type":"git"},"_npmVersion":"11.17.0","description":"Bolyra MCP Auth Gateway — standalone reverse proxy that verifies agent ZKP credentials before forwarding to upstream MCP servers.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"yaml":"^2.7.0","redis":"^4.7.1","@bolyra/mcp":"~0.6.0","@bolyra/sdk":">=0.5.0","@noble/hashes":"^1.7.0","@bolyra/receipts":"~0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.2.0","typescript":"^5.5.0","@types/jest":"^30.0.0","@types/node":"^25.9.1"},"peerDependencies":{"@bolyra/sdk":">=0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/gateway_0.2.1_1782180955627_0.4261979901085604","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bolyra/gateway","version":"0.3.0","keywords":["bolyra","mcp","gateway","proxy","zkp","agent-authentication","model-context-protocol","reverse-proxy"],"license":"Apache-2.0","_id":"@bolyra/gateway@0.3.0","maintainers":[{"name":"saneguy","email":"kondojuviswanadha@gmail.com"}],"homepage":"https://github.com/bolyra/bolyra#readme","bugs":{"url":"https://github.com/bolyra/bolyra/issues"},"bin":{"bolyra-gateway":"dist/cli.js"},"dist":{"shasum":"43ce79edf08e8a528e02c924621a820b0509db88","tarball":"https://registry.npmjs.org/@bolyra/gateway/-/gateway-0.3.0.tgz","fileCount":37,"integrity":"sha512-+wZdFAUoiDzrma8hkLw5H3DZnWeXGolXrjjVFKz2edO1CFgZfS+vuhJlgdLoKEaTVxOe90n5w/l1ODUeviT4/g==","signatures":[{"sig":"MEUCIQDb6C+bOLQnyA00t3PYKXn+FsVdHPOoKLwlk4PsgUyFMwIgDbp2OODYiNSa3FWCgbttXRHV6XIr8l0s83whqBwrFCg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bolyra%2fgateway@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":188317},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"bef7106e25dbe25e0a4c5327d9ea13edb696c13c","mcpName":"io.github.bolyra/gateway","scripts":{"test":"jest --passWithNoTests","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50e9e18c-8aad-4ce5-8d65-1a862f29cda2"}},"repository":{"url":"git+https://github.com/bolyra/bolyra.git","type":"git"},"_npmVersion":"11.18.0","description":"Bolyra MCP Auth Gateway — standalone reverse proxy that verifies agent ZKP credentials before forwarding to upstream MCP servers.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"yaml":"^2.7.0","redis":"^4.7.1","@bolyra/mcp":"~0.6.0","@bolyra/sdk":">=0.5.0","@noble/hashes":"^1.7.0","@bolyra/receipts":"~0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.2.0","typescript":"^5.5.0","@types/jest":"^30.0.0","@types/node":"^25.9.1"},"peerDependencies":{"@bolyra/sdk":">=0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/gateway_0.3.0_1783703731083_0.04853513271944809","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bolyra/gateway","version":"0.4.0","keywords":["bolyra","mcp","gateway","proxy","zkp","agent-authentication","model-context-protocol","reverse-proxy"],"license":"Apache-2.0","_id":"@bolyra/gateway@0.4.0","maintainers":[{"name":"saneguy","email":"kondojuviswanadha@gmail.com"}],"homepage":"https://github.com/bolyra/bolyra#readme","bugs":{"url":"https://github.com/bolyra/bolyra/issues"},"bin":{"bolyra-gateway":"dist/cli.js"},"dist":{"shasum":"016263a385f34d7ca190037610f1991660589ad4","tarball":"https://registry.npmjs.org/@bolyra/gateway/-/gateway-0.4.0.tgz","fileCount":40,"integrity":"sha512-dWHRNwEEBb6xF3Hxl8S+4q8/xPzw50MQWdVUyjeePtr67cN2jU1Mfe96bRInYMZ5CAUmqrCQ7VrtlvxVaXC/cw==","signatures":[{"sig":"MEYCIQCCtDjmdT9/ewGjKdfAXHHDEJj5dadURGkFO9qk/YCGpwIhALKhGMyRLQMaXOaXIQJViC+EDEjfLXlDWkv8mt9yNNGw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bolyra%2fgateway@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":245518},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"5ded7d6fd21ba5d16fae1009ab8a6b8b56b7feea","mcpName":"io.github.bolyra/gateway","scripts":{"test":"jest --passWithNoTests","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50e9e18c-8aad-4ce5-8d65-1a862f29cda2"}},"repository":{"url":"git+https://github.com/bolyra/bolyra.git","type":"git"},"_npmVersion":"11.18.0","description":"Bolyra MCP Auth Gateway — standalone reverse proxy that verifies agent ZKP credentials before forwarding to upstream MCP servers.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"yaml":"^2.7.0","redis":"^4.7.1","@bolyra/mcp":"~0.6.0","@bolyra/sdk":">=0.5.0","@noble/hashes":"^1.7.0","@bolyra/receipts":"~0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.2.0","typescript":"^5.5.0","@types/jest":"^30.0.0","@types/node":"^25.9.1"},"peerDependencies":{"@bolyra/sdk":">=0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/gateway_0.4.0_1783713676098_0.7312300888211278","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bolyra/gateway","version":"0.5.0","keywords":["bolyra","mcp","gateway","proxy","zkp","agent-authentication","model-context-protocol","reverse-proxy"],"license":"Apache-2.0","_id":"@bolyra/gateway@0.5.0","maintainers":[{"name":"saneguy","email":"kondojuviswanadha@gmail.com"}],"homepage":"https://github.com/bolyra/bolyra#readme","bugs":{"url":"https://github.com/bolyra/bolyra/issues"},"bin":{"bolyra-gateway":"dist/cli.js"},"dist":{"shasum":"951c3fb58633aa605e25c72c8c5c60605b69e807","tarball":"https://registry.npmjs.org/@bolyra/gateway/-/gateway-0.5.0.tgz","fileCount":40,"integrity":"sha512-v92EdNY2YkiRDkNkbILsilBYqFcks0roaE797qV/xkZ3qsnhXbMnz6Y+71KG/tbLCQK7ABNOEqKFpqFp9/onsQ==","signatures":[{"sig":"MEUCIQDxRPkp0Ld3v+Cts72RxG844W3XdAJuql6QWxmbng0rHgIgaBJpHYiPyvJIiDKFrS3VeiW+u324z+FKXmQUzt1akgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bolyra%2fgateway@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":249406},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"da2677189f09cbc59ff6cd3f0cdfb78e0b16fca9","mcpName":"io.github.bolyra/gateway","scripts":{"test":"jest --passWithNoTests","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50e9e18c-8aad-4ce5-8d65-1a862f29cda2"}},"repository":{"url":"git+https://github.com/bolyra/bolyra.git","type":"git"},"_npmVersion":"11.18.0","description":"Bolyra MCP Auth Gateway — standalone reverse proxy that verifies agent ZKP credentials before forwarding to upstream MCP servers.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"yaml":"^2.7.0","redis":"^4.7.1","@bolyra/mcp":"~0.6.0","@bolyra/sdk":">=0.5.0","@noble/hashes":"^1.7.0","@bolyra/receipts":"~0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.2.0","typescript":"^5.5.0","@types/jest":"^30.0.0","@types/node":"^25.9.1"},"peerDependencies":{"@bolyra/sdk":">=0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/gateway_0.5.0_1783727392947_0.45995149693491033","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@bolyra/gateway","version":"0.5.1","keywords":["bolyra","mcp","gateway","proxy","zkp","agent-authentication","model-context-protocol","reverse-proxy"],"license":"Apache-2.0","_id":"@bolyra/gateway@0.5.1","maintainers":[{"name":"saneguy","email":"kondojuviswanadha@gmail.com"}],"homepage":"https://github.com/bolyra/bolyra#readme","bugs":{"url":"https://github.com/bolyra/bolyra/issues"},"bin":{"bolyra-gateway":"dist/cli.js"},"dist":{"shasum":"6ba6dff2deab8ecc9dddf34fa9d87160e978a19d","tarball":"https://registry.npmjs.org/@bolyra/gateway/-/gateway-0.5.1.tgz","fileCount":40,"integrity":"sha512-uPsn4xyNHyHd5ed/PMzkLyops3Le7kLcGepcLu+rE8b3Su5uysz5mYiKq/XFA4cVYjiYbaC9UgjmgGPTHN84vQ==","signatures":[{"sig":"MEUCIHCjBossrpABfd3q/XmcBzU4iEDsW6VzaNHIq4ifGO35AiEA/CpG64re2szKSL912plqNMxgIuuCSEgnCt/M1Qth8fA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bolyra%2fgateway@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":249490},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"b4b6a1e1c8477c752d3039244b7c2d53027fc970","mcpName":"io.github.bolyra/gateway","scripts":{"test":"jest --passWithNoTests","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50e9e18c-8aad-4ce5-8d65-1a862f29cda2"}},"overrides":{"ws":"8.21.0","underscore":"1.13.8"},"repository":{"url":"git+https://github.com/bolyra/bolyra.git","type":"git"},"_npmVersion":"11.18.0","description":"Bolyra MCP Auth Gateway — standalone reverse proxy that verifies agent ZKP credentials before forwarding to upstream MCP servers.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"yaml":"^2.7.0","redis":"^4.7.1","@bolyra/mcp":"~0.6.5","@bolyra/sdk":"^0.6.1","@noble/hashes":"^1.7.0","@bolyra/receipts":"~0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","ts-jest":"^29.2.0","typescript":"^5.5.0","@types/jest":"^30.0.0","@types/node":"^25.9.1"},"peerDependencies":{"@bolyra/sdk":"^0.6.1"},"_npmOperationalInternal":{"tmp":"tmp/gateway_0.5.1_1783964779671_0.44069951078251046","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@bolyra/gateway","version":"0.6.0","mcpName":"io.github.bolyra/gateway","description":"Bolyra MCP Auth Gateway — standalone reverse proxy that verifies agent ZKP credentials before forwarding to upstream MCP servers.","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"bin":{"bolyra-gateway":"dist/cli.js"},"scripts":{"build":"tsc","test":"jest --passWithNoTests","typecheck":"tsc --noEmit"},"dependencies":{"@bolyra/mcp":"~0.6.5","@bolyra/receipts":"~0.8.0","@bolyra/sdk":"^0.6.1","@noble/hashes":"^1.7.0","redis":"^4.7.1","yaml":"^2.7.0"},"peerDependencies":{"@bolyra/sdk":"^0.6.1"},"devDependencies":{"@types/jest":"^30.0.0","@types/node":"^25.9.1","jest":"^30.4.2","ts-jest":"^29.2.0","typescript":"^5.5.0"},"repository":{"type":"git","url":"git+https://github.com/bolyra/bolyra.git"},"publishConfig":{"access":"public"},"keywords":["bolyra","mcp","gateway","proxy","zkp","agent-authentication","model-context-protocol","reverse-proxy"],"license":"Apache-2.0","overrides":{"ws":"8.21.0","underscore":"1.13.8"},"gitHead":"de308bb5a294cc48bb10e788dbf67447c9aa12ef","_id":"@bolyra/gateway@0.6.0","bugs":{"url":"https://github.com/bolyra/bolyra/issues"},"homepage":"https://github.com/bolyra/bolyra#readme","_nodeVersion":"22.23.1","_npmVersion":"11.18.0","dist":{"integrity":"sha512-ZYJ88zrYKk05ZGxRk57CjaAfxUzA6LpOrrpseSCchoFhNF2715d78pZIPJtXkAf6S1+YZBB+dGV+z8l2t8SiHw==","shasum":"e08978369cbbac301dc17c9bbe507aa5ca26dbf7","tarball":"https://registry.npmjs.org/@bolyra/gateway/-/gateway-0.6.0.tgz","fileCount":40,"unpackedSize":252346,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bolyra%2fgateway@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCZKekVmDLlCPIKGV86fevSwDRXL+PHKGaolLhZeMCj0gIgNGiq1VUeoj+n/4liPiAsfXMUw/WG+91IWReolSTwUCQ="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:50e9e18c-8aad-4ce5-8d65-1a862f29cda2"}},"directories":{},"maintainers":[{"name":"saneguy","email":"kondojuviswanadha@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gateway_0.6.0_1783986438609_0.9891488479475026"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-18T04:42:08.724Z","modified":"2026-07-13T23:47:19.080Z","0.1.0":"2026-06-18T04:42:09.003Z","0.2.0":"2026-06-19T17:36:57.876Z","0.2.1":"2026-06-23T02:15:55.803Z","0.3.0":"2026-07-10T17:15:31.245Z","0.4.0":"2026-07-10T20:01:16.255Z","0.5.0":"2026-07-10T23:49:53.154Z","0.5.1":"2026-07-13T17:46:19.812Z","0.6.0":"2026-07-13T23:47:18.751Z"},"bugs":{"url":"https://github.com/bolyra/bolyra/issues"},"license":"Apache-2.0","homepage":"https://github.com/bolyra/bolyra#readme","keywords":["bolyra","mcp","gateway","proxy","zkp","agent-authentication","model-context-protocol","reverse-proxy"],"repository":{"type":"git","url":"git+https://github.com/bolyra/bolyra.git"},"description":"Bolyra MCP Auth Gateway — standalone reverse proxy that verifies agent ZKP credentials before forwarding to upstream MCP servers.","maintainers":[{"name":"saneguy","email":"kondojuviswanadha@gmail.com"}],"readme":"# @bolyra/gateway\n\nBolyra MCP Auth Gateway -- standalone reverse proxy that verifies agent ZKP credentials before forwarding requests to upstream MCP servers.\n\nPut `@bolyra/gateway` in front of your MCP server; it verifies agent authority, prevents replay, enforces delegated scopes, and gives you signed audit logs for every tool call.\n\n## Quickstart\n\n```bash\n# Install\nnpm install @bolyra/gateway\n\n# Create a config file (optional)\ncat > gateway.yaml << 'EOF'\ntarget: http://localhost:3000/mcp\nport: 4100\ndevMode: true\nEOF\n\n# Run\nnpx @bolyra/gateway --config ./gateway.yaml\n```\n\nOr run directly with CLI flags:\n\n```bash\nnpx @bolyra/gateway --target http://localhost:3000/mcp --dev --port 4100\n```\n\n## How It Works\n\n```\n                  +----------------------------------+\n                  |         @bolyra/gateway           |\n   Agent -------->|                                    |--------> Upstream MCP Server\n  (with proof     |  1. Parse Authorization header     |          (unmodified)\n   bundle)        |  2. verifyBundle() from @bolyra/mcp|\n                  |  3. checkToolPolicy()              |\n                  |  4. Nonce replay check              |\n                  |  5. Emit signed receipt             |\n                  |  6. Proxy request + X-Bolyra-* hdrs|\n                  |                                    |\n                  |  Config: gateway.yaml              |\n                  |  Receipts: ./receipts/ or stdout    |\n                  +----------------------------------+\n```\n\n**Request routing:**\n\n1. `GET /healthz` -- returns gateway status (intercepted, not proxied)\n2. JSON-RPC method != `tools/call` -- forwarded to upstream without auth\n3. JSON-RPC method == `tools/call` -- auth verified, then forwarded if authorized\n\n## CLI Reference\n\n```\nnpx @bolyra/gateway [options]\n\nOptions:\n  --target <url>       Upstream MCP server URL (required unless in config)\n  --port <number>      Gateway listen port (default: 4100)\n  --config <path>      Path to gateway config file (default: ./gateway.yaml)\n  --dev                Enable Bolyra Core mode (classical checks: tool policy,\n                       nonce replay, signed receipts, credential binding\n                       against registered credentials; ZK proof verification\n                       off. Without registered credentials, permission claims\n                       are self-asserted — see Credential Binding below)\n  --credentials <path> Credentials file (YAML/JSON map: commitment ->\n                       { permissionBitmask, expiryTimestamp? }); overrides\n                       the config's credentials section\n  --receipt-dir <path> Directory for receipt JSON files (default: ./receipts/)\n  --receipt-stdout     Write receipts to stdout (NDJSON)\n  --no-receipts        Disable receipt generation\n  --network <name>     Bolyra network (default: base-sepolia)\n  --help               Show help\n  --version            Show version\n```\n\nCLI flags override config file values.\n\n## Config File Reference\n\n```yaml\n# gateway.yaml\ntarget: http://localhost:3000/mcp\nport: 4100\nnetwork: base-sepolia\n\n# Bolyra Core mode: classical checks only, ZK proof verification skipped\ndevMode: false\n\n# Registered credentials (see \"Credential Binding\" below).\n# Core mode (devMode: true): claims are checked against this registry —\n#   unknown commitments, forged masks, and expired credentials are denied.\n# Production mode: this map becomes the resolveCredential source for\n#   verifyBundle's Poseidon3 scopeCommitment binding (expiryTimestamp\n#   required per entry).\n# type: registry (on-chain resolution) is not supported by the packaged\n# gateway yet and fails validation — use the library resolveCredential\n# option for custom resolution.\ncredentials:\n  type: static\n  map:\n    \"48201394857102938471029384\":     # credential commitment (decimal)\n      permissionBitmask: 3            # READ_DATA | WRITE_DATA\n      expiryTimestamp: \"1893456000\"   # unix seconds; optional in Core mode\n\n# Per-tool policies\ntools:\n  write_file:\n    requireBitmask: 2      # WRITE_DATA (0b10)\n  delete_file:\n    requireBitmask: 6      # WRITE_DATA + FINANCIAL_SMALL (0b110)\n    maxChainDepth: 0        # Direct credentials only\n  transfer_funds:\n    requireBitmask: 28     # FINANCIAL_* (0b11100)\n    minScore: 90\n\n# Nonce replay protection\nnonce:\n  store: memory             # \"memory\" (default) or \"redis\"\n  maxProofAge: 300          # seconds\n  # Redis config (required when store: redis)\n  # redis:\n  #   url: ${REDIS_URL}           # required\n  #   keyPrefix: \"bolyra:nonce:\"  # optional, default shown\n  #   connectTimeout: 5000        # optional, ms\n\n# Receipt signing — every allow/deny decision is ES256K-signed (see\n# \"Signed Receipts\" below). Without privateKey an ephemeral key is\n# generated at startup; set it for a stable, pinnable signer address.\nreceipts:\n  enabled: true\n  issuer: \"my-gateway\"\n  keyId: \"k1\"\n  privateKey: \"${BOLYRA_RECEIPT_KEY}\"  # 32-byte hex secp256k1 key, env var substitution\n  output: file              # \"file\", \"stdout\", or \"webhook\"\n  dir: ./receipts/\n\n# Health check\nhealth:\n  enabled: true\n  path: /healthz\n\n# Optional HMAC signing for X-Bolyra-* headers\n# hmac:\n#   secret: \"hex-encoded-shared-secret\"\n```\n\nEnvironment variables are substituted in string values using `${VAR_NAME}` syntax.\n\n## Library API\n\nFor embedding the gateway middleware in your own server:\n\n```typescript\nimport {\n  createGatewayMiddleware,\n  createGatewayProxy,\n  loadConfig,\n  injectBolyraHeaders,\n  computeHmac,\n  verifyHmac,\n  createReceiptWriter,\n  createHealthHandler,\n} from '@bolyra/gateway';\nimport type {\n  GatewayConfig,\n  GatewayMiddlewareOptions,\n  GatewayRequest,\n} from '@bolyra/gateway';\n\n// Option 1: Full proxy server\nconst config = loadConfig({ target: 'http://localhost:3000/mcp', dev: true });\nconst server = createGatewayProxy({ config });\nserver.listen(4100);\n\n// Option 2: Just the middleware (for custom servers)\nconst middleware = createGatewayMiddleware({ config });\n// Use in your request handler:\n// const authorized = await middleware(req, res, toolName);\n```\n\n### Exports\n\n| Export | Description |\n|--------|-------------|\n| `createGatewayProxy(options)` | Create full reverse proxy HTTP server |\n| `createGatewayMiddleware(options)` | Auth verification middleware only |\n| `loadConfig(flags?)` | Load and validate gateway configuration |\n| `injectBolyraHeaders(authCtx, receiptId?)` | Build X-Bolyra-* headers |\n| `computeHmac(headers, secret)` | HMAC-SHA256 sign X-Bolyra-* headers |\n| `verifyHmac(headers, secret, hmac)` | Verify HMAC on X-Bolyra-* headers |\n| `createReceiptWriter(config)` | Create pluggable receipt output |\n| `createGatewayReceiptSigner(config, override?)` | Resolve the ES256K receipt signer (configured key or ephemeral) |\n| `createHealthHandler(config)` | Create /healthz endpoint handler |\n| `extractToolName(body)` | Extract tool name from JSON-RPC body |\n| `loadCredentialsFile(path)` | Load a `--credentials` file (bare map or full section) |\n| `buildCredentialRegistry(credentials)` | Compile a static credentials section into a lookup registry |\n| `checkCredentialBinding(bundle, authCtx, registry)` | Core-mode registered-credential check (see Credential Binding) |\n| `createStaticCredentialResolver(credentials)` | Static `resolveCredential` for production scopeCommitment binding |\n| `hasStaticCredentials(credentials)` | True when a usable static credential map is configured |\n| `RedisNonceStore` | Redis-backed NonceStore for multi-instance deployments |\n\n## Redis Nonce Store (v0.2.0+)\n\nFor multi-instance deployments, use Redis for shared nonce replay protection:\n\n```yaml\n# gateway.yaml\nnonce:\n  store: redis\n  maxProofAge: 300\n  redis:\n    url: ${REDIS_URL}\n    keyPrefix: \"bolyra:nonce:\"   # optional\n```\n\nLibrary usage:\n\n```typescript\nimport { createGatewayMiddleware, RedisNonceStore } from '@bolyra/gateway';\n\nconst store = new RedisNonceStore({ url: 'redis://localhost:6379' });\nconst middleware = createGatewayMiddleware({ config, nonceStore: store });\n\n// Graceful shutdown\nprocess.on('SIGTERM', () => store.close());\n```\n\n**Fail-closed behavior:** If Redis is unreachable, the gateway returns HTTP 500, never passes requests through. Monitor Redis availability as a critical dependency.\n\n## X-Bolyra-* Headers\n\nWhen a request passes verification, the gateway injects these headers into the proxied request:\n\n| Header | Value |\n|--------|-------|\n| `X-Bolyra-Verified` | `true` |\n| `X-Bolyra-DID` | `did:bolyra:{network}:{commitment}` |\n| `X-Bolyra-Score` | Verification score (0-100) |\n| `X-Bolyra-Permissions` | Effective permission bitmask (decimal) |\n| `X-Bolyra-Chain-Depth` | Delegation chain depth (0 = direct) |\n| `X-Bolyra-Receipt-ID` | Signed receipt id for this decision (when receipts enabled) |\n| `X-Bolyra-HMAC` | HMAC-SHA256 signature (when HMAC configured) |\n\nThe upstream server can use these headers for logging/auditing without importing Bolyra.\n\n## Signed Receipts (v0.3.0+)\n\nEvery `tools/call` decision — **allow and deny, dev mode and production** —\nproduces an ES256K-signed receipt (`SignedReceipt` from\n[`@bolyra/receipts`](../receipts/README.md): secp256k1 + keccak256,\nEthereum-compatible recovery). This includes rejections with no usable proof\nbundle at all: a missing or malformed `Authorization` header still leaves a\nsigned **anonymous deny receipt**, so the audit trail has no unsigned gaps.\n\nEach receipt carries the verdict (`decision.allowed`), a human-readable\n`reasonCode` (which tool, which permissions were required vs. held), the agent\nDID when known, score, permission bitmask, delegation chain depth, hashes of\nthe presented proof material, and the decision timestamp. Any edit to a\nreceipt breaks its signature.\n\n**Signing key resolution:**\n\n1. `receiptSigner` option (library embedders)\n2. `receipts.privateKey` from the config (recommended for production)\n3. Otherwise an **ephemeral key** is generated at startup. Receipts remain\n   independently verifiable — the signer address is recoverable from every\n   signature — but the address rotates on restart. The CLI prints the signer\n   address in the startup banner and, in `file` output mode, persists it to\n   `{receipt-dir}/signer.json` so auditors can pin the trust anchor.\n\n**Independent verification** needs only the receipt (plus, optionally, the\npinned signer address) — no gateway, no database:\n\n```typescript\nimport { verifyReceipt } from '@bolyra/receipts';\n\nconst receipt = JSON.parse(fs.readFileSync('receipts/2026-07-10/....json', 'utf8'));\nverifyReceipt(receipt);                  // true — signature + payload hash check\nverifyReceipt(receipt, pinnedSigner);    // true — also pins the signer address\n```\n\n### Hash-Chained Receipts (v0.5.0+)\n\nSignatures make each receipt tamper-evident; hash-chaining makes the receipt\n**stream** tamper-evident. Every receipt the gateway signs carries\n`chain: { seq, prevReceiptHash }` inside the signed payload (`seq` is 0-based\nper gateway process; the first receipt links to the 32-zero-byte genesis\nsentinel) plus a top-level `receiptHash` that the next receipt links to.\nDeleting, reordering, or inserting receipts in a collected log breaks chain\nverification even though every remaining signature stays individually valid:\n\n```bash\n# stdout mode: collect NDJSON to a file, verify signatures + chain\nbolyra receipt verify-chain receipts.ndjson --signer 0xPinnedSigner\n```\n\nNotes for auditors:\n\n- **One chain per gateway process.** A restart starts a new chain at seq 0 —\n  rotate the collected log per process run (or verify each run's segment\n  separately); a mid-file restart is reported as `chain-restart`.\n- **File mode** writes one JSON file per receipt; the chain fields still\n  order and link them (concatenate in seq order to verify).\n- **Tail truncation is not detectable from the log alone.** Chain\n  verification proves nothing was deleted, reordered, or edited *within* the\n  log, but a log cut after any receipt is still internally consistent. Pin\n  the head hash / receipt count that `verify-chain` prints and re-verify with\n  `--expect-head` / `--expect-count`. How and how often you anchor those\n  checkpoints (object-lock storage, transparency log, chain) is\n  enterprise-configurable deployment policy.\n- Receipts predating 0.5.0 have no chain fields; `--allow-unchained` accepts\n  them as a leading prefix (signatures still verified) while chain-verifying\n  the rest. A chain-less receipt after a chained one always fails — it could\n  be an inserted line.\n\n### Receipt Output Modes\n\n| Mode | Description |\n|------|-------------|\n| `file` | JSON files in day-rotated directories: `receipts/2026-06-18/{timestamp}-{receipt-id}.json`, plus `signer.json` with the pinned signer address |\n| `stdout` | NDJSON to stdout (one JSON line per receipt) |\n| `webhook` | HTTP POST to configured URL with optional auth headers |\n\nAll modes are non-blocking. Write and signing failures are logged but never\ninterrupt request processing. The signing key is probe-validated at startup;\nin the exceptional case that signing still fails at runtime, the decision is\nrecorded as a raw JSON record explicitly tagged `\"unsigned\": true` (with the\nsigning error), so audit consumers can detect the gap — an unsigned record\ncan never masquerade as a signed receipt.\n\nReceipts always record the gateway's **final** decision: a request that\nauthenticates successfully but fails tool policy gets a *deny* receipt. A\nbundle that parses as JSON but is missing proof material entirely is denied\nfail-closed (HTTP 401) with a signed anonymous receipt.\n\n## Credential Binding (v0.4.0+)\n\nIn **Core mode** (`--dev`) proofs are mocked, so the permission mask inside a\nbundle is asserted by the caller. Registering credentials turns that claim\ninto an enforced check — the same registered-credential pattern as\n[`examples/verified-actions-demo`](../../examples/verified-actions-demo/README.md),\nnow packaged:\n\n- **unknown commitment** → 401 + signed deny receipt (`credential_unknown`)\n- **claimed mask ≠ registered grant** (forged bundle) → 401 + signed deny\n  receipt (`credential_mismatch`)\n- **delegation chain expanding beyond the grant** → 401 (`credential_mismatch`\n  — scope narrowing is one-way)\n- **registered expiry passed** → 401 + signed deny receipt\n  (`credential_expired`)\n\nAll denials are fail-closed and receipted like every other decision.\n\n**Registering a dev credential.** A commitment in Core mode is an opaque\nidentifier the platform assigns (production commitments are Poseidon hashes\nof the credential). Generate one and register it:\n\n```bash\n# 1. Generate a commitment\nnode -e \"console.log(BigInt('0x' + require('crypto').randomBytes(16).toString('hex')).toString())\"\n\n# 2. Register it (credentials.yaml)\ncat > credentials.yaml << 'EOF'\n\"48201394857102938471029384\":\n  permissionBitmask: 3        # READ_DATA | WRITE_DATA\nEOF\n\n# 3. Run with binding enforced\nnpx @bolyra/gateway --target http://localhost:3000/mcp --dev --credentials ./credentials.yaml\n```\n\nHand the commitment (and its granted mask) to the agent; its proof bundles\nmust carry exactly that identity and mask. The `--credentials` file can be a\nbare map (above) or the full config-section shape (`type: static`, `map:`);\nthe `credentials:` section in `gateway.yaml` is equivalent.\n\n**Without registered credentials**, Core mode stays frictionless for\ntutorials: any claim passes (current behavior), but the gateway warns at\nstartup and every allow receipt is flagged\n`[credential-binding: none — permission claims self-asserted]` so audit\nconsumers can see the tradeoff — the same visibility pattern as the\nephemeral receipt-signing key.\n\n**In production mode** the same `credentials` section is compiled into a\n`resolveCredential` implementation, engaging `verifyBundle`'s cryptographic\nbinding: the verifier recomputes `Poseidon3(permissionBitmask, commitment,\nexpiryTimestamp)` from the registered credential and requires it to equal\nthe proof's public `scopeCommitment` output — a forged mask cannot produce\na valid proof. `expiryTimestamp` is therefore required per entry in\nproduction. Library embedders can still pass `resolveCredential` directly;\nit takes precedence over the config section.\n\n## Security Model\n\nThe gateway is the **trust boundary**. Agents present proof bundles; the gateway verifies them before forwarding.\n\n**Deployment guidance:**\n- Bind your upstream MCP server to localhost or a private network\n- Only expose the gateway to the internet\n- Use HTTPS between clients and the gateway\n- Configure HMAC signing if you need to verify X-Bolyra-* headers were set by the gateway\n\n**Threats addressed:**\n- Replay attacks (nonce store)\n- Credential substitution (production: Poseidon3 scope commitment binding)\n- Forged permission claims in Core mode (registered-credential binding, when credentials are configured)\n- Delegation escalation (one-way scope narrowing, circuit-enforced)\n- Scope bypass (per-tool bitmask enforcement)\n- Header injection (optional HMAC signing)\n- Audit evasion (ES256K-signed receipts for every decision — allow and deny, including anonymous rejections; tamper-evident via `verifyReceipt`)\n\n## Permission Bitmask Reference\n\n| Bit | Permission | Value |\n|-----|-----------|-------|\n| 0 | READ_DATA | 1 |\n| 1 | WRITE_DATA | 2 |\n| 2 | FINANCIAL_SMALL (<$100) | 4 |\n| 3 | FINANCIAL_MEDIUM (<$10K) | 8 |\n| 4 | FINANCIAL_UNLIMITED | 16 |\n| 5 | SIGN_ON_BEHALF | 32 |\n| 6 | SUB_DELEGATE | 64 |\n| 7 | ACCESS_PII | 128 |\n\nHigher tiers imply lower (e.g., FINANCIAL_MEDIUM implies FINANCIAL_SMALL).\n\n## Docker\n\nRun the gateway as a container with zero Node.js setup required.\n\n### Pull from GHCR\n\n```bash\ndocker pull ghcr.io/bolyra/gateway:latest\n```\n\n### Quick Start\n\n```bash\n# Bolyra Core mode -- classical checks, no circuits, no config file needed\ndocker run --rm -p 4100:4100 ghcr.io/bolyra/gateway \\\n  --target http://host.docker.internal:3000/mcp --dev\n```\n\n### Production\n\n```bash\n# Mount config file + set env vars\ndocker run -d \\\n  -v $(pwd)/gateway.yaml:/etc/bolyra/gateway.yaml:ro \\\n  -e REDIS_URL=redis://redis:6379 \\\n  -e BOLYRA_RECEIPT_KEY=hex-encoded-key \\\n  -p 4100:4100 \\\n  ghcr.io/bolyra/gateway\n```\n\n### Build Locally\n\n```bash\n# From repo root\ndocker build -f Dockerfile.gateway -t bolyra-gateway:local .\n\n# Run with local build\ndocker run --rm -p 4100:4100 bolyra-gateway:local \\\n  --target http://host.docker.internal:3000/mcp --dev\n\n# Verify health\ncurl http://localhost:4100/healthz\n```\n\n### Override Port\n\n```bash\ndocker run --rm -p 8080:8080 ghcr.io/bolyra/gateway \\\n  --target http://upstream:3000/mcp --port 8080 --dev\n```\n\n### Image Details\n\n- **Base:** `node:22-alpine`\n- **User:** `bolyra` (UID 1001, non-root)\n- **Port:** 4100 (default)\n- **Healthcheck:** `GET /healthz` every 30s\n- **Config mount:** `/etc/bolyra/gateway.yaml`\n- **Receipt dir:** `/app/receipts/` (writable)\n- **Architectures:** `linux/amd64`, `linux/arm64`\n\nCLI flags passed after the image name override config file values. See [CLI Reference](#cli-reference) above.\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}