{"version":3,"sources":["../src/TobiiClient.ts","../src/utils.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws'\r\nimport jsLogger, { ILogger } from 'js-logger'\r\nimport { waitForSocketState } from './utils'\r\nimport { WSMessage } from './models'\r\n\r\n// Create logger\r\njsLogger.useDefaults()\r\nconst tobiiLogger: ILogger = jsLogger.get('tobiiprosdk')\r\n\r\nexport default class TobiiClient {\r\n  port: number\r\n  host: string = 'http://localhost'\r\n  wsHost: string = 'ws://localhost'\r\n  _activeWSConnections: { [id: string]: WebSocket} = {}\r\n\r\n  constructor(port: number = 9999, host: string = 'http://localhost', wsHost: string = 'ws://localhost') {\r\n    this.port = port\r\n    this.host = host\r\n    this.wsHost = wsHost\r\n  }\r\n  \r\n  async ping() {\r\n    const response = await fetch(`${this.host}:${this.port}/api/ping`)\r\n    const data = await response.json()\r\n    return data\r\n  }\r\n\r\n  async getEyeTrackers() {\r\n    const response = await fetch(`${this.host}:${this.port}/api/find`);\r\n    const data = await response.json();\r\n    return data;\r\n  }\r\n\r\n  async connectToEyeTracker(serial_number: string) {\r\n    const ws: WebSocket = await this._createWebSocketConnection(serial_number);\r\n\r\n    // Record all active WS connections\r\n    this._activeWSConnections[serial_number] = ws;\r\n\r\n    return ws;\r\n  }\r\n\r\n  async disconnectFromEyeTracker(serial_number: string) {\r\n    const ws = this._activeWSConnections[serial_number];\r\n    if (ws) {\r\n      ws.close();\r\n      delete this._activeWSConnections[serial_number];\r\n    }\r\n  }\r\n\r\n  async clearAllActiveConnections() {\r\n    for (const serial_number in this._activeWSConnections) {\r\n      this.disconnectFromEyeTracker(serial_number);\r\n    }\r\n  }\r\n\r\n  async _createWebSocketConnection(url_params: string) {\r\n    const ws: WebSocket = new WebSocket(`${this.wsHost}:${this.port}/ws/${url_params}`);\r\n    await waitForSocketState(ws, ws.OPEN);\r\n    return ws;\r\n  }\r\n}","import WebSocket from 'isomorphic-ws'\r\n\r\n/**\r\n * Forces a process to wait until the socket's `readyState` becomes the specified value.\r\n * @param socket The socket whose `readyState` is being watched\r\n * @param state The desired `readyState` for the socket\r\n */\r\nfunction waitForSocketState(socket: WebSocket, state: number): Promise<boolean> {\r\n  return new Promise(function (resolve) {\r\n    setTimeout(function () {\r\n      if (socket.readyState === state) {\r\n        resolve(true);\r\n      } \r\n      else if (socket.readyState === socket.CLOSED && state === socket.OPEN){\r\n        resolve(false)\r\n      }\r\n      else {\r\n        waitForSocketState(socket, state).then(resolve);\r\n      }\r\n    });\r\n  });\r\n}\r\n\r\nexport {waitForSocketState}"],"mappings":";AAAA,OAAO,eAAe;AACtB,OAAO,cAA2B;;;ACMlC,SAAS,mBAAmB,QAAmB,OAAiC;AAC9E,SAAO,IAAI,QAAQ,SAAU,SAAS;AACpC,eAAW,WAAY;AACrB,UAAI,OAAO,eAAe,OAAO;AAC/B,gBAAQ,IAAI;AAAA,MACd,WACS,OAAO,eAAe,OAAO,UAAU,UAAU,OAAO,MAAK;AACpE,gBAAQ,KAAK;AAAA,MACf,OACK;AACH,2BAAmB,QAAQ,KAAK,EAAE,KAAK,OAAO;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;ADfA,SAAS,YAAY;AACrB,IAAM,cAAuB,SAAS,IAAI,aAAa;AAEvD,IAAqB,cAArB,MAAiC;AAAA,EAC/B;AAAA,EACA,OAAe;AAAA,EACf,SAAiB;AAAA,EACjB,uBAAmD,CAAC;AAAA,EAEpD,YAAY,OAAe,MAAM,OAAe,oBAAoB,SAAiB,kBAAkB;AACrG,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,OAAO;AACX,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,WAAW;AACjE,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,iBAAiB;AACrB,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,WAAW;AACjE,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,oBAAoB,eAAuB;AAC/C,UAAM,KAAgB,MAAM,KAAK,2BAA2B,aAAa;AAGzE,SAAK,qBAAqB,aAAa,IAAI;AAE3C,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,yBAAyB,eAAuB;AACpD,UAAM,KAAK,KAAK,qBAAqB,aAAa;AAClD,QAAI,IAAI;AACN,SAAG,MAAM;AACT,aAAO,KAAK,qBAAqB,aAAa;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,MAAM,4BAA4B;AAChC,eAAW,iBAAiB,KAAK,sBAAsB;AACrD,WAAK,yBAAyB,aAAa;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,2BAA2B,YAAoB;AACnD,UAAM,KAAgB,IAAI,UAAU,GAAG,KAAK,MAAM,IAAI,KAAK,IAAI,OAAO,UAAU,EAAE;AAClF,UAAM,mBAAmB,IAAI,GAAG,IAAI;AACpC,WAAO;AAAA,EACT;AACF;","names":[]}