import { getServiceAccountToken, purgePermissions as purgePermissionsBe, } from '@axinom/mosaic-id-link-be'; import { ensureError, isNullOrWhitespace } from '@axinom/mosaic-service-common'; import chalk from 'chalk'; import type { GetPurgePermissionsOptions } from './purge-permissions-options.js'; const { green, red } = chalk; export const validateArgs = ( args: GetPurgePermissionsOptions, ): [Required, string[]] => { const errorMessages: string[] = []; const serviceId = args.serviceId ?? process.env.SERVICE_ID ?? ''; const idServiceAuthBaseURL = args.idServiceAuthBaseURL ?? process.env.ID_SERVICE_AUTH_BASE_URL ?? ''; const clientId = args.clientId ?? process.env.SERVICE_ACCOUNT_CLIENT_ID ?? ''; const clientSecret = args.clientSecret ?? process.env.SERVICE_ACCOUNT_CLIENT_SECRET ?? ''; if (isNullOrWhitespace(serviceId)) { errorMessages.push('[serviceId] is required.'); } else if (serviceId.startsWith('ax-')) { errorMessages.push(`[serviceId] cannot start with ax-`); } if (isNullOrWhitespace(idServiceAuthBaseURL)) { errorMessages.push('[idServiceBaseURL] is required.'); } if (isNullOrWhitespace(clientId)) { errorMessages.push('[clientId] is required.'); } if (isNullOrWhitespace(clientSecret)) { errorMessages.push('[clientSecret] is required.'); } return [ { serviceId, idServiceAuthBaseURL, clientId, clientSecret, }, errorMessages, ]; }; export const purgePermissions = async ( args: Required, ): Promise => { try { const serviceAccountToken = await getServiceAccountToken( args.idServiceAuthBaseURL, args.clientId, args.clientSecret, ); const purgePermissionResults = await purgePermissionsBe( args.idServiceAuthBaseURL, serviceAccountToken.accessToken, args.serviceId, ); console.log( green(`Permissions purged successfully for Service [${args.serviceId}].`), ); console.log(green(JSON.stringify(purgePermissionResults, null, 2))); } catch (e) { const error = ensureError(e); console.log( red(`Error while purging permission for Service ID [${args.serviceId}].`), ); console.log(red(JSON.stringify(error.message))); } };