@open-cfmoto/cloud-client API
Typed TypeScript client for CFMoto cloud endpoints (tapi.cfmoto-oversea.com).
Exports
Package entrypoint re-exports:
- config + signing utilities
CloudAuthClientVehicleClientUserClientAccountClientRideClientStatsClientAlertClientFenceClientCommandClientOtaClientSettingsClient- all request/response types from
types.ts
Source: packages/cloud-client/src/index.ts
Quick start
import { CloudAuthClient, VehicleClient, RideClient } from '@open-cfmoto/cloud-client';
const auth = new CloudAuthClient();
const token = await auth.login('[email protected]', 'plain-or-md5-password');
const vehicle = new VehicleClient();
const vehicles = await vehicle.getVehicles(token);
const rides = new RideClient();
const list = await rides.listRides(token, {
vehicleId: vehicles[0]?.vehicleId ?? '',
pageStart: 1,
pageSize: 20,
});
Shared behavior
- All clients throw
CloudAuthErroron:- non-2xx HTTP
- cloud payload error code (
codenot0/200orsuccess=false) - invalid/missing JSON contracts
- Auth and signature headers are generated with
buildSignedHeaders(...). - Locale/timezone headers are auto-set (
lang,ZoneId).
Client reference
CloudAuthClient
login(username, password): Promise<string>POST /auth/user/login_by_idcard- returns bearer token and caches it internally
refreshToken(token): Promise<string>- no refresh endpoint available (throws)
getToken(): string | nullgetUserId(): string | null
VehicleClient
getVehicleDetail(vehicleId, token, userId?): Promise<VehicleNowInfoData>GET /vehicle?vehicleId=...
getEncryptInfo(vehicleId, token, userId?): Promise<EncryptInfo>- extracts
encryptInforequired for BLE auth flow
- extracts
getVehicles(token): Promise<UserVehicle[]>GET /vehicle/mine?position=2
getUserVehicles(token, userId?, position=1): Promise<UserVehicle[]>- compatibility overload
UserClient
getProfile(token): Promise<UserProfile>GET /auth/user/user_info
updateProfile(token, req): Promise<UserProfile>PUT /auth/user/update_info
updateAreaNo(token, areaNo): Promise<void>POST /auth/user/updateUserAreaNo
AccountClient
register(req): Promise<RegisterResult>POST /auth/user/register- plaintext password is MD5-normalized before sending
sendCode(req): Promise<void>POST /common/code/send_code
checkCode(req): Promise<void>POST /common/code/check_code
updatePassword(token, req): Promise<void>POST /auth/user/update_password
RideClient
listRides(token, params): Promise<RideHistoryItem[]>GET /ridehistory/list_v2
getRide(token, id, month): Promise<RideHistoryDetail>GET /ridehistory?id=...&month=yyyy-MM
deleteRide(token, id): Promise<void>DELETE /ridehistory/{id}
StatsClient
getRideReport(token, vehicleId, date): Promise<RideReport>GET /ride/report?vehicleId=...&date=yyyy-MM-dd
getMonthRideData(token, vehicleId, month): Promise<MonthRideData>GET /ride/report/list/month?vehicleId=...&month=yyyy-MM
getTotalRideMile(token, vehicleId): Promise<TotalRideMile>GET /ride/TotalRideMile/get?vehicleId=...
AlertClient
listAlerts(token, params?): Promise<AlarmMessage[]>GET /alarm/messagerecord
markRead(token, typeList): Promise<void>PUT /alarm/messagerecord/mark_read/v1
deleteAlert(token, id): Promise<void>DELETE /alarm/messagerecord/delete/{id}
clearAlerts(token, typeList): Promise<void>PUT /alarm/messagerecord/clear/v1
FenceClient
listFences(token, vehicleId): Promise<ElectricFence[]>GET /electricFence/list?vehicleId=...
createFence(token, req): Promise<ElectricFence>POST /electricFence
deleteFence(token, id): Promise<void>DELETE /electricFence/{id}
CommandClient
remoteUnlock(token, vin): Promise<void>POST /vehicle/state/remote/unlock- VIN is encrypted as
secretvia AES-256-ECB/PKCS7 (APK-compatible)
flashHorn(token, vehicleId): Promise<void>POST /vehicle/state/flash/horn
getKl15(token, vin): Promise<boolean>POST /vehicle/state/vehicle/kl15
OtaClient
checkUpdates(token, deviceId): Promise<VehicleUpdateBean[]>GET /ota/check?deviceId=...
getOtaDetail(token, deviceId): Promise<OtaDetail>GET /ota?deviceId=...
SettingsClient
getSettings(token): Promise<AppUnitSetResp>GET /setting
getVehicleFuncCompatibility(token, deviceId): Promise<VehicleFunResp[]>GET /vehicle/set/list/compatibility/ele-v2?deviceId=...
getAlarmCompatibility(token): Promise<AlarmSetting>GET /setting/alarm/compatibility/ele
updateAlarmCompatibility(token, alarmSetting): Promise<void>PUT /setting/alarm/compatibility/ele
Useful types
Most-used contracts from types.ts:
- Auth:
LoginResponse,TokenInfo,CloudAuthError - Vehicle:
VehicleNowInfoData,UserVehicle,EncryptInfo - Ride:
RideHistoryItem,RideHistoryDetail,RideReport,MonthRideData - Alerts/Fence/OTA/Settings:
AlarmMessage,ElectricFence,VehicleUpdateBean,AlarmSetting
Files
- Source:
packages/cloud-client/src - Tests:
packages/cloud-client/src/__tests__