@zapkey/express 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +8 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var h=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var l=(e,s)=>{for(var o in s)h(e,o,{get:s[o],enumerable:!0})},O=(e,s,o,n)=>{if(s&&typeof s=="object"||typeof s=="function")for(let t of y(s))!g.call(e,t)&&t!==o&&h(e,t,{get:()=>s[t],enumerable:!(n=m(s,t))||n.enumerable});return e};var x=e=>O(h({},"__esModule",{value:!0}),e);var v={};l(v,{clearAuthCookie:()=>d,getUser:()=>j,handleLogin:()=>E,handleLogout:()=>I,handleRefresh:()=>N,requireAuth:()=>C,requireGuard:()=>A,setAuthCookie:()=>k});module.exports=x(v);var r=require("@zapkey/core");function C(e){return async(s,o,n)=>{try{let t=e.cookie.getAccessTokenName(),i=s.cookies?.[t];if(!i){let a=s.headers.authorization;a?.startsWith("Bearer ")&&(i=a.substring(7))}if(!i){o.status(401).json({error:"Unauthorized",code:"NO_TOKEN"});return}let u=await e.token.verifyAccessToken(i);s.user=u,n()}catch(t){p(t,o)}}}function A(e,s){return async(o,n,t)=>{try{if(!e.authorization){n.status(500).json({error:"Authorization not configured",code:"AUTHORIZATION_NOT_CONFIGURED",hint:"Provide AuthorizationStore in SDK config to use requireGuard"});return}let i=o.user;if(!i){n.status(401).json({error:"Unauthorized",code:"NO_USER"});return}await e.authorization.guard.enforce(i.userId,s),t()}catch(i){p(i,n)}}}function k(e,s,o,n){let t={httpOnly:n.httpOnly,secure:n.secure,sameSite:n.sameSite,maxAge:n.maxAge*1e3,path:n.path,domain:n.domain};e.cookie(s,o,t)}function d(e,s,o){let n={httpOnly:o.httpOnly,secure:o.secure,sameSite:o.sameSite,maxAge:0,path:o.path,domain:o.domain};e.clearCookie(s,n)}async function E(e,s,o,n){let t=n?.withRefresh??e.hasRefreshTokens(),i=n?.sendTokenInBody??!1,u=n?.metadata!==void 0?{userId:s,metadata:n.metadata}:{userId:s};if(t){let a=await e.token.issue(u),f=e.cookie.getAccessTokenCookieOptions(a.expiresIn),c=e.getConfig().token.refreshTokenExpiresIn,R=e.cookie.getRefreshTokenCookieOptions(c);k(o,e.cookie.getAccessTokenName(),a.accessToken,f),k(o,e.cookie.getRefreshTokenName(),a.refreshToken,R);let T={success:!0,expiresIn:a.expiresIn,refreshEnabled:!0};i&&(T.accessToken=a.accessToken),o.json(T)}else{let a=await e.token.issueAccessToken(u),f=e.cookie.getAccessTokenCookieOptions(a.expiresIn);k(o,e.cookie.getAccessTokenName(),a.accessToken,f);let c={success:!0,expiresIn:a.expiresIn,refreshEnabled:!1};i&&(c.accessToken=a.accessToken),o.json(c)}}async function N(e,s,o,n){try{if(!e.hasRefreshTokens()||!e.token.rotate){o.status(400).json({error:"Refresh tokens are not enabled",code:"REFRESH_DISABLED",hint:"Set refreshTokens: true in SDK config to enable token refresh"});return}let t=s.cookies?.[e.cookie.getRefreshTokenName()];if(!t){o.status(401).json({error:"No refresh token",code:"NO_REFRESH_TOKEN"});return}let i=await e.token.rotate(t),u=e.cookie.getAccessTokenCookieOptions(i.expiresIn),a=e.getConfig().token.refreshTokenExpiresIn,f=e.cookie.getRefreshTokenCookieOptions(a);k(o,e.cookie.getAccessTokenName(),i.accessToken,u),k(o,e.cookie.getRefreshTokenName(),i.refreshToken,f);let c={success:!0,expiresIn:i.expiresIn};n?.sendTokenInBody&&(c.accessToken=i.accessToken),o.json(c)}catch(t){p(t,o)}}async function I(e,s,o){try{let n=e.cookie.getClearCookieOptions();if(d(o,e.cookie.getAccessTokenName(),n),e.hasRefreshTokens()&&e.token.revokeToken){let t=s.cookies?.[e.cookie.getRefreshTokenName()];t&&await e.token.revokeToken(t,"logout"),d(o,e.cookie.getRefreshTokenName(),n)}o.json({success:!0})}catch(n){p(n,o)}}function p(e,s){e instanceof r.RateLimitError?s.status(e.statusCode).json({error:e.message,code:e.code,retryAfter:e.retryAfter}):e instanceof r.TokenError?s.status(e.statusCode).json({error:e.message,code:e.code}):e instanceof r.OTPError?s.status(e.statusCode).json({error:e.message,code:e.code}):e instanceof r.AuthorizationError?s.status(e.statusCode).json({error:e.message,code:e.code}):e instanceof r.AuthError?s.status(e.statusCode).json({error:e.message,code:e.code}):s.status(500).json({error:"Internal server error",code:"INTERNAL_ERROR"})}function j(e){return e.user}0&&(module.exports={clearAuthCookie,getUser,handleLogin,handleLogout,handleRefresh,requireAuth,requireGuard,setAuthCookie});
|
package/dist/index.d.cts
CHANGED
|
@@ -52,6 +52,11 @@ declare function handleLogin(sdk: Zapkey, userId: string, res: Response, options
|
|
|
52
52
|
* Set to false to force access-only mode even if refresh is enabled
|
|
53
53
|
*/
|
|
54
54
|
withRefresh?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Return the accessToken in the JSON body.
|
|
57
|
+
* Default: false (Highest security, assumes HttpOnly cookies).
|
|
58
|
+
*/
|
|
59
|
+
sendTokenInBody?: boolean;
|
|
55
60
|
}): Promise<void>;
|
|
56
61
|
/**
|
|
57
62
|
* Refresh token handler
|
|
@@ -59,7 +64,9 @@ declare function handleLogin(sdk: Zapkey, userId: string, res: Response, options
|
|
|
59
64
|
* NOTE: Only works when refreshTokens is enabled.
|
|
60
65
|
* Returns 400 error if called when refresh tokens are disabled.
|
|
61
66
|
*/
|
|
62
|
-
declare function handleRefresh(sdk: Zapkey, req: Request, res: Response
|
|
67
|
+
declare function handleRefresh(sdk: Zapkey, req: Request, res: Response, options?: {
|
|
68
|
+
sendTokenInBody?: boolean;
|
|
69
|
+
}): Promise<void>;
|
|
63
70
|
/**
|
|
64
71
|
* Logout handler
|
|
65
72
|
*
|
package/dist/index.d.ts
CHANGED
|
@@ -52,6 +52,11 @@ declare function handleLogin(sdk: Zapkey, userId: string, res: Response, options
|
|
|
52
52
|
* Set to false to force access-only mode even if refresh is enabled
|
|
53
53
|
*/
|
|
54
54
|
withRefresh?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Return the accessToken in the JSON body.
|
|
57
|
+
* Default: false (Highest security, assumes HttpOnly cookies).
|
|
58
|
+
*/
|
|
59
|
+
sendTokenInBody?: boolean;
|
|
55
60
|
}): Promise<void>;
|
|
56
61
|
/**
|
|
57
62
|
* Refresh token handler
|
|
@@ -59,7 +64,9 @@ declare function handleLogin(sdk: Zapkey, userId: string, res: Response, options
|
|
|
59
64
|
* NOTE: Only works when refreshTokens is enabled.
|
|
60
65
|
* Returns 400 error if called when refresh tokens are disabled.
|
|
61
66
|
*/
|
|
62
|
-
declare function handleRefresh(sdk: Zapkey, req: Request, res: Response
|
|
67
|
+
declare function handleRefresh(sdk: Zapkey, req: Request, res: Response, options?: {
|
|
68
|
+
sendTokenInBody?: boolean;
|
|
69
|
+
}): Promise<void>;
|
|
63
70
|
/**
|
|
64
71
|
* Logout handler
|
|
65
72
|
*
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AuthError as
|
|
1
|
+
import{AuthError as T,TokenError as R,OTPError as m,AuthorizationError as y,RateLimitError as g}from"@zapkey/core";function O(e){return async(n,o,s)=>{try{let i=e.cookie.getAccessTokenName(),t=n.cookies?.[i];if(!t){let a=n.headers.authorization;a?.startsWith("Bearer ")&&(t=a.substring(7))}if(!t){o.status(401).json({error:"Unauthorized",code:"NO_TOKEN"});return}let c=await e.token.verifyAccessToken(t);n.user=c,s()}catch(i){f(i,o)}}}function x(e,n){return async(o,s,i)=>{try{if(!e.authorization){s.status(500).json({error:"Authorization not configured",code:"AUTHORIZATION_NOT_CONFIGURED",hint:"Provide AuthorizationStore in SDK config to use requireGuard"});return}let t=o.user;if(!t){s.status(401).json({error:"Unauthorized",code:"NO_USER"});return}await e.authorization.guard.enforce(t.userId,n),i()}catch(t){f(t,s)}}}function k(e,n,o,s){let i={httpOnly:s.httpOnly,secure:s.secure,sameSite:s.sameSite,maxAge:s.maxAge*1e3,path:s.path,domain:s.domain};e.cookie(n,o,i)}function h(e,n,o){let s={httpOnly:o.httpOnly,secure:o.secure,sameSite:o.sameSite,maxAge:0,path:o.path,domain:o.domain};e.clearCookie(n,s)}async function C(e,n,o,s){let i=s?.withRefresh??e.hasRefreshTokens(),t=s?.sendTokenInBody??!1,c=s?.metadata!==void 0?{userId:n,metadata:s.metadata}:{userId:n};if(i){let a=await e.token.issue(c),u=e.cookie.getAccessTokenCookieOptions(a.expiresIn),r=e.getConfig().token.refreshTokenExpiresIn,d=e.cookie.getRefreshTokenCookieOptions(r);k(o,e.cookie.getAccessTokenName(),a.accessToken,u),k(o,e.cookie.getRefreshTokenName(),a.refreshToken,d);let p={success:!0,expiresIn:a.expiresIn,refreshEnabled:!0};t&&(p.accessToken=a.accessToken),o.json(p)}else{let a=await e.token.issueAccessToken(c),u=e.cookie.getAccessTokenCookieOptions(a.expiresIn);k(o,e.cookie.getAccessTokenName(),a.accessToken,u);let r={success:!0,expiresIn:a.expiresIn,refreshEnabled:!1};t&&(r.accessToken=a.accessToken),o.json(r)}}async function A(e,n,o,s){try{if(!e.hasRefreshTokens()||!e.token.rotate){o.status(400).json({error:"Refresh tokens are not enabled",code:"REFRESH_DISABLED",hint:"Set refreshTokens: true in SDK config to enable token refresh"});return}let i=n.cookies?.[e.cookie.getRefreshTokenName()];if(!i){o.status(401).json({error:"No refresh token",code:"NO_REFRESH_TOKEN"});return}let t=await e.token.rotate(i),c=e.cookie.getAccessTokenCookieOptions(t.expiresIn),a=e.getConfig().token.refreshTokenExpiresIn,u=e.cookie.getRefreshTokenCookieOptions(a);k(o,e.cookie.getAccessTokenName(),t.accessToken,c),k(o,e.cookie.getRefreshTokenName(),t.refreshToken,u);let r={success:!0,expiresIn:t.expiresIn};s?.sendTokenInBody&&(r.accessToken=t.accessToken),o.json(r)}catch(i){f(i,o)}}async function E(e,n,o){try{let s=e.cookie.getClearCookieOptions();if(h(o,e.cookie.getAccessTokenName(),s),e.hasRefreshTokens()&&e.token.revokeToken){let i=n.cookies?.[e.cookie.getRefreshTokenName()];i&&await e.token.revokeToken(i,"logout"),h(o,e.cookie.getRefreshTokenName(),s)}o.json({success:!0})}catch(s){f(s,o)}}function f(e,n){e instanceof g?n.status(e.statusCode).json({error:e.message,code:e.code,retryAfter:e.retryAfter}):e instanceof R?n.status(e.statusCode).json({error:e.message,code:e.code}):e instanceof m?n.status(e.statusCode).json({error:e.message,code:e.code}):e instanceof y?n.status(e.statusCode).json({error:e.message,code:e.code}):e instanceof T?n.status(e.statusCode).json({error:e.message,code:e.code}):n.status(500).json({error:"Internal server error",code:"INTERNAL_ERROR"})}function N(e){return e.user}export{h as clearAuthCookie,N as getUser,C as handleLogin,E as handleLogout,A as handleRefresh,O as requireAuth,x as requireGuard,k as setAuthCookie};
|