UNPKG

@sap/cli-core

Version:

Command-Line Interface (CLI) Core Module

38 lines (37 loc) 1.91 kB
import { create as createNextHandler } from "../../../next.js"; import { create as createOptionsHandler } from "../../../options/index.js"; import { OPTION_CODE } from "../../../../../constants.js"; import { get } from "../../../../../logger/index.js"; import { GrantType } from "../../../../../types.js"; import { readToken } from "../utils.js"; import { getCode } from "./utils.js"; import { SecretsStorageSingleton } from "../../../../../cache/secrets/SecretsStorageSingleton.js"; const getLogger = () => get("commands.handler.authentication.oauth.tokenProvider.getToken"); const createGetTokenHandler = () => { const handler = async () => async () => { const { info: logInfo, debug } = getLogger(); logInfo("checking token existence"); const secrets = await SecretsStorageSingleton.SINGLETON.getDefaultSecret(); if (!secrets.access_token && !secrets.refresh_token) { if (secrets.authorization_flow === GrantType.authorization_code) { const code = await getCode(secrets.authorization_url, secrets.client_id); debug("code received, reading token"); await readToken({ code, grant_type: secrets.authorization_flow }); } else if (secrets.authorization_flow === GrantType.client_credentials) { await readToken({ grant_type: secrets.authorization_flow }); } else { throw new Error(`invalid grant type ${secrets.authorization_flow}`); } } else if (secrets.access_token) { debug("token available"); } else { throw new Error("access token not available"); } }; return handler; }; export const create = () => createNextHandler("commands.handler.authentication.oauth.tokenProvider.getToken", createOptionsHandler(OPTION_CODE), createGetTokenHandler());