{"_id":"@b1-road/nestjs","_rev":"19-48708d3250772daf2e41bce8dbd84c19","name":"@b1-road/nestjs","dist-tags":{"alpha":"0.1.0-alpha.2","latest":"0.1.0-alpha.15"},"versions":{"0.1.0-alpha.0":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.0","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.0","maintainers":[{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"c73deb92aa8d041b25dc2fca8b9c9320ad2b1791","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.0.tgz","fileCount":28,"integrity":"sha512-jRq2I9LMf0XVnGXSQj/RICk+CWGal2KZWV55yCVJ53EF/oPi8T1g4m72KD6yG5UEikVZAn+HTikO0vur2sFlSg==","signatures":[{"sig":"MEYCIQDY9DLd81dzx+d7vID3l+wRcEUEcTJIAmSmiT8Yuz5cBgIhAPcXN8PdfG48ksyrkMxOu+cxj17CenDMr0gJi6inZU1A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1514176},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"48db0713591d4a4d7e70fe036d67a4c0acd0524c","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.2","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.12.0","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.0_1781018245529_0.3537319759966464","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.1":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.1","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.1","maintainers":[{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"9bff768d302b5c6640588457c1baf38abf5439de","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.1.tgz","fileCount":28,"integrity":"sha512-Wu60G22koDU/TGW72EPkBDRF79u/gsWSn3pxRfQsNbDR28nxBxPNB3YsZ63Io3718agQKUV+Qs4EWb0aOAbsmw==","signatures":[{"sig":"MEUCIF/23bfdq66HzNeoFipI0gTwzxLalg5Jqsqp+OSfsFtSAiEA8hMwu8x7qUOHKUGARB+CRjJTbUgY/d/P/C3A+MO9bCo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1513264},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"48db0713591d4a4d7e70fe036d67a4c0acd0524c","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.2","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.12.0","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.1_1781023897584_0.6924556356868594","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.2":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.2","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.2","maintainers":[{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"edb6fe38fc871956e41c94828ae132997976d87e","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.2.tgz","fileCount":28,"integrity":"sha512-KTKug/2XQA5oUi6HkWmLSzEASqBzcWacKWx4jH/ec4ocgLbKJK1PwmgQx8/3ovzl7+mpygZorw9EFtv7LjdBgw==","signatures":[{"sig":"MEUCIGgKy86AU1jqneqUFDemiIdJ2dVevh/yzEo6vdQYV9CxAiEA0tu1CWoppwRWMdVM8sOwA6ROsew0of28qOCl4qrpQWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1513068},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"48db0713591d4a4d7e70fe036d67a4c0acd0524c","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.2","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.12.0","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.2_1781024461309_0.5399608177810942","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.3":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.3","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.3","maintainers":[{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"a623b99347c320be4bbff1856b42d2a3dcf2ce6e","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.3.tgz","fileCount":30,"integrity":"sha512-sCc/CSmZ4asjjvrKW8i733lH3OTerQIFOhCVJcqoBbnBeXmjIDsV3JRityGqgb1eGrC+noNqhrB8n2RNGd0CFw==","signatures":[{"sig":"MEQCICdBV5ACzCc66OMcr4UM+VEju65b9WVCQGlBRhJLyjQGAiBzyPipd1VXWpHkaJkQXrQ5vOUpYu7JnGDhnDxLaef20w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1561603},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"438b9d55a7efd60f49ab5f93c29a55bd41838410","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.3_1781228167959_0.6239275222299927","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.4":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.4","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.4","maintainers":[{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"951105a6603da0a245cbce547362907445fd0050","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.4.tgz","fileCount":30,"integrity":"sha512-qtpHbVreXLpUEIHely4n79ADbaerIfoBczeJtVDfOx11mgFNcDESyRN2rlOKRwQmoZmc41eGvTw8U96l6cpLoA==","signatures":[{"sig":"MEQCIE29KE3qpwDk2np4/JFIHVIYYfKFjKmOoLs5ykPJz82lAiB2d//9WvRk2mDvCLidbFzCQnC/8Z3XmQHyauZw293n4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1592555},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"8343d21c43798b6d40143a01743091a00b65a440","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.4_1781738795947_0.5683927807468325","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.5":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.5","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.5","maintainers":[{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"edbbefc97d0e63ef46162ebc38b47f9ec9a2a0a7","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.5.tgz","fileCount":30,"integrity":"sha512-Ndhd5Nsy4y7Q8aBEOssVdfrYng0RO1bzoMJvwMlmYcHg1/mMDQDW9UBppAGMjmcV8QvL5BFWuz3IDIxvcM1RAg==","signatures":[{"sig":"MEUCIQDv5i2G59vFWgs8fyUJN+XW5sciGg6+gYOLlVxruE5ocAIgdexzfF4INwVgI4ujokFd1NTkOjbijK11JxdNdyY+vBY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1606797},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"a97862e9f5d5f2d7e7329291d6fdb20a9eab4dad","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.5_1782240992195_0.29199293362675616","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.6":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.6","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.6","maintainers":[{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"a3f9a865df0b60c1ff59cf11db8eb110332191a1","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.6.tgz","fileCount":30,"integrity":"sha512-TBWZ9oX+BVl5Vt4hBNFCcZ2cUzsbPOoUAoedgSBaZkxZ3Q7u9wHraMsEDMkxIQ21i24pzR5549E6/88WCri6/w==","signatures":[{"sig":"MEUCIB0LAJNBqoMoVfheRvDBRvR6kpKFZJr9vF1sub7DLqpzAiEAh8XQYj0RQPqrHM58SryEpoEjhaQftT1VAIh0boPG3c0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1609209},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"bb49e0f227f0609015614c9bcf746b39934bc2a2","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.6_1783092177214_0.12726706155661027","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.7":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.7","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.7","maintainers":[{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"50099bf440a4eb92646aa1f00dab7eea1bcc6096","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.7.tgz","fileCount":30,"integrity":"sha512-aEHzGuuS794LV4BfnAug5lzKn98xlkXRt6gMd66w01WWqOCsNr3BlNos8+KQNAV2u2EKLnWuelp8lw0KmyMx+w==","signatures":[{"sig":"MEUCIERKO2CThUVpTjUKq5U6awhQEGDeuXL9XUKNhZ2NM7vaAiEAtlEX8wBnPmmief0l5LuA5605+Jlp6do5QPojbpjOUFg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1676120},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"95ecc3c0ae313be9e545333278526b79ed053fa6","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.7_1783441190388_0.8726184920297195","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.8":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.8","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.8","maintainers":[{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"79d0313c27a3564179ed474e841c4e7b4b22e513","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.8.tgz","fileCount":30,"integrity":"sha512-K5mq2m5PigXS87faH75/RZ7gzn2PMLLyW2Igk+/LXwgd164/EbU/5dzdgY7JLiuGANiD4BKZ1qXhQk5S7Dvcdw==","signatures":[{"sig":"MEUCIQCPGrBNFcyr5xSUoW1EVrus6m8Ts0ZeI9H5uRG6qwiMlAIgVB8TyJ0JHe0O7Jk4akrTCpoJfZ+UbOyUi+lHNDe1TGA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1734799},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"a1dfad3a8a221b19b114daa411cecbc1976a31eb","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.8_1783612104236_0.08476523884541431","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.9":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.9","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.9","maintainers":[{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"8080fba595a838ac263b1c8c9c63312af85d9e9d","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.9.tgz","fileCount":30,"integrity":"sha512-1srI+jBWRQzNuCK+9Cx3NsMvu9vY/RFJhX0ObU/rGAhHmUI2wht1VlGFNbvTV3OiV35BdNTlaSQ8WXU4S008KA==","signatures":[{"sig":"MEQCIBAChuVQh0YkT/c1qdLs+jtR3Br5XY9t7qjVlDpU7GqHAiAGYOApmI5mSVJvvHGUCB/QPD9nEDLERT5lFRRNmnGL5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1748515},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"20ebb439231a70f0834024ab19942c69a5aa41ef","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.9_1784743692827_0.5445923994620829","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.10":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.10","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.10","maintainers":[{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"26a9c19210d73990731fd8f78002be765637e20a","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.10.tgz","fileCount":30,"integrity":"sha512-cxYaNEGMjJcN6wRvtcP3lK7TAyEdU1kalF0FEPjpw74OzhR7mXU1mxqfAjqS7jYom7D3wD97+mCIleU01B2AmQ==","signatures":[{"sig":"MEUCIC+wuV5ScY94rXgp69npr49KTIWYJfx1/RE2subV4Q0LAiEAuScYXOAp+bBOtY60N9nPBmTNC7/oFXQsGbLzHzcjYJA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1748517},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"3820b5ae71d4f02c430526bca8dc7cd9f994dcd5","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.10_1785265092083_0.7157395303961247","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.11":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.11","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.11","maintainers":[{"name":"kalil.rds","email":"kalil.reis@b1.app"},{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"642cf08ea7106fd72464257e0f79dcc194f4a4a4","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.11.tgz","fileCount":30,"integrity":"sha512-JtAWKmYEHeGAPsnIivyWtHxktZSJkZyJqqyVWjmvjefyq1vpPccRAFjO2MeZKKciOE4cnoEbeaH8uP5NuJBgpQ==","signatures":[{"sig":"MEYCIQCWwlEJCNvxuOJVbFiXINpZ4hHmLmr/KQ7zxGvvbQfb/gIhALWQm8vsuZT7BLgl2IGx8YLE4IBmPvWzToiKj42VOJ/s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1800559},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"b506804f1f31efdbcfbca13ec94a706e403b7a7e","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"jose":"^5","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^2.1.8","express":"^5.0.0","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^22.10.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^6.0.2","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.11_1786393442776_0.9341365958232613","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.12":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.12","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.12","maintainers":[{"name":"kalil.rds","email":"kalil.reis@b1.app"},{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"3c1db43aaa32b8994c23437eb23ee0799665490f","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.12.tgz","fileCount":30,"integrity":"sha512-EzVdZlxxSJdC1gZntctCBPqGyaurLSRobCpzX5sGRH0MOF8hYweD0chfVf7FalulD6Q5IStbXdEi0WXE/0JSEw==","signatures":[{"sig":"MEUCIFdX9KazsmnjDj1x/vG1cu4aw3wlMplX3mKQJXxPMaPJAiEA+CY3Nh9FBYkaYU6WhEsZJ8G8MRsL87fXZj4N/B5Mn2M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1804683},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"bb1bcc39b3f6741a46a04aabbceeba95470ad1aa","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"jose":"^6","iron-session":"^8.0.4","openid-client":"^6.8.4","@b1-road/types":"^0.1.0-alpha.12"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^4.1.10","express":"^5.0.0","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^26.2.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^7.2.1","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.12_1787001502437_0.2110944747546437","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.13":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.13","keywords":["road","iam","rbac","authorization","nestjs","bff","b1"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.13","maintainers":[{"name":"kalil.rds","email":"kalil.reis@b1.app"},{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://portal.road.b1.app","bugs":{"url":"https://portal.road.b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"ea3612d5b190af1bde0b4421c55718b359d4c81d","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.13.tgz","fileCount":30,"integrity":"sha512-Y4Uo/qz4YFis4s999P+DY16b6uOAtvIouS8CbkZGiKj1pwK0mbdQ7w7DJ+oQukef24z8BJoh6QqO48H6xBLmxg==","signatures":[{"sig":"MEUCIH64vxLCks3KTyayBzK3/hlnYYTvYj4Z0N0/PN0h5f++AiEA5+iTj44XgTgM/49+FrCNNAWCMB9OfD/RQE/VvXaDfnE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1902072},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"a012be7457db331ca706ac5955a71c749b021370","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for integrating with Road — BFF auth (OIDC + session + proxy), primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"jose":"^6","iron-session":"^8.0.4","openid-client":"^6.8.6","@b1-road/types":"^0.1.0-alpha.13"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^4.1.10","express":"^5.0.0","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^26.2.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^7.2.1","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.13_1787328360858_0.8892062633261133","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.14":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.14","keywords":["road","iam","rbac","authorization","nestjs","bff","b1","eduzz","plat","eduzz-plat"],"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","_id":"@b1-road/nestjs@0.1.0-alpha.14","maintainers":[{"name":"kalil.rds","email":"kalil.reis@b1.app"},{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"homepage":"https://dev-portal.road-sandbox.b1.app","bugs":{"email":"contato@b1.app"},"bin":{"road":"dist/cli/road.mjs"},"dist":{"shasum":"abffdf396625e0e699987f9bf7963a6fd4093f5f","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.14.tgz","fileCount":30,"integrity":"sha512-/Xz4HX4ARhxdthN9nyTh1FA/m+JC+b3RKqSiDSXwjlrntk90rLQk3oTSA4ih9iR3N27exJHqjA2J2MP8f+8U4A==","signatures":[{"sig":"MEUCIE3txw/kYeWZQH5MJPVKilN8g0ULCe6TKDZbSmylSC0OAiEA/sjLQdC36Luim+UHdVMQ9CiV60FsfwB3KzGTEaR6BqQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1907797},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}}},"gitHead":"4d1d887728081d291a2bd0c4b90cfbb8548040a2","scripts":{"test":"vitest run","build":"tsup","prepack":"npm run build","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"repository":{"url":"git+https://github.com/B1Company/road.git","type":"git","directory":"apps/sdks/road-nestjs"},"_npmVersion":"11.5.1","description":"Official NestJS toolkit for Eduzz Plat — BFF auth (OIDC + session + proxy), permission primitives, decorators, and resource client.","directories":{},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"jose":"^6","iron-session":"^8.0.4","openid-client":"^6.8.6","@b1-road/types":"^0.1.0-alpha.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","tsup":"^8.5.1","vitest":"^4.1.10","express":"^5.0.0","@swc/core":"^1.15.40","supertest":"^7.0.0","typescript":"^5.7.0","@types/node":"^26.2.0","@nestjs/core":"^11.0.1","@nestjs/common":"^11.0.1","@types/express":"^5.0.0","@nestjs/testing":"^11.0.1","@types/supertest":"^7.2.1","reflect-metadata":"^0.2.2","@nestjs/platform-express":"^11.0.1"},"peerDependencies":{"rxjs":"^7","ioredis":"^5","@nestjs/core":"^10 || ^11","@nestjs/common":"^10 || ^11","reflect-metadata":"^0.2"},"peerDependenciesMeta":{"ioredis":{"optional":true},"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nestjs_0.1.0-alpha.14_1787340449068_0.7687512450664848","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.15":{"name":"@b1-road/nestjs","version":"0.1.0-alpha.15","type":"module","description":"Official NestJS toolkit for Eduzz Plat — BFF auth (OIDC + session + proxy), permission primitives, decorators, and resource client.","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","bin":{"road":"dist/cli/road.mjs"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./testing":{"import":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"require":{"types":"./dist/testing/index.d.cts","default":"./dist/testing/index.cjs"}},"./core":{"import":{"types":"./dist/core.d.ts","default":"./dist/core.js"},"require":{"types":"./dist/core.d.cts","default":"./dist/core.cjs"}}},"publishConfig":{"access":"public"},"sideEffects":false,"scripts":{"typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","prebuild":"rm -rf dist","build":"tsup","prepack":"npm run build"},"peerDependencies":{"@nestjs/common":"^10 || ^11","@nestjs/core":"^10 || ^11","ioredis":"^5","reflect-metadata":"^0.2","rxjs":"^7"},"peerDependenciesMeta":{"@nestjs/swagger":{"optional":true},"@nestjs/terminus":{"optional":true},"ioredis":{"optional":true}},"dependencies":{"@b1-road/node-core":"^0.1.0-alpha.0","@b1-road/types":"^0.1.0-alpha.15"},"devDependencies":{"@nestjs/common":"^11.2.3","@nestjs/core":"^11.2.3","@nestjs/platform-express":"^11.2.3","@nestjs/testing":"^11.2.3","@swc/core":"^1.16.1","@types/express":"^5.0.0","express":"^5.0.0","@types/node":"^26.3.0","@types/supertest":"^7.2.1","reflect-metadata":"^0.2.2","rxjs":"^7.8.1","supertest":"^7.0.0","tsup":"^8.5.1","typescript":"^5.7.0","vitest":"^4.1.11"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/B1Company/road.git","directory":"apps/sdks/road-nestjs"},"homepage":"https://dev-portal.road-sandbox.b1.app","bugs":{"email":"contato@b1.app"},"author":{"name":"B1 Produtos Digitais Ltda"},"keywords":["road","iam","rbac","authorization","nestjs","bff","b1","eduzz","plat","eduzz-plat"],"_id":"@b1-road/nestjs@0.1.0-alpha.15","gitHead":"45030fbf787408a68c9d6cfd83a8421158fd5911","_nodeVersion":"22.23.2","_npmVersion":"11.5.1","dist":{"integrity":"sha512-L231VEu5QvLACfZFPqYYCgEOEGXo/RIlnPWRYWJKXiYMrMn/wzyIochOOXY9C/fiwad2eBXe4Cf3ksKR4EqAyA==","shasum":"51b97ba829b4444770225414c20da44267e2ea79","tarball":"https://registry.npmjs.org/@b1-road/nestjs/-/nestjs-0.1.0-alpha.15.tgz","fileCount":26,"unpackedSize":432698,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCiMy+KXx5QxeY/y+f4v/YtJSD0bfr9WfhXii/7GusVoQIhAN85rL46PhtOQ+sQGrS7xXSy4/aUwZhGChCnRt22K3eX"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:afaccfa1-22d2-4eec-8492-6d0c4fe5cf96"}},"directories":{},"maintainers":[{"name":"kalil.rds","email":"kalil.reis@b1.app"},{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nestjs_0.1.0-alpha.15_1789579942327_0.6042792552518703"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-09T15:17:25.326Z","modified":"2026-09-16T17:32:22.651Z","0.1.0-alpha.0":"2026-06-09T15:17:25.684Z","0.1.0-alpha.1":"2026-06-09T16:51:37.750Z","0.1.0-alpha.2":"2026-06-09T17:01:01.503Z","0.1.0-alpha.3":"2026-06-12T01:36:08.193Z","0.1.0-alpha.4":"2026-06-17T23:26:36.145Z","0.1.0-alpha.5":"2026-06-23T18:56:32.396Z","0.1.0-alpha.6":"2026-07-03T15:22:57.419Z","0.1.0-alpha.7":"2026-07-07T16:19:50.571Z","0.1.0-alpha.8":"2026-07-09T15:48:24.437Z","0.1.0-alpha.9":"2026-07-22T18:08:12.986Z","0.1.0-alpha.10":"2026-07-28T18:58:12.271Z","0.1.0-alpha.11":"2026-08-10T20:24:02.927Z","0.1.0-alpha.12":"2026-08-17T21:18:22.581Z","0.1.0-alpha.13":"2026-08-21T16:06:01.125Z","0.1.0-alpha.14":"2026-08-21T19:27:29.298Z","0.1.0-alpha.15":"2026-09-16T17:32:22.484Z"},"bugs":{"email":"contato@b1.app"},"author":{"name":"B1 Produtos Digitais Ltda"},"license":"MIT","homepage":"https://dev-portal.road-sandbox.b1.app","keywords":["road","iam","rbac","authorization","nestjs","bff","b1","eduzz","plat","eduzz-plat"],"repository":{"type":"git","url":"git+https://github.com/B1Company/road.git","directory":"apps/sdks/road-nestjs"},"description":"Official NestJS toolkit for Eduzz Plat — BFF auth (OIDC + session + proxy), permission primitives, decorators, and resource client.","maintainers":[{"name":"kalil.rds","email":"kalil.reis@b1.app"},{"name":"edunuzzi_b1","email":"eduardo.nuzzi@b1.app"},{"name":"viniciusquicoli","email":"vinicius.quicoli@b1.app"}],"readme":"# @b1-road/nestjs\n\nThe official NestJS toolkit for integrating with Road. **It is a BFF**\n(Backend-for-Frontend): one `RoadModule.forRoot()` gives you the OIDC\nlogin flow, a server-side session + token store, and a streaming proxy to\nRoad API — plus the authorization primitives for your own routes. The browser\nnever holds a JWT; it only carries an opaque, encrypted session cookie.\n\n> **Status:** alpha pre-release. BFF-only — there is no Bearer pass-through\n> path. Pairs in lockstep with `@b1-road/react` (cookie mode) and the\n> `b1-road/laravel` SDK (a Composer package — no npm scope).\n\n## New to Eduzz Plat?\n\nPlat is Eduzz's platform layer — login, roles and permissions, and the business\nunits your app builds on. This package is one piece of it; start here.\n\nThe fastest way in is to let your AI coding agent drive the integration:\n\n```sh\nclaude mcp add road --scope user -- npx -y -p @b1-road/mcp road-mcp\n```\n\nThat gives the agent the full integration guide plus tools to register a\nplatform and issue its credentials.\n\nPrefer to click through it? Create a platform in the\n[Dev Portal](https://dev-portal.road-sandbox.b1.app). Prefer a scaffold in your\nrepo? Run `npx @b1-road/integrate`.\n\n## Install\n\n```bash\nnpm install @b1-road/nestjs\n```\n\n> Alpha pre-release while the Road API contract is in alpha. The `latest`\n> dist-tag tracks the newest release, so the install above is all you need.\n\nPeers: `@nestjs/common` / `@nestjs/core` (`^10 || ^11`), `reflect-metadata`,\n`rxjs`, Node 20+. For the production token store, also install the optional\npeer `ioredis`.\n\n## Quick start (server)\n\n```ts\n// app.module.ts\nimport { Module } from '@nestjs/common';\nimport { RoadModule } from '@b1-road/nestjs';\n\n@Module({\n  imports: [RoadModule.forRoot()], // reads the env vars below\n})\nexport class AppModule {}\n```\n\n**Load your `.env` first — Nest does not.** `forRoot()` reads `process.env`\nwhile the module is being constructed, so the load has to happen before\n`app.module` is imported. Put it at the very top of `main.ts`:\n\n```ts\n// main.ts\nimport 'dotenv/config';        // must precede the ./app.module import\n\nimport { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\n```\n\n(`npm i dotenv`. Using `@nestjs/config` instead? Wire it with\n`RoadModule.forRootAsync()` so the config is resolved before Road reads it.)\nSkip this and the app throws at boot naming the exact variables that are\nsitting in your `.env`.\n\n```dotenv\n# .env\nAUTH_SERVER_ISSUER_URL=https://auth.example.com\nAUTH_SERVER_CLIENT_ID=your-client-id\nAUTH_SERVER_CLIENT_SECRET=your-client-secret\nAUTH_SERVER_REDIRECT_URI=https://your-app.com/auth/road/callback\nSESSION_SECRET=<32+ byte random string>     # node -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\"\nREDIS_URL=redis://localhost:6379            # required in production\nROAD_API_BASE_URL=https://api.road-sandbox.b1.app   # sandbox (v1); swap for prod at go-live\n# AUTH_SERVER_AUDIENCE=<project-id>         # optional — set only if your Auth Server issues project-scoped (audience'd) tokens\n```\n\n`forRoot()` mounts everything for you:\n\n| Route | What it does |\n| --- | --- |\n| `GET /auth/road/login` | Starts the OIDC PKCE login; redirects to the Auth Server. Honors `?returnTo=`. |\n| `GET /auth/road/callback` | Exchanges the code, mints the session, sets the cookie, redirects back. Restarts the login once if the login-state window expired mid-flow; on a genuine dead-end it renders a friendly retry page to browsers (JSON to API clients). |\n| `POST /auth/road/logout` | Revokes the refresh token, destroys the session, clears the cookie. |\n| `ALL /road-api/*` | Streaming proxy to Road API — attaches the user's Bearer server-side. |\n\n> **Auth Server setup:** register an OIDC app with the redirect URI\n> `https://your-app.com/auth/road/callback` and the `openid profile email\n> offline_access` scopes, then drop its client id/secret into the env. Run\n> `npx road doctor` to verify the wiring.\n\n> **Serving a cookie-mode SPA? Keep it same-origin.** If a `@b1-road/react` SPA\n> consumes this BFF in cookie mode, serve the built SPA from this app (e.g.\n> `@nestjs/serve-static`) or put both behind one origin. The session and CSRF\n> cookies are origin-bound, so a static SPA hosted on a separate host can't use\n> cookie mode — a local dev proxy hides this, and it breaks on deploy.\n\n> **Using `app.setGlobalPrefix('api')`?** Supported. Nest applies the prefix to\n> these mounts too, so the proxy is served at `/api/road-api/*` and the callback\n> at `/api/auth/road/callback`. Two things follow: point the React SDK's\n> `apiBaseUrl` at `/api/road-api`, and register the redirect URI **with** the\n> prefix (`…/api/auth/road/callback`) — or exclude `auth/road` from the global\n> prefix. The module logs this once at boot when it detects a global prefix.\n\n## The React companion\n\n`@b1-road/react` in its cookie-mode default needs two props — no JWT, no\n`authMode`:\n\n```tsx\n<RoadProvider\n  apiBaseUrl=\"/road-api\"\n  onUnauthenticated={() => window.location.assign('/auth/road/login')}\n>\n  <App />\n</RoadProvider>\n```\n\nThe React fetcher sends `credentials: 'include'`, omits `Authorization`, and\nhandles CSRF automatically: the BFF issues a readable `XSRF-TOKEN` cookie on\nlogin and on every proxied response, and the React fetcher echoes it as\n`X-XSRF-TOKEN` on mutations. Reads and writes work out of the box.\n\n## Controllers — three primitives\n\n`auth()`, `can()`, `road` are the whole controller-author surface. The auth\nsource is the session, not an `Authorization` header — but the surface is the\nsame one you'd write against any header-based setup, so controllers stay\nheader-agnostic.\n\n```ts\nimport { Controller, Get, Param } from '@nestjs/common';\nimport { auth, can, Read, Member } from '@b1-road/nestjs';\n\n@Controller('business-units/:buId/members')\nexport class MembersController {\n  @Get()\n  list(@Param('buId') buId: string) {\n    auth().assert(can(Read, Member).in(buId));\n    return auth().road.businessUnits(buId).members.all();\n  }\n}\n```\n\n```ts\nconst a = auth();\na.userId            // string (Auth Server user id)\na.user              // RoadUser (from the id_token claims)\na.token             // the current access token (refreshed transparently)\na.road              // user-bound RoadClient\na.assert(can(Read, Member).in(buId));\n\na.road.businessUnits(buId).members        // for await iterable\na.road.as.service().iam.authorize(...)    // outbound service-mode override\n```\n\n### Decorators (sugar)\n\n```ts\n@Get(':buId')\n@RequirePermission(Read, Member, { in: 'buId' })   // type-checked\nlist(@CurrentUser() user: RoadUser) { ... }\n\n@Get('me')\n@SkipAuthorization()        // authn still runs, authz skipped\nme(@CurrentUser() user: RoadUser) { ... }\n\n@Get('public')\n@Public()                   // both skipped\nping() { ... }\n```\n\n### Adding Road to an app that already has auth\n\n`forRoot()` registers its guards **globally**. That is what you want in a new\napp — every route is protected by default — but in an existing one it means\nevery pre-existing route starts returning `401 \"No active session\"` the moment\nyou mount the module. Two options:\n\n**Mark your existing routes `@Public()`** — right when Road is meant to become\nthe app's auth, and you're migrating route by route.\n\n**Or turn the global gating off** and opt routes in individually:\n\n```ts\nRoadModule.forRoot({ disableGlobalGuards: true })\n```\n\nRoad then guards nothing on its own: your existing auth keeps working\nuntouched, and the OIDC login routes (`/auth/road/login`,\n`/auth/road/callback`, `/auth/road/logout`) still work. Opt individual routes\nin with Nest's `@UseGuards()`:\n\n```ts\nimport { Controller, Get, Param, UseGuards } from '@nestjs/common';\nimport {\n  CurrentUser,\n  RequirePermission,\n  RoadAuthGuard,\n  RoadAuthorizationGuard,\n  Read,\n  Member,\n  type RoadUser,\n} from '@b1-road/nestjs';\n\n@Controller('reports')\nexport class ReportsController {\n  @Get()\n  @UseGuards(RoadAuthGuard)                          // authenticate against Road\n  list(@CurrentUser() user: RoadUser) { ... }\n\n  @Get(':buId')\n  @UseGuards(RoadAuthGuard, RoadAuthorizationGuard)  // …and authorize\n  @RequirePermission(Read, Member, { in: 'buId' })\n  scoped(@Param('buId') buId: string) { ... }\n}\n```\n\n**`RoadAuthGuard` is what makes the Road identity available.** It establishes\nthe request context that `@CurrentUser()`, `auth()` and `@RequirePermission()`\nread from, so a route that only your own auth protects has no Road identity —\n`@CurrentUser()` is `undefined` there. Add `RoadAuthGuard` to any route that\nneeds it, and `RoadAuthorizationGuard` as well when the route uses\n`@RequirePermission()`.\n\nOne thing to know either way: **the two auth systems don't share decorators.**\nRoad's `@Public()` means nothing to your existing guard, and your guard's\nequivalent means nothing to Road's. If your own guard runs on every route, it\nwill block Road's login routes — exempt the `/auth/road/*` prefix from it, or\nthe OIDC flow can't complete.\n\n## How it works\n\n```\nBrowser ── session cookie ──▶ NestJS ── Bearer (Auth Server JWT) ──▶ Road API\n                              │\n                              │ token store (Redis / memory / custom)\n                              ▼\n                              Auth Server (OIDC discovery + token endpoint)\n```\n\nThe browser holds only an `iron-session`-sealed cookie carrying an opaque\nsession id. The token store, keyed by that id, holds the `TokenSet` (access +\nrefresh + expiry + cached id_token claims). The proxy and the auth guard fetch\nthe access token from the store, refresh it transparently when it's within 60s\nof expiry, and attach `Authorization: Bearer …` server-side. Refresh rotation\nis invisible to the integrator and the browser.\n\n## Configuration\n\n`forRoot()` with no arguments reads everything from env. Override inline as\nneeded (`forRootAsync({...})` exists for `ConfigService` injection):\n\n```ts\nRoadModule.forRoot({\n  authServer: {\n    issuerUrl:    process.env.AUTH_SERVER_ISSUER_URL,\n    clientId:     process.env.AUTH_SERVER_CLIENT_ID,\n    clientSecret: process.env.AUTH_SERVER_CLIENT_SECRET,\n    redirectUri:  process.env.AUTH_SERVER_REDIRECT_URI,\n    scopes:       ['openid', 'profile', 'email', 'offline_access'],\n    // audience:  process.env.AUTH_SERVER_AUDIENCE,  // optional — project-scoped tokens only\n    // loginStateTtlSeconds: 900,  // login-state window (default 15 min); raise for slow login flows\n  },\n  store:   { driver: 'redis', url: process.env.REDIS_URL },\n  session: { name: 'road_session', secret: process.env.SESSION_SECRET, maxAge: 60 * 60 * 24 * 7 },\n  proxy:   { prefix: 'road-api', allow: ['organization/*', 'me/*', 'iam/identity/*', 'iam/authorization/*'] },\n  api:     { baseUrl: process.env.ROAD_API_BASE_URL, version: 'alpha' },\n});\n```\n\n**Production safety** — `forRoot()` throws at boot when:\n\n- OIDC client credentials are missing,\n- `store.driver` is `memory` and `NODE_ENV === 'production'` (use Redis),\n- `session.secret` is shorter than 32 bytes,\n- `authServer.loginStateTtlSeconds` is set to a non-positive value.\n\n### Token store\n\n| Driver | When | Notes |\n| --- | --- | --- |\n| `memory` | dev / tests | `Map` with TTL eviction (refused in production) |\n| `redis` | production | `road:session:{id}`; needs the optional `ioredis` peer |\n| `custom` | your own | `store: { driver: 'custom', store: myStore }` implementing `RoadTokenStore` |\n\n### Proxy & CSRF\n\nThe proxy forwards only allowlisted path prefixes (default `organization/*`,\n`me/*`, `iam/identity/*`, `iam/authorization/*`); anything else 404s before any token\nlookup. Non-GET requests require a double-submit CSRF token (cookie\n`XSRF-TOKEN`, header `X-XSRF-TOKEN`) — the BFF issues the cookie, the React SDK\nechoes it. Both names are configurable under `proxy.csrf`.\n\n## Test mode — no Auth Server, no Redis, no signed JWTs\n\n```ts\nimport { Test } from '@nestjs/testing';\nimport { RoadModule } from '@b1-road/nestjs';\nimport { roadScenario } from '@b1-road/nestjs/testing';\n\nconst scenario = roadScenario()\n  .withUser('u_owner', { name: 'Eduardo' })\n  .withBusinessUnit('bu_1', { name: 'B1' })\n  .withRole('bu_1', 'Owner', { permissions: ['*'] })\n  .withMember('bu_1', 'u_owner', { roles: ['Owner'] })\n  .withSession('u_owner', { sessionId: 'sess_1' });   // pre-authenticated session\n\nconst moduleRef = await Test.createTestingModule({\n  imports: [RoadModule.forTest(scenario), MembersModule],\n}).compile();\nconst app = moduleRef.createNestApplication();\nawait app.init();\n\nawait request(app.getHttpServer())\n  .get('/road-api/organization/business-units/bu_1/members')\n  .set('Cookie', await scenario.sessionCookieFor('sess_1'))\n  .expect(200);\n```\n\n`sessionCookieFor(id)` returns a sealed session cookie for a declared session.\nThe OIDC round-trip itself isn't simulated — declare sessions instead.\n\n## Service mode (workers, cron, BullMQ)\n\nOutbound calls outside a request use a service JWT:\n\n```ts\nRoadModule.forRoot({\n  service: {\n    kind: 'private_key_jwt',\n    clientId: process.env.ROAD_SERVICE_CLIENT_ID,\n    keyId: process.env.ROAD_SERVICE_KEY_ID,\n    privateKey: process.env.ROAD_SERVICE_PRIVATE_KEY,\n  },\n});\n\n// inside a worker (no request in flight)\nconstructor(private readonly road: RoadClient) {}\nasync run() { await this.road.as.service().iam.authorize({ ... }); }\n```\n\nThe SDK obtains an Auth Server JWT via `client_credentials` or\n`private_key_jwt`, caches it until `exp − 60s`, and re-acquires on 401.\n\n## Webhooks — one controller, typed per event\n\n```ts\nimport { RoadWebhookController, OnRoadEvent, type RoadEvent } from '@b1-road/nestjs';\n\n@RoadWebhookController()                    // mounts POST /road/webhooks\nexport class RoadWebhooks {\n  @OnRoadEvent('organization.member.joined')\n  async onJoined(event: RoadEvent<'organization.member.joined'>) {\n    event.data.userId;                      // typed from the event name\n  }\n\n  @OnRoadEvent(['organization.member.suspended', 'organization.member.removed'])\n  async onGone(event: RoadEvent<'organization.member.suspended' | 'organization.member.removed'>) {\n    await this.cache.evict(event.data.userId);\n  }\n}\n```\n\nRegister the controller in a module like any other. `@OnRoadEvent` is metadata,\nnot a route: the class gets **one** `POST` dispatcher that verifies the delivery\nand calls the method matching the envelope's `event` field.\n\n**Configure `secret` or `verify`, or nothing is delivered.** Verification is\nfail-closed — with\nneither `secret` nor `verify` configured, every delivery is rejected with `503`,\nso you find out on the first one instead of accepting anonymous POSTs quietly.\n\n```bash\nROAD_WEBHOOK_SECRET=whsec_...              # or: @RoadWebhookController({ secret })\n```\n\nThe default check is HMAC-SHA256 over `${timestamp}.${rawBody}`, compared against\n`X-Road-Signature` (`sha256=<hex>`) in constant time, with `X-Road-Timestamp`\nrequired inside a 5-minute window. The two statuses separate **\"this endpoint\ncannot verify\"** from **\"this delivery did not verify\"**: `503` means the\nendpoint is not configured or the raw body never reached it, and `401` means\nverification failed. `401` does not tell you *whose* fault that is — a wrong\n`secret` on your side fails exactly like a bad signature on the wire, and the\nSDK cannot see the difference. Pass `verify` to take over entirely — it wins\nover `secret` when both are set:\n\n```ts\n@RoadWebhookController({\n  path: 'integrations/road',                        // default: 'road/webhooks'\n  verify: async ({ rawBody, headers }) => myCheck(rawBody, headers),\n})\n```\n\n**Enable `rawBody` when you bootstrap.** The signature covers the exact bytes\nRoad sent, and `JSON.stringify(req.body)` is not those bytes — key order and\nwhitespace are both free to differ:\n\n```ts\nconst app = await NestFactory.create(AppModule, { rawBody: true });\n```\n\nWithout it the SDK does **not** guess. It answers `503` and names the fix,\nbecause a re-serialized body is not reliably the signed one: `JSON.stringify`\nmay happen to reproduce a compact payload whose key order already matches, and\nwill not for anything else. A check that passes or fails on whitespace is not a\ncheck, and when it fails it reads like a bug on Road's side.\n\nThe controller is `@Public()` by design. Road delivers a signature, not a\nsession, so the global auth guard would reject every delivery with `401` before\nthe signature check ever ran. Authenticity moves to the HMAC, which still\nrejects an unsigned or mis-signed body.\n\nAn event with no handler returns `200` and logs a warning, so Road adding an\nevent type never turns your endpoint into a source of failed deliveries.\n\n### Events\n\n`organization.invitation.` `created` · `accepted` · `rejected` · `cancelled`\n`organization.member.` `joined` · `suspended` · `reinstated` · `removed` · `role-changed`\n`bridge.grant.` `created` · `revoked`\n`extension.install.` `created` · `uninstalled`\n\nEvery delivery is `{ id, event, timestamp, data }`; `data` is typed from the\nevent name. The catalog lives in `@b1-road/types`, so the API and every SDK\nshare one definition — import `ROAD_WEBHOOK_EVENT_TYPES` from there to subscribe\nto all of them.\n\nSubscribe to the `bridge.grant.*` and `extension.install.*` events if you cache\nauthorization answers. They are what lets a revoked grant stop being honoured\nwhen the event reaches you, rather than whenever your cache happens to expire.\nDelivery is retried and unordered, so treat the event as the trigger to\ninvalidate — not as a latency guarantee.\n\n## CLI\n\n```bash\nnpx road doctor                 # Auth Server + token store + Road API health\nnpx road session list           # active sessions (requires REDIS_URL)\nnpx road session revoke <id>    # server-side logout for one session\nnpx road cache clear            # bust the OIDC discovery cache\n```\n\n## Errors\n\n```ts\nimport { RoadAuthzError } from '@b1-road/nestjs';\n\ntry {\n  await road.iam.authorize({ ... });\n} catch (err) {\n  if (err instanceof RoadAuthzError) {\n    err.code         // 'permission_denied'\n    err.decision     // structured DecisionTrace\n    err.requestId    // correlates to Road API logs — quote this in support\n    err.docs         // undefined unless you set it; the SDK invents no URL\n  }\n}\n```\n\nThe BFF adds three `RoadAuthnError` (401) subclasses: `RoadSessionExpiredError`\n(`session_expired`), `RoadRefreshFailedError` (`refresh_failed`), and\n`RoadOidcStateError` (`oidc_state_mismatch`). A missing/expired session yields\n`401` + `WWW-Authenticate: Session`, which the React SDK turns into your\n`onUnauthenticated` callback. In non-prod, `X-Road-Debug: 1` (or `?debug=road`)\nappends the `DecisionTrace` to 403 bodies.","readmeFilename":"README.md"}