Edit: /tmp/tsx-0/17887-769dbcde0c5ee84dfaf4b15a8c6ad2db9009e138 (14209B)
{"code":"__filename=\"/opt/canhelp/node_modules/better-auth/dist/plugins/multi-session/index.mjs\";(()=>{\nvar __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf;var __hasOwnProp=Object.prototype.hasOwnProperty;var __name=(target,value)=>__defProp(target,\"name\",{value,configurable:true});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from===\"object\"||typeof from===\"function\"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,\"default\",{value:mod,enumerable:true}):target,mod));var __toCommonJS=mod=>__copyProps(__defProp({},\"__esModule\",{value:true}),mod);var multi_session_exports={};__export(multi_session_exports,{ERROR_CODES:()=>import_error_codes.MULTI_SESSION_ERROR_CODES,multiSession:()=>multiSession});module.exports=__toCommonJS(multi_session_exports);var import_schema=require(\"../../db/schema.mjs\");var import_cookie_utils=require(\"../../cookies/cookie-utils.mjs\");var import_cookies=require(\"../../cookies/index.mjs\");var import_session=require(\"../../api/routes/session.mjs\");var import_api=require(\"../../api/index.mjs\");var import_error_codes=require(\"./error-codes.mjs\");var import_api2=require(\"@better-auth/core/api\");var z=__toESM(require(\"zod\"));const setActiveSessionBodySchema=z.object({sessionToken:z.string().meta({description:\"The session token to set as active\"})});const revokeDeviceSessionBodySchema=z.object({sessionToken:z.string().meta({description:\"The session token to revoke\"})});const multiSession=__name(options=>{const opts={maximumSessions:5,...options};const isMultiSessionCookie=__name(key=>key.includes(\"_multi-\"),\"isMultiSessionCookie\");return{id:\"multi-session\",endpoints:{listDeviceSessions:(0,import_api2.createAuthEndpoint)(\"/multi-session/list-device-sessions\",{method:\"GET\",requireHeaders:true},async ctx=>{const cookieHeader=ctx.headers?.get(\"cookie\");if(!cookieHeader)return ctx.json([]);const cookies=Object.fromEntries((0,import_cookies.parseCookies)(cookieHeader));const sessionTokens=(await Promise.all(Object.entries(cookies).filter(([key])=>isMultiSessionCookie(key)).map(async([key])=>await ctx.getSignedCookie(key,ctx.context.secret)))).filter(v=>typeof v===\"string\");if(!sessionTokens.length)return ctx.json([]);const uniqueUserSessions=(await ctx.context.internalAdapter.findSessions(sessionTokens,{onlyActiveSessions:true})).filter(session=>session&&session.session.expiresAt>new Date).reduce((acc,session)=>{if(!acc.find(s=>s.user.id===session.user.id))acc.push(session);return acc},[]);return ctx.json(uniqueUserSessions.map(item=>({session:(0,import_schema.parseSessionOutput)(ctx.context.options,item.session),user:(0,import_schema.parseUserOutput)(ctx.context.options,item.user)})))}),setActiveSession:(0,import_api2.createAuthEndpoint)(\"/multi-session/set-active\",{method:\"POST\",body:setActiveSessionBodySchema,requireHeaders:true,metadata:{openapi:{description:\"Set the active session\",responses:{200:{description:\"Success\",content:{\"application/json\":{schema:{type:\"object\",properties:{session:{$ref:\"#/components/schemas/Session\"}}}}}}}}}},async ctx=>{const sessionToken=ctx.body.sessionToken;const multiSessionCookieName=`${ctx.context.authCookies.sessionToken.name}_multi-${sessionToken.toLowerCase()}`;if(!await ctx.getSignedCookie(multiSessionCookieName,ctx.context.secret))throw import_api.APIError.from(\"UNAUTHORIZED\",import_error_codes.MULTI_SESSION_ERROR_CODES.INVALID_SESSION_TOKEN);const session=await ctx.context.internalAdapter.findSession(sessionToken);if(!session||session.session.expiresAt
{const sessionToken=ctx.body.sessionToken;const multiSessionCookieName=`${ctx.context.authCookies.sessionToken.name}_multi-${sessionToken.toLowerCase()}`;if(!await ctx.getSignedCookie(multiSessionCookieName,ctx.context.secret))throw import_api.APIError.from(\"UNAUTHORIZED\",import_error_codes.MULTI_SESSION_ERROR_CODES.INVALID_SESSION_TOKEN);await ctx.context.internalAdapter.deleteSession(sessionToken);(0,import_cookies.expireCookie)(ctx,{name:multiSessionCookieName,attributes:ctx.context.authCookies.sessionToken.attributes});if(!(ctx.context.session?.session.token===sessionToken))return ctx.json({status:true});const cookieHeader=ctx.headers?.get(\"cookie\");if(cookieHeader){const cookies=Object.fromEntries((0,import_cookies.parseCookies)(cookieHeader));const sessionTokens=(await Promise.all(Object.entries(cookies).filter(([key])=>isMultiSessionCookie(key)).map(async([key])=>await ctx.getSignedCookie(key,ctx.context.secret)))).filter(v=>typeof v===\"string\");const internalAdapter=ctx.context.internalAdapter;if(sessionTokens.length>0){const validSessions=(await internalAdapter.findSessions(sessionTokens)).filter(session=>session&&session.session.expiresAt>new Date);if(validSessions.length>0){const nextSession=validSessions[0];await(0,import_cookies.setSessionCookie)(ctx,nextSession)}else(0,import_cookies.deleteSessionCookie)(ctx)}else(0,import_cookies.deleteSessionCookie)(ctx)}else(0,import_cookies.deleteSessionCookie)(ctx);return ctx.json({status:true})})},hooks:{after:[{matcher:__name(()=>true,\"matcher\"),handler:(0,import_api2.createAuthMiddleware)(async ctx=>{const cookieString=ctx.context.responseHeaders?.get(\"set-cookie\");if(!cookieString)return;const newSession=ctx.context.newSession;if(!newSession)return;const sessionCookieConfig=ctx.context.authCookies.sessionToken;const sessionToken=newSession.session.token;const cookieName=`${sessionCookieConfig.name}_multi-${sessionToken.toLowerCase()}`;const setCookies=(0,import_cookie_utils.parseSetCookieHeader)(cookieString);const cookies=(0,import_cookies.parseCookies)(ctx.headers?.get(\"cookie\")||\"\");if(setCookies.get(cookieName)||cookies.get(cookieName))return;const multiSessionKeys=Object.keys(Object.fromEntries(cookies)).filter(isMultiSessionCookie);const tokensToDelete=[];for(const key of multiSessionKeys){const token=await ctx.getSignedCookie(key,ctx.context.secret);if(!token)continue;if((await ctx.context.internalAdapter.findSession(token))?.user.id===newSession.user.id){tokensToDelete.push(token);ctx.setCookie(key,\"\",{...sessionCookieConfig.attributes,maxAge:0})}}if(tokensToDelete.length>0)await ctx.context.internalAdapter.deleteSessions(tokensToDelete);if(multiSessionKeys.length-tokensToDelete.length+(cookieString.includes(sessionCookieConfig.name)?1:0)>opts.maximumSessions)return;await ctx.setSignedCookie(cookieName,sessionToken,ctx.context.secret,sessionCookieConfig.attributes)})},{matcher:__name(context=>context.path===\"/sign-out\",\"matcher\"),handler:(0,import_api2.createAuthMiddleware)(async ctx=>{const cookieHeader=ctx.headers?.get(\"cookie\");if(!cookieHeader)return;const cookies=Object.fromEntries((0,import_cookies.parseCookies)(cookieHeader));const multiSessionKeys=Object.keys(cookies).filter(key=>isMultiSessionCookie(key));const verifiedTokens=(await Promise.all(multiSessionKeys.map(async key=>{const verifiedToken=await ctx.getSignedCookie(key,ctx.context.secret);if(verifiedToken){(0,import_cookies.expireCookie)(ctx,{name:key.toLowerCase().replace(import_cookie_utils.SECURE_COOKIE_PREFIX.toLowerCase(),import_cookie_utils.SECURE_COOKIE_PREFIX),attributes:ctx.context.authCookies.sessionToken.attributes});return verifiedToken}return null}))).filter(v=>typeof v===\"string\");if(verifiedTokens.length>0)await ctx.context.internalAdapter.deleteSessions(verifiedTokens)})}]},options,$ERROR_CODES:import_error_codes.MULTI_SESSION_ERROR_CODES}},\"multiSession\");0&&(module.exports={ERROR_CODES,multiSession});\n})()\n","warnings":[],"map":{"version":3,"mappings":"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","names":["import_api"],"ignoreList":[],"sources":["/opt/canhelp/node_modules/better-auth/dist/plugins/multi-session/index.mjs"],"sourcesContent":[null]}}