UNPKG

@apistudio/apim-cli

Version:

CLI for API Management Products

99 lines (89 loc) 3.14 kB
/** * Copyright IBM Corp. 2024, 2025 */ import { IpcError, Logger } from '@apic/studio-shared'; import { AppConstants } from '../constants/app-constants.js'; import { GatewaysJson } from '../index.js'; import { sendToGateway, validationManager } from '../service/gateway-service.js'; import { WMGWRuntimeSDK } from '@apic/wmgw-smith-sdk'; export const processDeployment = async (gatewaysJsonContent: GatewaysJson, zipBuffer: Buffer) => { const gatewayResponses = []; if (gatewaysJsonContent.gateways && gatewaysJsonContent.gateways.length > 0) { Logger.info('Starting deployment process', { gatewayCount: gatewaysJsonContent.gateways.length, }); for (const gateway of gatewaysJsonContent.gateways) { const { gatewayURL, gatewayUser, gatewaySecret, is_mcsp_enabled } = gateway; Logger.debug('Deploying to gateway', { gatewayURL }); let transformedZipBuffer: Buffer = zipBuffer; const wmgwSdk = new WMGWRuntimeSDK(); try { transformedZipBuffer = await wmgwSdk.transformer.transform(zipBuffer); } catch (e) { Logger.error( 'Failed to transform ZIP Buffer', e instanceof Error ? e : new Error(String(e)), { context: 'Transforming Buffer' } ); } try { const response = await sendToGateway( gatewayURL, gatewayUser, gatewaySecret, is_mcsp_enabled, transformedZipBuffer, gatewaysJsonContent ); Logger.debug('Gateway deployment successful', { response: response.data, }); gatewayResponses.push(response); } catch (error) { if (error instanceof Error) { const errorMessage = `Error sending to ${gatewayURL}: ${error.message}`; Logger.error('Deployment failed', error, { context: 'deploying to', gatewayURL, }); gatewayResponses.push({ success: false, statusCode: 400, message: errorMessage, data: null, errors: [errorMessage], }); } else { const unknownErrorMessage = `Unknown error sending to ${gatewayURL}`; Logger.error('Unknown deployment error', new Error(unknownErrorMessage), { gatewayURL, }); gatewayResponses.push({ success: false, statusCode: 400, message: unknownErrorMessage, data: null, errors: [unknownErrorMessage], }); } } } } else { Logger.warn('No gateways to deploy.'); } Logger.info('Deployment process completed.'); return gatewayResponses; }; export async function validateGateways( url: string, authHeader: string ): Promise<{ data: string; status: number }> { if (!url || !authHeader) { throw new IpcError( 'Invalid parameters: URL and Authorization Header are required.', 400, 'Invalid parameters: URL and Authorization Header are required.' ); } return validationManager(`${url}${AppConstants.GATEWAY_VALIDATION_URL}`, authHeader); }