export enum RPCRequestMethod { COMMISSION = 'commission', DECOMMISSION = 'decommission', GET_DEVICE_INFO = 'getDeviceInfo', GET_PRODUCT_INFO = 'getProductInfo', ASSOCIATE_USER = 'associateUser', GET_INVITATION_CODE = 'getInvitationCode', CREATE_AND_PAIR = 'createAndPair', PAIR_CHILD = 'pair', LIST_CHILDREN = 'list', REMOVE_CHILD = 'remove', GET = 'get', SET = 'set', GET_STATUS = 'getStatus', } export enum AccessLevel { OWNER = 'owner', GUEST = 'guest', ADMIN = 'admin', } export interface CommissionParams { productId: string force?: boolean } export interface CommissionResult { productId: string deviceId: string } export interface GetDeviceInfoResult { productId: string deviceId: string } export enum FirmwareStatus { CREATED = 'CREATED', PROCESSING = 'PROCESSING', READY = 'READY', PROCESSING_ERROR = 'PROCESSING_ERROR', PROCESSING_PENDING = 'PROCESSING_PENDING' } interface FirmwareRelease { productId: string version: string status: FirmwareStatus labels: string[] md5?: string crc?: string } export interface GetProductInfoResult { id: string deviceType: string name: string manufacturer: string brand: string model: string createdAt: string updatedAt: string firmwareRelease: FirmwareRelease[] [prop: string]: any } export interface AssociateUserParams { deviceId: string userId: string accessLevel: AccessLevel } export interface AssociateUserResult { userId: string accessLevel: AccessLevel } export interface GetInvitationCodeParams { accessLevel: AccessLevel userId: string expiration?: number } export interface GetInvitationCodeResult { invitationCode: string } export interface GetStatusResult { commissioned: boolean deviceId?: string productId?: string } export interface GetStateResult { [key: string]: any } export interface SetStateParams { [key: string]: any } export interface SetStateResult { [key: string]: any } export interface CreateAndPairParams { productId: string } export interface CreateAndPairResult { deviceId: string productId: string } export interface PairChildParams { deviceId: string } export interface PairChildResult { deviceId: string productId: string } export interface ListChildrenResult { id: string } export interface RemoveChildParams { deviceId: string } export interface RPCPayload { requestId: string method: string params: RPCParams } export interface RPCSuccessPayload { requestId: string result: RPCResult } export interface RPCFailurePayload { requestId: string error: { code: number message: string } } export type RPCResponsePayload = RPCSuccessPayload | RPCFailurePayload export type RPCResult = CommissionResult | CreateAndPairResult | GetInvitationCodeResult | GetStateResult | SetStateResult | ListChildrenResult[] | PairChildResult | {} export type RPCParams = CommissionParams | GetInvitationCodeParams | CreateAndPairParams | PairChildParams | RemoveChildParams | SetStateParams | {}