@apistudio/apim-cli
Version:
CLI for API Management Products
99 lines (89 loc) • 3.14 kB
text/typescript
/**
* 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);
}