UNPKG

@kinde-oss/kinde-node-express

Version:

Kinde SDK for traditional Node.js Express web apps that run on the server

1 lines 7.51 kB
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require("crypto");c=s(c,1);let l=require("express-session");l=s(l,1);let u=require("@kinde-oss/kinde-typescript-sdk"),d=require("fs"),f=require("module"),p=require("express");p=s(p,1);let m=require("aws-jwt-verify"),h=require("@kinde/jwt-validator");var g=()=>c.default.randomBytes(28).toString(`hex`),_=e=>{let t=e.get(`host`);return new URL(`${e.protocol}://${t}${e.originalUrl}`)},v={secret:process.env.SESSION_SECRET||g(),saveUninitialized:!0,cookie:{maxAge:1e3*60*60*24,sameSite:`lax`,httpOnly:!0,secure:process.env.NODE_ENV===`production`,path:`/`},resave:!1},y=()=>(e,t,n)=>{e.setSessionItem=async(t,n)=>{e.session[t]=n},e.getSessionItem=async t=>e.session[t]??null,e.removeSessionItem=async t=>{delete e.session[t]},e.destroySession=async()=>{e.session.destroy(e=>console.log(e))},n()},b=e=>e._router&&e._router.stack?e._router.stack.some(e=>e.name===`session`):!1,x=e=>{b(e)||e.use((0,l.default)(v)),e.use(y())},S={name:`@kinde-oss/kinde-node-express`,version:`2.0.2`,description:`Kinde SDK for traditional Node.js Express web apps that run on the server`,main:`dist/kinde-node-express.cjs`,module:`dist/kinde-node-express.mjs`,types:`dist/types/index.d.ts`,type:`module`,engines:{node:`>=18.0.0`},exports:{".":{require:{types:`./dist/types/index.d.ts`,default:`./dist/kinde-node-express.cjs`},import:{types:`./dist/types/index.d.ts`,default:`./dist/kinde-node-express.mjs`}}},repository:{type:`git`,url:`https://github.com/kinde-oss/kinde-node-express`},bugs:`https://github.com/kinde-oss/kinde-node-express`,homepage:`https://kinde.com`,license:`MIT`,scripts:{lint:`eslint . && prettier -c .`,"lint:fix":`eslint . --fix && prettier --write .`,"lint-staged":`lint-staged`,format:`npm run lint:fix && npm run prettier:write`,build:`rm -rf ./dist ./dist-cjs && vite build`,test:`vitest run`,"test:watch":`vitest`,"test:coverage":`vitest --coverage`},author:{name:`Kinde`,email:`engineering@kinde.com`,url:`https://kinde.com`},devDependencies:{"@eslint/eslintrc":`^3.3.1`,"@eslint/js":`^10.0.0`,"@tsconfig/node24":`^24.0.0`,"@types/express":`^5.0.0`,"@types/express-session":`^1.18.0`,"@types/node":`^24.0.0`,"@types/supertest":`^7.0.0`,"@typescript-eslint/eslint-plugin":`^8.0.0`,"@typescript-eslint/parser":`^8.0.0`,"@vitest/coverage-v8":`4.1.10`,eslint:`^10.0.0`,globals:`^17.0.0`,husky:`^9.0.0`,"lint-staged":`^17.0.0`,nodemon:`^3.0.0`,prettier:`^3.2.5`,rollup:`^4.18.0`,supertest:`^7.0.0`,"ts-node":`^10.9.2`,typescript:`^6.0.0`,"typescript-eslint":`^8.31.1`,vite:`^8.0.0`,"vite-plugin-dts":`^5.0.0`,vitest:`^4.0.0`},keywords:[`Kinde`,`login`,`Regular web app authentication`,`Express`],files:[`dist`,`dist-cjs`,`LICENCE.md`],private:!1,dependencies:{"@kinde-oss/kinde-typescript-sdk":`^2.13.0`,"@kinde/jwt-validator":`^0.4.0`,"aws-jwt-verify":`^5.1.1`,"eslint-config-prettier":`^10.1.2`,"eslint-plugin-prettier":`^5.2.6`,express:`^5.0.0`,"express-session":`^1.18.1`,qs:`^6.15.2`}},C=(0,f.createRequire)({}.url),w,T,E=[`grantType`,`issuerBaseUrl`,`postLogoutRedirectUrl`,`siteUrl`,`clientId`],D={[u.GrantType.AUTHORIZATION_CODE]:[`secret`,`redirectUrl`,`unAuthorisedUrl`],[u.GrantType.PKCE]:[`redirectUrl`,`unAuthorisedUrl`],[u.GrantType.CLIENT_CREDENTIALS]:[`secret`]},O=()=>{if(w===void 0)throw Error(`Initial config is not initialized`);return w},k=()=>{if(T===void 0)throw Error(`Internal Kinde server client is not initialized`);return T},A=e=>{let t=D[e.grantType];if(!t){let e=Object.values(u.GrantType).join(`, `);throw Error(`Provided grant type must be one of these values ${e}`)}let n=[...E,...t],r=e;return n.forEach(e=>{let t=r[e];if(!t||typeof t!=`string`)throw Error(`Required config parameter '${e}' has invalid value ${t}`)}),e},j=()=>{try{let e=C.resolve(`express/package.json`),t=JSON.parse((0,d.readFileSync)(e,`utf8`));if(t.name===`express`)return t.version}catch(e){let t=e instanceof Error?e.message:String(e);console.warn(`[SDK] Could not determine application's Express.js version: ${t}`)}return`Unknown`},M=e=>{let{issuerBaseUrl:t,redirectUrl:n,postLogoutRedirectUrl:r,audience:i,scope:a,secret:o,clientId:s}=e;return w=A(e),console.info(`Kinde Express SDK ${S.version} for Express ${j()}`),T=(0,u.createKindeServerClient)(w.grantType,{authDomain:t,redirectURL:n,clientId:s??`reg@live`,clientSecret:o,logoutRedirectURL:r,audience:i??void 0,scope:a??void 0,framework:`ExpressJS`,frameworkVersion:S.version,sdkVersion:S.version}),T},N=(e,t)=>{x(e),M(t)},P=()=>{let{redirectUrl:e}=O();return new URL(e).pathname},F=e=>{for(let t of[`org_code`]){let n=e[t];if(n!==void 0&&(!n||typeof n!=`string`)){let e=`Provided param '${t}' has invalid value '${n}'`;return Error(e)}}return null},I=e=>{let{invitation_code:t,...n}=e,r;return typeof t==`string`?r=t.trim():Array.isArray(t)&&typeof t[0]==`string`&&(r=t[0].trim()),r?{...n,invitation_code:r,is_invitation:`true`}:n},L=async(e,t,n)=>{let r=F(e.query);if(r!==null)return t.status(400),n(r);let i=await k().login(e,I(e.query));t.redirect(i.toString())},R=async(e,t)=>{let n=await k().portal(e,e.query);t.redirect(n.url.toString())},z=async(e,t,n)=>{let r=F(e.query);if(r!==null)return t.status(400),n(r);let i=await k().register(e,I(e.query));t.redirect(i.toString())},B=async(e,t)=>{let n=await k().logout(e);t.redirect(n.toString())},V=async(e,t)=>{try{let{siteUrl:n}=O(),r=k(),i=_(e);await r.handleRedirectToApp(e,i),t.redirect(n)}catch(e){console.debug(`Error: `,e);let{unAuthorisedUrl:n}=O();t.redirect(n)}},H=()=>{let e=P(),t=p.default.Router();return t.get(`/login`,L),t.get(`/portal`,R),t.get(`/logout`,B),t.get(`/register`,z),t.get(e,V),t},U=(e,t)=>{e.use(t,H())},W=async(e,t,n)=>{let r=k();if(!await r.isAuthenticated(e)){let n=await r.logout(e);return t.redirect(n.toString())}try{return e.user=await r.getUserProfile(e),n()}catch(e){return n(e)}},G=async(e,t,n)=>{let{isAuthenticated:r,logout:i,getToken:a}=k(),{issuerBaseUrl:o}=O();if(e.headers.authorization){let r=e.header(`Authorization`);if(!r||!r.startsWith(`Bearer `)){t.sendStatus(401);return}let i=r.split(` `)[1];if((await(0,h.validateToken)({token:i,domain:o})).valid){e.setSessionItem(`access_token`,i),n();return}else{t.sendStatus(403);return}}if(!await r(e)){let n=await i(e);return t.redirect(n.toString())}if(!(await(0,h.validateToken)({token:await a(e),domain:o})).valid){t.sendStatus(403);return}n()},K=(e,t)=>{let{audience:n}=t,r=m.JwtRsaVerifier.create({issuer:e,audience:n||null,jwksUri:`${e}/.well-known/jwks.json`});return async(e,t,n)=>{try{let t=e.headers.authorization,i=t&&t.split(` `)[1];e.user={id:(await r.verify(i)).sub},n()}catch(e){return console.log(`Token not valid!`),console.log(e),t.sendStatus(403)}}},q=async(e,t,n)=>{let r=F(e.query);if(r!==null)return t.status(400),n(r);let{createOrg:i}=k(),a=await i(e,e.query);t.redirect(a.toString())},J=(e,t)=>(N(t,e),U(t,`/`),k());exports.Configuration=u.Configuration,exports.GrantType=u.GrantType,exports.createOrg=q,exports.getUser=W,exports.jwtVerify=K,exports.managementApi=u.managementApi,exports.protectRoute=G,exports.setupKinde=J;