Files
pole-book/server/node_modules/@strapi/cloud-cli/dist/services/token.mjs.map

1 line
8.2 KiB
Plaintext

{"version":3,"file":"token.mjs","sources":["../../src/services/token.ts"],"sourcesContent":["import jwksClient, { type JwksClient, type SigningKey } from 'jwks-rsa';\nimport type { JwtHeader, VerifyErrors } from 'jsonwebtoken';\nimport jwt from 'jsonwebtoken';\nimport { getLocalConfig, saveLocalConfig } from '../config/local';\nimport type { CloudCliConfig, CLIContext } from '../types';\nimport { cloudApiFactory } from './cli-api';\n\nlet cliConfig: CloudCliConfig;\n\ninterface DecodedToken {\n [key: string]: any;\n}\n\nexport async function tokenServiceFactory({ logger }: { logger: CLIContext['logger'] }) {\n const cloudApiService = await cloudApiFactory({ logger });\n\n async function saveToken(str: string) {\n const appConfig = await getLocalConfig();\n\n if (!appConfig) {\n logger.error('There was a problem saving your token. Please try again.');\n return;\n }\n\n appConfig.token = str;\n\n try {\n await saveLocalConfig(appConfig);\n } catch (e: Error | unknown) {\n logger.debug(e);\n logger.error('There was a problem saving your token. Please try again.');\n }\n }\n\n async function retrieveToken() {\n const appConfig = await getLocalConfig();\n if (appConfig.token) {\n // check if token is still valid\n if (await isTokenValid(appConfig.token)) {\n return appConfig.token;\n }\n }\n return undefined;\n }\n\n async function validateToken(idToken: string, jwksUrl: string): Promise<void> {\n const client: JwksClient = jwksClient({\n jwksUri: jwksUrl,\n });\n\n // Get the Key from the JWKS using the token header's Key ID (kid)\n const getKey = (header: JwtHeader, callback: (e: Error | null, key?: string) => void) => {\n client.getSigningKey(header.kid, (e: Error | null, key?: SigningKey) => {\n if (e) {\n callback(e);\n } else if (key) {\n const publicKey = 'publicKey' in key ? key.publicKey : key.rsaPublicKey;\n callback(null, publicKey);\n } else {\n callback(new Error('Key not found'));\n }\n });\n };\n\n const decodedToken = jwt.decode(idToken, { complete: true }) as DecodedToken;\n if (!decodedToken) {\n if (typeof idToken === 'undefined' || idToken === '') {\n logger.warn('You need to be logged in to use this feature. Please log in and try again.');\n } else {\n logger.error(\n 'There seems to be a problem with your login information. Please try logging in again.'\n );\n }\n return Promise.reject(new Error('Invalid token'));\n }\n\n // Verify the JWT token signature using the JWKS Key\n return new Promise<void>((resolve, reject) => {\n jwt.verify(idToken, getKey, (err: VerifyErrors | null) => {\n if (err) {\n reject(err);\n }\n if (decodedToken.payload.exp < Math.floor(Date.now() / 1000)) {\n reject(new Error('Token is expired'));\n }\n resolve();\n });\n });\n }\n\n async function isTokenValid(token: string) {\n try {\n const config = await cloudApiService.config();\n\n cliConfig = config.data;\n if (token) {\n await validateToken(token, cliConfig.jwksUrl);\n return true;\n }\n return false;\n } catch (e) {\n logger.debug(e);\n return false;\n }\n }\n\n async function eraseToken() {\n const appConfig = await getLocalConfig();\n if (!appConfig) {\n return;\n }\n\n delete appConfig.token;\n\n try {\n await saveLocalConfig(appConfig);\n } catch (e: Error | unknown) {\n logger.debug(e);\n logger.error(\n 'There was an issue removing your login information. Please try logging out again.'\n );\n throw e;\n }\n }\n\n async function getValidToken(\n ctx: CLIContext,\n loginAction: (ctx: CLIContext) => Promise<boolean>\n ) {\n let token = await retrieveToken();\n\n while (!token || !(await isTokenValid(token))) {\n logger.log(\n token\n ? 'Oops! Your token seems expired or invalid. Please login again.'\n : \"We couldn't find a valid token. You need to be logged in to use this feature.\"\n );\n if (!(await loginAction(ctx))) return null;\n token = await retrieveToken();\n }\n\n return token;\n }\n\n return {\n saveToken,\n retrieveToken,\n validateToken,\n isTokenValid,\n eraseToken,\n getValidToken,\n };\n}\n"],"names":["cliConfig","tokenServiceFactory","logger","cloudApiService","cloudApiFactory","saveToken","str","appConfig","getLocalConfig","error","token","saveLocalConfig","e","debug","retrieveToken","isTokenValid","undefined","validateToken","idToken","jwksUrl","client","jwksClient","jwksUri","getKey","header","callback","getSigningKey","kid","key","publicKey","rsaPublicKey","Error","decodedToken","jwt","decode","complete","warn","Promise","reject","resolve","verify","err","payload","exp","Math","floor","Date","now","config","data","eraseToken","getValidToken","ctx","loginAction","log"],"mappings":"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"}