import bundleManager from '@ohos.bundle.bundleManager' import request from '@ohos.request' import common from '@ohos.app.ability.common' import { HttpClient } from '../core/HttpClient' import type { AppVersionInfo, RnBundleInfo } from '../core/Types' import { SDKContext } from '../core/SDKContext' export interface AppUpdateResult { hasUpdate: boolean info?: AppVersionInfo } export interface RnUpdateResult { hasUpdate: boolean info?: RnBundleInfo } export class UpdateSDK { static async checkAppUpdate(appKey: string): Promise { const bundleInfo = bundleManager.getBundleInfoForSelfSync( bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT ) const currentVersionCode = bundleInfo.versionCode const data = await HttpClient.get( `/api/v1/updates/app/check?appKey=${appKey}&versionCode=${currentVersionCode}&platform=harmony` ) if (data.latestVersionCode <= currentVersionCode) { return { hasUpdate: false } } return { hasUpdate: true, info: data } } static async checkRnUpdate( appKey: string, bundleName: string, currentBundleVersion: number ): Promise { const data = await HttpClient.get( `/api/v1/rn/update/check?appKey=${appKey}&bundleName=${bundleName}&bundleVersion=${currentBundleVersion}` ) if (data.bundleVersion <= currentBundleVersion) { return { hasUpdate: false } } return { hasUpdate: true, info: data } } static async downloadRnBundle( context: common.UIAbilityContext, downloadUrl: string, destFilename: string ): Promise { const destPath = context.cacheDir + '/' + destFilename await new Promise((resolve, reject) => { request.downloadFile(context, { url: downloadUrl, filePath: destPath, }, (err, task) => { if (err) { reject(err); return } task.on('complete', resolve) task.on('fail', (error: number) => reject(new Error(`Download failed: ${error}`))) }) }) if (SDKContext.getConfig().debug) { console.log('[UpdateSDK] RN bundle downloaded to', destPath) } return destPath } }