@sap/cli-core
Version:
Command-Line Interface (CLI) Core Module
38 lines (37 loc) • 1.91 kB
JavaScript
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());