{"version":3,"file":"revoke-user-tokens.mjs","names":["constants"],"sources":["../../../../src/services/auth/refresh-token/revoke-user-tokens.ts"],"sourcesContent":["import constants from \"../../../constants/constants.js\";\nimport cacheKeys from \"../../../libs/kv/cache-keys.js\";\nimport { UserTokensRepository } from \"../../../libs/repositories/index.js\";\nimport type { ServiceFn } from \"../../../utils/services/types.js\";\n\nconst revokeUserTokens: ServiceFn<\n\t[\n\t\t{\n\t\t\tuserId: number;\n\t\t\trevokeReason?: string;\n\t\t},\n\t],\n\t{\n\t\trevokedCount: number;\n\t}\n> = async (context, data) => {\n\tconst UserTokens = new UserTokensRepository(\n\t\tcontext.db.client,\n\t\tcontext.config.db,\n\t);\n\tconst now = new Date().toISOString();\n\n\tconst activeTokenRes = await UserTokens.selectMultiple({\n\t\tselect: [\"id\", \"token\"],\n\t\twhere: [\n\t\t\t{\n\t\t\t\tkey: \"user_id\",\n\t\t\t\toperator: \"=\",\n\t\t\t\tvalue: data.userId,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"token_type\",\n\t\t\t\toperator: \"=\",\n\t\t\t\tvalue: constants.userTokens.refresh,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"revoked_at\",\n\t\t\t\toperator: \"is\",\n\t\t\t\tvalue: null,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"expiry_date\",\n\t\t\t\toperator: \">\",\n\t\t\t\tvalue: now,\n\t\t\t},\n\t\t],\n\t\tvalidation: {\n\t\t\tenabled: true,\n\t\t},\n\t});\n\tif (activeTokenRes.error) return activeTokenRes;\n\n\tif (activeTokenRes.data.length === 0) {\n\t\treturn {\n\t\t\terror: undefined,\n\t\t\tdata: {\n\t\t\t\trevokedCount: 0,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst tokenIds = activeTokenRes.data.map((token) => token.id);\n\n\tconst revokeTokensRes = await UserTokens.updateMultiple({\n\t\tdata: {\n\t\t\trevoked_at: now,\n\t\t\trevoke_reason:\n\t\t\t\tdata.revokeReason ?? constants.refreshTokenRevokeReasons.revokeAll,\n\t\t\texpiry_date: now,\n\t\t},\n\t\twhere: [\n\t\t\t{\n\t\t\t\tkey: \"id\",\n\t\t\t\toperator: \"in\",\n\t\t\t\tvalue: tokenIds,\n\t\t\t},\n\t\t],\n\t});\n\tif (revokeTokensRes.error) return revokeTokensRes;\n\n\tawait Promise.all(\n\t\tactiveTokenRes.data.map((token) =>\n\t\t\tcontext.kv.delete(context, {\n\t\t\t\tkey: cacheKeys.auth.refresh(token.token),\n\t\t\t\thash: true,\n\t\t\t}),\n\t\t),\n\t);\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: {\n\t\t\trevokedCount: activeTokenRes.data.length,\n\t\t},\n\t};\n};\n\nexport default revokeUserTokens;\n"],"mappings":"yJAKA,MAAM,EAUF,MAAO,EAAS,IAAS,CAC5B,IAAM,EAAa,IAAI,EACtB,EAAQ,GAAG,OACX,EAAQ,OAAO,EAChB,EACM,EAAM,IAAI,KAAK,CAAA,CAAE,YAAY,EAE7B,EAAiB,MAAM,EAAW,eAAe,CACtD,OAAQ,CAAC,KAAM,OAAO,EACtB,MAAO,CACN,CACC,IAAK,UACL,SAAU,IACV,MAAO,EAAK,MACb,EACA,CACC,IAAK,aACL,SAAU,IACV,MAAOA,EAAU,WAAW,OAC7B,EACA,CACC,IAAK,aACL,SAAU,KACV,MAAO,IACR,EACA,CACC,IAAK,cACL,SAAU,IACV,MAAO,CACR,CACD,EACA,WAAY,CACX,QAAS,EACV,CACD,CAAC,EACD,GAAI,EAAe,MAAO,OAAO,EAEjC,GAAI,EAAe,KAAK,SAAW,EAClC,MAAO,CACN,MAAO,IAAA,GACP,KAAM,CACL,aAAc,CACf,CACD,EAGD,IAAM,EAAW,EAAe,KAAK,IAAK,GAAU,EAAM,EAAE,EAEtD,EAAkB,MAAM,EAAW,eAAe,CACvD,KAAM,CACL,WAAY,EACZ,cACC,EAAK,cAAgBA,EAAU,0BAA0B,UAC1D,YAAa,CACd,EACA,MAAO,CACN,CACC,IAAK,KACL,SAAU,KACV,MAAO,CACR,CACD,CACD,CAAC,EAYD,OAXI,EAAgB,MAAc,GAElC,MAAM,QAAQ,IACb,EAAe,KAAK,IAAK,GACxB,EAAQ,GAAG,OAAO,EAAS,CAC1B,IAAK,EAAU,KAAK,QAAQ,EAAM,KAAK,EACvC,KAAM,EACP,CAAC,CACF,CACD,EAEO,CACN,MAAO,IAAA,GACP,KAAM,CACL,aAAc,EAAe,KAAK,MACnC,CACD,EACD"}