export async function getDeployClientPath()

in src/core/deploy-client.ts [17:64]


export async function getDeployClientPath(): Promise<{ binary: string; buildId: string }> {
  const platform = getPlatform();
  if (!platform) {
    throw new Error(`Unsupported platform: ${os.platform()}`);
  }

  const localClientMetadata = getLocalClientMetadata() as StaticSiteClientLocalMetadata;
  const binaryVersion = swaCLIEnv().SWA_CLI_DEPLOY_BINARY_VERSION || DEPLOY_BINARY_STABLE_TAG;
  const remoteClientMetadata = await fetchClientVersionDefinition(binaryVersion);
  if (remoteClientMetadata === undefined) {
    throw new Error(`Could not load ${DEPLOY_BINARY_NAME} metadata from remote. Please check your internet connection.`);
  }

  // if the latest version is the same as the local version, we can skip the download
  if (localClientMetadata) {
    if (!localClientMetadata.metadata || !localClientMetadata.binary || !localClientMetadata.checksum) {
      logger.warn(`Local client metadata is invalid!`);
    } else {
      const localChecksum = localClientMetadata.checksum;
      const releaseChecksum = remoteClientMetadata.files[platform].sha.toLowerCase();
      const remoteBuildId = remoteClientMetadata.buildId;
      const localBuildId = localClientMetadata.metadata.buildId;

      if (remoteBuildId === localBuildId) {
        if (localChecksum === releaseChecksum) {
          logger.silly(`Local client binary is up to date. Skipping download.`);
          return {
            binary: localClientMetadata.binary,
            buildId: localBuildId,
          };
        } else {
          logger.warn(`Local metatada contains invalid checksum hash!`);
          logger.warn(`  Expected ${releaseChecksum}`);
          logger.warn(`  Received ${localChecksum}`);
        }
      } else {
        if (localBuildId) {
          logger.warn(`${DEPLOY_BINARY_NAME} is outdated! Expected ${remoteBuildId}, got ${localBuildId}`);
        }
      }
    }
  }

  return {
    binary: await downloadAndValidateBinary(remoteClientMetadata, DEPLOY_BINARY_NAME, DEPLOY_FOLDER, remoteClientMetadata.buildId, platform),
    buildId: remoteClientMetadata.buildId,
  };
}