diff --git a/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts b/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts index 58bfbb6f6d58c..b599780268a63 100644 --- a/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts +++ b/packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_kibana_client.ts @@ -34,24 +34,40 @@ export class ApmSynthtraceKibanaClient { async fetchLatestApmPackageVersion() { this.logger.debug(`Fetching latest APM package version`); - const url = `${this.getFleetApmPackagePath()}?prerelease=true`; - const response = await fetch(url, { - method: 'GET', - headers: kibanaHeaders(), - agent: getFetchAgent(url), - }); - const responseJson = await response.json(); + const fetchPackageVersion = async ({ prerelease }: { prerelease: boolean }) => { + const url = `${this.getFleetApmPackagePath()}?prerelease=${prerelease}`; + this.logger.debug(`Fetching from URL: ${url}`); - if (response.status !== 200) { - throw new Error( - `Failed to fetch latest APM package version, received HTTP ${response.status} and message: ${responseJson.message}` - ); - } + const response = await fetch(url, { + method: 'GET', + headers: kibanaHeaders(), + agent: getFetchAgent(url), + }); + + const responseJson = await response.json(); - const { latestVersion } = responseJson.item; + if (response.status !== 200) { + throw new Error( + `Failed to fetch APM package version, received HTTP ${response.status} and message: ${responseJson.message}` + ); + } + + return responseJson.item.latestVersion as string; + }; - return latestVersion as string; + try { + return await fetchPackageVersion({ prerelease: true }); + } catch (error) { + this.logger.debug( + 'Fetching latestes prerelease version failed, retrying with latest GA version' + ); + const retryResult = await fetchPackageVersion({ prerelease: false }).catch((retryError) => { + throw retryError; + }); + + return retryResult; + } } async installApmPackage(packageVersion?: string) {