login-hub-sdk
v0.2.0
Published
Thin framework-agnostic client for the login-hub OAuth2 authorization server (see docs/api-contract.md).
Readme
login-hub-sdk
Thin, framework-agnostic TypeScript client for the login-hub OAuth2
authorization server. Implements docs/api-contract.md exactly — no OAuth
flow code to write, no 3rd-party provider SDKs to touch.
Install
Published as a private package on GitHub Packages. See PUBLISHING.md
for the .npmrc/auth setup a consuming app needs.
{ "dependencies": { "login-hub-sdk": "^0.1.0" } }For local development against this monorepo you can still use a file
reference instead: "file:../path/to/packages/sdk".
Core API (login-hub-sdk)
import { createLoginUrl, exchangeCodeForToken, verifyAccessToken, getUserInfo, refreshAccessToken, logout, LoginHubClient } from "login-hub-sdk";createLoginUrl(config, { redirectUri, state, appName? })— pure URL builder forGET /authorize.exchangeCodeForToken(config, { code, redirectUri })—POST /token(authorization_code). Server-only (needsclientSecret).refreshAccessToken(config, refreshToken)—POST /token(refresh_token, rotates).verifyAccessToken(config, accessToken)— stateless JWKS verification (jose), no network call to hub beyond a cached JWKS fetch.getUserInfo(config, accessToken)—GET /userinfo(always-fresh DB values).logout(config, refreshToken)—POST /logout.LoginHubClient— class wrapping all of the above under one configured instance.
Next.js helpers (login-hub-sdk/next)
Built on Web-standard Request/Response/Headers — works in Node and Edge
runtimes, no hard dependency on the next package.
loginRedirect(config, { redirectUri, appName? })→Response(302 + state cookie).handleCallback(config, request, { redirectUri, successPath? })→Response(verifies state, exchanges code, sets session cookies).getSession(config, cookieStore)→{ claims, accessToken } | null(works with Next'scookies()).refreshSession(config, request)→ new tokens +Responsecarrying updatedSet-Cookieheaders.logoutResponse(config, request, { redirectTo? })→ revokes + clears cookies.
See examples/next for full wiring (3 route files + a page reading the session).
Test
npm install
npm test # vitest: URL building, token exchange (mocked fetch), JWKS verification, cookies
npm run build # tsc -> dist/