{"_id":"@chainvue/verusid-oauth","_rev":"5-a9321550cb540a5772a28afad740f87e","name":"@chainvue/verusid-oauth","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@chainvue/verusid-oauth","version":"0.1.0","author":{"name":"Robert Lech"},"license":"MIT","_id":"@chainvue/verusid-oauth@0.1.0","maintainers":[{"name":"devdudeio","email":"fLoAtivErImE@proton.me"}],"dist":{"shasum":"bb62e7ce941bbdee591a2e7fdcb01107509f1814","tarball":"https://registry.npmjs.org/@chainvue/verusid-oauth/-/verusid-oauth-0.1.0.tgz","fileCount":5,"integrity":"sha512-Pg5x4n9hb1blW9hdhNbjZHmC2kkQrLGZrhn3Pskzrp0Mnhy4eLJ82BaDusg1eZA/YnsY3Z3lWfPSFuFqyklT4w==","signatures":[{"sig":"MEUCICDgIbQqfTvINWJK9Eluk8H4RaDAvpSg5vBjz9V+MLdTAiEA8oklu244NNge0KUeJB5LUB0690HVZpqnWFlfqQlnGqg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25485},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"dec7262668b0a67e200a615d238b15ccc2add1dd","private":false,"scripts":{"test":"npm run build && node --test test/*.test.js","build":"tsc","typecheck":"tsc --noEmit","doctor:local":"node scripts/doctor-local.cjs"},"_npmUser":{"name":"devdudeio","email":"fLoAtivErImE@proton.me"},"_npmVersion":"11.11.0","description":"TypeScript SDK for server-side VerusID OAuth/OIDC login","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^20.19.42"},"_npmOperationalInternal":{"tmp":"tmp/verusid-oauth_0.1.0_1780841653879_0.5861165129604429","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@chainvue/verusid-oauth","version":"0.1.1","author":{"name":"Robert Lech"},"license":"MIT","_id":"@chainvue/verusid-oauth@0.1.1","maintainers":[{"name":"devdudeio","email":"fLoAtivErImE@proton.me"}],"homepage":"https://github.com/chainvue/verusid-oauth#readme","bugs":{"url":"https://github.com/chainvue/verusid-oauth/issues"},"dist":{"shasum":"4e4bce837c4fff4f075e1ad9902d75c47ed6a9ca","tarball":"https://registry.npmjs.org/@chainvue/verusid-oauth/-/verusid-oauth-0.1.1.tgz","fileCount":5,"integrity":"sha512-Fr0584s5JTfIkLes0i8R1M7aC8YAou1E32vs/Y+0IP5+MRAQD5S9QEn7wKa06EuzxL56kTKMKKHS78pW5iKuKw==","signatures":[{"sig":"MEUCIQDiWA7dCq36ufvMEbYtSlSSVmQoYWLB8ORlbcnvHwbi9gIgZ3dGU/HAP41F0VJf7gkAAUgvuSSzyBDACPEki4szKxQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34362},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"906bc5dfbe743b467cfa963e45e89ddcefe4d3b6","private":false,"scripts":{"test":"npm run build && node --test test/*.test.js","build":"tsc","typecheck":"tsc --noEmit","doctor:local":"node scripts/doctor-local.cjs"},"_npmUser":{"name":"devdudeio","email":"fLoAtivErImE@proton.me"},"repository":{"url":"git+https://github.com/chainvue/verusid-oauth.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript SDK for server-side VerusID OAuth/OIDC login","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^20.19.42"},"_npmOperationalInternal":{"tmp":"tmp/verusid-oauth_0.1.1_1780871627656_0.0358788662144045","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@chainvue/verusid-oauth","version":"0.1.2","author":{"name":"Robert Lech"},"license":"MIT","_id":"@chainvue/verusid-oauth@0.1.2","maintainers":[{"name":"devdudeio","email":"fLoAtivErImE@proton.me"}],"homepage":"https://github.com/chainvue/verusid-oauth#readme","bugs":{"url":"https://github.com/chainvue/verusid-oauth/issues"},"dist":{"shasum":"0105d420026b09acc1eb8f8c344a72f8493494ca","tarball":"https://registry.npmjs.org/@chainvue/verusid-oauth/-/verusid-oauth-0.1.2.tgz","fileCount":5,"integrity":"sha512-Q6faCp4DnIHDwjiLFwtUhBf7Bk85A/BBRudY5YEr6k4gxucvcWyDo3Mt6dqNC+GA45a2Qzl0k0zRCplhdm8lMg==","signatures":[{"sig":"MEQCIBOSXN22e5O+0NpKTk5efp/92zqMOBNdIESSvvwxKEIzAiBGl1coDarHFuqgGh1OWx0jd8af+dpsypsR/8QRxqT0TA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@chainvue%2fverusid-oauth@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":35486},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"188103ed07fbd15edc80a27d9832ee6c0ec13623","private":false,"scripts":{"lint":"eslint .","test":"npm run build && node --test test/*.test.js","build":"tsc","check":"npm run lint && npm run typecheck && npm test && npm run build","typecheck":"tsc --noEmit","doctor:local":"node scripts/doctor-local.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4b65b677-6d0a-45ff-9a79-c92cfd5bc8b5"}},"repository":{"url":"git+https://github.com/chainvue/verusid-oauth.git","type":"git"},"_npmVersion":"11.13.0","description":"TypeScript SDK for server-side VerusID OAuth/OIDC login","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.4.1","globals":"^17.6.0","@eslint/js":"^10.0.1","typescript":"^5.7.3","@types/node":"^20.19.42","typescript-eslint":"^8.60.1"},"_npmOperationalInternal":{"tmp":"tmp/verusid-oauth_0.1.2_1780910038581_0.21272698392819045","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@chainvue/verusid-oauth","version":"0.1.4","author":{"name":"Robert Lech"},"license":"MIT","_id":"@chainvue/verusid-oauth@0.1.4","maintainers":[{"name":"devdudeio","email":"fLoAtivErImE@proton.me"}],"homepage":"https://github.com/chainvue/verusid-oauth#readme","bugs":{"url":"https://github.com/chainvue/verusid-oauth/issues"},"dist":{"shasum":"649d3404966a9beda44c0666b3a3afa18f89ffb7","tarball":"https://registry.npmjs.org/@chainvue/verusid-oauth/-/verusid-oauth-0.1.4.tgz","fileCount":5,"integrity":"sha512-fL7W90Wr0zITB6z/5liw20V85jAXsuaO8jX4wo4yVdF5RTwvcS9ALeTcLmrMoqcCjWvgdxm/SlR+r1IBJszu6w==","signatures":[{"sig":"MEUCIQDJzYz4gbKMgZhCa4S7TsWBqiE8Aa63XfJDbPCMxFyBigIgYXkZMVclF6FODQWvLPfBOr2T2YzKY8um/azXwJWVHwU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@chainvue%2fverusid-oauth@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":35486},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"301c6caf4bb626df61121b1ff286dc1240200c77","private":false,"scripts":{"lint":"eslint .","test":"npm run build && node --test test/*.test.js","build":"tsc","check":"npm run lint && npm run typecheck && npm test && npm run build","typecheck":"tsc --noEmit","doctor:local":"node scripts/doctor-local.cjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4b65b677-6d0a-45ff-9a79-c92cfd5bc8b5"}},"repository":{"url":"git+https://github.com/chainvue/verusid-oauth.git","type":"git"},"_npmVersion":"11.13.0","description":"TypeScript SDK for server-side VerusID OAuth/OIDC login","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.4.1","globals":"^17.6.0","@eslint/js":"^10.0.1","typescript":"^5.7.3","@types/node":"^20.19.42","typescript-eslint":"^8.60.1"},"_npmOperationalInternal":{"tmp":"tmp/verusid-oauth_0.1.4_1780910210992_0.033688719553121915","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@chainvue/verusid-oauth","version":"0.1.5","description":"TypeScript SDK for server-side VerusID OAuth/OIDC login","license":"MIT","author":{"name":"Robert Lech"},"repository":{"type":"git","url":"git+https://github.com/chainvue/verusid-oauth.git"},"type":"module","private":false,"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"publishConfig":{"access":"public"},"scripts":{"build":"tsc","check":"npm run lint && npm run typecheck && npm test && npm run build","lint":"eslint .","typecheck":"tsc --noEmit","test":"npm run build && node --test test/*.test.js","doctor:local":"node scripts/doctor-local.cjs"},"devDependencies":{"@eslint/js":"^10.0.1","@semantic-release/changelog":"^6.0.3","@semantic-release/exec":"^7.1.0","@semantic-release/git":"^10.0.1","@types/node":"^20.19.42","eslint":"^10.4.1","globals":"^17.6.0","semantic-release":"^25.0.7","typescript":"^5.7.3","typescript-eslint":"^8.60.1"},"engines":{"node":">=20"},"gitHead":"ec3d93f903afe013387468220a5fc5d2af510c92","_id":"@chainvue/verusid-oauth@0.1.5","bugs":{"url":"https://github.com/chainvue/verusid-oauth/issues"},"homepage":"https://github.com/chainvue/verusid-oauth#readme","_nodeVersion":"24.18.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-/WuPA9BxlnOTi0qRJ8YuGwroYB8I7HcLq+1mMTCAWmFmJUnoj9TZZORMD4bGv/uYRBTKl2645YkJeOY+HfeAXQ==","shasum":"c9b14ee170202efd054f1ec0228557a9b082c5d0","tarball":"https://registry.npmjs.org/@chainvue/verusid-oauth/-/verusid-oauth-0.1.5.tgz","fileCount":5,"unpackedSize":35894,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@chainvue%2fverusid-oauth@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDreP6yUXm9k9MJQ2IWD5TgtLk8fJmxjEPMDI93kTb/3gIgdKM2eRvkk3K4Yx4rryXKQSZrtP+Rze3paNvPliQSX6Y="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4b65b677-6d0a-45ff-9a79-c92cfd5bc8b5"}},"directories":{},"maintainers":[{"name":"devdudeio","email":"fLoAtivErImE@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/verusid-oauth_0.1.5_1784113887121_0.7271468699063914"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-07T14:14:13.755Z","modified":"2026-07-15T11:11:27.727Z","0.1.0":"2026-06-07T14:14:14.027Z","0.1.1":"2026-06-07T22:33:47.796Z","0.1.2":"2026-06-08T09:13:58.715Z","0.1.4":"2026-06-08T09:16:51.150Z","0.1.5":"2026-07-15T11:11:27.311Z"},"bugs":{"url":"https://github.com/chainvue/verusid-oauth/issues"},"author":{"name":"Robert Lech"},"license":"MIT","homepage":"https://github.com/chainvue/verusid-oauth#readme","repository":{"type":"git","url":"git+https://github.com/chainvue/verusid-oauth.git"},"description":"TypeScript SDK for server-side VerusID OAuth/OIDC login","maintainers":[{"name":"devdudeio","email":"fLoAtivErImE@proton.me"}],"readme":"# @chainvue/verusid-oauth\n\nTypeScript SDK for server-side VerusID OAuth/OIDC login.\n\nThis package helps confidential Node.js backends start a VerusID OAuth login, exchange the returned authorization code, verify the OIDC ID token through Hydra discovery and JWKS, introspect the access token, compare Verus claims, and return a sanitized application session.\n\n## Install\n\n```sh\nnpm install @chainvue/verusid-oauth\n```\n\n## Usage\n\n```ts\nimport {\n  VerusOAuthError,\n  assertProductionConfig,\n  createConfig,\n  createVerusOAuthClient,\n} from \"@chainvue/verusid-oauth\"\n\nconst config = createConfig(process.env)\nif (process.env.NODE_ENV === \"production\") {\n  assertProductionConfig(config)\n}\nconst verusOAuth = createVerusOAuthClient(config)\n\napp.get(\"/login\", (req, res) => {\n  const login = verusOAuth.createLoginRequest()\n  req.session.oauth = {\n    state: login.state,\n    nonce: login.nonce,\n    codeVerifier: login.codeVerifier,\n  }\n  res.redirect(login.authorizationUrl.toString())\n})\n\napp.get(\"/callback\", async (req, res, next) => {\n  try {\n    const saved = req.session.oauth || {}\n    delete req.session.oauth\n\n    req.session.login = await verusOAuth.completeLogin({\n      code: req.query.code,\n      codeVerifier: saved.codeVerifier,\n      returnedState: req.query.state,\n      expectedState: saved.state,\n      expectedNonce: saved.nonce,\n    })\n\n    res.redirect(\"/\")\n  } catch (error) {\n    if (error instanceof VerusOAuthError) {\n      res.status(400).json({ error: error.code, message: error.message })\n      return\n    }\n    next(error)\n  }\n})\n```\n\n`completeLogin()` returns a sanitized session by default:\n\n```json\n{\n  \"subject\": \"i...\",\n  \"verus\": {\n    \"verus_id\": \"i...\",\n    \"verus_id_name\": \"name@\",\n    \"verus_chain\": \"VRSCTEST\",\n    \"verus_auth_method\": \"verus_login_consent\",\n    \"verus_login_at\": 1780828245\n  },\n  \"grantedScope\": \"openid offline verusid\",\n  \"refreshTokenPresent\": true\n}\n```\n\nRaw OAuth tokens are returned only when `includeRawTokens: true` is passed to `completeLogin()`.\nSDK-created login requests use PKCE by default. Store `codeVerifier` in the\nuser session with `state` and `nonce`, then pass it to `completeLogin()`.\n`completeLogin()` rejects SDK-created login callbacks that do not provide the\nsaved verifier.\n\nProduction deployments can provide `accessTokenVerifier` on the config to\nvalidate access tokens without exposing Hydra admin introspection to the app\nruntime. The verifier receives `{ accessToken, tokenSet, idTokenClaims, config }`\nand returns `{ active, claims }`; the returned Verus claims must still match the\nverified ID-token claims. Without a custom verifier, the SDK keeps using Hydra\nadmin introspection.\n\n## Production Guard\n\nCall `assertProductionConfig(config)` during production startup, or use\n`getProductionConfigErrors(config)` if you need to render/report all failures.\nThe guard rejects local example secrets, HTTP redirect URIs, public-looking HTTP\nHydra admin URLs, non-HTTPS Hydra issuer URLs, invalid URLs, invalid numeric\nport/timeout values, non-default scopes, and starter-only local host defaults.\n\n## Environment\n\n- `HYDRA_PUBLIC_URL`, default `http://$LOCAL_HOST:4444`\n- `HYDRA_ADMIN_URL`, default `http://127.0.0.1:4445`\n- `CLIENT_ID`, default `verus-express-login`\n- `CLIENT_SECRET`, default `verus-express-secret`\n- `REDIRECT_URI`, default `http://$LOCAL_HOST:5560/callback`\n- `SCOPES`, default `openid offline verusid`\n- `OAUTH_HTTP_TIMEOUT_MS`, default `10000`\n\n## Release Checklist\n\nUse this checklist for future releases. npm versions are immutable, so push the\nrelease tag only after the package version and release contents are final.\n\n1. Update the `package.json` version.\n2. Run `npm test`.\n3. Commit the release changes.\n4. Tag the commit as `vX.Y.Z`.\n5. Push the tag.\n6. Confirm GitHub Actions publishes the package.\n7. Verify the published version with:\n\n```sh\nnpm view @chainvue/verusid-oauth version\n```\n\nnpm Trusted Publishing must remain configured for package\n`@chainvue/verusid-oauth` with:\n\n- GitHub repository: `chainvue/verusid-oauth`\n- Workflow: `release.yml`\n- Permission: npm publish\n\n## License\n\nMIT\n","readmeFilename":"README.md"}