import type { Context } from "@yaakapp/api"; import { fetchAccessToken } from "../fetchAccessToken"; import { getOrRefreshAccessToken } from "../getOrRefreshAccessToken"; import type { AccessToken, TokenStoreArgs } from "../store"; import { storeToken } from "../store"; export async function getPassword( ctx: Context, contextId: string, { accessTokenUrl, clientId, clientSecret, username, password, credentialsInBody, audience, scope, }: { accessTokenUrl: string; clientId: string; clientSecret: string; username: string; password: string; scope: string | null; audience: string | null; credentialsInBody: boolean; }, ): Promise { const tokenArgs: TokenStoreArgs = { contextId, clientId, accessTokenUrl, authorizationUrl: null, }; const token = await getOrRefreshAccessToken(ctx, tokenArgs, { accessTokenUrl, scope, clientId, clientSecret, credentialsInBody, }); if (token != null) { return token; } const response = await fetchAccessToken(ctx, { accessTokenUrl, clientId, clientSecret, scope, audience, grantType: "password", credentialsInBody, params: [ { name: "username", value: username }, { name: "password", value: password }, ], }); return storeToken(ctx, tokenArgs, response); }