@robotbas/robotcloud-client 1.0.0-rc.1 → 1.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/robotCloudApi.ts","../src/utils/logger.ts","../src/robotCloudClient.ts","../src/helpers/robotCloudToken.ts"],"sourcesContent":["import axios from \"axios\"\nimport { useLogger } from 'utils/logger';\n\nconst logger = useLogger(\"robotcloud-api\")\n\nconst robotcloudApi = axios.create();\n\nlet checkTokenPromise: Promise<string | undefined> | null = null;\nconst clearPromise = () => checkTokenPromise = null;\n\nasync function refreshToken(checkToken: () => Promise<string | undefined>) {\n const access_token = await checkToken();\n return access_token;\n }\n\n \nlet checkToken = async (): Promise<string> => { return ''}\n\n// Important to add interceptor once, inside a middleware are stacked in each request.\nrobotcloudApi.interceptors.request.use(\n async config => {\n logger.info(\"robotcloud api interceptor:\", config.url)\n if (!checkTokenPromise) {\n checkTokenPromise = refreshToken(checkToken).finally(clearPromise);\n }\n\n // When other request is checking token wait for it\n const token = await checkTokenPromise;\n if (!token) {\n return config\n }\n\n config.headers.authorization = `Bearer ${token}`;\n return config;\n },\n error => {\n logger.error(error)\n Promise.reject(error)\n });\n\nexport const setCheckTokenFunction = (fun: () => Promise<string>) => {\n checkToken = fun\n}\n\nexport default robotcloudApi;\n","import { createConsola } from \"consola\";\nimport type { ConsolaOptions } from 'consola';\n\nexport function useLogger (tag?: string, options: Partial<ConsolaOptions> = { level: 1000 }) {\n return tag ? createConsola(options).withTag(tag) : createConsola(options)\n}","import type { AxiosResponse } from \"axios\";\n\nimport { useLogger } from 'utils/logger';\nimport robotcloudApi from \"robotCloudApi\";\nimport { AirQuality1AlertEventValue, AirQuality1DataEventValue, LocationServiceInstancesRequestParams, ProjectDetailsRequestParams, ProjectLocationsRequestParams, ProjectRequestParams, ProjectTagRequestParams, RobotCloudDeviceDetails, RobotCloudNamedItem, RobotCloudProject, RobotCloudProjectDetails, RobotCloudServiceType, RobotCloudUserDetails, RoomClime1AlertEventValue, RoomClime1EventValue, RoomClimeInstanceConfigParams, RoomConsumes1AlertEventValue, RoomConsumes1DataEventValue, RoomGrouping1DataEventValue, RoomGrouping1InstanceDeviceConfig, RoomGuestStatus1AlertEventValue, RoomGuestStatus1EventValue, RoomGuestStatusInstanceConfigParams, ServiceDataRequestParams, ServiceInstancesRequestParams } from \"../types/RobotCloudClient\";\nimport { RobotCloudServiceInstance, ServiceInstanceDetails } from \"../types/ServiceInstance\";\nimport { ClassifierDetails } from \"../types/ProjectClassifer\";\nimport { ProjectTag, ProjectTagTreeNode, ProjectTagsTree } from \"../types/ProjectTag\";\nimport { ServiceDataMeasurement } from \"../types/ServiceDataMeasurement\";\n\n\nconst logger = useLogger(\"robotcloud-client\")\n\n\n\ninterface RobotCloudLocationDetails {\n id: string;\n name: string;\n description: string;\n project: string;\n tags: string[]\n}\n\nexport const getLocationServiceInstances = (\n prjId: string,\n locId: string,\n service_type: RobotCloudServiceType,\n params?: LocationServiceInstancesRequestParams\n): Promise<AxiosResponse<RobotCloudServiceInstance[]>> => {\n return robotcloudApi.get<RobotCloudServiceInstance[]>(`projects/${prjId}/locations/${locId}/services/${service_type}/instances`, {\n params,\n });\n}\n\n\n// USERS ENDPOINTS\nexport const getUser = (\n username: string\n ): Promise<AxiosResponse<RobotCloudUserDetails>> => {\n return robotcloudApi.get<RobotCloudUserDetails>(`users/${username}`);\n };\n\n// PROJECT ENDPOINTS\nexport const getProjects = (\n params?: ProjectRequestParams\n): Promise<AxiosResponse<RobotCloudProject[]>> => {\n return robotcloudApi.get<RobotCloudProject[]>(\"projects\", {\n params\n });\n};\n\nexport const getProjectDetails = (\n prjId: string,\n params?: ProjectDetailsRequestParams\n): Promise<AxiosResponse<RobotCloudProjectDetails>> => {\n return robotcloudApi.get<RobotCloudProjectDetails>(`projects/${prjId}`, {\n params,\n });\n};\n\n// PROJECT SUBSYSTEMS ENDPOINTS\n\nexport const getProjectSubsystem = (\n prjId: string,\n subsysId: string\n) => {\n return robotcloudApi.get<RobotCloudNamedItem>(`projects/${prjId}/subsystems/${subsysId}`);\n}\n\nexport const getLocations = (\n prjId: string,\n params?: ProjectLocationsRequestParams\n): Promise<AxiosResponse<RobotCloudNamedItem[]>> => {\n return robotcloudApi.get<RobotCloudNamedItem[]>(`projects/${prjId}/locations`, {\n params,\n });\n};\n\nexport const getLocation = (\n locationId: string\n): Promise<AxiosResponse<RobotCloudLocationDetails>> => {\n return robotcloudApi.get<RobotCloudLocationDetails>(`locations/${locationId}`, { });\n};\n\nexport const getServiceInstances = (\n prjId: string,\n service_type: string,\n params?: ServiceInstancesRequestParams\n): Promise<AxiosResponse<RobotCloudServiceInstance[]>> => {\n return robotcloudApi.get<RobotCloudServiceInstance[]>(`projects/${prjId}/services/${service_type}/instances`, {\n params,\n });\n}\n\nexport const getServiceInstance = (\n prjId: string,\n service_type: string,\n service_id: string\n) => {\n return robotcloudApi.get<ServiceInstanceDetails>(`projects/${prjId}/services/${service_type}/instances/${service_id}`);\n}\n\nexport const getClassifier = (\n classifierId: string\n) => {\n return robotcloudApi.get<ClassifierDetails>(`classifiers/${classifierId}`);\n}\n\nexport const getTags = (\n prjId: string,\n params?: ProjectTagRequestParams\n): Promise<AxiosResponse<ProjectTag[]>> => {\n logger.info(`Get project ${prjId} tags`)\n return robotcloudApi.get<ProjectTag[]>(`projects/${prjId}/tags`, {\n params,\n });\n};\n\nexport const getTagsTree = async (\n prjId: string,\n maxDepth: number = 2,\n params?: ProjectTagRequestParams\n): Promise<ProjectTagsTree> => {\n logger.info(`Get project ${prjId} tags tree`)\n if (!params) {\n params = {} as ProjectTagRequestParams \n }\n params.no_parent = true;\n\n const tags = await getTagsChildren(prjId, 0, undefined, undefined, maxDepth)\n return {root: tags} as ProjectTagsTree;\n};\n\nexport const getTagsChildren = async (\n prjId: string,\n level: number = 0,\n parent_id?: string,\n params?: ProjectTagRequestParams,\n maxDepth?: number\n): Promise<ProjectTagTreeNode[]> => {\n logger.debug(`Get project ${prjId} tags children: ${parent_id}`)\n if (!params) {\n params = {} as ProjectTagRequestParams \n }\n params.no_parent = !parent_id;\n params.parent_tag = parent_id;\n\n const tags = await getTags(prjId, params)\n if (tags.data.length == 0) {\n return [];\n }\n \n const response: ProjectTagTreeNode[] = []\n const requests: any[] = []\n for (let i = 0; i < tags.data.length; i++) {\n const element = tags.data[i]\n const node = {\n tag: element\n } as ProjectTagTreeNode;\n response.push(node)\n if (maxDepth && level < maxDepth) {\n requests.push(\n getTagsChildren(prjId, level + 1, element.id, params, maxDepth)\n )\n }\n }\n\n const responses = await Promise.all(requests)\n let i = 0;\n responses.forEach(element => {\n response[i].children = element\n i++\n });\n \n return response;\n\n}\n\n/* PROJECT DEVICES ENDPOINTS */\nexport const getDeviceDetails = (\n deviceId: string,\n): Promise<AxiosResponse<RobotCloudDeviceDetails>> => {\n return robotcloudApi.get<RobotCloudDeviceDetails>(`devices/${deviceId}`);\n}\n\n/* SERVICES INSTANCES DATA ENDPOINTS */\n\nexport const getRoomClimeServiceData = (\n prjId: string,\n params?: ServiceDataRequestParams\n): Promise<AxiosResponse<ServiceDataMeasurement<RoomClime1EventValue>[]>> => {\n return robotcloudApi.get<ServiceDataMeasurement<RoomClime1EventValue>[]>(\n `/projects/${prjId}/services/RoomClime_1/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n}\n\nexport const getRoomGuestStatusServiceData = (\n prjId: string,\n params?: ServiceDataRequestParams\n): Promise<AxiosResponse<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>> => {\n return robotcloudApi.get<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>(\n `/projects/${prjId}/services/RoomGuestStatus_1/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n}\n\nexport const getAirQualityServiceData = (\n prjId: string,\n params?: ServiceDataRequestParams\n): Promise<AxiosResponse<ServiceDataMeasurement<AirQuality1DataEventValue>[]>> => {\n return robotcloudApi.get<ServiceDataMeasurement<AirQuality1DataEventValue>[]>(\n `/projects/${prjId}/services/AirQuality_1/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n}\n\nexport const getRoomGrouping1ServiceData = (\n prjId: string,\n params?: ServiceDataRequestParams\n): Promise<AxiosResponse<ServiceDataMeasurement<RoomGrouping1DataEventValue>[]>> => {\n return robotcloudApi.get<ServiceDataMeasurement<RoomGrouping1DataEventValue>[]>(\n `/projects/${prjId}/services/RoomGrouping_1/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n}\n\nexport const getRoomConsumesServiceData = (\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomConsumes1DataEventValue>[]>> => {\n return robotcloudApi.get<ServiceDataMeasurement<RoomConsumes1DataEventValue>[]>(\n `/projects/${prjId}/services/RoomConsumes_1/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n/* SERVICES INSTANCES ALERTS ENDPOINTS */\n\nexport const getRoomClimeServiceAlert = (\n prjId: string,\n params?: ServiceDataRequestParams\n): Promise<AxiosResponse<ServiceDataMeasurement<RoomClime1AlertEventValue>[]>> => {\n return robotcloudApi.get<ServiceDataMeasurement<RoomClime1AlertEventValue>[]>(\n `/projects/${prjId}/services/RoomClime_1/alert`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n}\n\nexport const getRoomGuestStatusServiceAlert = (\n prjId: string,\n params?: ServiceDataRequestParams\n): Promise<AxiosResponse<ServiceDataMeasurement<RoomGuestStatus1AlertEventValue>[]>> => {\n return robotcloudApi.get<ServiceDataMeasurement<RoomGuestStatus1AlertEventValue>[]>(\n `/projects/${prjId}/services/RoomGuestStatus_1/alert`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n}\n\nexport const getAirQualityServiceAlert = (\n prjId: string,\n params?: ServiceDataRequestParams\n): Promise<AxiosResponse<ServiceDataMeasurement<AirQuality1AlertEventValue>[]>> => {\n return robotcloudApi.get<ServiceDataMeasurement<AirQuality1AlertEventValue>[]>(\n `/projects/${prjId}/services/AirQuality_1/alert`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n}\n\nexport const getRoomConsumesServiceAlert = (\n prjId: string,\n params?: ServiceDataRequestParams\n): Promise<AxiosResponse<ServiceDataMeasurement<RoomConsumes1AlertEventValue>[]>> => {\n return robotcloudApi.get<ServiceDataMeasurement<RoomConsumes1AlertEventValue>[]>(\n `/projects/${prjId}/services/RoomConsumes_1/alert`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n}\n\n/* SERVICES INSTANCES CONFIGURATION ENDPOINTS */\n\nexport const getRoomClimeServiceInstanceConfiguration = (\n prjId: string,\n instanceId: string\n): Promise<AxiosResponse<RoomClimeInstanceConfigParams>> => {\n return robotcloudApi.get<RoomClimeInstanceConfigParams>(\n `/projects/${prjId}/services/RoomClime_1/instances/${instanceId}/configuration`\n )\n}\n\nexport const getRoomGuestStatusServiceInstanceConfiguration = (\n prjId: string,\n instanceId: string\n): Promise<AxiosResponse<RoomGuestStatusInstanceConfigParams>> => {\n return robotcloudApi.get<RoomGuestStatusInstanceConfigParams>(\n `/projects/${prjId}/services/RoomGuestStatus_1/instances/${instanceId}/configuration`\n )\n}\n\nexport const putRoomClimeServiceInstanceConfiguration = (\n prjId: string,\n instanceId: string,\n data: RoomClimeInstanceConfigParams\n): Promise<AxiosResponse<RoomClimeInstanceConfigParams>> => {\n return robotcloudApi.put<RoomClimeInstanceConfigParams>(\n `/projects/${prjId}/services/RoomClime_1/instances/${instanceId}/configuration`,\n data\n )\n}\n\nexport const putRoomGuestStatusServiceInstanceConfiguration = (\n prjId: string,\n instanceId: string,\n data: RoomGuestStatusInstanceConfigParams\n): Promise<AxiosResponse<RoomGuestStatusInstanceConfigParams>> => {\n return robotcloudApi.put<RoomGuestStatusInstanceConfigParams>(\n `/projects/${prjId}/services/RoomGuestStatus_1/instances/${instanceId}/configuration`,\n data\n )\n}\n\n\n/* SERVICES INSTANCES DEVICE INGORMATION ENDPOINTS */\n\n\nexport const getRoomGrouping1InstanceDeviceConfig = (\n prjId: string,\n instanceId: string,\n): Promise<AxiosResponse<RoomGrouping1InstanceDeviceConfig>> => {\n return robotcloudApi.put<RoomGrouping1InstanceDeviceConfig>(\n `/projects/${prjId}/services/RoomGrouping_1/instances/${instanceId}/configuration`\n )\n}\n","import axios from \"axios\";\nimport { useLogger } from 'utils/logger';\nimport robotcloudApi from \"robotCloudApi\";\nimport { CheckTokenResponse, RobotCloudJWTPayload } from \"../../types/Token\";\n\nconst logger = useLogger(\"robotcloud-token\")\n\nconst MINUTES_BEFORE_EXPIRATION_RENEW = 20; // TODO: Environment variable\n\n\n\nfunction parseJwt(token: string) {\n if (!token) {\n return;\n }\n return JSON.parse(atob(token.split('.')[1])); \n}\n\nexport interface RobotCloudNewTokenResponse {\n access: string;\n renew: string;\n}\n\nexport const decodeToken = (token: string): RobotCloudJWTPayload | undefined => {\n const payload = parseJwt(token);\n if (!payload) {\n return undefined\n }\n\n return payload as RobotCloudJWTPayload;\n};\n\nexport const isTokenExpired = (payload: RobotCloudJWTPayload): boolean => {\n const expirationDate = new Date(payload.exp * 1000);\n expirationDate.setMinutes(\n expirationDate.getMinutes() - MINUTES_BEFORE_EXPIRATION_RENEW\n );\n const currentDate = new Date();\n return currentDate >= expirationDate;\n};\n\nexport const renewToken = async (\n renew_token: string\n): Promise<CheckTokenResponse> => {\n logger.debug(\"Renewing token ...\");\n const cloudUrl = robotcloudApi.defaults.baseURL\n const { data } = await axios.get(cloudUrl + \"login/renew\", {\n headers: {\n Authorization: `Bearer ${renew_token}`,\n },\n });\n\n return {\n renewed: true,\n access: data[\"access\"][\"token\"],\n renew: data[\"renew\"][\"token\"],\n } as CheckTokenResponse;\n};\n\nexport const validateToken = async (\n access_token: string\n): Promise<boolean> => {\n logger.debug(\"Validate token ...\");\n const payload = decodeToken(access_token)\n if (!payload) {\n return false\n }\n const cloudUrl = robotcloudApi.defaults.baseURL\n try {\n const { data } = await axios.get(\n cloudUrl + `users/${payload.sub}`,\n {\n headers: {\n Authorization: `Bearer ${access_token}`,\n },\n }\n ); \n } catch (error) {\n if (axios.isAxiosError(error)) {\n logger.warn(`${error.message}: ${error.response?.data?.message ?? ''}`)\n } else {\n logger.warn(error)\n }\n return false;\n }\n\n return true\n};\n"],"mappings":";;;;;;;AAAA,OAAO,WAAW;;;ACAlB,SAAS,qBAAqB;AAGvB,SAAS,UAAW,KAAc,UAAmC,EAAE,OAAO,IAAK,GAAG;AACzF,SAAO,MAAM,cAAc,OAAO,EAAE,QAAQ,GAAG,IAAI,cAAc,OAAO;AAC5E;;;ADFA,IAAM,SAAS,UAAU,gBAAgB;AAEzC,IAAM,gBAAgB,MAAM,OAAO;AAEnC,IAAI,oBAAwD;AAC5D,IAAM,eAAe,MAAM,oBAAoB;AAE/C,eAAe,aAAaA,aAA+C;AACvE,QAAM,eAAe,MAAMA,YAAW;AACtC,SAAO;AACT;AAGF,IAAI,aAAa,YAA6B;AAAE,SAAO;AAAE;AAGzD,cAAc,aAAa,QAAQ;AAAA,EAC/B,OAAM,WAAU;AACZ,WAAO,KAAK,+BAA+B,OAAO,GAAG;AACrD,QAAI,CAAC,mBAAmB;AACpB,0BAAoB,aAAa,UAAU,EAAE,QAAQ,YAAY;AAAA,IACrE;AAGA,UAAM,QAAQ,MAAM;AACpB,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAEA,WAAO,QAAQ,gBAAgB,UAAU,KAAK;AAC9C,WAAO;AAAA,EACX;AAAA,EACA,WAAS;AACL,WAAO,MAAM,KAAK;AAClB,YAAQ,OAAO,KAAK;AAAA,EAC1B;AAAC;AAMH,IAAO,wBAAQ;;;AE5Cf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,IAAMC,UAAS,UAAU,mBAAmB;AAYrC,IAAM,8BAA8B,CACzC,OACA,OACA,cACA,WACwD;AACxD,SAAO,sBAAc,IAAiC,YAAY,KAAK,cAAc,KAAK,aAAa,YAAY,cAAc;AAAA,IAC/H;AAAA,EACF,CAAC;AACH;AAIO,IAAM,UAAU,CACnB,aACkD;AAClD,SAAO,sBAAc,IAA2B,SAAS,QAAQ,EAAE;AACrE;AAGK,IAAM,cAAc,CACzB,WACgD;AAChD,SAAO,sBAAc,IAAyB,YAAY;AAAA,IACxD;AAAA,EACF,CAAC;AACH;AAEO,IAAM,oBAAoB,CAC/B,OACA,WACqD;AACrD,SAAO,sBAAc,IAA8B,YAAY,KAAK,IAAI;AAAA,IACtE;AAAA,EACF,CAAC;AACH;AAIO,IAAM,sBAAsB,CACjC,OACA,aACG;AACH,SAAO,sBAAc,IAAyB,YAAY,KAAK,eAAe,QAAQ,EAAE;AAC1F;AAEO,IAAM,eAAe,CAC1B,OACA,WACkD;AAClD,SAAO,sBAAc,IAA2B,YAAY,KAAK,cAAc;AAAA,IAC7E;AAAA,EACF,CAAC;AACH;AAEO,IAAM,cAAc,CACzB,eACsD;AACtD,SAAO,sBAAc,IAA+B,aAAa,UAAU,IAAI,CAAE,CAAC;AACpF;AAEO,IAAM,sBAAsB,CACjC,OACA,cACA,WACwD;AACxD,SAAO,sBAAc,IAAiC,YAAY,KAAK,aAAa,YAAY,cAAc;AAAA,IAC5G;AAAA,EACF,CAAC;AACH;AAEO,IAAM,qBAAqB,CAChC,OACA,cACA,eACG;AACH,SAAO,sBAAc,IAA4B,YAAY,KAAK,aAAa,YAAY,cAAc,UAAU,EAAE;AACvH;AAEO,IAAM,gBAAgB,CAC3B,iBACG;AACH,SAAO,sBAAc,IAAuB,eAAe,YAAY,EAAE;AAC3E;AAEO,IAAM,UAAU,CACrB,OACA,WACyC;AACvC,EAAAA,QAAO,KAAK,eAAe,KAAK,OAAO;AACzC,SAAO,sBAAc,IAAkB,YAAY,KAAK,SAAS;AAAA,IAC/D;AAAA,EACF,CAAC;AACH;AAEO,IAAM,cAAc,OACzB,OACA,WAAmB,GACnB,WAC6B;AAC3B,EAAAA,QAAO,KAAK,eAAe,KAAK,YAAY;AAC9C,MAAI,CAAC,QAAQ;AACX,aAAS,CAAC;AAAA,EACZ;AACA,SAAO,YAAY;AAEnB,QAAM,OAAO,MAAM,gBAAgB,OAAO,GAAG,QAAW,QAAW,QAAQ;AAC3E,SAAO,EAAC,MAAM,KAAI;AACpB;AAEO,IAAM,kBAAkB,OAC7B,OACA,QAAgB,GAChB,WACA,QACA,aACkC;AAChC,EAAAA,QAAO,MAAM,eAAe,KAAK,mBAAmB,SAAS,EAAE;AACjE,MAAI,CAAC,QAAQ;AACX,aAAS,CAAC;AAAA,EACZ;AACA,SAAO,YAAY,CAAC;AACpB,SAAO,aAAa;AAEpB,QAAM,OAAO,MAAM,QAAQ,OAAO,MAAM;AACxC,MAAI,KAAK,KAAK,UAAU,GAAG;AACzB,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,WAAiC,CAAC;AACxC,QAAM,WAAkB,CAAC;AACzB,WAASC,KAAI,GAAGA,KAAI,KAAK,KAAK,QAAQA,MAAK;AACzC,UAAM,UAAU,KAAK,KAAKA,EAAC;AAC3B,UAAM,OAAO;AAAA,MACX,KAAK;AAAA,IACP;AACA,aAAS,KAAK,IAAI;AAClB,QAAI,YAAY,QAAQ,UAAU;AAChC,eAAS;AAAA,QACP,gBAAgB,OAAO,QAAQ,GAAG,QAAQ,IAAI,QAAQ,QAAQ;AAAA,MAChE;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,MAAM,QAAQ,IAAI,QAAQ;AAC5C,MAAI,IAAI;AACR,YAAU,QAAQ,aAAW;AAC3B,aAAS,CAAC,EAAE,WAAW;AACvB;AAAA,EACF,CAAC;AAED,SAAO;AAET;AAGO,IAAM,mBAAmB,CAC9B,aACoD;AACpD,SAAO,sBAAc,IAA6B,WAAW,QAAQ,EAAE;AACzE;AAIO,IAAM,0BAA0B,CACrC,OACA,WAC2E;AAC3E,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK;AAAA,IAClB;AAAA,MACE;AAAA,MACA,SAAS;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,gCAAgC,CAC3C,OACA,WACiF;AACjF,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK;AAAA,IAClB;AAAA,MACE;AAAA,MACA,SAAS;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,2BAA2B,CACtC,OACA,WACgF;AAChF,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK;AAAA,IAClB;AAAA,MACE;AAAA,MACA,SAAS;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,8BAA8B,CACzC,OACA,WACkF;AAClF,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK;AAAA,IAClB;AAAA,MACE;AAAA,MACA,SAAS;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,6BAA6B,CACtC,OACA,WACkF;AAClF,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK;AAAA,IAClB;AAAA,MACE;AAAA,MACA,SAAS;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAGK,IAAM,2BAA2B,CACtC,OACA,WACgF;AAChF,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK;AAAA,IAClB;AAAA,MACE;AAAA,MACA,SAAS;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,iCAAiC,CAC5C,OACA,WACsF;AACtF,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK;AAAA,IAClB;AAAA,MACE;AAAA,MACA,SAAS;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,4BAA4B,CACvC,OACA,WACiF;AACjF,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK;AAAA,IAClB;AAAA,MACE;AAAA,MACA,SAAS;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,8BAA8B,CACzC,OACA,WACmF;AACnF,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK;AAAA,IAClB;AAAA,MACE;AAAA,MACA,SAAS;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAIO,IAAM,2CAA2C,CACtD,OACA,eAC0D;AAC1D,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK,mCAAmC,UAAU;AAAA,EACjE;AACF;AAEO,IAAM,iDAAiD,CAC5D,OACA,eACgE;AAChE,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK,yCAAyC,UAAU;AAAA,EACvE;AACF;AAEO,IAAM,2CAA2C,CACtD,OACA,YACA,SAC0D;AAC1D,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK,mCAAmC,UAAU;AAAA,IAC/D;AAAA,EACF;AACF;AAEO,IAAM,iDAAiD,CAC5D,OACA,YACA,SACgE;AAChE,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK,yCAAyC,UAAU;AAAA,IACrE;AAAA,EACF;AACF;AAMO,IAAM,uCAAuC,CAClD,OACA,eAC8D;AAC9D,SAAO,sBAAc;AAAA,IACnB,aAAa,KAAK,sCAAsC,UAAU;AAAA,EACpE;AACF;;;ACxXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAOC,YAAW;AAKlB,IAAMC,UAAS,UAAU,kBAAkB;AAE3C,IAAM,kCAAkC;AAIxC,SAAS,SAAS,OAAe;AAC7B,MAAI,CAAC,OAAO;AACV;AAAA,EACF;AACA,SAAO,KAAK,MAAM,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAC/C;AAOO,IAAM,cAAc,CAAC,UAAoD;AAC9E,QAAM,UAAU,SAAS,KAAK;AAC9B,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,IAAM,iBAAiB,CAAC,YAA2C;AACxE,QAAM,iBAAiB,IAAI,KAAK,QAAQ,MAAM,GAAI;AAClD,iBAAe;AAAA,IACb,eAAe,WAAW,IAAI;AAAA,EAChC;AACA,QAAM,cAAc,oBAAI,KAAK;AAC7B,SAAO,eAAe;AACxB;AAEO,IAAM,aAAa,OACxB,gBACgC;AAC9B,EAAAA,QAAO,MAAM,oBAAoB;AACjC,QAAM,WAAW,sBAAc,SAAS;AACxC,QAAM,EAAE,KAAK,IAAI,MAAMC,OAAM,IAAI,WAAW,eAAe;AAAA,IACvD,SAAS;AAAA,MACL,eAAe,UAAU,WAAW;AAAA,IACxC;AAAA,EACJ,CAAC;AAEH,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ,KAAK,QAAQ,EAAE,OAAO;AAAA,IAC9B,OAAO,KAAK,OAAO,EAAE,OAAO;AAAA,EAC9B;AACF;AAEO,IAAM,gBAAgB,OACzB,iBACmB;AA7DvB;AA8DI,EAAAD,QAAO,MAAM,oBAAoB;AACjC,QAAM,UAAU,YAAY,YAAY;AACxC,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AACA,QAAM,WAAW,sBAAc,SAAS;AACxC,MAAI;AACA,UAAM,EAAE,KAAK,IAAI,MAAMC,OAAM;AAAA,MACzB,WAAW,SAAS,QAAQ,GAAG;AAAA,MAC/B;AAAA,QACI,SAAS;AAAA,UACL,eAAe,UAAU,YAAY;AAAA,QACzC;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,SAAS,OAAO;AACZ,QAAIA,OAAM,aAAa,KAAK,GAAG;AAC3B,MAAAD,QAAO,KAAK,GAAG,MAAM,OAAO,MAAK,uBAAM,aAAN,mBAAgB,SAAhB,mBAAsB,YAAtB,YAAiC,EAAE,EAAE;AAAA,IAC1E,OAAO;AACH,MAAAA,QAAO,KAAK,KAAK;AAAA,IACrB;AACA,WAAO;AAAA,EACX;AAEA,SAAO;AACX;","names":["checkToken","logger","i","axios","logger","axios"]}
1
+ {"version":3,"sources":["../src/utils/logger.ts","../src/robotCloudApi.ts","../src/client/services/room-clime-1.mock.ts","../src/client/services/room-clime-1.ts","../src/client/services/room-guest-status-1.mock.ts","../src/client/services/room-guest-status-1.ts","../src/client/services/air-quality-1.mock.ts","../src/client/services/air-quality-1.ts","../src/index.ts","../src/robotCloudClient.ts","../src/helpers/robotCloudToken.ts","../src/client/services/room-consumes-1.ts","../src/client/services/index.ts"],"sourcesContent":["import { createConsola } from \"consola\";\nimport type { ConsolaOptions } from 'consola';\n\nexport function useLogger (tag?: string, options: Partial<ConsolaOptions> = { level: 1000 }) {\n return tag ? createConsola(options).withTag(tag) : createConsola(options)\n}","import axios from \"axios\"\nimport { useLogger } from 'utils/logger';\n\nconst logger = useLogger(\"robotcloud-api\")\n\nconst robotcloudApi = axios.create();\n\nlet checkTokenPromise: Promise<string | undefined> | null = null;\nconst clearPromise = () => checkTokenPromise = null;\n\nasync function refreshToken(checkToken: () => Promise<string | undefined>) {\n const access_token = await checkToken();\n return access_token;\n }\n\n \nlet checkToken = async (): Promise<string> => { return ''}\n\n// Important to add interceptor once, inside a middleware are stacked in each request.\nrobotcloudApi.interceptors.request.use(\n async config => {\n logger.info(\"robotcloud api interceptor:\", config.url)\n if (!checkTokenPromise) {\n checkTokenPromise = refreshToken(checkToken).finally(clearPromise);\n }\n\n // When other request is checking token wait for it\n const token = await checkTokenPromise;\n if (!token) {\n return config\n }\n\n config.headers.authorization = `Bearer ${token}`;\n return config;\n },\n error => {\n logger.error(error)\n Promise.reject(error)\n });\n\nexport const setCheckTokenFunction = (fun: () => Promise<string>) => {\n checkToken = fun\n}\n\nexport default robotcloudApi;\n","import type { AxiosResponse } from \"axios\";\n\nimport robotcloudApi from \"robotCloudApi\";\nimport { \n RoomClime1AlertEventValue, RoomClime1EventValue, RoomClimeInstanceConfigParams \n} from \"../../../types/RobotCloudClient\";\nimport { \n ServiceDataMeasurement, ServiceDataRequestParams, ServiceInstanceHistoricParams, ServiceTypeClient,\n HistoricAggregateFunction,\n ServiceInstanceHistoricAggregateParams\n} from \"../../../types/services\";\n\n\nclass RoomClimeClient implements ServiceTypeClient< RoomClime1AlertEventValue, \n RoomClime1EventValue, \n RoomClimeInstanceConfigParams> {\n\n getAlerts(\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomClime1AlertEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomClime1AlertEventValue>[]>(\n `/projects/${prjId}/services/RoomClime_1/alert`,\n {\n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getData (\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomClime1EventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomClime1EventValue>[]>(\n `/projects/${prjId}/services/RoomClime_1/data`,\n {\n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getInstanceConfiguration (\n prjId: string,\n instanceId: string\n ): Promise<AxiosResponse<RoomClimeInstanceConfigParams>> {\n return robotcloudApi.get<RoomClimeInstanceConfigParams>(\n `/projects/${prjId}/services/RoomClime_1/instances/${instanceId}/configuration`\n )\n }\n\n putInstanceConfiguration (\n prjId: string,\n instanceId: string,\n data: RoomClimeInstanceConfigParams\n ): Promise<AxiosResponse<RoomClimeInstanceConfigParams>> {\n return robotcloudApi.put<RoomClimeInstanceConfigParams>(\n `/projects/${prjId}/services/RoomClime_1/instances/${instanceId}/configuration`,\n data\n )\n }\n\n getInstanceHistoric(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n params: ServiceInstanceHistoricParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomClime1EventValue>[]>> {\n return new Promise((resolve, reject) => {\n fetch('./historic-clime-data-sample.json')\n .then((response) => response.json())\n .then((json) => resolve({\n data: json\n } as AxiosResponse)\n );\n })\n }\n\n getInstanceHistoricAggregate(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n aggFunction: HistoricAggregateFunction,\n periode: string,\n params: ServiceInstanceHistoricAggregateParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomClime1EventValue>[]>> {\n return new Promise((resolve, reject) => {\n fetch(`./historic-agg-${periode}-${aggFunction}-clime-data-sample.json`)\n .then((response) => response.json())\n .then((json) => resolve({\n data: json\n } as AxiosResponse)\n );\n })\n }\n}\n\n\nexport const roomClimeClient = new RoomClimeClient()","import type { AxiosResponse } from \"axios\";\n\nimport robotcloudApi from \"robotCloudApi\";\nimport { \n RoomClime1AlertEventValue, RoomClime1EventValue, RoomClimeInstanceConfigParams \n} from \"../../../types/RobotCloudClient\";\nimport { \n ServiceDataMeasurement, ServiceDataRequestParams, ServiceInstanceHistoricParams, ServiceTypeClient,\n HistoricAggregateFunction,\n ServiceInstanceHistoricAggregateParams\n} from \"../../../types/services\";\n\n\nclass RoomClimeClient implements ServiceTypeClient< RoomClime1AlertEventValue, \n RoomClime1EventValue, \n RoomClimeInstanceConfigParams> {\n\n getAlerts(\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomClime1AlertEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomClime1AlertEventValue>[]>(\n `/projects/${prjId}/services/RoomClime_1/alert`,\n {\n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getData (\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomClime1EventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomClime1EventValue>[]>(\n `/projects/${prjId}/services/RoomClime_1/data`,\n {\n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getInstanceConfiguration (\n prjId: string,\n instanceId: string\n ): Promise<AxiosResponse<RoomClimeInstanceConfigParams>> {\n return robotcloudApi.get<RoomClimeInstanceConfigParams>(\n `/projects/${prjId}/services/RoomClime_1/instances/${instanceId}/configuration`\n )\n }\n\n putInstanceConfiguration (\n prjId: string,\n instanceId: string,\n data: RoomClimeInstanceConfigParams\n ): Promise<AxiosResponse<RoomClimeInstanceConfigParams>> {\n return robotcloudApi.put<RoomClimeInstanceConfigParams>(\n `/projects/${prjId}/services/RoomClime_1/instances/${instanceId}/configuration`,\n data\n )\n }\n\n getInstanceHistoric(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n params: ServiceInstanceHistoricParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomClime1EventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomClime1EventValue>[]>(\n `/projects/${prjId}/services/RoomClime_1/instances/${instanceId}/historic/data`, {\n params: {\n start_time: startTime,\n end_time: endTime,\n ...params\n }\n }\n )\n }\n\n getInstanceHistoricAggregate(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n aggFunction: HistoricAggregateFunction,\n periode: string,\n params: ServiceInstanceHistoricAggregateParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomClime1EventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomClime1EventValue>[]>(\n `/projects/${prjId}/services/RoomClime_1/instances/${instanceId}/historic/data/aggregate`, {\n params: {\n start_time: startTime,\n end_time: endTime,\n function: aggFunction,\n periode,\n ...params\n }\n }\n )\n }\n}\n\n\nexport const roomClimeClient = new RoomClimeClient()","import type { AxiosResponse } from \"axios\";\n\nimport robotcloudApi from \"robotCloudApi\";\nimport { \n HistoricAggregateFunction,\n RoomGuestStatus1AlertEventValue,\n RoomGuestStatus1EventValue,\n RoomGuestStatusInstanceConfigParams,\n ServiceDataMeasurement, \n ServiceDataRequestParams, \n ServiceInstanceHistoricAggregateParams, \n ServiceInstanceHistoricParams, \n ServiceTypeClient \n} from \"../../../types/services\";\n\nclass RoomGuestStatusClient implements ServiceTypeClient< RoomGuestStatus1AlertEventValue, \n RoomGuestStatus1EventValue, \n RoomGuestStatusInstanceConfigParams> {\n\n getAlerts(\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomGuestStatus1AlertEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomGuestStatus1AlertEventValue>[]>(\n `/projects/${prjId}/services/RoomGuestStatus_1/alert`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getData (\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>(\n `/projects/${prjId}/services/RoomGuestStatus_1/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getInstanceConfiguration (\n prjId: string,\n instanceId: string\n ): Promise<AxiosResponse<RoomGuestStatusInstanceConfigParams>> {\n return robotcloudApi.get<RoomGuestStatusInstanceConfigParams>(\n `/projects/${prjId}/services/RoomGuestStatus_1/instances/${instanceId}/configuration`\n )\n }\n\n putInstanceConfiguration (\n prjId: string,\n instanceId: string,\n data: RoomGuestStatusInstanceConfigParams\n ): Promise<AxiosResponse<RoomGuestStatusInstanceConfigParams>> {\n return robotcloudApi.put<RoomGuestStatusInstanceConfigParams>(\n `/projects/${prjId}/services/RoomGuestStatus_1/instances/${instanceId}/configuration`,\n data\n )\n }\n\n getInstanceHistoric(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n params: ServiceInstanceHistoricParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>> {\n return new Promise((resolve, reject) => {\n fetch('./historic-guest-status-data-sample.json')\n .then((response) => response.json())\n .then((json) => resolve({\n data: json\n } as AxiosResponse)\n );\n })\n }\n\n getInstanceHistoricAggregate(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n aggFunction: HistoricAggregateFunction,\n periode: string,\n params: ServiceInstanceHistoricAggregateParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>> {\n // return robotcloudApi.get<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>(\n // `/projects/${prjId}/services/RoomGuestStatus_1/instances/${instanceId}/historic/data/aggregate`, {\n // params: {\n // start_time: startTime,\n // end_time: endTime,\n // function: aggFunction,\n // periode,\n // ...params\n // }\n // }\n // )\n\n return new Promise((resolve, reject) => {\n fetch(`./historic-agg-${periode}-${aggFunction}-guest-status-data-sample.json`)\n .then((response) => response.json())\n .then((json) => resolve({\n data: json\n } as AxiosResponse)\n );\n })\n }\n}\n\nexport const roomGuestStatusClient = new RoomGuestStatusClient()","import type { AxiosResponse } from \"axios\";\n\nimport robotcloudApi from \"robotCloudApi\";\nimport { \n HistoricAggregateFunction,\n RoomGuestStatus1AlertEventValue,\n RoomGuestStatus1EventValue,\n RoomGuestStatusInstanceConfigParams,\n ServiceDataMeasurement, \n ServiceDataRequestParams, \n ServiceInstanceHistoricAggregateParams, \n ServiceInstanceHistoricParams, \n ServiceTypeClient \n} from \"../../../types/services\";\n\nclass RoomGuestStatusClient implements ServiceTypeClient< RoomGuestStatus1AlertEventValue, \n RoomGuestStatus1EventValue, \n RoomGuestStatusInstanceConfigParams> {\n\n getAlerts(\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomGuestStatus1AlertEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomGuestStatus1AlertEventValue>[]>(\n `/projects/${prjId}/services/RoomGuestStatus_1/alert`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getData (\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>(\n `/projects/${prjId}/services/RoomGuestStatus_1/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getInstanceConfiguration (\n prjId: string,\n instanceId: string\n ): Promise<AxiosResponse<RoomGuestStatusInstanceConfigParams>> {\n return robotcloudApi.get<RoomGuestStatusInstanceConfigParams>(\n `/projects/${prjId}/services/RoomGuestStatus_1/instances/${instanceId}/configuration`\n )\n }\n\n putInstanceConfiguration (\n prjId: string,\n instanceId: string,\n data: RoomGuestStatusInstanceConfigParams\n ): Promise<AxiosResponse<RoomGuestStatusInstanceConfigParams>> {\n return robotcloudApi.put<RoomGuestStatusInstanceConfigParams>(\n `/projects/${prjId}/services/RoomGuestStatus_1/instances/${instanceId}/configuration`,\n data\n )\n }\n\n getInstanceHistoric(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n params: ServiceInstanceHistoricParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>> {\n // return robotcloudApi.get<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>(\n // `/projects/${prjId}/services/RoomGuestStatus_1/instances/${instanceId}/historic/data`, {\n // params: {\n // start_time: startTime,\n // end_time: endTime,\n // ...params\n // }\n // }\n // )\n return new Promise((resolve, reject) => {\n fetch('./historic-guest-status-data-sample.json')\n .then((response) => response.json())\n .then((json) => resolve({\n data: json\n } as AxiosResponse)\n );\n })\n }\n\n getInstanceHistoricAggregate(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n aggFunction: HistoricAggregateFunction,\n periode: string,\n params: ServiceInstanceHistoricAggregateParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomGuestStatus1EventValue>[]>(\n `/projects/${prjId}/services/RoomGuestStatus_1/instances/${instanceId}/historic/data/aggregate`, {\n params: {\n start_time: startTime,\n end_time: endTime,\n function: aggFunction,\n periode,\n ...params\n }\n }\n )\n }\n}\n\nexport const roomGuestStatusClient = new RoomGuestStatusClient()","import type { AxiosResponse } from \"axios\";\n\nimport robotcloudApi from \"robotCloudApi\";\nimport { \n AirQuality1AlertEventValue, AirQuality1DataEventValue, HistoricAggregateFunction, ServiceDataMeasurement, \n ServiceDataRequestParams, \n ServiceInstanceHistoricAggregateParams, \n ServiceInstanceHistoricParams, \n ServiceTypeClient \n} from \"../../../types/services\";\n\nclass AirQualityClient implements ServiceTypeClient<AirQuality1AlertEventValue, \n AirQuality1DataEventValue,\n any> {\n\n getAlerts(\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<AirQuality1AlertEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<AirQuality1AlertEventValue>[]>(\n `/projects/${prjId}/services/AirQuality_1/alert`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getData (\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<AirQuality1DataEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<AirQuality1DataEventValue>[]>(\n `/projects/${prjId}/services/AirQuality_1/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getInstanceConfiguration<T> (\n prjId: string,\n instanceId: string\n ): Promise<AxiosResponse<T>> {\n throw Error(\"Not implemented method\")\n }\n\n putInstanceConfiguration<T> (\n prjId: string,\n instanceId: string,\n data: T\n ): Promise<AxiosResponse<T>> {\n throw Error(\"Not implemented method\")\n }\n\n getInstanceHistoric(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n params: ServiceInstanceHistoricParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<AirQuality1DataEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<AirQuality1DataEventValue>[]>(\n `/projects/${prjId}/services/AirQuality_1/instances/${instanceId}/configuration`, {\n params: {\n start_time: startTime,\n end_time: endTime,\n ...params\n }\n }\n )\n }\n\n getInstanceHistoricAggregate(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n aggFunction: HistoricAggregateFunction,\n periode: string,\n params: ServiceInstanceHistoricAggregateParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<AirQuality1DataEventValue>[]>> {\n // throw Error(\"Not implemented method\")\n return new Promise((resolve, reject) => {\n fetch(`./historic-agg-${periode}-${aggFunction}-air-quality-data-sample.json`)\n .then((response) => response.json())\n .then((json) => resolve({\n data: json\n } as AxiosResponse)\n );\n })\n }\n}\n\n\nexport const airQualityClient = new AirQualityClient()","import type { AxiosResponse } from \"axios\";\n\nimport robotcloudApi from \"robotCloudApi\";\nimport { \n AirQuality1AlertEventValue, AirQuality1DataEventValue, HistoricAggregateFunction, ServiceDataMeasurement, \n ServiceDataRequestParams, \n ServiceInstanceHistoricAggregateParams, \n ServiceInstanceHistoricParams, \n ServiceTypeClient \n} from \"../../../types/services\";\n\nclass AirQualityClient implements ServiceTypeClient<AirQuality1AlertEventValue, \n AirQuality1DataEventValue,\n any> {\n\n getAlerts(\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<AirQuality1AlertEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<AirQuality1AlertEventValue>[]>(\n `/projects/${prjId}/services/AirQuality_1/alert`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getData (\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<AirQuality1DataEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<AirQuality1DataEventValue>[]>(\n `/projects/${prjId}/services/AirQuality_1/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getInstanceConfiguration<T> (\n prjId: string,\n instanceId: string\n ): Promise<AxiosResponse<T>> {\n throw Error(\"Not implemented method\")\n }\n\n putInstanceConfiguration<T> (\n prjId: string,\n instanceId: string,\n data: T\n ): Promise<AxiosResponse<T>> {\n throw Error(\"Not implemented method\")\n }\n\n getInstanceHistoric(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n params: ServiceInstanceHistoricParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<AirQuality1DataEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<AirQuality1DataEventValue>[]>(\n `/projects/${prjId}/services/AirQuality_1/instances/${instanceId}/configuration`, {\n params: {\n start_time: startTime,\n end_time: endTime,\n ...params\n }\n }\n )\n }\n\n getInstanceHistoricAggregate(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n aggFunction: HistoricAggregateFunction,\n periode: string,\n params: ServiceInstanceHistoricAggregateParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<AirQuality1DataEventValue>[]>> {\n throw Error(\"Not implemented method\")\n }\n}\n\n\nexport const airQualityClient = new AirQualityClient()","import { setCheckTokenFunction } from \"robotCloudApi\"\nimport robotcloudApi from \"robotCloudApi\"\n\nexport * as robotcloudClient from \"robotCloudClient\"\nexport * as robotCloudToken from \"helpers/robotCloudToken\"\n\nexport * from \"client/services\"\n\nexport {\n robotcloudApi,\n setCheckTokenFunction,\n}\n\nexport type * from \"../types/ProjectClassifer\"\nexport type * from \"../types/ProjectTag\"\nexport type * from \"../types/RobotCloudClient\"\nexport type * from \"../types/services\"\nexport type * from \"../types/ServiceInstance\"\nexport type * from \"../types/ServiceInstanceRead\"\nexport type * from \"../types/Token\"","import type { AxiosResponse } from \"axios\";\n\nimport { useLogger } from 'utils/logger';\nimport robotcloudApi from \"robotCloudApi\";\nimport { \n LocationServiceInstancesRequestParams, ProjectDetailsRequestParams, ProjectLocationsRequestParams, \n ProjectRequestParams, ProjectTagRequestParams, RobotCloudDeviceDetails, RobotCloudNamedItem, \n RobotCloudProject, RobotCloudProjectDetails, RobotCloudServiceType, RobotCloudUserDetails, \n RoomConsumes1AlertEventValue, RoomConsumes1DataEventValue, RoomGrouping1DataEventValue, \n RoomGrouping1InstanceDeviceConfig, ServiceInstanceDataRequestParams, \n ServiceInstancesRequestParams \n} from \"../types/RobotCloudClient\";\nimport { RobotCloudServiceInstance, ServiceInstanceDetails } from \"../types/ServiceInstance\";\nimport { ClassifierDetails } from \"../types/ProjectClassifer\";\nimport { ProjectTag, ProjectTagTreeNode, ProjectTagsTree } from \"../types/ProjectTag\";\nimport { ServiceDataMeasurement, ServiceDataRequestParams } from \"../types/services\";\n\n\nconst logger = useLogger(\"robotcloud-client\")\n\n\n\ninterface RobotCloudLocationDetails {\n id: string;\n name: string;\n description: string;\n project: string;\n tags: string[]\n}\n\nexport const getLocationServiceInstances = (\n prjId: string,\n locId: string,\n service_type: RobotCloudServiceType,\n params?: LocationServiceInstancesRequestParams\n): Promise<AxiosResponse<RobotCloudServiceInstance[]>> => {\n return robotcloudApi.get<RobotCloudServiceInstance[]>(`projects/${prjId}/locations/${locId}/services/${service_type}/instances`, {\n params,\n });\n}\n\n\n// USERS ENDPOINTS\nexport const getUser = (\n username: string\n ): Promise<AxiosResponse<RobotCloudUserDetails>> => {\n return robotcloudApi.get<RobotCloudUserDetails>(`users/${username}`);\n };\n\n// PROJECT ENDPOINTS\nexport const getProjects = (\n params?: ProjectRequestParams\n): Promise<AxiosResponse<RobotCloudProject[]>> => {\n return robotcloudApi.get<RobotCloudProject[]>(\"projects\", {\n params\n });\n};\n\nexport const getProjectDetails = (\n prjId: string,\n params?: ProjectDetailsRequestParams\n): Promise<AxiosResponse<RobotCloudProjectDetails>> => {\n return robotcloudApi.get<RobotCloudProjectDetails>(`projects/${prjId}`, {\n params,\n });\n};\n\n// PROJECT SUBSYSTEMS ENDPOINTS\n\nexport const getProjectSubsystem = (\n prjId: string,\n subsysId: string\n) => {\n return robotcloudApi.get<RobotCloudNamedItem>(`projects/${prjId}/subsystems/${subsysId}`);\n}\n\nexport const getLocations = (\n prjId: string,\n params?: ProjectLocationsRequestParams\n): Promise<AxiosResponse<RobotCloudNamedItem[]>> => {\n return robotcloudApi.get<RobotCloudNamedItem[]>(`projects/${prjId}/locations`, {\n params,\n });\n};\n\nexport const getLocation = (\n locationId: string\n): Promise<AxiosResponse<RobotCloudLocationDetails>> => {\n return robotcloudApi.get<RobotCloudLocationDetails>(`locations/${locationId}`, { });\n};\n\nexport const getServiceInstances = (\n prjId: string,\n service_type: string,\n params?: ServiceInstancesRequestParams\n): Promise<AxiosResponse<RobotCloudServiceInstance[]>> => {\n return robotcloudApi.get<RobotCloudServiceInstance[]>(`projects/${prjId}/services/${service_type}/instances`, {\n params,\n });\n}\n\nexport const getServiceInstance = (\n prjId: string,\n service_type: string,\n service_id: string\n) => {\n return robotcloudApi.get<ServiceInstanceDetails>(`projects/${prjId}/services/${service_type}/instances/${service_id}`);\n}\n\nexport const getClassifier = (\n classifierId: string\n) => {\n return robotcloudApi.get<ClassifierDetails>(`classifiers/${classifierId}`);\n}\n\nexport const getTags = (\n prjId: string,\n params?: ProjectTagRequestParams\n): Promise<AxiosResponse<ProjectTag[]>> => {\n logger.info(`Get project ${prjId} tags`)\n return robotcloudApi.get<ProjectTag[]>(`projects/${prjId}/tags`, {\n params,\n });\n};\n\nexport const getTagsTree = async (\n prjId: string,\n maxDepth: number = 2,\n params?: ProjectTagRequestParams\n): Promise<ProjectTagsTree> => {\n logger.info(`Get project ${prjId} tags tree`)\n if (!params) {\n params = {} as ProjectTagRequestParams \n }\n params.no_parent = true;\n\n const tags = await getTagsChildren(prjId, 0, undefined, undefined, maxDepth)\n return {root: tags} as ProjectTagsTree;\n};\n\nexport const getTagsChildren = async (\n prjId: string,\n level: number = 0,\n parent_id?: string,\n params?: ProjectTagRequestParams,\n maxDepth?: number\n): Promise<ProjectTagTreeNode[]> => {\n logger.debug(`Get project ${prjId} tags children: ${parent_id}`)\n if (!params) {\n params = {} as ProjectTagRequestParams \n }\n params.no_parent = !parent_id;\n params.parent_tag = parent_id;\n\n const tags = await getTags(prjId, params)\n if (tags.data.length == 0) {\n return [];\n }\n \n const response: ProjectTagTreeNode[] = []\n const requests: any[] = []\n for (let i = 0; i < tags.data.length; i++) {\n const element = tags.data[i]\n const node = {\n tag: element\n } as ProjectTagTreeNode;\n response.push(node)\n if (maxDepth && level < maxDepth) {\n requests.push(\n getTagsChildren(prjId, level + 1, element.id, params, maxDepth)\n )\n }\n }\n\n const responses = await Promise.all(requests)\n let i = 0;\n responses.forEach(element => {\n response[i].children = element\n i++\n });\n \n return response;\n\n}\n\n/* PROJECT DEVICES ENDPOINTS */\nexport const getDeviceDetails = (\n deviceId: string,\n): Promise<AxiosResponse<RobotCloudDeviceDetails>> => {\n return robotcloudApi.get<RobotCloudDeviceDetails>(`devices/${deviceId}`);\n}\n\n/* SERVICES INSTANCES DATA ENDPOINTS */\n\nexport const getRoomGrouping1ServiceData = (\n prjId: string,\n params?: ServiceDataRequestParams\n): Promise<AxiosResponse<ServiceDataMeasurement<RoomGrouping1DataEventValue>[]>> => {\n return robotcloudApi.get<ServiceDataMeasurement<RoomGrouping1DataEventValue>[]>(\n `/projects/${prjId}/services/RoomGrouping_1/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n}\n\nexport const getRoomConsumesInstanceServiceData = (\n prjId: string,\n instanceId: string,\n params?: ServiceInstanceDataRequestParams\n): Promise<AxiosResponse<ServiceDataMeasurement<RoomConsumes1DataEventValue>>> => {\n return robotcloudApi.get<ServiceDataMeasurement<RoomConsumes1DataEventValue>>(\n `/projects/${prjId}/services/RoomConsumes_1/instances/${instanceId}/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n}\n\n\n/* SERVICES INSTANCES DEVICE INGORMATION ENDPOINTS */\n\n\nexport const getRoomGrouping1InstanceDeviceConfig = (\n prjId: string,\n instanceId: string,\n): Promise<AxiosResponse<RoomGrouping1InstanceDeviceConfig>> => {\n return robotcloudApi.put<RoomGrouping1InstanceDeviceConfig>(\n `/projects/${prjId}/services/RoomGrouping_1/instances/${instanceId}/configuration`\n )\n}\n","import axios from \"axios\";\nimport { useLogger } from 'utils/logger';\nimport robotcloudApi from \"robotCloudApi\";\nimport { CheckTokenResponse, RobotCloudJWTPayload } from \"../../types/Token\";\n\nconst logger = useLogger(\"robotcloud-token\")\n\nconst MINUTES_BEFORE_EXPIRATION_RENEW = 20; // TODO: Environment variable\n\n\n\nfunction parseJwt(token: string) {\n if (!token) {\n return;\n }\n return JSON.parse(atob(token.split('.')[1])); \n}\n\nexport interface RobotCloudNewTokenResponse {\n access: string;\n renew: string;\n}\n\nexport const decodeToken = (token: string): RobotCloudJWTPayload | undefined => {\n const payload = parseJwt(token);\n if (!payload) {\n return undefined\n }\n\n return payload as RobotCloudJWTPayload;\n};\n\nexport const isTokenExpired = (payload: RobotCloudJWTPayload): boolean => {\n const expirationDate = new Date(payload.exp * 1000);\n expirationDate.setMinutes(\n expirationDate.getMinutes() - MINUTES_BEFORE_EXPIRATION_RENEW\n );\n const currentDate = new Date();\n return currentDate >= expirationDate;\n};\n\nexport const renewToken = async (\n renew_token: string\n): Promise<CheckTokenResponse> => {\n logger.debug(\"Renewing token ...\");\n const cloudUrl = robotcloudApi.defaults.baseURL\n const { data } = await axios.get(cloudUrl + \"login/renew\", {\n headers: {\n Authorization: `Bearer ${renew_token}`,\n },\n });\n\n return {\n renewed: true,\n access: data[\"access\"][\"token\"],\n renew: data[\"renew\"][\"token\"],\n } as CheckTokenResponse;\n};\n\nexport const validateToken = async (\n access_token: string\n): Promise<boolean> => {\n logger.debug(\"Validate token ...\");\n const payload = decodeToken(access_token)\n if (!payload) {\n return false\n }\n const cloudUrl = robotcloudApi.defaults.baseURL\n try {\n const { data } = await axios.get(\n cloudUrl + `users/${payload.sub}`,\n {\n headers: {\n Authorization: `Bearer ${access_token}`,\n },\n }\n ); \n } catch (error) {\n if (axios.isAxiosError(error)) {\n logger.warn(`${error.message}: ${error.response?.data?.message ?? ''}`)\n } else {\n logger.warn(error)\n }\n return false;\n }\n\n return true\n};\n","import type { AxiosResponse } from \"axios\";\n\nimport robotcloudApi from \"robotCloudApi\";\nimport { \n HistoricAggregateFunction, ServiceDataMeasurement, ServiceDataRequestParams, \n ServiceInstanceHistoricAggregateParams, ServiceInstanceHistoricParams, \n ServiceTypeClient \n} from \"../../../types/services\";\nimport { \n RoomConsumes1AlertEventValue, RoomConsumes1DataEventValue, ServiceInstanceDataRequestParams \n} from \"../../../types/RobotCloudClient\";\n\nclass RoomConsumesClient implements ServiceTypeClient<RoomConsumes1AlertEventValue, \n RoomConsumes1DataEventValue,\n any> {\n\n getAlerts(\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomConsumes1AlertEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomConsumes1AlertEventValue>[]>(\n `/projects/${prjId}/services/RoomConsumes_1/alert`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getData (\n prjId: string,\n params?: ServiceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomConsumes1DataEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomConsumes1DataEventValue>[]>(\n `/projects/${prjId}/services/RoomConsumes_1/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getInstanceData = (\n prjId: string,\n instanceId: string,\n params?: ServiceInstanceDataRequestParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomConsumes1DataEventValue>>> => {\n return robotcloudApi.get<ServiceDataMeasurement<RoomConsumes1DataEventValue>>(\n `/projects/${prjId}/services/RoomConsumes_1/instances/${instanceId}/data`,\n { \n params,\n headers: {\n \"Accept\": 'application/json'\n }\n }\n )\n }\n\n getInstanceConfiguration<T> (\n prjId: string,\n instanceId: string\n ): Promise<AxiosResponse<T>> {\n throw Error(\"Not implemented method\")\n }\n\n putInstanceConfiguration<T> (\n prjId: string,\n instanceId: string,\n data: T\n ): Promise<AxiosResponse<T>> {\n throw Error(\"Not implemented method\")\n }\n\n getInstanceHistoric(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n params: ServiceInstanceHistoricParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomConsumes1DataEventValue>[]>> {\n return robotcloudApi.get<ServiceDataMeasurement<RoomConsumes1DataEventValue>[]>(\n `/projects/${prjId}/services/RoomConsumes_1/instances/${instanceId}/configuration`, {\n params: {\n start_time: startTime,\n end_time: endTime,\n ...params\n }\n }\n )\n }\n\n getInstanceHistoricAggregate(\n prjId: string,\n instanceId: string,\n startTime: Date,\n endTime: Date,\n aggFunction: HistoricAggregateFunction,\n periode: string,\n params: ServiceInstanceHistoricAggregateParams\n ): Promise<AxiosResponse<ServiceDataMeasurement<RoomConsumes1DataEventValue>[]>> {\n throw Error(\"Not implemented method\")\n }\n}\n\n\nexport const roomConsumesClient = new RoomConsumesClient()","import { RoomClime1AlertEventValue, RoomClime1EventValue, RoomClimeInstanceConfigParams } from \"../../../types/RobotCloudClient\"\nimport { \n AirQuality1AlertEventValue, \n AirQuality1DataEventValue, \n RoomGuestStatus1AlertEventValue, \n RoomGuestStatus1EventValue, \n RoomGuestStatusInstanceConfigParams, \n ServiceTypeClient \n} from \"../../../types/services\"\n\nimport { roomConsumesClient } from \"./room-consumes-1\"\n\nconst useMocks = false\n\nconst { roomClimeClient }: { roomClimeClient: ServiceTypeClient< RoomClime1AlertEventValue, \n RoomClime1EventValue, \n RoomClimeInstanceConfigParams>} = useMocks ? require(\"./room-clime-1.mock\") : require(\"./room-clime-1\")\nconst { roomGuestStatusClient }: { roomGuestStatusClient: ServiceTypeClient<RoomGuestStatus1AlertEventValue, \n RoomGuestStatus1EventValue, \n RoomGuestStatusInstanceConfigParams>} = useMocks ? require(\"./room-guest-status-1.mock\") : require(\"./room-guest-status-1\")\nconst { airQualityClient }: { airQualityClient: ServiceTypeClient<AirQuality1AlertEventValue, \n AirQuality1DataEventValue,\n any>} = useMocks ? require(\"./air-quality-1.mock\") : require(\"./air-quality-1\")\n\nexport {\n roomClimeClient,\n roomGuestStatusClient,\n airQualityClient,\n roomConsumesClient\n}"],"mappings":"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","names":["checkToken","roomClimeClient","RoomClimeClient","roomGuestStatusClient","RoomGuestStatusClient","airQualityClient","AirQualityClient","logger","i","axios","logger","roomClimeClient","roomGuestStatusClient","airQualityClient"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robotbas/robotcloud-client",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0-rc.2",
4
4
  "description": "RobotCloud API client",
5
5
  "author": {
6
6
  "name": "Bernat Galmés Rubert",
@@ -10,7 +10,8 @@
10
10
  "module": "./dist/index.mjs",
11
11
  "types": "./dist/index.d.ts",
12
12
  "files": [
13
- "dist"
13
+ "dist",
14
+ "types/*.d.ts"
14
15
  ],
15
16
  "scripts": {
16
17
  "build": "tsup",
@@ -0,0 +1,5 @@
1
+ export interface ClassifierDetails {
2
+ id: string;
3
+ name: string;
4
+ description: string;
5
+ }
@@ -0,0 +1,14 @@
1
+ export interface ProjectTagTreeNode {
2
+ tag: ProjectTag;
3
+ children: ProjectTagTreeNode[];
4
+ }
5
+
6
+ export interface ProjectTagsTree {
7
+ root: ProjectTagTreeNode[]
8
+ }
9
+
10
+ export interface ProjectTag {
11
+ id: string;
12
+ name: string;
13
+ parent_id: string;
14
+ }
@@ -0,0 +1,175 @@
1
+
2
+ export type TemperatureUnit = "CELSIUS" | "FAHRENHEIT"
3
+ export type RegimState = "COLD"|"HEAT"|"AUTO"
4
+
5
+ export type ProjectAccessLevel = "BLOCKED" | "RESTRICTED" | "BASIC" | "ADVANCED"
6
+ export type AppAccessLevel = "BLOCKED" | "STANDARD" | "ADVANCED" | "ADMIN"
7
+
8
+ export type RobotCloudServiceType = "RoomClime_1"|"RoomGuestStatus_1"
9
+
10
+ // Desired fancoil speed (0 = Auto, 1..3 = Manual Speed)
11
+ export type FancoilSpeedState = 0|1|2|3;
12
+
13
+ export interface ProjectRequestParams {
14
+
15
+ }
16
+
17
+ export interface ProjectDetailsRequestParams {
18
+
19
+ }
20
+ export interface SubsystemRequestParams {
21
+ subsystem_id?: string;
22
+ }
23
+
24
+ export interface PaginableRequestParams {
25
+ startIndex?: number;
26
+ maxSize?: number;
27
+ }
28
+
29
+ export interface ProjectLocationsRequestParams extends SubsystemRequestParams, PaginableRequestParams {
30
+ tag_id?: string | string[];
31
+ }
32
+
33
+
34
+ export interface ServiceInstanceDataRequestParams {
35
+
36
+ }
37
+
38
+ export interface ProjectTagRequestParams extends PaginableRequestParams {
39
+ parent_tag?: string;
40
+ no_parent?: boolean;
41
+ }
42
+
43
+ export interface ServiceInstancesRequestParams extends SubsystemRequestParams, PaginableRequestParams {
44
+ id?: string;
45
+ name?: string;
46
+ location_id?: string;
47
+ device_id?: string;
48
+ tag_id?: string[];
49
+ }
50
+
51
+ export interface LocationServiceInstancesRequestParams extends SubsystemRequestParams, PaginableRequestParams {
52
+ tag_id?: string[];
53
+ }
54
+
55
+ export interface RoomClimeInstanceConfigParams {
56
+ temperature_set_point?: number;
57
+ humidity_set_point?: number;
58
+ regim?: RegimState;
59
+ eco_mode?: "STANDBY" | "ECO" | "VIP";
60
+ fancoil_speed?: 0 | 1 | 2 | 3;
61
+ on?: boolean;
62
+ high_temperature_level?: number;
63
+ low_temperature_level?: number;
64
+ high_humidity_level?: number;
65
+ fancoil_on_time_limit?: number;
66
+ temperature_units?: TemperatureUnit;
67
+ }
68
+
69
+
70
+ /** RESPONSE **/
71
+
72
+ export interface RobotCloudNamedItem {
73
+ id: string;
74
+ name: string;
75
+ }
76
+
77
+ export interface RobotCloudProject {
78
+ id: string;
79
+ name: string;
80
+ organization: string;
81
+ }
82
+
83
+ /** USERS */
84
+ export interface RobotCloudUserDetails {
85
+ username: string;
86
+ name: string;
87
+ last_name: string;
88
+ email: string;
89
+ org_id: string;
90
+ org_access: number;
91
+ }
92
+
93
+
94
+ export interface RobotCloudProjectDetails extends RobotCloudProject {
95
+ version: number;
96
+ description?: string;
97
+ country?: string;
98
+ timezone?: string;
99
+ image_url?: string;
100
+ longitude?: number;
101
+ latitude?: number;
102
+ application_enabled?: boolean;
103
+ access_level?: ProjectAccessLevel;
104
+ app_access_level?: AppAccessLevel;
105
+ }
106
+
107
+ export interface RobotCloudDeviceDetails extends RobotCloudNamedItem {
108
+ description?: string;
109
+ location: string;
110
+ address: {
111
+ domain: number;
112
+ zone: number;
113
+ id: number;
114
+ };
115
+ type: number;
116
+ configuration_type: string;
117
+ tags: string;
118
+ }
119
+
120
+ /** SERVICE EVENTS VALUES **/
121
+ export interface RoomClime1AlertEventValue {
122
+ high_temperature: boolean;
123
+ low_temperature: boolean;
124
+ high_humidity: boolean;
125
+ fancoil_on_overtime: boolean;
126
+ }
127
+ export interface RoomClime1EventValue {
128
+ temperature: number;
129
+ humidity: number;
130
+ fancoil_speed: number;
131
+ fancoil_manual: boolean;
132
+ on: boolean;
133
+ temperature_set_point: number;
134
+ humidity_set_point: number;
135
+ regim: RegimState;
136
+ eco_mode: "STANDBY"|"ECO"|"VIP";
137
+ }
138
+
139
+ export interface RoomConsumes1AlertEventValue {
140
+ high_daily_energy_electric: boolean;
141
+ high_daily_energy_thermal: boolean;
142
+ high_daily_hot_water: boolean;
143
+ high_daily_cold_water: boolean;
144
+ }
145
+
146
+ export interface RoomGrouping1DataEventValue {
147
+ replica_1_active: boolean;
148
+ replica_2_active: boolean;
149
+ replica_3_active: boolean;
150
+ }
151
+
152
+ export interface RoomConsumes1DataEventValue {
153
+ energy_electric: number;
154
+ energy_thermal: number;
155
+ hot_water: number;
156
+ cold_water: number;
157
+ daily_energy_electric: number;
158
+ daily_energy_thermal: number;
159
+ daily_hot_water: number;
160
+ daily_cold_water: number;
161
+ daily_co2_footprint: number;
162
+ daily_tree_equivalent: number;
163
+ }
164
+
165
+ /** SERVICE INSTANCES DEVICE CONFIG */
166
+ export interface ServiceInstanceDeviceConfig {
167
+ device: string;
168
+ }
169
+
170
+ export interface RoomGrouping1InstanceDeviceConfig {
171
+ Main: ServiceInstanceDeviceConfig;
172
+ Replica_1: ServiceInstanceDeviceConfig;
173
+ Replica_2: ServiceInstanceDeviceConfig;
174
+ Replica_3: ServiceInstanceDeviceConfig;
175
+ }
@@ -0,0 +1,12 @@
1
+ import { RobotCloudNamedItem } from "./RobotCloudClient";
2
+
3
+ export interface RobotCloudServiceInstance extends RobotCloudNamedItem {
4
+ service: string;
5
+ }
6
+
7
+ export interface ServiceInstanceDetails extends RobotCloudServiceInstance {
8
+ description: string;
9
+ tags: string[];
10
+ subsystems: string[];
11
+ classifier: string;
12
+ }
@@ -0,0 +1,5 @@
1
+ export interface ServiceInstanceRead<T> {
2
+ instance: string;
3
+ time_mark: string;
4
+ value: T;
5
+ }
@@ -0,0 +1,12 @@
1
+ export interface CheckTokenResponse {
2
+ renewed: boolean;
3
+ invalid: boolean;
4
+ access: string;
5
+ renew: string;
6
+ }
7
+
8
+ export interface RobotCloudJWTPayload {
9
+ exp: number;
10
+ sub: string; // username
11
+ org: string; // organization
12
+ }
@@ -0,0 +1,5 @@
1
+ import { ProjectAccessLevel } from "./RobotCloudClient";
2
+
3
+ export interface RobotCloudPermissionsHelper {
4
+ checkProjectAccess(prjId: string, required_project_access: ProjectAccessLevel): Promise<boolean>;
5
+ }
@@ -0,0 +1,108 @@
1
+ import { AxiosResponse } from "axios";
2
+ import { ServiceInstanceRead } from "./ServiceInstanceRead";
3
+ import { SubsystemRequestParams } from "./RobotCloudClient";
4
+
5
+ export type MeasurementStatus = "GOOD"|"NOT_MEASURED"|"INVALID_VALUE"|"DEVICE_ERROR";
6
+
7
+ export interface ServiceDataMeasurement<T> extends ServiceInstanceRead<T> {
8
+ status: MeasurementStatus;
9
+ }
10
+
11
+ export interface ServiceDataRequestParams extends SubsystemRequestParams {
12
+ tag_id?: string | string[];
13
+ }
14
+ export interface ServiceInstanceHistoricAggregateParams {
15
+ offset?: string;
16
+ property?: any[];
17
+ maxSize?: number;
18
+ }
19
+ export interface ServiceInstanceHistoricParams {
20
+ status?: MeasurementStatus;
21
+ property?: any[];
22
+ maxSize?: number;
23
+ }
24
+
25
+ export interface AirQuality1DataEventValue {
26
+ co2: number;
27
+ }
28
+
29
+ export interface AirQuality1AlertEventValue {
30
+ high_co2: boolean;
31
+ }
32
+
33
+
34
+ export interface RoomGuestStatus1AlertEventValue {
35
+ door_open_overtime: boolean;
36
+ window_open_overtime: boolean;
37
+ medical_alarm: boolean;
38
+ }
39
+
40
+ export interface RoomGuestStatus1EventValue {
41
+ sold: boolean;
42
+ occupied: boolean;
43
+ do_not_disturb: boolean;
44
+ make_up_room: boolean;
45
+ tray_status: "IDLE"|'READY'|'FINISH';
46
+ remote_occupation: boolean;
47
+ door_open: boolean;
48
+ window_open: boolean;
49
+ medical_alarm: boolean; // TODO: ???
50
+ }
51
+
52
+ export interface RoomGuestStatusInstanceConfigParams {
53
+ sold?: boolean;
54
+ do_not_disturb?: boolean;
55
+ make_up_room?: boolean;
56
+ remote_occupation?: boolean;
57
+ door_open_time_limit?: number;
58
+ window_open_time_limit?: number;
59
+ medical_alarm?: boolean;
60
+ }
61
+
62
+
63
+ ////
64
+ // Generic interface types
65
+ ////
66
+
67
+ export type HistoricAggregateFunction = "count"|"increase"|"mean"|"first"|"last"|"max"|"min"|"amax"|"amin"|"pmax"|"pmin"|"nmax"|"nmin";
68
+
69
+ export interface ServiceTypeClient<T_ALERTS, T_DATA, T_CONFIG> {
70
+ getAlerts(
71
+ prjId: string,
72
+ params?: ServiceDataRequestParams
73
+ ): Promise<AxiosResponse<ServiceDataMeasurement<T_ALERTS>[]>>;
74
+
75
+ getData (
76
+ prjId: string,
77
+ params?: ServiceDataRequestParams
78
+ ): Promise<AxiosResponse<ServiceDataMeasurement<T_DATA>[]>>;
79
+
80
+ getInstanceConfiguration (
81
+ prjId: string,
82
+ instanceId: string
83
+ ): Promise<AxiosResponse<T_CONFIG>>;
84
+
85
+ putInstanceConfiguration (
86
+ prjId: string,
87
+ instanceId: string,
88
+ data: T_CONFIG
89
+ ): Promise<AxiosResponse<T_CONFIG>>;
90
+
91
+ getInstanceHistoric (
92
+ prjId: string,
93
+ instanceId: string,
94
+ startTime: Date,
95
+ endTime: Date,
96
+ params: ServiceInstanceHistoricParams
97
+ ): Promise<AxiosResponse<ServiceDataMeasurement<T_DATA>[]>>;
98
+
99
+ getInstanceHistoricAggregate(
100
+ prjId: string,
101
+ instanceId: string,
102
+ startTime: Date,
103
+ endTime: Date,
104
+ aggFunction: HistoricAggregateFunction,
105
+ periode: string,
106
+ params: ServiceInstanceHistoricAggregateParams
107
+ ): Promise<AxiosResponse<ServiceDataMeasurement<T_DATA>[]>>;
108
+ }