bluelinky2
Version:
An unofficial nodejs API wrapper for Hyundai bluelink
88 lines (81 loc) • 2.36 kB
text/typescript
import { Brand } from '../interfaces/common.interfaces';
export interface CanadianBrandEnvironment {
brand: Brand;
host: string;
baseUrl: string;
origin: 'SPA';
endpoints: {
login: string;
logout: string;
vehicleList:string;
vehicleInfo: string;
status: string;
remoteStatus: string;
lock: string;
unlock: string;
start: string;
stop: string;
locate: string;
hornlight: string;
verifyAccountToken: string;
verifyPin: string;
verifyToken: string;
setChargeTarget: string;
stopCharge: string;
startCharge: string;
}
}
const getEndpoints = (baseUrl: string) => ({
login: `${baseUrl}/tods/api/lgn`,
logout: `${baseUrl}/tods/api/lgout`,
// Vehicle
vehicleList: `${baseUrl}/tods/api/vhcllst`,
vehicleInfo: `${baseUrl}/tods/api/sltvhcl`,
status: `${baseUrl}/tods/api/lstvhclsts`,
remoteStatus: `${baseUrl}/tods/api/rltmvhclsts`,
// Car commands with preauth (PIN)
lock: `${baseUrl}/tods/api/drlck`,
unlock: `${baseUrl}/tods/api/drulck`,
start: `${baseUrl}/tods/api/evc/rfon`,
stop: `${baseUrl}/tods/api/evc/rfoff`,
startCharge: `${baseUrl}/tods/api/evc/rcstrt`,
stopCharge: `${baseUrl}/tods/api/evc/rcstp`,
setChargeTarget: `${baseUrl}/tods/api/evc/setsoc`,
locate: `${baseUrl}/tods/api/fndmcr`,
hornlight: `${baseUrl}/tods/api/hornlight`,
// System
verifyAccountToken: `${baseUrl}/tods/api/vrfyacctkn`,
verifyPin: `${baseUrl}/tods/api/vrfypin`,
verifyToken: `${baseUrl}/tods/api/vrfytnc`,
});
const getEnvironment = (host: string): Omit<CanadianBrandEnvironment, 'brand'> => {
const baseUrl = `https://${host}`;
return {
host,
baseUrl,
origin: 'SPA',
endpoints: Object.freeze(getEndpoints(baseUrl)),
};
};
const getHyundaiEnvironment = (): CanadianBrandEnvironment => {
return {
brand: 'hyundai',
...getEnvironment('mybluelink.ca')
};
};
const getKiaEnvironment = (): CanadianBrandEnvironment => {
return {
brand: 'hyundai',
...getEnvironment('kiaconnect.ca')
};
};
export const getBrandEnvironment = (brand: Brand): CanadianBrandEnvironment => {
switch (brand) {
case 'hyundai':
return Object.freeze(getHyundaiEnvironment());
case 'kia':
return Object.freeze(getKiaEnvironment());
default:
throw new Error(`Constructor ${brand} is not managed.`);
}
};