Best JavaScript code snippet using playwright-internal
apiRequest.js
Source:apiRequest.js  
1/* eslint-disable consistent-return */2import 'isomorphic-fetch';3import { saveAs } from 'file-saver';4import {5  apiELBUrlLogin,6  apiELBUrlLogout,7  apiELBUrlGetSummaryExpenseList,8  apiELBUrlGetUserList,9  apiELBUrlGetRoleList,10  apiELBUrlGetFunctionList,11  apiELBUrlGetExpGrpList,12  apiELBUrlGetExpensedtl,13  apiELBUrlUpdateUserStatus,14  apiELBUrlUpdateLayout,15  apiELBUrlGetMenuItem,16  apiELBUrlGetCpList,17  apiELBUrlUpdateRole,18  apiELBUrlGrpList,19  apiELBUrlUpdateGrpList,20  // LoRa21  apiELBUrlActiveCode,22  apiELBUrlGetSummaryList,23  // apiELBUrlGetGWList,24  apiELBUrlGetNodeList,25  apiELBUrlBindingCode,26  apiELBUrlPublishGwCmd,27  apiELBUrlGetFwList,28  apiELBUrlGetHistoryList,29  apiELBUrlGetHistoryDtlList,30  apiELBUrlUploadFw,31  // apiELBUrlGetSensorList,32  apiELBUrlDelHistory,33  apiELBUrlUpdateExpGrp,34  apiELBUrlgetRoboticList,35  apiELBUrlgetScriptList,36  apiELBUrlUpdateRAScript,37  apiELBUrlgetSysList,38  apiELBUrlUpdateGrpListbyCp,39  // Dashboard40  apiGetLayout,41  apiPlan,42  apiELBUrlGetEventList,43  apiELBUrlMqttCtl,44  apiDL,45  // robotic arm46  apiGetEventList,47  // event page48  apiELBUrlGetSensorListE,49  apiELBUrlGetEventListE,50  apiELBUrlGetGWListE,51  apiEventType,52  // getSensorByfport,53  apiRpt,54  apiRptChk,55  // alert page56  apiELBUrlGetAlertList,57  apiELBUrlAddAlertList,58  apiELBUrlDelAlertList,59  // virtual shelf60  apiTrackCnt,61  apiTrack,62  apiTag,63  api1Tag,64  apiSteelBeenShelf,65  apiTagCnt,66  apiSteelCnt,67  apiSteelBeenShelfCnt,68  apiGetDevInfobyMac,69  // tagPage70  apiGetSearchFilter,71  apiGetSearchOption,72  apiGetTrackCnt,73  apiGetTrack,74  apiGetTagType,75  apiGetTagList,76  apiGetTrackByfilterTag,77  apiGetTrackByfilterValTag,78  apiUpdateTagByAdmin,79  apiInsertTagByAdmin,80  apiGetDevMeta,81  apiGetTagByMeta,82  apiShowField,83  apiUpdateMeta,84  // personnel page85  apiZoneShowField,86  // devicePage87  apiDev,88} from '../../urls.conf';89import { getAuthToken } from './storageUtility';90import { getTripleDES } from './tripleDES';91// const SystemApiPath = '/rest/sys';92// const UserApiPath = '/rest/usr';93// const UploadApiPath = '/rest/usr/upload';94class ApiRequest {95  constructor(apiUrl) {96    this.apiUrl = apiUrl;97    this.login = this.login.bind(this);98    this.logout = this.logout.bind(this);99    this.getSummaryExpenseList = this.getSummaryExpenseList.bind(this);100    this.getSummaryWaterExpenseList = this.getSummaryWaterExpenseList.bind(this);101    this.getUserList = this.getUserList.bind(this);102    this.getRoleList = this.getRoleList.bind(this);103    this.getRoleListSearch = this.getRoleListSearch.bind(this);104    this.getFunctionList = this.getFunctionList.bind(this);105    this.getExpGrpList = this.getExpGrpList.bind(this);106    this.getExpDtl = this.getExpDtl.bind(this);107    this.searchUserList = this.searchUserList.bind(this);108    this.updateUserStatus = this.updateUserStatus.bind(this);109    this.updateLayout = this.updateLayout.bind(this);110    this.getMenuItem = this.getMenuItem.bind(this);111    this.getCpList = this.getCpList.bind(this);112    this.addUsr = this.addUsr.bind(this);113    this.addRole = this.addRole.bind(this);114    this.delUsr = this.delUsr.bind(this);115    this.getGrpList = this.getGrpList.bind(this);116    this.updateRoleByGrp = this.updateRoleByGrp.bind(this);117    this.updateRoleByFunc = this.updateRoleByFunc.bind(this);118    // LoRa119    this.activeLoraGateway = this.activeLoraGateway.bind(this);120    this.getSummaryList = this.getSummaryList.bind(this);121    this.getGWList = this.getGWList.bind(this);122    this.getNodeList = this.getNodeList.bind(this);123    this.getFwList = this.getFwList.bind(this);124    this.getHistoryList = this.getHistoryList.bind(this);125    this.getHistoryDtlList = this.getHistoryDtlList.bind(this);126    this.bindingLoraGateway = this.bindingLoraGateway.bind(this);127    this.publishGwCmd = this.publishGwCmd.bind(this);128    this.uploadFw = this.uploadFw.bind(this);129    this.getSensorList = this.getSensorList.bind(this);130    this.delHistory = this.delHistory.bind(this);131    this.addFunc = this.addFunc.bind(this);132    this.updateFunc = this.updateFunc.bind(this);133    this.updateFuncinRole = this.updateFuncinRole.bind(this);134    this.addExpGrp = this.addExpGrp.bind(this);135    this.updateExpGrp = this.updateExpGrp.bind(this);136    this.deleteExpGrp = this.deleteExpGrp.bind(this);137    this.deleteRole = this.deleteRole.bind(this);138    this.delFunc = this.delFunc.bind(this);139    // Robotic140    this.getRoboticList = this.getRoboticList.bind(this);141    this.getScriptList = this.getScriptList.bind(this);142    this.uploadRAScript = this.uploadRAScript.bind(this);143    this.deleteRAScript = this.deleteRAScript.bind(this);144    this.editRAScript = this.editRAScript.bind(this);145    this.updateRAScript = this.updateRAScript.bind(this);146    this.getExecHistory = this.getExecHistory.bind(this);147    // Admin-CP148    this.addCp = this.addCp.bind(this);149    this.deleteCp = this.deleteCp.bind(this);150    this.editCp = this.editCp.bind(this);151    this.searchCpList = this.searchCpList.bind(this);152    this.updateGrpbyCp = this.updateGrpbyCp.bind(this);153    this.updateGrpbyCpEdit = this.updateGrpbyCpEdit.bind(this);154    // Admin-System155    this.getSysList = this.getSysList.bind(this);156    this.addSys = this.addSys.bind(this);157    this.editSys = this.editSys.bind(this);158    this.deleteSys = this.deleteSys.bind(this);159    this.searchSysList = this.searchSysList.bind(this);160    // Admin-Grp161    this.addGrp = this.addGrp.bind(this);162    this.editGrp = this.editGrp.bind(this);163    this.deleteGrp = this.deleteGrp.bind(this);164    this.searchGrpList = this.searchGrpList.bind(this);165    // Admin-Function166    this.getFunctionListSearch = this.getFunctionListSearch.bind(this);167    // Dashboard168    this.getLayout = this.getLayout.bind(this);169    this.getPlanList = this.getPlanList.bind(this);170    this.uploadPlan = this.uploadPlan.bind(this);171    this.delPlanList = this.delPlanList.bind(this);172    this.mqttCtl = this.mqttCtl.bind(this);173    this.mqttCtlAir = this.mqttCtlAir.bind(this);174    this.getEventListByMac = this.getEventListByMac.bind(this);175    this.dashboardDL = this.dashboardDL.bind(this);176    this.dashboardDLPost = this.dashboardDLPost.bind(this);177    // event page178    this.getSensorListE = this.getSensorListE.bind(this);179    this.getEventList = this.getEventList.bind(this);180    this.getReportList = this.getReportList.bind(this);181    this.getEventType = this.getEventType.bind(this);182    this.getSensorByfport = this.getSensorByfport.bind(this);183    this.getReportCnt = this.getReportCnt.bind(this);184    // alert page185    this.getAlertList = this.getAlertList.bind(this);186    this.addAlertList = this.addAlertList.bind(this);187    this.delAlertList = this.delAlertList.bind(this);188    // virtual shelf189    this.getSteelCntInShelf = this.getSteelCntInShelf.bind(this);190    this.getSteelInShelf = this.getSteelInShelf.bind(this);191    this.getShelfList = this.getShelfList.bind(this);192    this.getSteelList = this.getSteelList.bind(this);193    this.getSteelBeenShelfList = this.getSteelBeenShelfList.bind(this);194    this.getTagCnt = this.getTagCnt.bind(this);195    this.getSteelCnt = this.getSteelCnt.bind(this);196    this.getSteelBeenShelfCnt = this.getSteelBeenShelfCnt.bind(this);197    this.editShelf = this.editShelf.bind(this);198    this.editSteel = this.editSteel.bind(this);199    this.getDevInfobyMac = this.getDevInfobyMac.bind(this);200    // Tag page201    this.getSearchFilter = this.getSearchFilter.bind(this);202    this.getSearchOptionWithRoot = this.getSearchOptionWithRoot.bind(this);203    this.getSearchOptionWithParentVal = this.getSearchOptionWithParentVal.bind(this);204    this.getTrackCount = this.getTrackCount.bind(this);205    this.getTrack = this.getTrack.bind(this);206    this.getTagType = this.getTagType.bind(this);207    this.getTagList = this.getTagList.bind(this);208    this.getTagListAll = this.getTagListAll.bind(this);209    this.getTrackByfilterTag = this.getTrackByfilterTag.bind(this);210    this.getTrackByfilterValTag = this.getTrackByfilterValTag.bind(this);211    this.updateTagByAdmin = this.updateTagByAdmin.bind(this);212    this.getGetDevMeta = this.getGetDevMeta.bind(this);213    this.getTagByMeta = this.getTagByMeta.bind(this);214    this.getTagByMetaWPage = this.getTagByMetaWPage.bind(this);215    this.getShowField = this.getShowField.bind(this);216    this.updateMeta = this.updateMeta.bind(this);217    this.insertTagByAdmin = this.insertTagByAdmin.bind(this);218    // Device Page219    this.addDevByAdmin = this.addDevByAdmin.bind(this);220    this.delDevByAdmin = this.delDevByAdmin.bind(this);221    this.editDevByAdmin = this.editDevByAdmin.bind(this);222    //personnel page223    this.getSearchFilterByPersonnel = this.getSearchFilterByPersonnel.bind(this);224    this.getZoneShowField = this.getZoneShowField.bind(this);225    this.getTagTypeIn2 = this.getTagTypeIn2.bind(this);226    227  }228  // POST function229  sendRequest(apiLocation, req) {230    return new Promise((resolve, reject) => {231      fetch(apiLocation, {232        method: 'POST',233        headers: {234          Accept: 'application/json',235          'Content-Type': 'application/json',236        },237        body: JSON.stringify(req),238      })239        .then(response => {240          if (response.status >= 400) {241            reject({ 'Bad response from server': response });242          }243          return response.json();244        })245        .then(result => {246          resolve(result);247        })248        .catch(err => {249          reject(err);250        });251      // const timeout = setTimeout(() => {252      //   reject('Server-side Request Timeout');253      // }, 5000);254      // return timeout;255    });256  }257  // GET function258  sendRequestGet(apiLocation) {259    return new Promise((resolve, reject) => {260      fetch(apiLocation, {261        method: 'GET',262        headers: {263          Accept: 'application/json',264          'Content-Type': 'application/json',265        },266      })267        .then(response => {268          if (response.status >= 400) {269            reject({ 'Bad response from server': response });270          } else return response.json();271        })272        .then(result => {273          resolve(result);274        })275        .catch(err => {276          reject(err);277        });278    });279  }280  sendRequestGetSave(apiLocation, fileName) {281    return new Promise((resolve, reject) => {282      fetch(apiLocation, {283        method: 'GET',284        headers: {285          Accept: 'application/json',286          'Content-Type': 'application/json',287        },288      })289        .then(response => response.blob())290        .then(blob => {291          if (fileName === '') {292            saveAs(blob, 'eventList.xlsx');293          } else {294            saveAs(blob, fileName.concat('.xlsx'));295          }296          return 0;297        })298        .then(result => {299          resolve(result);300        })301        .catch(err => {302          reject(err);303        });304    });305  }306  // PUT function307  sendRequestPut(apiLocation, req) {308    return new Promise((resolve, reject) => {309      fetch(apiLocation, {310        method: 'PUT',311        headers: {312          Accept: 'application/json',313          'Content-Type': 'application/json',314        },315        body: JSON.stringify(req),316      })317        .then(response => {318          if (response.status >= 400) {319            reject({ 'Bad response from server': response });320          }321          return response.json();322        })323        .then(result => {324          resolve(result);325        })326        .catch(err => {327          reject(err);328        });329    });330  }331  // Delete function332  sendRequestDelete(apiLocation, req) {333    return new Promise((resolve, reject) => {334      fetch(apiLocation, {335        method: 'DELETE',336        headers: {337          Accept: 'application/json',338          'Content-Type': 'application/json',339          'Access-Control-Allow-Origin': 'http://10.70.51.54:1880/',340        },341        body: JSON.stringify(req),342      })343        .then(response => {344          if (response.status >= 400) {345            reject({ 'Bad response from server': response });346          }347          return response.json();348        })349        .then(result => {350          resolve(result);351        })352        .catch(err => {353          reject(err);354        });355    });356  }357  // Form POST function358  sendFormRequest(apiLocation, file, id, name, desc, version, verifier, token) {359    const data = new FormData();360    data.append('myFile', file);361    data.append('id', id);362    data.append('name', name);363    data.append('desc', desc);364    data.append('version', version);365    data.append('verifier', verifier);366    data.append('token', token);367    return new Promise((resolve, reject) => {368      fetch(apiLocation, {369        method: 'POST',370        headers: {371          Accept: 'application/json',372          'Access-Control-Allow-Origin': 'http://10.70.51.54:1880/',373        },374        body: data,375      })376        .then(response => {377          if (response.status >= 400) {378            reject({ 'Bad response from server': response });379          }380          return response.json();381        })382        .then(result => {383          resolve(result);384        })385        .catch(err => {386          reject(err);387        });388    });389  }390  // Form POST function391  sendFormReq(apiLocation, data) {392    return new Promise((resolve, reject) => {393      fetch(apiLocation, {394        method: 'POST',395        headers: {396          Accept: 'application/json',397          'Access-Control-Allow-Origin': 'http://10.70.51.54:1880/',398        },399        body: data,400      })401        .then(response => {402          if (response.status >= 400) {403            reject({ 'Bad response from server': response });404          }405          return response.json();406        })407        .then(result => {408          resolve(result);409        })410        .catch(err => {411          reject(err);412        });413    });414  }415  // Form MQTT POST function416  sendFormMQTTRequest(apiLocation, message, token) {417    const bodyStr = 'message='418      .concat(message)419      .concat('&topic=')420      .concat('GIOT-GW/DL/0000deedbafefeed')421      .concat('&token=')422      .concat(encodeURIComponent(token));423    return new Promise((resolve, reject) => {424      fetch(apiLocation, {425        method: 'POST',426        headers: {427          Accept: 'application/json',428          'Content-Type': 'application/x-www-form-urlencoded',429        },430        body: bodyStr,431      })432        .then(response => {433          if (response.status >= 400) {434            reject({ 'Bad response from server': response });435          }436          return response.json();437        })438        .then(result => {439          resolve(result);440        })441        .catch(err => {442          reject(err);443        });444    });445  }446  sendFormMQTTAirRequest(apiLocation, message, token) {447    const bodyStr = 'message='448      .concat(message)449      .concat('&topic=')450      .concat('GIOT-GW/DL/0000deedbafefef2')451      .concat('&token=')452      .concat(encodeURIComponent(token));453    return new Promise((resolve, reject) => {454      fetch(apiLocation, {455        method: 'POST',456        headers: {457          Accept: 'application/json',458          'Content-Type': 'application/x-www-form-urlencoded',459        },460        body: bodyStr,461      })462        .then(response => {463          if (response.status >= 400) {464            reject({ 'Bad response from server': response });465          }466          return response.json();467        })468        .then(result => {469          resolve(result);470        })471        .catch(err => {472          reject(err);473        });474    });475  }476  // POST477  sendRequestPost(api, body) {478    return new Promise((resolve, reject) => {479      fetch(api, {480        method: 'POST',481        headers: {482          Accept: 'application/json',483          'Content-Type': 'application/x-www-form-urlencoded',484        },485        body,486      })487        .then(response => {488          if (response.status >= 400) {489            reject({ 'Bad response from server': response });490          }491          return response.json();492        })493        .then(result => {494          resolve(result);495        })496        .catch(err => {497          reject(err);498        });499    });500  }501  // api start502  login(_acc, _pwd, _type) {503    const req = { acc: _acc, pwd: _pwd, type: _type };504    return this.sendRequest(apiELBUrlLogin, req);505  }506  logout(token) {507    // const that = this;508    const req = { token };509    return this.sendRequest(apiELBUrlLogout, req);510  }511  getSummaryExpenseList() {512    const token = getAuthToken();513    const urlToken = apiELBUrlGetSummaryExpenseList514      .concat('?token=')515      .concat(token)516      .concat('&type=e');517    return this.sendRequestGet(urlToken);518  }519  getSummaryWaterExpenseList() {520    const token = getAuthToken();521    const urlToken = apiELBUrlGetSummaryExpenseList522      .concat('?token=')523      .concat(token)524      .concat('&type=w');525    return this.sendRequestGet(urlToken);526  }527  getUserList() {528    const token = encodeURIComponent(getAuthToken());529    const urlToken = apiELBUrlGetUserList.concat('?token=').concat(token);530    return this.sendRequestGet(urlToken);531  }532  searchUserList(data) {533    const token = encodeURIComponent(getAuthToken());534    const urlToken = apiELBUrlGetUserList535      .concat('?token=')536      .concat(token)537      .concat('&search=')538      .concat(data);539    return this.sendRequestGet(urlToken);540  }541  getRoleList() {542    const token = encodeURIComponent(getAuthToken());543    const urlToken = apiELBUrlGetRoleList.concat('?token=').concat(token);544    // .concat('&type=w');545    return this.sendRequestGet(urlToken);546  }547  getRoleListSearch(data) {548    const token = encodeURIComponent(getAuthToken());549    const urlToken = apiELBUrlGetRoleList550      .concat('?token=')551      .concat(token)552      .concat('&search=')553      .concat(data);554    return this.sendRequestGet(urlToken);555  }556  getFunctionList() {557    const token = encodeURIComponent(getAuthToken());558    const urlToken = apiELBUrlGetFunctionList.concat('?token=').concat(token);559    return this.sendRequestGet(urlToken);560  }561  getFunctionListSearch(data) {562    const token = encodeURIComponent(getAuthToken());563    const urlToken = apiELBUrlGetFunctionList564      .concat('?token=')565      .concat(token)566      .concat('&search=')567      .concat(encodeURIComponent(getTripleDES('roleId:=:'.concat(data))));568    return this.sendRequestGet(urlToken);569  }570  getExpGrpList() {571    const token = encodeURIComponent(getAuthToken());572    const urlToken = apiELBUrlGetExpGrpList.concat('?token=').concat(token);573    // .concat('&type=w');574    return this.sendRequestGet(urlToken);575  }576  getExpDtl() {577    const token = getAuthToken();578    const urlToken = apiELBUrlGetExpensedtl579      .concat('?token=')580      .concat(token)581      .concat('&type=e');582    return this.sendRequestGet(urlToken);583  }584  updateUserStatus(_userName, _cpId, _roleName, _userBlockFlag) {585    const getToken = getAuthToken();586    const req = { mUserId: _userName, catId: _cpId, roleId: _roleName, userBlock: _userBlockFlag, token: getToken };587    return this.sendRequestPut(apiELBUrlUpdateUserStatus, req);588  }589  updateLayout(data) {590    const getToken = getAuthToken();591    const req = { token: getToken, layout: data.data };592    return this.sendRequest(apiELBUrlUpdateLayout, req);593  }594  getMenuItem(data) {595    const token = getAuthToken();596    const urlToken = apiELBUrlGetMenuItem597      .concat(data)598      .concat('?token=')599      .concat(encodeURIComponent(token));600    return this.sendRequestGet(urlToken);601  }602  getCpList() {603    const token = encodeURIComponent(getAuthToken());604    const urlToken = apiELBUrlGetCpList.concat('?token=').concat(token);605    return this.sendRequestGet(urlToken);606  }607  addUsr(_textName, _textEmail, _textPw, _selGender, _selCp, _roleId, _selBlock) {608    const getToken = getAuthToken();609    const req = {610      name: _textName,611      email: _textEmail,612      pwd: _textPw,613      gender: _selGender,614      catId: _selCp,615      roleId: _roleId,616      userBlock: _selBlock,617      token: getToken,618    };619    return this.sendRequest(apiELBUrlUpdateUserStatus, req);620  }621  delUsr(_userId) {622    const getToken = getAuthToken();623    const req = {624      delUserId: _userId,625      token: getToken,626    };627    return this.sendRequestDelete(apiELBUrlGetUserList, req);628  }629  addRole(_selDataLevel, _textRoleName) {630    const getToken = getAuthToken();631    const req = {632      roleId: -1,633      dataId: _selDataLevel,634      roleName: _textRoleName,635      token: getToken,636    };637    return this.sendRequest(apiELBUrlUpdateRole, req);638  }639  getGrpList() {640    const token = encodeURIComponent(getAuthToken());641    const urlToken = apiELBUrlGrpList.concat('?token=').concat(token);642    return this.sendRequestGet(urlToken);643  }644  updateRoleByGrp(_catId, _grps, _type) {645    const getToken = getAuthToken();646    const req = {647      catId: _catId,648      grps: _grps,649      type: _type,650      token: getToken,651    };652    return this.sendRequest(apiELBUrlUpdateGrpList, req);653  }654  updateRoleByFunc(catId, func, type) {655    const getToken = getAuthToken();656    const req = {657      catId,658      func,659      type,660      token: getToken,661    };662    return this.sendRequest(apiELBUrlUpdateGrpList, req);663  }664  // LoRa665  activeLoraGateway(_d) {666    // apiELBUrlActiveCode667    const tokenTmp = getAuthToken();668    const req = { d: _d, token: tokenTmp };669    return this.sendRequest(apiELBUrlActiveCode, req);670  }671  bindingLoraGateway(_d) {672    // apiELBUrlActiveCode673    const tokenTmp = getAuthToken();674    const req = { d: _d, token: tokenTmp };675    return this.sendRequest(apiELBUrlBindingCode, req);676  }677  getSummaryList() {678    const token = getAuthToken();679    const urlToken = apiELBUrlGetSummaryList.concat('?token=').concat(token);680    return this.sendRequestGet(urlToken);681  }682  getGWList() {683    const token = getAuthToken();684    const urlToken = apiELBUrlGetGWListE685      .concat('?token=')686      .concat(encodeURIComponent(token))687      .replace('{status}', -1);688    return this.sendRequestGet(urlToken);689  }690  getAlertList(data) {691    const token = getAuthToken();692    let urlToken = apiELBUrlGetAlertList.concat('?token=').concat(encodeURIComponent(token));693    if (data === undefined) {694      return this.sendRequestGet(urlToken);695    }696    if (data.fport !== undefined) {697      urlToken = urlToken.concat('&fport=', data.fport);698    }699    if (data.limit !== undefined) {700      urlToken = urlToken.concat('&limit=', data.limit);701    }702    if (data.page !== undefined) {703      urlToken = urlToken.concat('&page=', data.page);704    }705    if (data.paginate !== undefined) {706      urlToken = urlToken.concat('&paginate=', data.paginate);707    }708    if (data.sort !== undefined) {709      urlToken = urlToken.concat('&sort=', data.sort);710    }711    return this.sendRequestGet(urlToken);712  }713  addAlertList(data) {714    const token = getAuthToken();715    const dataParam = {716      token,717      data,718    };719    return this.sendRequest(apiELBUrlAddAlertList, dataParam);720  }721  delAlertList(id) {722    const token = getAuthToken();723    const dataParam = {724      token,725    };726    const delUrlApi = apiELBUrlDelAlertList.replace('{id}', id);727    return this.sendRequestDelete(delUrlApi, dataParam);728  }729  getSensorList() {730    const token = getAuthToken();731    const urlToken = apiELBUrlGetSensorListE732      .concat('?token=')733      .concat(encodeURIComponent(token))734      .replace('{status}', -1);735    return this.sendRequestGet(urlToken);736  }737  getNodeList(_org, _type, _id) {738    const token = getAuthToken();739    const urlToken = apiELBUrlGetNodeList740      .replace('{org}', _org)741      .replace('{deviceType}', _type)742      .replace('{deviceId}', _id)743      .concat('?token=')744      .concat(token);745    return this.sendRequestGet(urlToken);746  }747  getFwList() {748    const token = getAuthToken();749    const urlToken = apiELBUrlGetFwList.concat('?token=').concat(token);750    return this.sendRequestGet(urlToken);751  }752  getHistoryList() {753    const token = getAuthToken();754    const urlToken = apiELBUrlGetHistoryList755      .replace('{org}', 'kqqhst')756      .concat('?token=')757      .concat(token);758    return this.sendRequestGet(urlToken);759  }760  getHistoryDtlList(_org, _id) {761    const token = getAuthToken();762    const urlToken = apiELBUrlGetHistoryDtlList763      .replace('{org}', 'kqqhst')764      .replace('{reqId}', _id)765      .concat('?token=')766      .concat(token);767    return this.sendRequestGet(urlToken);768  }769  publishGwCmd(_org, _type, _id, _cmdType, _fwId) {770    const token = getAuthToken();771    const req = { ids: _id, token, fwId: _fwId };772    const urlToken = apiELBUrlPublishGwCmd773      .replace('{org}', _org)774      .replace('{deviceType}', _type)775      .replace('{cmd}', _cmdType);776    return this.sendRequest(urlToken, req);777  }778  uploadFw(_myfile, _id, _name, _desc, _version, _verfier) {779    const token = getAuthToken();780    return this.sendFormRequest(apiELBUrlUploadFw, _myfile, _id, _name, _desc, _version, _verfier, token);781  }782  delHistory(_id) {783    const token = getAuthToken();784    const req = { token };785    const urlToken = apiELBUrlDelHistory.replace('{org}', 'kqqhst').replace('{reqId}', _id);786    return this.sendRequestDelete(urlToken, req);787  }788  addFunc(_funcName, _funcUrl, _grpId, _hiddenFlg, _parentId) {789    const token = getAuthToken();790    const req = {791      funcId: -1,792      funcName: _funcName,793      funcUrl: _funcUrl,794      parentId: _parentId,795      sortId: 0,796      grpId: _grpId,797      hiddenFlg: _hiddenFlg,798      token,799    };800    return this.sendRequest(apiELBUrlGetFunctionList, req);801  }802  updateFunc(_funcName, _funcUrl, _grpId, _hiddenFlg, _funcId, _parentId) {803    const token = getAuthToken();804    const req = {805      funcId: _funcId,806      funcName: _funcName,807      funcUrl: _funcUrl,808      parentId: _parentId,809      sortId: 0,810      grpId: _grpId,811      hiddenFlg: _hiddenFlg,812      token,813    };814    return this.sendRequest(apiELBUrlGetFunctionList, req);815  }816  updateFuncinRole(funcId, funcName, funcUrl, parentId, sortId, grpId, hiddenFlg) {817    const token = getAuthToken();818    const req = {819      funcId,820      funcName,821      funcUrl,822      parentId,823      sortId,824      grpId,825      hiddenFlg,826      token,827    };828    return this.sendRequest(apiELBUrlGetFunctionList, req);829  }830  addExpGrp(_eGrpName) {831    const token = getAuthToken();832    const req = {833      eGrpId: -1,834      eGrpName: _eGrpName,835      token,836    };837    return this.sendRequest(apiELBUrlUpdateExpGrp, req);838  }839  updateExpGrp(_eGrpName, _eGrpId) {840    const token = getAuthToken();841    const req = {842      eGrpId: _eGrpId,843      eGrpName: _eGrpName,844      token,845    };846    return this.sendRequest(apiELBUrlUpdateExpGrp, req);847  }848  deleteExpGrp(_eGrpId) {849    const token = getAuthToken();850    const req = {851      eGrpId: _eGrpId,852      token,853    };854    return this.sendRequestDelete(apiELBUrlUpdateExpGrp, req);855  }856  deleteRole(_roleId) {857    const token = getAuthToken();858    const req = {859      roleId: _roleId,860      token,861    };862    return this.sendRequestDelete(apiELBUrlGetRoleList, req);863  }864  delFunc(_functionId) {865    const token = getAuthToken();866    const req = {867      funcId: _functionId,868      token,869    };870    return this.sendRequestDelete(apiELBUrlGetFunctionList, req);871  }872  getRoboticList() {873    const token = getAuthToken();874    const urlToken = apiELBUrlgetRoboticList.concat('?token=').concat(token);875    return this.sendRequestGet(urlToken);876  }877  getScriptList() {878    const token = getAuthToken();879    const urlToken = apiELBUrlgetScriptList.concat('?token=').concat(token);880    return this.sendRequestGet(urlToken);881  }882  uploadRAScript(_myfile, _name, _desc, _version) {883    const token = getAuthToken();884    const data = new FormData();885    data.append('myFile', _myfile);886    data.append('id', -1);887    data.append('name', _name);888    data.append('desc', _desc);889    data.append('version', _version);890    data.append('token', token);891    return this.sendFormReq(apiELBUrlgetScriptList, data);892  }893  deleteRAScript(id) {894    const token = getAuthToken();895    const req = {896      id,897      token,898    };899    return this.sendRequestDelete(apiELBUrlgetScriptList, req);900  }901  editRAScript(_id, _myfile, _name, _desc, _version) {902    const token = getAuthToken();903    const data = new FormData();904    data.append('id', _id);905    data.append('myFile', _myfile);906    data.append('name', _name);907    data.append('desc', _desc);908    data.append('version', _version);909    data.append('token', token);910    return this.sendFormReq(apiELBUrlgetScriptList, data);911  }912  updateRAScript(RAId, scriptId) {913    const token = getAuthToken();914    const req = {915      d: RAId,916      roboticFw: scriptId,917      token,918    };919    return this.sendRequest(apiELBUrlUpdateRAScript, req);920  }921  addCp(textCpName) {922    const token = getAuthToken();923    const req = {924      cpId: -1,925      cpName: textCpName,926      token,927    };928    return this.sendRequest(apiELBUrlGetCpList, req);929  }930  deleteCp(cpId) {931    const token = getAuthToken();932    const req = {933      cpId,934      token,935    };936    return this.sendRequestDelete(apiELBUrlGetCpList, req);937  }938  editCp(cpId, textCpName) {939    const token = getAuthToken();940    const req = {941      cpId,942      cpName: textCpName,943      token,944    };945    return this.sendRequest(apiELBUrlGetCpList, req);946  }947  searchCpList(data) {948    const token = getAuthToken();949    const urlToken = apiELBUrlGetCpList950      .concat('?token=')951      .concat(token)952      .concat('&search=')953      .concat(data);954    return this.sendRequestGet(urlToken);955  }956  getSysList() {957    const token = encodeURIComponent(getAuthToken());958    const urlToken = apiELBUrlgetSysList.concat('?token=').concat(token);959    return this.sendRequestGet(urlToken);960  }961  addSys(textSysName, textSysDesc, textSysValue, textSysType) {962    const token = getAuthToken();963    const req = {964      sysId: '-1',965      name: textSysName,966      value: textSysValue,967      desc: textSysDesc,968      type: textSysType,969      token,970    };971    return this.sendRequest(apiELBUrlgetSysList, req);972  }973  editSys(textSysName, textSysDesc, textSysValue, textSysType) {974    const token = getAuthToken();975    const req = {976      sysId: '0',977      name: textSysName,978      value: textSysValue,979      desc: textSysDesc,980      type: textSysType,981      token,982    };983    return this.sendRequest(apiELBUrlgetSysList, req);984  }985  deleteSys(textSysName) {986    const token = getAuthToken();987    const req = {988      name: textSysName,989      token,990    };991    return this.sendRequestDelete(apiELBUrlgetSysList, req);992  }993  searchSysList(data) {994    const token = getAuthToken();995    const urlToken = apiELBUrlgetSysList996      .concat('?token=')997      .concat(token)998      .concat('&search=')999      .concat(data);1000    return this.sendRequestGet(urlToken);1001  }1002  addGrp(textGrpName) {1003    const token = getAuthToken();1004    const req = {1005      grpId: '-1',1006      name: textGrpName,1007      token,1008    };1009    return this.sendRequest(apiELBUrlGrpList, req);1010  }1011  editGrp(textGrpName, grpId) {1012    const token = getAuthToken();1013    const req = {1014      grpId,1015      name: textGrpName,1016      token,1017    };1018    return this.sendRequest(apiELBUrlGrpList, req);1019  }1020  deleteGrp(grpId) {1021    const token = getAuthToken();1022    const req = {1023      grpId,1024      token,1025    };1026    return this.sendRequestDelete(apiELBUrlGrpList, req);1027  }1028  searchGrpList(data) {1029    const token = encodeURIComponent(getAuthToken());1030    const urlToken = apiELBUrlGrpList1031      .concat('?token=')1032      .concat(token)1033      .concat('&search=')1034      .concat(data);1035    return this.sendRequestGet(urlToken);1036  }1037  updateGrpbyCp(cpId, grpsArr) {1038    // apiELBUrlUpdateGrpListbyCp1039    const token = getAuthToken();1040    const req = {1041      type: 'GCp',1042      catId: cpId,1043      grps: grpsArr,1044      token,1045    };1046    return this.sendRequest(apiELBUrlUpdateGrpListbyCp, req);1047  }1048  updateGrpbyCpEdit(cpId, grpsArr, grpId) {1049    const token = getAuthToken();1050    const req = {1051      type: 'GCp',1052      catId: cpId,1053      grps: grpId,1054      token,1055    };1056    return this.sendRequest(apiELBUrlUpdateGrpListbyCp, req);1057  }1058  getExecHistory(_deviceType, _deviceId, _eventType, _qTime, _limit, _skip) {1059    const token = getAuthToken();1060    const urlToken = apiGetEventList1061      .replace('{deviceType}', _deviceType)1062      .replace('{deviceId}', _deviceId)1063      .replace('{eventType}', _eventType)1064      .replace('{token}', token)1065      .replace('{qTime}', _qTime)1066      .replace('{limit}', _limit)1067      .replace('{skip}', _skip);1068    return this.sendRequestGet(urlToken);1069  }1070  // Dashboard1071  getLayout() {1072    const token = getAuthToken();1073    const urlToken = apiGetLayout.concat('?token=').concat(encodeURIComponent(token));1074    return this.sendRequestGet(urlToken);1075  }1076  getPlanList() {1077    const token = getAuthToken();1078    const urlToken = apiPlan.concat('?token=').concat(encodeURIComponent(token));1079    return this.sendRequestGet(urlToken);1080  }1081  uploadPlan(file, id, planName, planDesc, planVers, planVeri) {1082    const token = getAuthToken();1083    return this.sendFormRequest(apiPlan, file, id, planName, planDesc, planVers, planVeri, token);1084  }1085  // uploadFw(_myfile, _id, _name, _desc, _version, _verfier) {1086  //   const token = getAuthToken();1087  //   return this.sendFormRequest(apiELBUrlUploadFw, _myfile, _id, _name, _desc, _version, _verfier, token);1088  // }1089  delPlanList() {1090    const token = getAuthToken();1091    const urlToken = apiPlan.concat('?token=').concat(token);1092    return this.sendRequestGet(urlToken);1093  }1094  // event page1095  getSensorListE() {1096    const token = getAuthToken();1097    const urlToken = apiELBUrlGetSensorListE.concat('?token=').concat(encodeURIComponent(token));1098    return this.sendRequestGet(urlToken);1099  }1100  getEventList(data) {1101    const token = getAuthToken();1102    let urlToken = apiELBUrlGetEventList.concat('?token=', encodeURIComponent(token));1103    if ('fport' in data) {1104      if (data.fport !== undefined) {1105        urlToken = urlToken.concat('&fport=', data.fport);1106      }1107    }1108    if ('macAddr' in data) {1109      if (data.macAddr !== undefined) {1110        urlToken = urlToken.concat('&macAddr=', data.macAddr);1111      }1112    }1113    if ('limit' in data) {1114      if (data.limit !== undefined) {1115        urlToken = urlToken.concat('&limit=', data.limit);1116      }1117    }1118    if ('pagi' in data) {1119      if (data.pagi !== undefined) {1120        urlToken = urlToken.concat('&page=', data.pagi);1121      }1122    }1123    if ('date' in data) {1124      urlToken = urlToken.concat('&from=', encodeURIComponent(data.date[0]), '&to=', encodeURIComponent(data.date[1]));1125    }1126    if ('fileName' in data) {1127      urlToken = urlToken.concat('&showType=xls&fileName=', data.fileName);1128    }1129    if ('search' in data) {1130      if (data.search !== undefined) {1131        urlToken = urlToken.concat('&search=', encodeURIComponent(getTripleDES(data.search)));1132      }1133    }1134    return this.sendRequestGet(urlToken);1135  }1136  getReportList(data) {1137    const token = getAuthToken();1138    let urlToken = apiRpt.concat('?token=', encodeURIComponent(token));1139    if ('fport' in data) {1140      if (data.fport !== undefined) {1141        urlToken = urlToken.concat('&fport=', data.fport);1142      }1143    }1144    if ('macAddr' in data) {1145      if (data.macAddr !== undefined) {1146        urlToken = urlToken.concat('&macAddr=', data.macAddr);1147      }1148    }1149    if ('date' in data) {1150      urlToken = urlToken.concat('&from=', encodeURIComponent(data.date[0]), '&to=', encodeURIComponent(data.date[1]));1151    }1152    if ('fileName' in data) {1153      urlToken = urlToken.concat('&showType=xls&fileName=', data.fileName);1154    }1155    return this.sendRequestGetSave(urlToken, data.fileName);1156  }1157  getReportCnt(data) {1158    const token = getAuthToken();1159    let urlToken = apiRptChk.concat('?token=', encodeURIComponent(token));1160    if ('fport' in data) {1161      if (data.fport !== undefined) {1162        urlToken = urlToken.concat('&fport=', data.fport);1163      }1164    }1165    if ('macAddr' in data) {1166      if (data.macAddr !== undefined) {1167        urlToken = urlToken.concat('&macAddr=', data.macAddr);1168      }1169    }1170    if ('date' in data) {1171      urlToken = urlToken.concat('&from=', encodeURIComponent(data.date[0]), '&to=', encodeURIComponent(data.date[1]));1172    }1173    return this.sendRequestGet(urlToken);1174  }1175  getEventListByMac(mac) {1176    const token = getAuthToken();1177    const urlToken = apiELBUrlGetEventListE1178      .concat('?token=')1179      .concat(encodeURIComponent(token))1180      .concat('&limit=10')1181      .concat('&fport=161')1182      .concat('&macAddr=')1183      .concat(mac);1184    return this.sendRequestGet(urlToken);1185  }1186  mqttCtl(_message) {1187    const token = getAuthToken();1188    return this.sendFormMQTTRequest(apiELBUrlMqttCtl, _message, token);1189  }1190  mqttCtlAir(_message) {1191    const token = getAuthToken();1192    return this.sendFormMQTTAirRequest(apiELBUrlMqttCtl, _message, token);1193  }1194  // virtual shelf1195  getSteelCntInShelf(tagId) {1196    const token = getAuthToken();1197    const urlToken = apiTrackCnt1198      .replace('{tagId}', tagId)1199      .concat('?token=')1200      .concat(encodeURIComponent(token));1201    return this.sendRequestGet(urlToken);1202  }1203  getSteelInShelf(tagId, limit, page) {1204    const token = getAuthToken();1205    let urlToken;1206    if (limit === undefined && page === undefined) {1207      urlToken = apiTrack1208        .replace('{tagId}', tagId)1209        .concat('?token=')1210        .concat(encodeURIComponent(token));1211    } else {1212      urlToken = apiTrack1213        .replace('{tagId}', tagId)1214        .concat('?token=')1215        .concat(encodeURIComponent(token))1216        .concat('&limit=', limit)1217        .concat('&paginate=true')1218        .concat('&page=', page);1219    }1220    return this.sendRequestGet(urlToken);1221  }1222  getShelfList(limit, page, searchTextTriEn) {1223    const token = getAuthToken();1224    let urlToken;1225    if (limit === undefined && page === undefined) {1226      urlToken = apiTag.concat('?token=').concat(encodeURIComponent(token));1227    } else if (searchTextTriEn === undefined) {1228      urlToken = apiTag1229        .concat('?token=')1230        .concat(encodeURIComponent(token))1231        .concat('&limit=', limit)1232        .concat('&paginate=true')1233        .concat('&page=', page);1234    } else if (searchTextTriEn !== undefined) {1235      urlToken = apiTag1236        .concat('?token=')1237        .concat(encodeURIComponent(token))1238        .concat('&limit=', limit)1239        .concat('&paginate=true')1240        .concat('&page=', page)1241        .concat('&search=', searchTextTriEn);1242    }1243    return this.sendRequestGet(urlToken);1244  }1245  getSteelList(limit, page, searchTextTriEn) {1246    const token = getAuthToken();1247    let urlToken;1248    if (searchTextTriEn === undefined) {1249      urlToken = api1Tag1250        .concat('?token=')1251        .concat(encodeURIComponent(token))1252        .concat('&limit=', limit)1253        .concat('&paginate=true')1254        .concat('&page=', page);1255    } else if (searchTextTriEn !== undefined) {1256      urlToken = api1Tag1257        .concat('?token=')1258        .concat(encodeURIComponent(token))1259        .concat('&limit=', limit)1260        .concat('&paginate=true')1261        .concat('&page=', page)1262        .concat('&search=', searchTextTriEn);1263    }1264    return this.sendRequestGet(urlToken);1265  }1266  getSteelBeenShelfList(steelId, limit, page) {1267    const token = getAuthToken();1268    const urlToken = apiSteelBeenShelf1269      .replace('{steelId}', steelId)1270      .concat('?token=')1271      .concat(encodeURIComponent(token))1272      .concat('&limit=', limit)1273      .concat('&paginate=true')1274      .concat('&page=', page);1275    return this.sendRequestGet(urlToken);1276  }1277  getTagCnt(searchTextTriEn) {1278    const token = getAuthToken();1279    let urlToken;1280    if (searchTextTriEn === undefined) {1281      urlToken = apiTagCnt.concat('?token=').concat(encodeURIComponent(token));1282    } else if (searchTextTriEn !== undefined) {1283      urlToken = apiTagCnt1284        .concat('?token=')1285        .concat(encodeURIComponent(token))1286        .concat('&search=')1287        .concat(searchTextTriEn);1288    }1289    return this.sendRequestGet(urlToken);1290  }1291  getSteelCnt(searchTextTriEn) {1292    const token = getAuthToken();1293    let urlToken;1294    if (searchTextTriEn === undefined) {1295      urlToken = apiSteelCnt.concat('?token=').concat(encodeURIComponent(token));1296    } else if (searchTextTriEn !== undefined) {1297      urlToken = apiSteelCnt1298        .concat('?token=')1299        .concat(encodeURIComponent(token))1300        .concat('&search=')1301        .concat(searchTextTriEn);1302    }1303    return this.sendRequestGet(urlToken);1304  }1305  getSteelBeenShelfCnt(steelId) {1306    const token = getAuthToken();1307    const urlToken = apiSteelBeenShelfCnt1308      .replace('{steelId}', steelId)1309      .concat('?token=')1310      .concat(encodeURIComponent(token));1311    return this.sendRequestGet(urlToken);1312  }1313  editShelf(MAC_ID, id, name, MAC_TYPE, MAC_DESC, LOC_DESC, PROC_ID, CHARGE_DEPT, EQUP_NO, STD_WT, SAFE_WT, STD_LOC_WT) {1314    const token = getAuthToken();1315    const req = {1316      MAC_ID,1317      id,1318      objId: id,1319      name,1320      MAC_TYPE,1321      MAC_DESC,1322      LOC_DESC,1323      PROC_ID,1324      CHARGE_DEPT,1325      EQUP_NO,1326      STD_WT,1327      SAFE_WT,1328      STD_LOC_WT,1329      token,1330    };1331    return this.sendRequest(apiTag, req);1332  }1333  editSteel(name, id, objId) {1334    const token = getAuthToken();1335    const req = {1336      name,1337      id,1338      objId,1339      token,1340    };1341    return this.sendRequest(api1Tag, req);1342  }1343  getEventType() {1344    const token = getAuthToken();1345    const urlToken = apiEventType.concat('?token=').concat(encodeURIComponent(token));1346    return this.sendRequestGet(urlToken);1347  }1348  getSensorByfport(fport) {1349    const token = getAuthToken();1350    const urlApi = apiELBUrlGetSensorListE1351      .concat('?token=')1352      .concat(encodeURIComponent(token))1353      .concat('&fport=')1354      .concat(fport);1355    return this.sendRequestGet(urlApi);1356  }1357  dashboardDL(data) {1358    const { fport, message, mac } = data;1359    const token = encodeURIComponent(getAuthToken());1360    const body = 'token='1361      .concat(token)1362      .concat('&message=')1363      .concat(message)1364      .concat('&mac=')1365      .concat(mac);1366    return this.sendRequestPost(apiDL.concat('/').concat(fport), body);1367  }1368  dashboardDLPost(data) {1369    const token = getAuthToken();1370    const { fport, message, mac } = data;1371    const req = { token, fport, message, mac };1372    return this.sendRequest(apiDL.concat('/', fport), req);1373  }1374  getDevInfobyMac(data) {1375    // const { mac } = data;1376    const token = encodeURIComponent(getAuthToken());1377    const urlApi = apiGetDevInfobyMac.concat('/', data, '?token=', token);1378    return this.sendRequestGet(urlApi);1379  }1380  getSearchFilter() {1381    const token = encodeURIComponent(getAuthToken());1382    const urlApi = apiGetSearchFilter.concat('?token=', token, '&showFlg=', 1);1383    return this.sendRequestGet(urlApi);1384  }1385  getSearchFilterByPersonnel() {1386    const token = encodeURIComponent(getAuthToken());1387    const urlApi = apiGetSearchFilter.concat('?token=', token, '&showFlg=', 1, '&type=personnel');1388    return this.sendRequestGet(urlApi);1389  }1390  getSearchOptionWithRoot(data) {1391    const token = encodeURIComponent(getAuthToken());1392    const urlApi = apiGetSearchOption.concat(1393      '/',1394      Object.keys(data)[0],1395      '?token=',1396      token,1397      '&fport=',1398      Object.values(data)[0].fport,1399      '&showFlg=',1400      11401    );1402    return this.sendRequestGet(urlApi);1403  }1404  getSearchOptionWithParentVal(data) {1405    const { searchField, val, child, fport } = data;1406    const token = encodeURIComponent(getAuthToken());1407    const urlApi = apiGetSearchOption.concat('/', searchField, '/', val, '/', child, '?token=', token, '&fport=', fport, '&showFlg=', 1);1408    return this.sendRequestGet(urlApi);1409  }1410  getTrackCount(data) {1411    const { type, typeId } = data;1412    const token = encodeURIComponent(getAuthToken());1413    const urlApi = apiGetTrackCnt1414      .replace('{type}', type)1415      .replace('{typeId}', typeId)1416      .concat('?token=', token, '&showFlg=', 1);1417    return this.sendRequestGet(urlApi);1418  }1419  getTrack(data) {1420    const { type, typeId } = data;1421    const token = encodeURIComponent(getAuthToken());1422    let urlApi;1423    urlApi = apiGetTrack1424      .replace('{type}', type)1425      .replace('{typeId}', typeId)1426      .concat('?token=', token);1427    if ('date' in data) {1428      urlApi = urlApi.concat('&from=', encodeURIComponent(data.date[0]), '&to=', encodeURIComponent(data.date[1]));1429    }1430    return this.sendRequestGet(urlApi);1431  }1432  getTagType() {1433    const token = encodeURIComponent(getAuthToken());1434    const urlApi = apiGetTagType.concat('?token=', token);1435    return this.sendRequestGet(urlApi);1436  }1437  getTagTypeIn2() {1438    const token = encodeURIComponent(getAuthToken());1439    const urlApi = apiGetTagType.concat('?token=', token, '&type=2');1440    return this.sendRequestGet(urlApi);1441  }1442  getTagList(data) {1443    const { type } = data;1444    const token = encodeURIComponent(getAuthToken());1445    let urlApi = apiGetTagList.concat('?token=', token).replace('{type}', type);1446    if ('id' in data) {1447      if (data.id !== undefined) {1448        urlApi = urlApi.concat('&search=', encodeURIComponent(getTripleDES(data.id)));1449      }1450    }1451    if ('date' in data) {1452      urlApi = urlApi.concat('&from=', encodeURIComponent(data.date[0]), '&to=', encodeURIComponent(data.date[1]));1453    }1454    if ('page' in data) {1455      urlApi = urlApi.concat('&page=', data.page);1456    }1457    if ('limit' in data) {1458      urlApi = urlApi.concat('&paginate=true&limit=', data.limit);1459    }1460    return this.sendRequestGet(urlApi);1461  }1462  getTagListAll(data) {1463    const { type } = data;1464    const token = encodeURIComponent(getAuthToken());1465    let urlApi = apiGetTagList.concat('?token=', token).replace('{type}', type);1466    if ('id' in data) {1467      if (data.id !== undefined) {1468        urlApi = urlApi.concat('&search=', encodeURIComponent(getTripleDES(data.id)));1469      }1470    }1471    if ('date' in data) {1472      urlApi = urlApi.concat('&from=', encodeURIComponent(data.date[0]), '&to=', encodeURIComponent(data.date[1]));1473    }1474    return this.sendRequestGet(urlApi);1475  }1476  getTrackByfilterTag(data) {1477    const { searchField, type, id } = data;1478    const token = encodeURIComponent(getAuthToken());1479    const urlApi = apiGetTrackByfilterTag1480      .concat('?token=', token, '&showFlg=', 1)1481      .replace('{searchField}', searchField)1482      .replace('{type}', type)1483      .replace('{id}', id);1484    return this.sendRequestGet(urlApi);1485  }1486  getTrackByfilterValTag(data) {1487    const { searchField, val, child, type, id } = data;1488    const token = encodeURIComponent(getAuthToken());1489    const urlApi = apiGetTrackByfilterValTag1490      .concat('?token=', token, '&showFlg=', 1, '&sort=desc&extra=NW')1491      .replace('{searchField}', searchField)1492      .replace('{val}', val)1493      .replace('{child}', child)1494      .replace('{type}', type)1495      .replace('{id}', id);1496    return this.sendRequestGet(urlApi);1497  }1498  updateTagByAdmin(data) {1499    const { desc, id, macAddr, name, priority, type } = data;1500    const urlApi = apiUpdateTagByAdmin.concat('/', type, '/', id);1501    const getToken = getAuthToken();1502    const req = { token: getToken, info: { desc, priority }, loc: { macAddr, name } };1503    return this.sendRequestPut(urlApi, req);1504  }1505  insertTagByAdmin(payload) {1506    const { macAddr, data, fport } = payload;1507    const urlApi = apiInsertTagByAdmin;1508    const getToken = getAuthToken();1509    const req = { token: getToken, data: [{ macAddr, data, fport }] };1510    return this.sendRequest(urlApi, req);1511  }1512  getGetDevMeta(data) {1513    const { fport, meta, val } = data.data;1514    const { showFlg } = data;1515    const token = encodeURIComponent(getAuthToken());1516    const urlApi = apiGetDevMeta1517      .concat('?token=', token, '&showFlg=', showFlg)1518      .replace('{fport}', fport)1519      .replace('{meta}', meta)1520      .replace('{val}', val);1521    return this.sendRequestGet(urlApi);1522  }1523  getTagByMeta(data) {1524    const { type, meta, date } = data.data;1525    // const { showFlg } = data;1526    const token = encodeURIComponent(getAuthToken());1527    let urlApi = apiGetTagByMeta1528      .concat('?token=', token, '&showFlg=', 1, '&paginate=', false)1529      .replace('{type}', type)1530      .replace('{meta}', meta);1531    if ('date' in data.data) {1532      urlApi = urlApi.concat(date);1533    }1534    return this.sendRequestGet(urlApi);1535  }1536  getTagByMetaWPage(data) {1537    const { type, meta, page } = data.data;1538    const { showFlg } = data;1539    const token = encodeURIComponent(getAuthToken());1540    const urlApi = apiGetTagByMeta1541      .concat('?token=', token, '&showFlg=', showFlg, '&paginate=', true, '&page=', page)1542      .replace('{type}', type)1543      .replace('{meta}', meta);1544    return this.sendRequestGet(urlApi);1545  }1546  getShowField(data) {1547    const { fport } = data.data;1548    const token = encodeURIComponent(getAuthToken());1549    const urlApi = apiShowField.concat('?token=', token).replace('{fport}', fport);1550    return this.sendRequestGet(urlApi);1551  }1552  getZoneShowField(data) {1553    const { fport } = data.data;1554    const token = encodeURIComponent(getAuthToken());1555    const urlApi = apiZoneShowField.concat('?token=', token).replace('{fport}', fport);1556    return this.sendRequestGet(urlApi);1557  }1558  updateMeta(dataMeta) {1559    const token = getAuthToken();1560    const data = {1561      meta: dataMeta,1562      token,1563    };1564    const urlApi = apiUpdateMeta.replace('{macAddr}', dataMeta.macAddr);1565    return this.sendRequestPut(urlApi, data);1566  }1567  addDevByAdmin(data) {1568    const token = getAuthToken();1569    const req = {1570      d: [data],1571      token,1572    };1573    return this.sendRequest(apiDev, req);1574  }1575  delDevByAdmin(data) {1576    const { deviceId } = data;1577    const token = getAuthToken();1578    const req = {1579      token,1580    };1581    return this.sendRequestDelete(apiDev.concat('/', deviceId), req);1582  }1583  editDevByAdmin(data) {1584    const { deviceId, d } = data;1585    const getToken = getAuthToken();1586    const urlApi = apiDev.concat('/', deviceId);1587    const req = { token: getToken, d };1588    return this.sendRequestPut(urlApi, req);1589  }1590}1591const api = new ApiRequest();...api3.create.test.js
Source:api3.create.test.js  
1/* eslint require-atomic-updates: 0 */2/* global should */3'use strict';4require('should');5describe('API3 CREATE', function() {6  const self = this7    , testConst = require('./fixtures/api3/const.json')8    , instance = require('./fixtures/api3/instance')9    , authSubject = require('./fixtures/api3/authSubject')10    , opTools = require('../lib/api3/shared/operationTools')11    , utils = require('./fixtures/api3/utils')12    ;13  self.validDoc = {14    date: (new Date()).getTime(),15    app: testConst.TEST_APP,16    device: testConst.TEST_DEVICE + ' API3 CREATE',17    eventType: 'Correction Bolus',18    insulin: 0.319  };20  self.validDoc.identifier = opTools.calculateIdentifier(self.validDoc);21  self.timeout(20000);22  /**23   * Cleanup after successful creation24   */25  self.delete = async function deletePermanent (identifier) {26    await self.instance.delete(`${self.url}/${identifier}?permanent=true&token=${self.token.delete}`)27      .expect(204);28  };29  /**30   * Get document detail for futher processing31   */32  self.get = async function get (identifier) {33    let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`)34      .expect(200);35    return res.body;36  };37  /**38   * Get document detail for futher processing39   */40  self.search = async function search (date) {41    let res = await self.instance.get(`${self.url}?date$eq=${date}&token=${self.token.read}`)42      .expect(200);43    return res.body;44  };45  before(async () => {46    self.instance = await instance.create({});47    self.app = self.instance.app;48    self.env = self.instance.env;49    self.url = '/api/v3/treatments';50    let authResult = await authSubject(self.instance.ctx.authorization.storage);51    self.subject = authResult.subject;52    self.token = authResult.token;53    self.urlToken = `${self.url}?token=${self.token.create}`;54  });55  after(() => {56    self.instance.ctx.bus.teardown();57  });58  it('should require authentication', async () => {59    let res = await self.instance.post(`${self.url}`)60      .send(self.validDoc)61      .expect(401);62    res.body.status.should.equal(401);63    res.body.message.should.equal('Missing or bad access token or JWT');64  });65  it('should not found not existing collection', async () => {66    let res = await self.instance.post(`/api/v3/NOT_EXIST?token=${self.url}`)67      .send(self.validDoc)68      .expect(404);69    res.body.should.be.empty();70  });71  it('should require create permission', async () => {72    let res = await self.instance.post(`${self.url}?token=${self.token.read}`)73      .send(self.validDoc)74      .expect(403);75    res.body.status.should.equal(403);76    res.body.message.should.equal('Missing permission api:treatments:create');77  });78  it('should reject empty body', async () => {79    await self.instance.post(self.urlToken)80      .send({ })81      .expect(400);82  });83  it('should accept valid document', async () => {84    let res = await self.instance.post(self.urlToken)85      .send(self.validDoc)86      .expect(201);87    res.body.should.be.empty();88    res.headers.location.should.equal(`${self.url}/${self.validDoc.identifier}`);89    const lastModified = new Date(res.headers['last-modified']).getTime(); // Last-Modified has trimmed milliseconds90    let body = await self.get(self.validDoc.identifier);91    body.should.containEql(self.validDoc);92    const ms = body.srvModified % 1000;93    (body.srvModified - ms).should.equal(lastModified);94    (body.srvCreated - ms).should.equal(lastModified);95    body.subject.should.equal(self.subject.apiCreate.name);96    await self.delete(self.validDoc.identifier);97  });98  it('should reject missing date', async () => {99    let doc = Object.assign({}, self.validDoc);100    delete doc.date;101    let res = await self.instance.post(self.urlToken)102      .send(doc)103      .expect(400);104    res.body.status.should.equal(400);105    res.body.message.should.equal('Bad or missing date field');106  });107  it('should reject invalid date null', async () => {108    let res = await self.instance.post(self.urlToken)109      .send(Object.assign({}, self.validDoc, { date: null }))110      .expect(400);111    res.body.status.should.equal(400);112    res.body.message.should.equal('Bad or missing date field');113  });114  it('should reject invalid date ABC', async () => {115    let res = await self.instance.post(self.urlToken)116      .send(Object.assign({}, self.validDoc, { date: 'ABC' }))117      .expect(400);118    res.body.status.should.equal(400);119    res.body.message.should.equal('Bad or missing date field');120  });121  it('should reject invalid date -1', async () => {122    let res = await self.instance.post(self.urlToken)123      .send(Object.assign({}, self.validDoc, { date: -1 }))124      .expect(400);125    res.body.status.should.equal(400);126    res.body.message.should.equal('Bad or missing date field');127  });128  it('should reject invalid date 1 (too old)', async () => {129    let res = await self.instance.post(self.urlToken)130      .send(Object.assign({}, self.validDoc, { date: 1 }))131      .expect(400);132    res.body.status.should.equal(400);133    res.body.message.should.equal('Bad or missing date field');134  });135  it('should reject invalid date - illegal format', async () => {136    let res = await self.instance.post(self.urlToken)137      .send(Object.assign({}, self.validDoc, { date: '2019-20-60T50:90:90' }))138      .expect(400);139    res.body.status.should.equal(400);140    res.body.message.should.equal('Bad or missing date field');141  });142  it('should reject invalid utcOffset -5000', async () => {143    let res = await self.instance.post(self.urlToken)144      .send(Object.assign({}, self.validDoc, { utcOffset: -5000 }))145      .expect(400);146    res.body.status.should.equal(400);147    res.body.message.should.equal('Bad or missing utcOffset field');148  });149  it('should reject invalid utcOffset ABC', async () => {150    let res = await self.instance.post(self.urlToken)151      .send(Object.assign({}, self.validDoc, { utcOffset: 'ABC' }))152      .expect(400);153    res.body.status.should.equal(400);154    res.body.message.should.equal('Bad or missing utcOffset field');155  });156  it('should accept valid utcOffset', async () => {157    await self.instance.post(self.urlToken)158      .send(Object.assign({}, self.validDoc, { utcOffset: 120 }))159      .expect(201);160    let body = await self.get(self.validDoc.identifier);161    body.utcOffset.should.equal(120);162    await self.delete(self.validDoc.identifier);163  });164  it('should reject invalid utcOffset null', async () => {165    let res = await self.instance.post(self.urlToken)166      .send(Object.assign({}, self.validDoc, { utcOffset: null }))167      .expect(400);168    res.body.status.should.equal(400);169    res.body.message.should.equal('Bad or missing utcOffset field');170  });171  it('should reject missing app', async () => {172    let doc = Object.assign({}, self.validDoc);173    delete doc.app;174    let res = await self.instance.post(self.urlToken)175      .send(doc)176      .expect(400);177    res.body.status.should.equal(400);178    res.body.message.should.equal('Bad or missing app field');179  });180  it('should reject invalid app null', async () => {181    let res = await self.instance.post(self.urlToken)182      .send(Object.assign({}, self.validDoc, { app: null }))183      .expect(400);184    res.body.status.should.equal(400);185    res.body.message.should.equal('Bad or missing app field');186  });187  it('should reject empty app', async () => {188    let res = await self.instance.post(self.urlToken)189      .send(Object.assign({}, self.validDoc, { app: '' }))190      .expect(400);191    res.body.status.should.equal(400);192    res.body.message.should.equal('Bad or missing app field');193  });194  it('should normalize date and store utcOffset', async () => {195    await self.instance.post(self.urlToken)196      .send(Object.assign({}, self.validDoc, { date: '2019-06-10T08:07:08,576+02:00' }))197      .expect(201);198    let body = await self.get(self.validDoc.identifier);199    body.date.should.equal(1560146828576);200    body.utcOffset.should.equal(120);201    await self.delete(self.validDoc.identifier);202  });203  it('should require update permission for deduplication', async () => {204    self.validDoc.date = (new Date()).getTime();205    self.validDoc.identifier = utils.randomString('32', 'aA#');206    const doc = Object.assign({}, self.validDoc);207    await self.instance.post(self.urlToken)208      .send(doc)209      .expect(201);210    let createdBody = await self.get(doc.identifier);211    createdBody.should.containEql(doc);212    const doc2 = Object.assign({}, doc);213    let res = await self.instance.post(self.urlToken)214      .send(doc2)215      .expect(403);216    res.body.status.should.equal(403);217    res.body.message.should.equal('Missing permission api:treatments:update');218    await self.delete(doc.identifier);219  });220  it('should deduplicate document by identifier', async () => {221    self.validDoc.date = (new Date()).getTime();222    self.validDoc.identifier = utils.randomString('32', 'aA#');223    const doc = Object.assign({}, self.validDoc);224    await self.instance.post(self.urlToken)225      .send(doc)226      .expect(201);227    let createdBody = await self.get(doc.identifier);228    createdBody.should.containEql(doc);229    const doc2 = Object.assign({}, doc, {230      insulin: 0.5231    });232    await self.instance.post(`${self.url}?token=${self.token.all}`)233      .send(doc2)234      .expect(204);235    let updatedBody = await self.get(doc2.identifier);236    updatedBody.should.containEql(doc2);237    await self.delete(doc2.identifier);238  });239  it('should deduplicate document by created_at+eventType', async () => {240    self.validDoc.date = (new Date()).getTime();241    self.validDoc.identifier = utils.randomString('32', 'aA#');242    const doc = Object.assign({}, self.validDoc, { 243      created_at: new Date(self.validDoc.date).toISOString() 244    });245    delete doc.identifier;246    self.instance.ctx.treatments.create([doc], async (err) => {  // let's insert the document in APIv1's way247      should.not.exist(err);248      const doc2 = Object.assign({}, doc, {249        insulin: 0.4,250        identifier: utils.randomString('32', 'aA#')251      });252      delete doc2._id; // APIv1 updates input document, we must get rid of _id for the next round253      await self.instance.post(`${self.url}?token=${self.token.all}`)254        .send(doc2)255        .expect(204);256      let updatedBody = await self.get(doc2.identifier);257      updatedBody.should.containEql(doc2);258      await self.delete(doc2.identifier);259    });260  });261  it('should not deduplicate treatment only by created_at', async () => {262    self.validDoc.date = (new Date()).getTime();263    self.validDoc.identifier = utils.randomString('32', 'aA#');264    const doc = Object.assign({}, self.validDoc, { 265      created_at: new Date(self.validDoc.date).toISOString() 266    });267    delete doc.identifier;268    self.instance.ctx.treatments.create([doc], async (err) => {  // let's insert the document in APIv1's way269      should.not.exist(err);270      let oldBody = await self.get(doc._id);271      delete doc._id; // APIv1 updates input document, we must get rid of _id for the next round272      oldBody.should.containEql(doc);273      const doc2 = Object.assign({}, doc, {274        eventType: 'Meal Bolus',275        insulin: 0.4,276        identifier: utils.randomString('32', 'aA#')277      });278      await self.instance.post(`${self.url}?token=${self.token.all}`)279        .send(doc2)280        .expect(201);281      let updatedBody = await self.get(doc2.identifier);282      updatedBody.should.containEql(doc2);283      updatedBody.identifier.should.not.equal(oldBody.identifier);284      await self.delete(doc2.identifier);285      await self.delete(oldBody.identifier);286    });287  });288  it('should overwrite deleted document', async () => {289    const date1 = new Date()290      , identifier = utils.randomString('32', 'aA#');291    await self.instance.post(self.urlToken)292      .send(Object.assign({}, self.validDoc, { identifier, date: date1.toISOString() }))293      .expect(201);294    await self.instance.delete(`${self.url}/${identifier}?token=${self.token.delete}`)295      .expect(204);296    const date2 = new Date();297    let res = await self.instance.post(self.urlToken)298      .send(Object.assign({}, self.validDoc, { identifier, date: date2.toISOString() }))299      .expect(403);300    res.body.status.should.be.equal(403);301    res.body.message.should.be.equal('Missing permission api:treatments:update');302    res = await self.instance.post(`${self.url}?token=${self.token.all}`)303      .send(Object.assign({}, self.validDoc, { identifier, date: date2.toISOString() }))304      .expect(204);305    res.body.should.be.empty();306    let body = await self.get(identifier);307    body.date.should.equal(date2.getTime());308    body.identifier.should.equal(identifier);309    await self.delete(identifier);310  });311  it('should calculate the identifier', async () => {312    self.validDoc.date = (new Date()).getTime();313    delete self.validDoc.identifier;314    const validIdentifier = opTools.calculateIdentifier(self.validDoc);315    let res = await self.instance.post(self.urlToken)316      .send(self.validDoc)317      .expect(201);318    res.body.should.be.empty();319    res.headers.location.should.equal(`${self.url}/${validIdentifier}`);320    self.validDoc.identifier = validIdentifier;321    let body = await self.get(validIdentifier);322    body.should.containEql(self.validDoc);323    await self.delete(validIdentifier);324  });325  it('should deduplicate by identifier calculation', async () => {326    self.validDoc.date = (new Date()).getTime();327    delete self.validDoc.identifier;328    const validIdentifier = opTools.calculateIdentifier(self.validDoc);329    let res = await self.instance.post(self.urlToken)330      .send(self.validDoc)331      .expect(201);332    res.body.should.be.empty();333    res.headers.location.should.equal(`${self.url}/${validIdentifier}`);334    self.validDoc.identifier = validIdentifier;335    let body = await self.get(validIdentifier);336    body.should.containEql(self.validDoc);337    delete self.validDoc.identifier;338    res = await self.instance.post(`${self.url}?token=${self.token.update}`)339      .send(self.validDoc)340      .expect(204);341    res.body.should.be.empty();342    res.headers.location.should.equal(`${self.url}/${validIdentifier}`);343    self.validDoc.identifier = validIdentifier;344    body = await self.search(self.validDoc.date);345    body.length.should.equal(1);346    await self.delete(validIdentifier);347  });...api3.update.test.js
Source:api3.update.test.js  
1/* eslint require-atomic-updates: 0 */2/* global should */3'use strict';4require('should');5describe('API3 UPDATE', function() {6  const self = this7    , testConst = require('./fixtures/api3/const.json')8    , instance = require('./fixtures/api3/instance')9    , authSubject = require('./fixtures/api3/authSubject')10    , utils = require('./fixtures/api3/utils')11    ;12  self.validDoc = {13    identifier: utils.randomString('32', 'aA#'),14    date: (new Date()).getTime(),15    utcOffset: -180,16    app: testConst.TEST_APP,17    device: testConst.TEST_DEVICE + ' API3 UPDATE',18    eventType: 'Correction Bolus',19    insulin: 0.320  };21  self.timeout(15000);22  /**23   * Get document detail for futher processing24   */25  self.get = async function get (identifier) {26    let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`)27      .expect(200);28    res.body.status.should.equal(200);29    return res.body.result;30  };31  before(async () => {32    self.instance = await instance.create({});33    self.app = self.instance.app;34    self.env = self.instance.env;35    self.col = 'treatments'36    self.url = `/api/v3/${self.col}`;37    let authResult = await authSubject(self.instance.ctx.authorization.storage);38    self.subject = authResult.subject;39    self.token = authResult.token;40    self.urlToken = `${self.url}/${self.validDoc.identifier}?token=${self.token.update}`41    self.cache = self.instance.cacheMonitor;42  });43  after(() => {44    self.instance.ctx.bus.teardown();45  });46  beforeEach(() => {47    self.cache.clear();48  });49  afterEach(() => {50    self.cache.shouldBeEmpty();51  });52  it('should require authentication', async () => {53    let res = await self.instance.put(`${self.url}/FAKE_IDENTIFIER`)54      .expect(401);55    res.body.status.should.equal(401);56    res.body.message.should.equal('Missing or bad access token or JWT');57  });58  it('should not found not existing collection', async () => {59    let res = await self.instance.put(`/api/v3/NOT_EXIST?token=${self.url}`)60      .send(self.validDoc)61      .expect(404);62    res.body.status.should.equal(404);63  });64  it('should require update permission for upsert', async () => {65    let res = await self.instance.put(`${self.url}/${self.validDoc.identifier}?token=${self.token.update}`)66      .send(self.validDoc)67      .expect(403);68    res.body.status.should.equal(403);69    res.body.message.should.equal('Missing permission api:treatments:create');70  });71  it('should upsert not existing document', async () => {72    let res = await self.instance.put(`${self.url}/${self.validDoc.identifier}?token=${self.token.all}`)73      .send(self.validDoc)74      .expect(201);75    res.body.status.should.equal(201);76    res.body.identifier.should.equal(self.validDoc.identifier);77    self.cache.nextShouldEql(self.col, self.validDoc)78    const lastModified = new Date(res.headers['last-modified']).getTime(); // Last-Modified has trimmed milliseconds79    let body = await self.get(self.validDoc.identifier);80    body.should.containEql(self.validDoc);81    should.not.exist(body.modifiedBy);82    const ms = body.srvModified % 1000;83    (body.srvModified - ms).should.equal(lastModified);84    (body.srvCreated - ms).should.equal(lastModified);85    body.subject.should.equal(self.subject.apiAll.name);86  });87  it('should update the document', async () => {88    self.validDoc.carbs = 10;89    delete self.validDoc.insulin;90    let res = await self.instance.put(self.urlToken)91      .send(self.validDoc)92      .expect(200);93    res.body.status.should.equal(200);94    self.cache.nextShouldEql(self.col, self.validDoc)95    const lastModified = new Date(res.headers['last-modified']).getTime(); // Last-Modified has trimmed milliseconds96    let body = await self.get(self.validDoc.identifier);97    body.should.containEql(self.validDoc);98    should.not.exist(body.insulin);99    should.not.exist(body.modifiedBy);100    const ms = body.srvModified % 1000;101    (body.srvModified - ms).should.equal(lastModified);102    body.subject.should.equal(self.subject.apiUpdate.name);103  });104  it('should update unmodified document since', async () => {105    const doc = Object.assign({}, self.validDoc, {106      carbs: 11107    });108    let res = await self.instance.put(self.urlToken)109      .set('If-Unmodified-Since', new Date(new Date().getTime() + 1000).toUTCString())110      .send(doc)111      .expect(200);112    res.body.status.should.equal(200);113    self.cache.nextShouldEql(self.col, doc)114    let body = await self.get(self.validDoc.identifier);115    body.should.containEql(doc);116  });117  it('should not update document modified since', async () => {118    const doc = Object.assign({}, self.validDoc, {119      carbs: 12120    });121    let body = await self.get(doc.identifier);122    self.validDoc = body;123    let res = await self.instance.put(self.urlToken)124      .set('If-Unmodified-Since', new Date(new Date(body.srvModified).getTime() - 1000).toUTCString())125      .send(doc)126      .expect(412);127    res.body.status.should.equal(412);128    body = await self.get(doc.identifier);129    body.should.eql(self.validDoc);130  });131  it('should reject date alteration', async () => {132    let res = await self.instance.put(self.urlToken)133      .send(Object.assign({}, self.validDoc, { date: self.validDoc.date + 10000 }))134      .expect(400);135    res.body.status.should.equal(400);136    res.body.message.should.equal('Field date cannot be modified by the client');137  });138  it('should reject utcOffset alteration', async () => {139    let res = await self.instance.put(self.urlToken)140      .send(Object.assign({}, self.validDoc, { utcOffset: self.utcOffset - 120 }))141      .expect(400);142    res.body.status.should.equal(400);143    res.body.message.should.equal('Field utcOffset cannot be modified by the client');144  });145  it('should reject eventType alteration', async () => {146    let res = await self.instance.put(self.urlToken)147      .send(Object.assign({}, self.validDoc, { eventType: 'MODIFIED' }))148      .expect(400);149    res.body.status.should.equal(400);150    res.body.message.should.equal('Field eventType cannot be modified by the client');151  });152  it('should reject device alteration', async () => {153    let res = await self.instance.put(self.urlToken)154      .send(Object.assign({}, self.validDoc, { device: 'MODIFIED' }))155      .expect(400);156    res.body.status.should.equal(400);157    res.body.message.should.equal('Field device cannot be modified by the client');158  });159  it('should reject app alteration', async () => {160    let res = await self.instance.put(self.urlToken)161      .send(Object.assign({}, self.validDoc, { app: 'MODIFIED' }))162      .expect(400);163    res.body.status.should.equal(400);164    res.body.message.should.equal('Field app cannot be modified by the client');165  });166  it('should reject srvCreated alteration', async () => {167    let res = await self.instance.put(self.urlToken)168      .send(Object.assign({}, self.validDoc, { srvCreated: self.validDoc.date - 10000 }))169      .expect(400);170    res.body.status.should.equal(400);171    res.body.message.should.equal('Field srvCreated cannot be modified by the client');172  });173  it('should reject subject alteration', async () => {174    let res = await self.instance.put(self.urlToken)175      .send(Object.assign({}, self.validDoc, { subject: 'MODIFIED' }))176      .expect(400);177    res.body.status.should.equal(400);178    res.body.message.should.equal('Field subject cannot be modified by the client');179  });180  it('should reject srvModified alteration', async () => {181    let res = await self.instance.put(self.urlToken)182      .send(Object.assign({}, self.validDoc, { srvModified: self.validDoc.date - 100000 }))183      .expect(400);184    res.body.status.should.equal(400);185    res.body.message.should.equal('Field srvModified cannot be modified by the client');186  });187  it('should reject modifiedBy alteration', async () => {188    let res = await self.instance.put(self.urlToken)189      .send(Object.assign({}, self.validDoc, { modifiedBy: 'MODIFIED' }))190      .expect(400);191    res.body.status.should.equal(400);192    res.body.message.should.equal('Field modifiedBy cannot be modified by the client');193  });194  it('should reject isValid alteration', async () => {195    let res = await self.instance.put(self.urlToken)196      .send(Object.assign({}, self.validDoc, { isValid: false }))197      .expect(400);198    res.body.status.should.equal(400);199    res.body.message.should.equal('Field isValid cannot be modified by the client');200  });201  it('should ignore identifier alteration in body', async () => {202    self.validDoc = await self.get(self.validDoc.identifier);203    let res = await self.instance.put(self.urlToken)204      .send(Object.assign({}, self.validDoc, { identifier: 'MODIFIED' }))205      .expect(200);206    res.body.status.should.equal(200);207    delete self.validDoc.srvModified;208    self.cache.nextShouldEql(self.col, self.validDoc)209  });210  it('should not update deleted document', async () => {211    let res = await self.instance.delete(`${self.url}/${self.validDoc.identifier}?token=${self.token.delete}`)212      .expect(200);213    res.body.status.should.equal(200);214    self.cache.nextShouldDeleteLast(self.col)215    res = await self.instance.put(self.urlToken)216      .send(self.validDoc)217      .expect(410);218    res.body.status.should.equal(410);219  });...api3.search.test.js
Source:api3.search.test.js  
1/* eslint require-atomic-updates: 0 */2/* global should */3'use strict';4require('should');5describe('API3 SEARCH', function() {6  const self = this7    , testConst = require('./fixtures/api3/const.json')8    , instance = require('./fixtures/api3/instance')9    , authSubject = require('./fixtures/api3/authSubject')10    , opTools = require('../lib/api3/shared/operationTools')11    ;12  self.docs = testConst.SAMPLE_ENTRIES;13  self.timeout(15000);14  /**15   * Get document detail for futher processing16   */17  self.get = function get (identifier, done) {18    self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`)19      .expect(200)20      .end((err, res) => {21        should.not.exist(err);22        done(res.body);23      });24  };25  /**26   * Create given document in a promise27   */28  self.create = (doc) => new Promise((resolve) => {29    doc.identifier = opTools.calculateIdentifier(doc);30    self.instance.post(`${self.url}?token=${self.token.all}`)31      .send(doc)32      .end((err) => {33        should.not.exist(err);34        self.get(doc.identifier, resolve);35      });36  });37  before(async () => {38    self.testStarted = new Date();39    self.instance = await instance.create({});40    self.app = self.instance.app;41    self.env = self.instance.env;42    self.url = '/api/v3/entries';43    let authResult = await authSubject(self.instance.ctx.authorization.storage);44    self.subject = authResult.subject;45    self.token = authResult.token;46    self.urlToken = `${self.url}?token=${self.token.read}`;47    self.urlTest = `${self.urlToken}&srvModified$gte=${self.testStarted.getTime()}`;48    const promises = testConst.SAMPLE_ENTRIES.map(doc => self.create(doc));49    self.docs = await Promise.all(promises);50  });51  after(() => {52    self.instance.ctx.bus.teardown();53  });54  it('should require authentication', async () => {55    let res = await self.instance.get(self.url)56      .expect(401);57    res.body.status.should.equal(401);58    res.body.message.should.equal('Missing or bad access token or JWT');59    should.not.exist(res.body.result);60  });61  it('should not found not existing collection', async () => {62    let res = await self.instance.get(`/api/v3/NOT_EXIST?token=${self.url}`)63      .send(self.validDoc)64      .expect(404);65    res.body.status.should.equal(404);66    should.not.exist(res.body.result);67  });68  it('should found at least 10 documents', async () => {69    let res = await self.instance.get(self.urlToken)70      .expect(200);71    res.body.status.should.equal(200);72    res.body.result.length.should.be.aboveOrEqual(self.docs.length);73  });74  it('should found at least 10 documents from test start', async () => {75    let res = await self.instance.get(self.urlTest)76      .expect(200);77    res.body.status.should.equal(200);78    res.body.result.length.should.be.aboveOrEqual(self.docs.length);79  });80  it('should reject invalid limit - not a number', async () => {81    let res = await self.instance.get(`${self.urlToken}&limit=INVALID`)82      .expect(400);83    res.body.status.should.equal(400);84    res.body.message.should.equal('Parameter limit out of tolerance');85    should.not.exist(res.body.result);86  });87  it('should reject invalid limit - negative number', async () => {88    let res = await self.instance.get(`${self.urlToken}&limit=-1`)89      .expect(400);90    res.body.status.should.equal(400);91    res.body.message.should.equal('Parameter limit out of tolerance');92    should.not.exist(res.body.result);93  });94  it('should reject invalid limit - zero', async () => {95    let res = await self.instance.get(`${self.urlToken}&limit=0`)96      .expect(400);97    res.body.status.should.equal(400);98    res.body.message.should.equal('Parameter limit out of tolerance');99    should.not.exist(res.body.result);100  });101  it('should accept valid limit', async () => {102    let res = await self.instance.get(`${self.urlToken}&limit=3`)103      .expect(200);104    res.body.status.should.equal(200);105    res.body.result.length.should.equal(3);106  });107  it('should reject invalid skip - not a number', async () => {108    let res = await self.instance.get(`${self.urlToken}&skip=INVALID`)109      .expect(400);110    res.body.status.should.equal(400);111    res.body.message.should.equal('Parameter skip out of tolerance');112    should.not.exist(res.body.result);113  });114  it('should reject invalid skip - negative number', async () => {115    let res = await self.instance.get(`${self.urlToken}&skip=-5`)116      .expect(400);117    res.body.status.should.equal(400);118    res.body.message.should.equal('Parameter skip out of tolerance');119    should.not.exist(res.body.result);120  });121  it('should reject both sort and sort$desc', async () => {122    let res = await self.instance.get(`${self.urlToken}&sort=date&sort$desc=created_at`)123      .expect(400);124    res.body.status.should.equal(400);125    res.body.message.should.equal('Parameters sort and sort_desc cannot be combined');126    should.not.exist(res.body.result);127  });128  it('should sort well by date field', async () => {129    let res = await self.instance.get(`${self.urlTest}&sort=date`)130      .expect(200);131    res.body.status.should.equal(200);132    const ascending = res.body.result;133    const length = ascending.length;134    length.should.be.aboveOrEqual(self.docs.length);135    res = await self.instance.get(`${self.urlTest}&sort$desc=date`)136      .expect(200);137    res.body.status.should.equal(200);138    const descending = res.body.result;139    descending.length.should.equal(length);140    for (let i in ascending) {141      ascending[i].should.eql(descending[length - i - 1]);142      if (i > 0) {143        ascending[i - 1].date.should.be.lessThanOrEqual(ascending[i].date);144      }145    }146  });147  it('should skip documents', async () => {148    let res = await self.instance.get(`${self.urlToken}&sort=date&limit=8`)149      .expect(200);150    res.body.status.should.equal(200);151    const fullDocs = res.body.result;152    fullDocs.length.should.equal(8);153    res = await self.instance.get(`${self.urlToken}&sort=date&skip=3&limit=5`)154      .expect(200);155    res.body.status.should.equal(200);156    const skipDocs = res.body.result;157    skipDocs.length.should.equal(5);158    for (let i = 0; i < 3; i++) {159      skipDocs[i].should.be.eql(fullDocs[i + 3]);160    }161  });162  it('should project selected fields', async () => {163    let res = await self.instance.get(`${self.urlToken}&fields=date,app,subject`)164      .expect(200);165    res.body.status.should.equal(200);166    res.body.result.forEach(doc => {167      const docFields = Object.getOwnPropertyNames(doc);168      docFields.sort().should.be.eql(['app', 'date', 'subject']);169    });170  });171  it('should project all fields', async () => {172    let res = await self.instance.get(`${self.urlToken}&fields=_all`)173      .expect(200);174    res.body.status.should.equal(200);175    res.body.result.forEach(doc => {176      Object.getOwnPropertyNames(doc).length.should.be.aboveOrEqual(10);177      Object.prototype.hasOwnProperty.call(doc, '_id').should.not.be.true();178      Object.prototype.hasOwnProperty.call(doc, 'identifier').should.be.true();179      Object.prototype.hasOwnProperty.call(doc, 'srvModified').should.be.true();180      Object.prototype.hasOwnProperty.call(doc, 'srvCreated').should.be.true();181    });182  });183  it('should not exceed the limit of docs count', async () => {184    const apiApp = self.instance.ctx.apiApp185      , limitBackup = apiApp.get('API3_MAX_LIMIT');186    apiApp.set('API3_MAX_LIMIT', 5);187    let res = await self.instance.get(`${self.urlToken}&limit=10`)188      .expect(400);189    res.body.status.should.equal(400);190    res.body.message.should.equal('Parameter limit out of tolerance');191    apiApp.set('API3_MAX_LIMIT', limitBackup);192  });193  it('should respect the ceiling (hard) limit of docs', async () => {194    const apiApp = self.instance.ctx.apiApp195      , limitBackup = apiApp.get('API3_MAX_LIMIT');196    apiApp.set('API3_MAX_LIMIT', 5);197    let res = await self.instance.get(`${self.urlToken}`)198      .expect(200);199    res.body.status.should.equal(200);200    res.body.result.length.should.equal(5);201    apiApp.set('API3_MAX_LIMIT', limitBackup);202  });...api3.patch.test.js
Source:api3.patch.test.js  
1/* eslint require-atomic-updates: 0 */2'use strict';3require('should');4describe('API3 PATCH', function() {5  const self = this6    , testConst = require('./fixtures/api3/const.json')7    , instance = require('./fixtures/api3/instance')8    , authSubject = require('./fixtures/api3/authSubject')9    , opTools = require('../lib/api3/shared/operationTools')10    ;11  self.validDoc = {12    date: (new Date()).getTime(),13    utcOffset: -180,14    app: testConst.TEST_APP,15    device: testConst.TEST_DEVICE + ' API3 PATCH',16    eventType: 'Correction Bolus',17    insulin: 0.318  };19  self.validDoc.identifier = opTools.calculateIdentifier(self.validDoc);20  self.timeout(15000);21  /**22   * Get document detail for futher processing23   */24  self.get = async function get (identifier) {25    let res = await self.instance.get(`${self.url}/${identifier}?token=${self.token.read}`)26      .expect(200);27    res.body.status.should.equal(200);28    return res.body.result;29  };30  before(async () => {31    self.instance = await instance.create({});32    self.app = self.instance.app;33    self.env = self.instance.env;34    self.col = 'treatments';35    self.url = `/api/v3/${self.col}`;36    let authResult = await authSubject(self.instance.ctx.authorization.storage);37    self.subject = authResult.subject;38    self.token = authResult.token;39    self.urlToken = `${self.url}/${self.validDoc.identifier}?token=${self.token.update}`;40    self.cache = self.instance.cacheMonitor;41  });42  after(() => {43    self.instance.ctx.bus.teardown();44  });45  beforeEach(() => {46    self.cache.clear();47  });48  afterEach(() => {49    self.cache.shouldBeEmpty();50  });51  it('should require authentication', async () => {52    let res = await self.instance.patch(`${self.url}/FAKE_IDENTIFIER`)53      .expect(401);54    res.body.status.should.equal(401);55    res.body.message.should.equal('Missing or bad access token or JWT');56  });57  it('should not found not existing collection', async () => {58    let res = await self.instance.patch(`/api/v3/NOT_EXIST?token=${self.url}`)59      .send(self.validDoc)60      .expect(404);61    res.body.status.should.equal(404);62  });63  it('should not found not existing document', async () => {64    let res = await self.instance.patch(self.urlToken)65      .send(self.validDoc)66      .expect(404);67    res.body.status.should.equal(404);68    // now let's insert the document for further patching69    res = await self.instance.post(`${self.url}?token=${self.token.create}`)70      .send(self.validDoc)71      .expect(201);72    res.body.status.should.equal(201);73    self.cache.nextShouldEql(self.col, self.validDoc)74  });75  it('should reject identifier alteration', async () => {76    let res = await self.instance.patch(self.urlToken)77      .send(Object.assign({}, self.validDoc, { identifier: 'MODIFIED'}))78      .expect(400);79    res.body.status.should.equal(400);80    res.body.message.should.equal('Field identifier cannot be modified by the client');81  });82  it('should reject date alteration', async () => {83    let res = await self.instance.patch(self.urlToken)84      .send(Object.assign({}, self.validDoc, { date: self.validDoc.date + 10000 }))85      .expect(400);86    res.body.status.should.equal(400);87    res.body.message.should.equal('Field date cannot be modified by the client');88  });89  it('should reject utcOffset alteration', async () => {90    let res = await self.instance.patch(self.urlToken)91      .send(Object.assign({}, self.validDoc, { utcOffset: self.utcOffset - 120 }))92      .expect(400);93    res.body.status.should.equal(400);94    res.body.message.should.equal('Field utcOffset cannot be modified by the client');95  });96  it('should reject eventType alteration', async () => {97    let res = await self.instance.patch(self.urlToken)98      .send(Object.assign({}, self.validDoc, { eventType: 'MODIFIED' }))99      .expect(400);100    res.body.status.should.equal(400);101    res.body.message.should.equal('Field eventType cannot be modified by the client');102  });103  it('should reject device alteration', async () => {104    let res = await self.instance.patch(self.urlToken)105      .send(Object.assign({}, self.validDoc, { device: 'MODIFIED' }))106      .expect(400);107    res.body.status.should.equal(400);108    res.body.message.should.equal('Field device cannot be modified by the client');109  });110  it('should reject app alteration', async () => {111    let res = await self.instance.patch(self.urlToken)112      .send(Object.assign({}, self.validDoc, { app: 'MODIFIED' }))113      .expect(400);114    res.body.status.should.equal(400);115    res.body.message.should.equal('Field app cannot be modified by the client');116  });117  it('should reject srvCreated alteration', async () => {118    let res = await self.instance.patch(self.urlToken)119      .send(Object.assign({}, self.validDoc, { srvCreated: self.validDoc.date - 10000 }))120      .expect(400);121    res.body.status.should.equal(400);122    res.body.message.should.equal('Field srvCreated cannot be modified by the client');123  });124  it('should reject subject alteration', async () => {125    let res = await self.instance.patch(self.urlToken)126      .send(Object.assign({}, self.validDoc, { subject: 'MODIFIED' }))127      .expect(400);128    res.body.status.should.equal(400);129    res.body.message.should.equal('Field subject cannot be modified by the client');130  });131  it('should reject srvModified alteration', async () => {132    let res = await self.instance.patch(self.urlToken)133      .send(Object.assign({}, self.validDoc, { srvModified: self.validDoc.date - 100000 }))134      .expect(400);135    res.body.status.should.equal(400);136    res.body.message.should.equal('Field srvModified cannot be modified by the client');137  });138  it('should reject modifiedBy alteration', async () => {139    let res = await self.instance.patch(self.urlToken)140      .send(Object.assign({}, self.validDoc, { modifiedBy: 'MODIFIED' }))141      .expect(400);142    res.body.status.should.equal(400);143    res.body.message.should.equal('Field modifiedBy cannot be modified by the client');144  });145  it('should reject isValid alteration', async () => {146    let res = await self.instance.patch(self.urlToken)147      .send(Object.assign({}, self.validDoc, { isValid: false }))148      .expect(400);149    res.body.status.should.equal(400);150    res.body.message.should.equal('Field isValid cannot be modified by the client');151  });152  it('should patch document', async () => {153    self.validDoc.carbs = 10;154    let res = await self.instance.patch(self.urlToken)155      .send(self.validDoc)156      .expect(200);157    res.body.status.should.equal(200);158    let body = await self.get(self.validDoc.identifier);159    body.carbs.should.equal(10);160    body.insulin.should.equal(0.3);161    body.subject.should.equal(self.subject.apiCreate.name);162    body.modifiedBy.should.equal(self.subject.apiUpdate.name);163    self.cache.nextShouldEql(self.col, body)164  });...Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch();4  const context = await browser.newContext();5  const page = await context.newPage();6  const token = await page._delegate.urlToken(url);7  console.log(token);8  await browser.close();9})();10const url = page.url();11const url = page.url();Using AI Code Generation
1const playwright = require('playwright-core');2(async () => {3  const browser = await playwright.chromium.launch();4  const context = await browser.newContext();5  const page = await context.newPage();6  const token = await page.context().newCDPSession(page).send('URLToken.getToken');7  console.log(token.token);8  await browser.close();9})();10const playwright = require('playwright-core');11(async () => {12  const browser = await playwright.chromium.launch({13  });14  const context = await browser.newContext();15  const page = await context.newPage();16  await browser.close();17})();Using AI Code Generation
1const { URLToken } = require('playwright');2const token = URLToken.generate();3console.log(token);4const { URLToken } = require('playwright');5const token = URLToken.generate();6console.log(token);7const { URLToken } = require('playwright');8const token = URLToken.generate();9console.log(token);10const { URLToken } = require('playwright');11const token = URLToken.generate();12console.log(token);13const { URLToken } = require('playwright');14const token = URLToken.generate();15console.log(token);16const { URLToken } = require('playwright');17const token = URLToken.generate();18console.log(token);19const { URLToken } = require('playwright');20const token = URLToken.generate();21console.log(token);22const { URLToken } = require('playwright');23const token = URLToken.generate();24console.log(token);25const { URLToken } = require('playwright');26const token = URLToken.generate();27console.log(token);28const { URLToken } = require('playwright');29const token = URLToken.generate();30console.log(token);31const { URLToken } = require('playwright');32const token = URLToken.generate();33console.log(token);34const { URLToken } = require('playwright');35const token = URLToken.generate();36console.log(token);37const { URLToken } = require('playwright');38const token = URLToken.generate();39console.log(token);40const { URLToken } = require('playwright');41const token = URLToken.generate();42console.log(token);43const { URLToken } = requireUsing AI Code Generation
1const { URLToken } = require('@playwright/test/lib/utils/url');2const { URLToken } = require('@playwright/test/lib/utils/url');3import { URLToken } from '@playwright/test/lib/utils/url';4import { URLToken } from '@playwright/test/lib/utils/url';5import { URLToken } from '@playwright/test/lib/utils/url';6import { URLToken } from '@playwright/test/lib/utils/url';7import { URLToken } from '@playwright/test/lib/utils/url';8import { URLToken } from '@playwright/test/lib/utils/url';9import { URLToken } from '@playwright/test/lib/utils/url';10import { URLToken } from '@playwright/test/lib/utils/url';11import { URLToken } from '@playwright/test/lib/utils/url';12import { URLToken } from '@playwrightUsing AI Code Generation
1const { URLToken } = require('@playwright/test');2const token = URLToken.from(url);3console.log(token);4const { URLToken } = require('@playwright/test');5console.log(token);6const { URLToken } = require('@playwright/test');7console.log(token);8const { URLToken } = require('@playwright/test');9console.log(token.toString());10const { URLToken } = require('@playwright/test');11console.log(token.toURL());12const { URLToken } = require('@playwright/test');13console.log(token.toJSON());14const { URLToken } = require('@playwright/test');15console.log(token.valueOf());16const { URLToken } = require('@playwright/test');17console.log(token + '');18const { URLToken } = require('@playwright/test');19console.log(token.toString() === token + '');20const { URLToken } = require('@playwright/test');21console.log(tokenUsing AI Code Generation
1const { URLToken } = require('playwright-core/lib/client/urlToken');2const token = URLToken.generate();3const { chromium } = require('playwright-core');4(async () => {5  const browser = await chromium.launch();6  const context = await browser.newContext();7  const page = await context.newPage();8  await browser.close();9})();10const { chromium } = require('playwright-core');11(async () => {12  const browser = await chromium.launchServer();13  browser.on('connection', (ws, request) => {14    const token = request.url.split('token=')[1];15    if (URLToken.verify(token)) {16      ws.on('close', () => {17      });18    } else {19      ws.close();20    }21  });22})();LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
