import { CredentialsProviderError } from "@smithy/property-provider"; import { exec } from "child_process"; import { promisify } from "util"; import { getValidatedProcessCredentials } from "./getValidatedProcessCredentials"; export const resolveProcessCredentials = async (profileName, profiles) => { const profile = profiles[profileName]; if (profiles[profileName]) { const credentialProcess = profile["credential_process"]; if (credentialProcess !== undefined) { const execPromise = promisify(exec); try { const { stdout } = await execPromise(credentialProcess); let data; try { data = JSON.parse(stdout.trim()); } catch { throw Error(`Profile ${profileName} credential_process returned invalid JSON.`); } return getValidatedProcessCredentials(profileName, data); } catch (error) { throw new CredentialsProviderError(error.message); } } else { throw new CredentialsProviderError(`Profile ${profileName} did not contain credential_process.`); } } else { throw new CredentialsProviderError(`Profile ${profileName} could not be found in shared credentials file.`); } };