rabbit-harmony/common/src/main/ets/provider/HeaderInterceptor.ets

61 lines
2.7 KiB
Plaintext

import { InternalAxiosRequestConfig } from '@ohos/axios';
import { bundleManager } from '@kit.AbilityKit';
import deviceInfo from '@ohos.deviceInfo';
import { KVStore } from '../utils/KVStore';
import { APP_ID, PLATFORM, TOKEN } from '../constants/AppConstants';
import { Logger } from '../utils/Logger';
import { DeviceUtil } from '@pura/harmony-utils';
import { CHANNEL } from '../../../../BuildProfile';
/**
* 对应 Android 的 HeaderInterceptor
*/
export const HeaderInterceptor = async (config: InternalAxiosRequestConfig): Promise<InternalAxiosRequestConfig> => {
try {
// 1. 获取应用信息 (对应 BuildConfig/getAppVersionName)
const bundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
const versionName = bundleInfo.versionName;
const bundleName = bundleInfo.name;
// 2. 获取 Header 所需参数
const accessToken: string = KVStore.getInstance().getSync(TOKEN, '');
const deviceId: string = DeviceUtil.getDeviceId();
const brand: string = deviceInfo.brand;
const model: string = deviceInfo.productModel;
// 3. 注入 Header (对应 mBuilder.header)
config.headers.set('x-token', accessToken);
config.headers.set('x-version', versionName);
config.headers.set('x-platform', PLATFORM); // 鸿蒙平台标识(目前只有android和ios,暂不支持harmony)
config.headers.set('x-device-id', deviceId);
config.headers.set('x-mobile-brand', brand);
config.headers.set('x-mobile-model', model);
config.headers.set('x-package', bundleName);
config.headers.set('x-base-version', versionName);
config.headers.set('x-app-id', APP_ID);
config.headers.set('x-channel', CHANNEL);
// 4. 打印日志 (对应 Android 的 StringBuilder 日志)
let logString = "\n-------------> 📤 header start<-------------\n";
logString += `│ x-token = ${accessToken}\n`;
logString += `│ x-version = ${versionName}\n`;
logString += `│ x-platform = ${PLATFORM}\n`;
logString += `│ x-device-id = ${deviceId}\n`;
logString += `│ x-mobile-brand = ${brand}\n`;
logString += `│ x-mobile-model = ${model}\n`;
logString += `│ x-package = ${bundleName}\n`;
logString += `│ x-base-version = ${versionName}\n`;
logString += `│ x-app-id = ${APP_ID}\n`;
logString += `│ x-channel = ${CHANNEL}\n`;
logString += "-------------> header end <-------------";
Logger.info('RabbitLog', logString);
} catch (error) {
// 对应 Android 的 catch (e: Exception)
console.error(`HeaderInterceptor Error: ${JSON.stringify(error)}`);
}
return config;
}