@cauth/express 0.1.6 → 0.1.7

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.
Files changed (2) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{z as e}from"zod";import{parsePhoneNumberFromString as t}from"libphonenumber-js";import n,{Algorithm as r}from"@node-rs/argon2";import i from"node:crypto";var a=class{static ServerError=`internal-server-error`;static ServerErrorMessage=`Internal server error. We are working to fix this, please try again later`;static InvalidToken=`invalid-token`;static InvalidTokenMessage=`Invalid Token`;static ForbiddenResource=`forbidden-resource`;static ForbiddenResourceMessage=`You don't have sufficient permission for this action`;static InvalidOtp=`invalid-otp`;static InvalidOtpMessage=`Invalid Otp. Please check and try again`;static CredentialMismatch=`credential-mismatch`;static CredentialMismatchMessage=`Credential mismatch. Please check your credentials and try again.`;static InvalidData=`invalid-data`;static InvalidDataMessage=e=>`Invalid Body: ${e}`;static AccountNotFound=`account-not-found`;static AccountNotFoundMessage=`Account not found`;static InvalidRole=`invalid-role`;static InvalidRoleMessage=e=>`Role is invalid, please use one of the following roles: ${e.join(`, `)}`;static InvalidRefreshToken=`invalid-refresh-token`;static InvalidRefreshTokenMessage=`Invalid refresh token`;static DuplicateAccount=`account-already-exists`;static DuplicateAccountMessage=`Account with this credentials already exists`;static SchemaValidationError=`schema-validation`;static SchemaValidationMessage=`Your database error is not is sync with CAuth Spec`};async function o(e){try{return{data:await e,error:null}}catch(e){return{data:null,error:e}}}function s({tokens:e,config:t,roles:n}){return async(r,i,s)=>{try{let c=r.cookies?.accessToken;if(!c){let e=r.headers.authorization;e?.startsWith(`Bearer `)&&(c=e.split(` `)[1])}if(!c)return i.status(401).send({code:a.InvalidToken});let l=await o(e.VerifyAccessToken(c));return l.error||!l.data?i.status(401).send({code:a.InvalidToken}):n&&!n.includes(l.data.role)||!t.roles.includes(l.data.role)?i.status(403).send({code:a.ForbiddenResource,message:a.ForbiddenResourceMessage}):(r.cauth={id:l.data.id,role:l.data.role},s())}catch{return i.status(500).send({code:a.ServerError})}}}const c=e.string().trim().refine(e=>{let n=t(e);return!!n&&n.isValid()},{message:`Invalid phone number`}).transform(e=>t(e)?.format(`E.164`)??e),l=e.enum([`LOGIN`,`RESET_PASSWORD`,`ACTION`]),u=e.object({email:e.email(),phoneNumber:e.never().optional(),password:e.string().min(6).optional()}),d=e.object({phoneNumber:c,email:e.never().optional(),password:e.string().min(6).optional()}),f=e.union([u,d]).superRefine((t,n)=>{t.email&&t.phoneNumber&&n.addIssue({code:e.ZodIssueCode.custom,message:`Provide either email or phoneNumber`,path:[`email`,`phoneNumber`]})}),p=e.object({phoneNumber:c,email:e.never().optional(),code:e.string().min(4).max(8)}),m=e.object({email:e.email(),phoneNumber:e.never().optional(),code:e.string().min(4).max(8)});e.union([m,p]);const h=e.object({otpPurpose:l,usePassword:e.boolean().default(!1),password:e.string().optional()}),g=h.extend({phoneNumber:c,email:e.never().optional()}),_=h.extend({phoneNumber:e.never().optional(),email:e.string().email()});e.union([g,_]).refine(e=>e.usePassword?!!e.password:!e.password,{message:`Password required only if usePassword is true`,path:[`password`]});const v=e.object({phoneNumber:c.optional(),email:e.email().optional(),role:e.string(),password:e.string().optional()}).superRefine((t,n)=>{!t.email&&!t.phoneNumber&&n.addIssue({code:e.ZodIssueCode.custom,message:`Provide either email or phoneNumber`,path:[`email`,`phoneNumber`]})}),y=e.object({refreshToken:e.string()}),b=e.object({refreshToken:e.string()}),x=e.object({accountId:e.string(),oldPassword:e.string(),newPassword:e.string()});function S(e){return`${e?.error?.issues[0].path}: ${e?.error?.issues[0].message}`}var C=class{static ValidationError=`validation-error`;static CredentialError=`credential-error`;static UnKnownError=`unknown-error`;static InvalidDataError=`invalid-data-error`};const w={CredentialMismatchError:{type:C.CredentialError,message:a.CredentialMismatchMessage,code:a.CredentialMismatch,name:`CredentialMismatchError`},InvalidDataError:e=>({type:C.ValidationError,message:a.InvalidDataMessage(e),code:a.InvalidData,name:`InvalidDataError`}),AccountNotFoundError:{type:C.InvalidDataError,message:a.AccountNotFoundMessage,code:a.AccountNotFound,name:`AccountNotFoundError`},InvalidRoleError:e=>({type:C.ValidationError,message:a.InvalidRoleMessage(e),code:a.InvalidRole,name:`InvalidRoleError`}),InvalidRefreshTokenError:{type:C.ValidationError,message:a.InvalidRefreshTokenMessage,code:a.InvalidRefreshToken,name:`InvalidRefreshTokenError`},DuplicateAccountError:{type:C.ValidationError,message:a.DuplicateAccountMessage,code:a.DuplicateAccount,name:`DuplicateAccountError`},InvalidOTPCode:{type:C.ValidationError,message:a.InvalidOtpMessage,code:a.InvalidOtp,name:`InvalidOTPCode`},SchemaInvalidError:{type:C.ValidationError,message:a.SchemaValidationMessage,code:a.SchemaValidationError,name:`SchemaInvalidError`}};function T(e){return{success:!0,value:e}}function E(...e){return{success:!1,errors:e}}async function D({config:e},{...t}){let i=x.safeParse(t);if(!i.success)return E({error:w.InvalidDataError(S(i))});let a=await e.dbContractor.findAccountById({id:t.accountId});if(!a||!await n.verify(String(t.oldPassword),String(a.passwordHash)))return E({error:w.CredentialMismatchError});let o=await n.hash(t.newPassword,{algorithm:r.Argon2id});return await e.dbContractor.updateAccount({id:a.id,data:{passwordHash:o}}),T({})}function O({config:e,userId:t}){return async(n,r)=>{try{let i=await D({config:e},{accountId:t,oldPassword:n.body.oldPassword,newPassword:n.body.newPassword});if(!i.success){let e=i.errors[0].error,t=400;return e.code===a.InvalidRole||e.code===a.DuplicateAccount?t=409:e.code===a.ServerError&&(t=500),r.status(t).send({code:e.code,message:e.message})}return r.status(200).send({code:`password-changed`})}catch(e){return console.error(`ChangePassword error:`,e),r.status(500).send({code:a.ServerError})}}}async function k({config:e,tokens:t},{...r}){let i=f.safeParse(r);if(!i.success)return E({error:w.InvalidDataError(S(i))});let a=await e.dbContractor.findAccountWithCredential({email:r.email,phoneNumber:r.phoneNumber});if(!a||!await n.verify(String(r.password),String(a?.passwordHash)))return E({error:w.CredentialMismatchError});let o=await t.GenerateTokenPairs({id:a.id,role:a.role});return await e.dbContractor.updateAccountLogin({id:a.id,refreshToken:o.refreshToken,config:e}),delete a.passwordHash,delete a.refreshTokens,T({account:a,tokens:o})}function A({config:e,tokens:t}){return async(n,r)=>{try{let i=await k({config:e,tokens:t},n.body);if(!i.success){let e=i.errors[0].error,t=400;return e.code===a.CredentialMismatch?t=409:e.code===a.ServerError&&(t=500),r.status(t).send({code:e.code,message:e.message})}return r.status(200).send(i.value)}catch{return r.status(500).send({code:a.ServerError})}}}async function j({config:e,tokens:t},{...n}){let r=b.safeParse(n);if(!r.success)return E({error:w.InvalidDataError(S(r))});let i=await o(t.VerifyRefreshToken(n.refreshToken));return i.error||!i?E({error:w.InvalidRefreshTokenError}):(await e.dbContractor.removeAndAddRefreshToken({id:String(i.data?.id),refreshToken:n.refreshToken}),T({}))}function M({config:e,tokens:t}){return async(n,r)=>{try{let i=await j({config:e,tokens:t},{refreshToken:n.body.refreshToken});if(!i.success){let e=i.errors[0].error,t=400;return e.code===a.InvalidRole||e.code===a.DuplicateAccount?t=409:e.code===a.ServerError&&(t=500),r.status(t).send({code:e.code,message:e.message})}return r.status(200).send({code:`logged-out`})}catch(e){return console.error(`Logout error:`,e),r.status(500).send({code:`server-error`})}}}function N({token:e,refreshTokenSecret:t}){return i.createHmac(`sha256`,t).update(e).digest(`hex`)}function P({incomingToken:e,storedHash:t,refreshTokenSecret:n}){let r=N({token:e,refreshTokenSecret:n});return i.timingSafeEqual(Buffer.from(r),Buffer.from(t))}async function F({config:e,tokens:t},{...n}){let r=y.safeParse(n);if(!r.success)return E({error:w.InvalidDataError(S(r))});let i=await o(t.VerifyRefreshToken(n.refreshToken));if(i.error)return E({error:w.InvalidRefreshTokenError});let a=await e.dbContractor.findAccountById({id:String(i.data?.id)});if(!a)return E({error:w.AccountNotFoundError});if(!a?.refreshTokens?.some(t=>P({incomingToken:n.refreshToken,storedHash:t.token,refreshTokenSecret:e.jwtConfig.refreshTokenSecret})))return E({error:w.InvalidRefreshTokenError});let s=await t.GenerateTokenPairs({id:a.id,role:a.role});return await e.dbContractor.removeAndAddRefreshToken({id:a.id,refreshToken:n.refreshToken,newRefreshToken:s.refreshToken}),delete a.refreshTokens,delete a.passwordHash,T({account:a,tokens:s})}function I({config:e,tokens:t}){return async(n,r)=>{try{let i=await F({config:e,tokens:t},{refreshToken:n.body.refreshToken});if(!i.success){let e=i.errors[0].error,t=400;return(e.code===a.InvalidRefreshToken||e.code===a.AccountNotFound)&&(t=401),e.code===a.ServerError&&(t=500),r.status(t).send({code:e.code,message:e.message})}return r.status(200).send({tokens:i.value.tokens})}catch(e){return console.error(`Refresh token error:`,e),r.status(500).send({code:a.ServerError})}}}async function L({config:e,tokens:t},{...i}){let a=v.safeParse(i);if(!a.success)return E({error:w.InvalidDataError(S(a))});if(!e.roles?.includes(i.role))return E({error:w.InvalidRoleError(e.roles)});if(await e.dbContractor.findAccountWithCredential({email:i.email,phoneNumber:i.phoneNumber}))return E({error:w.DuplicateAccountError});let o=await n.hash(String(i.password),{algorithm:r.Argon2i}),s=await e.dbContractor.createAccount({data:{email:i.email,phoneNumber:i.phoneNumber,passwordHash:o,role:i.role,lastLogin:new Date}}),c=await t.GenerateTokenPairs({id:s.id,role:s.role});return await e.dbContractor.updateAccountLogin({id:s.id,refreshToken:c.refreshToken,config:e}),T({account:s,tokens:c})}function R({config:e,tokens:t}){return async(n,r)=>{try{let i=await L({config:e,tokens:t},n.body);if(!i.success){let e=i.errors[0].error,t=400;return e.code===a.InvalidRole||e.code===a.DuplicateAccount?t=409:e.code===a.ServerError&&(t=500),r.status(t).send({code:e.code,message:e.message})}return r.status(201).send(i.value)}catch(e){return console.error(`Register error:`,e),r.status(500).send({code:a.ServerError})}}}var z=class{Register=({config:e,tokens:t})=>R({config:e,tokens:t});Login=({config:e,tokens:t})=>A({config:e,tokens:t});Logout=({config:e,tokens:t})=>M({config:e,tokens:t});Refresh=({config:e,tokens:t})=>I({config:e,tokens:t});ChangePassword=({config:e,tokens:t,userId:n})=>O({config:e,tokens:t,userId:n});Guard=({config:e,tokens:t,roles:n})=>s({tokens:t,config:e,roles:n})};export{z as ExpressContractor};
1
+ import{z as e}from"zod";import{parsePhoneNumberFromString as t}from"libphonenumber-js";import n from"argon2-browser";import r from"node:crypto";var i=class{static ServerError=`internal-server-error`;static ServerErrorMessage=`Internal server error. We are working to fix this, please try again later`;static InvalidToken=`invalid-token`;static InvalidTokenMessage=`Invalid Token`;static ForbiddenResource=`forbidden-resource`;static ForbiddenResourceMessage=`You don't have sufficient permission for this action`;static InvalidOtp=`invalid-otp`;static InvalidOtpMessage=`Invalid Otp. Please check and try again`;static CredentialMismatch=`credential-mismatch`;static CredentialMismatchMessage=`Credential mismatch. Please check your credentials and try again.`;static InvalidData=`invalid-data`;static InvalidDataMessage=e=>`Invalid Body: ${e}`;static AccountNotFound=`account-not-found`;static AccountNotFoundMessage=`Account not found`;static InvalidRole=`invalid-role`;static InvalidRoleMessage=e=>`Role is invalid, please use one of the following roles: ${e.join(`, `)}`;static InvalidRefreshToken=`invalid-refresh-token`;static InvalidRefreshTokenMessage=`Invalid refresh token`;static DuplicateAccount=`account-already-exists`;static DuplicateAccountMessage=`Account with this credentials already exists`;static SchemaValidationError=`schema-validation`;static SchemaValidationMessage=`Your database error is not is sync with CAuth Spec`};async function a(e){try{return{data:await e,error:null}}catch(e){return{data:null,error:e}}}function o({tokens:e,config:t,roles:n}){return async(r,o,s)=>{try{let c=r.cookies?.accessToken;if(!c){let e=r.headers.authorization;e?.startsWith(`Bearer `)&&(c=e.split(` `)[1])}if(!c)return o.status(401).send({code:i.InvalidToken});let l=await a(e.VerifyAccessToken(c));return l.error||!l.data?o.status(401).send({code:i.InvalidToken}):n&&!n.includes(l.data.role)||!t.roles.includes(l.data.role)?o.status(403).send({code:i.ForbiddenResource,message:i.ForbiddenResourceMessage}):(r.cauth={id:l.data.id,role:l.data.role},s())}catch{return o.status(500).send({code:i.ServerError})}}}const s=e.string().trim().refine(e=>{let n=t(e);return!!n&&n.isValid()},{message:`Invalid phone number`}).transform(e=>t(e)?.format(`E.164`)??e),c=e.enum([`LOGIN`,`RESET_PASSWORD`,`ACTION`]),l=e.object({email:e.email(),phoneNumber:e.never().optional(),password:e.string().min(6).optional()}),u=e.object({phoneNumber:s,email:e.never().optional(),password:e.string().min(6).optional()}),d=e.union([l,u]).superRefine((t,n)=>{t.email&&t.phoneNumber&&n.addIssue({code:e.ZodIssueCode.custom,message:`Provide either email or phoneNumber`,path:[`email`,`phoneNumber`]})}),f=e.object({phoneNumber:s,email:e.never().optional(),code:e.string().min(4).max(8)}),p=e.object({email:e.email(),phoneNumber:e.never().optional(),code:e.string().min(4).max(8)});e.union([p,f]);const m=e.object({otpPurpose:c,usePassword:e.boolean().default(!1),password:e.string().optional()}),h=m.extend({phoneNumber:s,email:e.never().optional()}),g=m.extend({phoneNumber:e.never().optional(),email:e.string().email()});e.union([h,g]).refine(e=>e.usePassword?!!e.password:!e.password,{message:`Password required only if usePassword is true`,path:[`password`]});const _=e.object({phoneNumber:s.optional(),email:e.email().optional(),role:e.string(),password:e.string().optional()}).superRefine((t,n)=>{!t.email&&!t.phoneNumber&&n.addIssue({code:e.ZodIssueCode.custom,message:`Provide either email or phoneNumber`,path:[`email`,`phoneNumber`]})}),v=e.object({refreshToken:e.string()}),y=e.object({refreshToken:e.string()}),b=e.object({accountId:e.string(),oldPassword:e.string(),newPassword:e.string()});function x(e){return`${e?.error?.issues[0].path}: ${e?.error?.issues[0].message}`}var S=class{static ValidationError=`validation-error`;static CredentialError=`credential-error`;static UnKnownError=`unknown-error`;static InvalidDataError=`invalid-data-error`};const C={CredentialMismatchError:{type:S.CredentialError,message:i.CredentialMismatchMessage,code:i.CredentialMismatch,name:`CredentialMismatchError`},InvalidDataError:e=>({type:S.ValidationError,message:i.InvalidDataMessage(e),code:i.InvalidData,name:`InvalidDataError`}),AccountNotFoundError:{type:S.InvalidDataError,message:i.AccountNotFoundMessage,code:i.AccountNotFound,name:`AccountNotFoundError`},InvalidRoleError:e=>({type:S.ValidationError,message:i.InvalidRoleMessage(e),code:i.InvalidRole,name:`InvalidRoleError`}),InvalidRefreshTokenError:{type:S.ValidationError,message:i.InvalidRefreshTokenMessage,code:i.InvalidRefreshToken,name:`InvalidRefreshTokenError`},DuplicateAccountError:{type:S.ValidationError,message:i.DuplicateAccountMessage,code:i.DuplicateAccount,name:`DuplicateAccountError`},InvalidOTPCode:{type:S.ValidationError,message:i.InvalidOtpMessage,code:i.InvalidOtp,name:`InvalidOTPCode`},SchemaInvalidError:{type:S.ValidationError,message:i.SchemaValidationMessage,code:i.SchemaValidationError,name:`SchemaInvalidError`}};function w(e){return{success:!0,value:e}}function T(...e){return{success:!1,errors:e}}async function E({config:e},{...t}){let r=b.safeParse(t);if(!r.success)return T({error:C.InvalidDataError(x(r))});let i=await e.dbContractor.findAccountById({id:t.accountId});if(!i||!await n.verify({pass:String(t.oldPassword),encoded:String(i.passwordHash)}))return T({error:C.CredentialMismatchError});let a=await n.hash({pass:t.newPassword,salt:`salt123`});return await e.dbContractor.updateAccount({id:i.id,data:{passwordHash:a}}),w({})}function D({config:e,userId:t}){return async(n,r)=>{try{let a=await E({config:e},{accountId:t,oldPassword:n.body.oldPassword,newPassword:n.body.newPassword});if(!a.success){let e=a.errors[0].error,t=400;return e.code===i.InvalidRole||e.code===i.DuplicateAccount?t=409:e.code===i.ServerError&&(t=500),r.status(t).send({code:e.code,message:e.message})}return r.status(200).send({code:`password-changed`})}catch(e){return console.error(`ChangePassword error:`,e),r.status(500).send({code:i.ServerError})}}}async function O({config:e,tokens:t},{...r}){let i=d.safeParse(r);if(!i.success)return T({error:C.InvalidDataError(x(i))});let a=await e.dbContractor.findAccountWithCredential({email:r.email,phoneNumber:r.phoneNumber});if(!a||!await n.verify({pass:String(r.password),encoded:String(a?.passwordHash)}))return T({error:C.CredentialMismatchError});let o=await t.GenerateTokenPairs({id:a.id,role:a.role});return await e.dbContractor.updateAccountLogin({id:a.id,refreshToken:o.refreshToken,config:e}),delete a.passwordHash,delete a.refreshTokens,w({account:a,tokens:o})}function k({config:e,tokens:t}){return async(n,r)=>{try{let a=await O({config:e,tokens:t},n.body);if(!a.success){let e=a.errors[0].error,t=400;return e.code===i.CredentialMismatch?t=409:e.code===i.ServerError&&(t=500),r.status(t).send({code:e.code,message:e.message})}return r.status(200).send(a.value)}catch{return r.status(500).send({code:i.ServerError})}}}async function A({config:e,tokens:t},{...n}){let r=y.safeParse(n);if(!r.success)return T({error:C.InvalidDataError(x(r))});let i=await a(t.VerifyRefreshToken(n.refreshToken));return i.error||!i?T({error:C.InvalidRefreshTokenError}):(await e.dbContractor.removeAndAddRefreshToken({id:String(i.data?.id),refreshToken:n.refreshToken}),w({}))}function j({config:e,tokens:t}){return async(n,r)=>{try{let a=await A({config:e,tokens:t},{refreshToken:n.body.refreshToken});if(!a.success){let e=a.errors[0].error,t=400;return e.code===i.InvalidRole||e.code===i.DuplicateAccount?t=409:e.code===i.ServerError&&(t=500),r.status(t).send({code:e.code,message:e.message})}return r.status(200).send({code:`logged-out`})}catch(e){return console.error(`Logout error:`,e),r.status(500).send({code:`server-error`})}}}function M({token:e,refreshTokenSecret:t}){return r.createHmac(`sha256`,t).update(e).digest(`hex`)}function N({incomingToken:e,storedHash:t,refreshTokenSecret:n}){let i=M({token:e,refreshTokenSecret:n});return r.timingSafeEqual(Buffer.from(i),Buffer.from(t))}async function P({config:e,tokens:t},{...n}){let r=v.safeParse(n);if(!r.success)return T({error:C.InvalidDataError(x(r))});let i=await a(t.VerifyRefreshToken(n.refreshToken));if(i.error)return T({error:C.InvalidRefreshTokenError});let o=await e.dbContractor.findAccountById({id:String(i.data?.id)});if(!o)return T({error:C.AccountNotFoundError});if(!o?.refreshTokens?.some(t=>N({incomingToken:n.refreshToken,storedHash:t.token,refreshTokenSecret:e.jwtConfig.refreshTokenSecret})))return T({error:C.InvalidRefreshTokenError});let s=await t.GenerateTokenPairs({id:o.id,role:o.role});return await e.dbContractor.removeAndAddRefreshToken({id:o.id,refreshToken:n.refreshToken,newRefreshToken:s.refreshToken}),delete o.refreshTokens,delete o.passwordHash,w({account:o,tokens:s})}function F({config:e,tokens:t}){return async(n,r)=>{try{let a=await P({config:e,tokens:t},{refreshToken:n.body.refreshToken});if(!a.success){let e=a.errors[0].error,t=400;return(e.code===i.InvalidRefreshToken||e.code===i.AccountNotFound)&&(t=401),e.code===i.ServerError&&(t=500),r.status(t).send({code:e.code,message:e.message})}return r.status(200).send({tokens:a.value.tokens})}catch(e){return console.error(`Refresh token error:`,e),r.status(500).send({code:i.ServerError})}}}async function I({config:e,tokens:t},{...r}){let i=_.safeParse(r);if(!i.success)return T({error:C.InvalidDataError(x(i))});if(!e.roles?.includes(r.role))return T({error:C.InvalidRoleError(e.roles)});if(await e.dbContractor.findAccountWithCredential({email:r.email,phoneNumber:r.phoneNumber}))return T({error:C.DuplicateAccountError});let a=await n.hash({pass:String(r.password),salt:`salt123`,type:n.ArgonType.Argon2d}),o=await e.dbContractor.createAccount({data:{email:r.email,phoneNumber:r.phoneNumber,passwordHash:a,role:r.role,lastLogin:new Date}}),s=await t.GenerateTokenPairs({id:o.id,role:o.role});return await e.dbContractor.updateAccountLogin({id:o.id,refreshToken:s.refreshToken,config:e}),w({account:o,tokens:s})}function L({config:e,tokens:t}){return async(n,r)=>{try{let a=await I({config:e,tokens:t},n.body);if(!a.success){let e=a.errors[0].error,t=400;return e.code===i.InvalidRole||e.code===i.DuplicateAccount?t=409:e.code===i.ServerError&&(t=500),r.status(t).send({code:e.code,message:e.message})}return r.status(201).send(a.value)}catch(e){return console.error(`Register error:`,e),r.status(500).send({code:i.ServerError})}}}var R=class{Register=({config:e,tokens:t})=>L({config:e,tokens:t});Login=({config:e,tokens:t})=>k({config:e,tokens:t});Logout=({config:e,tokens:t})=>j({config:e,tokens:t});Refresh=({config:e,tokens:t})=>F({config:e,tokens:t});ChangePassword=({config:e,tokens:t,userId:n})=>D({config:e,tokens:t,userId:n});Guard=({config:e,tokens:t,roles:n})=>o({tokens:t,config:e,roles:n})};export{R as ExpressContractor};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cauth/express",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -36,8 +36,8 @@
36
36
  "typescript": "^5.9.3"
37
37
  },
38
38
  "dependencies": {
39
+ "argon2-browser": "^1.18.0",
39
40
  "express": "^5.1.0",
40
- "@node-rs/argon2": "^2.0.2",
41
41
  "jsonwebtoken": "^9.0.2",
42
42
  "libphonenumber-js": "^1.12.23",
43
43
  "ms": "^2.1.3",