{"version":3,"sources":["../../src/window/window-client.ts"],"names":[],"mappings":";;;AAUO,MAAM,YAAa,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,IAAI,OAAU,GAAA;AACZ,IAAO,OAAA,MAAA,CAAO,MAAO,CAAA,IAAA,CAAK,QAAQ,CAAA;AAAA;AACpC,EAEU,EAAA;AAAA,EACA,GAAA;AAAA,EACA,WAA2C,EAAC;AAAA,EAC5C,QAAA;AAAA,EACA,SAAA;AAAA,EAEV,YAAY,MAAiB,EAAA;AAC3B,IAAA,IAAA,CAAK,EAAK,GAAA,CAAA;AACV,IAAA,IAAA,CAAK,MAAM,MAAQ,EAAA,KAAA,CAAM,QAAQ,CAAK,IAAA,IAAI,cAAc,0BAA0B,CAAA;AAClF,IAAK,IAAA,CAAA,QAAA,GAAW,IAAI,YAAa,EAAA;AACjC,IAAK,IAAA,CAAA,SAAA,GAAY,IAAI,YAAa,EAAA;AAClC,IAAA,MAAA,CAAO,iBAAiB,SAAW,EAAA,IAAA,CAAK,SAAU,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAC9D,EAEA,MAAM,EAAG,CAAA,IAAA,EAAc,OAAkC,EAAA;AACvD,IAAK,IAAA,CAAA,IAAA,CAAK,mBAAmB,IAAI,CAAA;AACjC,IAAA,OAAO,IAAK,CAAA,QAAA,CAAS,EAAG,CAAA,IAAA,EAAM,OAAO,CAAA;AAAA;AACvC,EAEA,IAAI,EAAY,EAAA;AACd,IAAK,IAAA,CAAA,QAAA,CAAS,IAAI,EAAE,CAAA;AAAA;AACtB,EAEA,IAAA,CAAwC,SAAiB,IAAa,EAAA;AACpE,IAAA,OAAO,IAAI,OAAA,CAAW,CAAC,OAAA,EAAS,MAAW,KAAA;AACzC,MAAM,MAAA,EAAA,GAAK,KAAK,EAAG,EAAA;AACnB,MAAA,MAAM,OAA0B,GAAA;AAAA,QAC9B,IAAI,IAAK,CAAA,EAAA,EAAA;AAAA,QACT,YAAc,EAAA,EAAA;AAAA,QACd,IAAM,EAAA,IAAA;AAAA,QACN,IAAA;AAAA,QACA,SAAA,EAAW,KAAK,GAAI,EAAA;AAAA,QACpB,kBAAA,EAAoB,KAAK,GAAI,EAAA;AAAA,QAC7B,aAAA,EAAe,MAAM,IAAI,CAAA;AAAA,OAC3B;AAEA,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,CAAI,GAAA,OAAA;AACpB,MAAK,IAAA,CAAA,GAAA,CAAI,MAAM,OAAO,CAAA;AACtB,MAAO,MAAA,CAAA,MAAA,CAAO,WAAY,CAAA,OAAA,EAAS,GAAG,CAAA;AAEtC,MAAM,MAAA,KAAA,GAAQ,WAAW,MAAM;AAC7B,QAAK,IAAA,CAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AACxB,QAAA,MAAA,CAAO,EAAE,SAAA,EAAW,GAAK,EAAA,OAAA,EAAS,oBAAoB,CAAA;AAAA,SACrD,GAAK,CAAA;AAER,MAAM,MAAA,KAAA,GAAQ,KAAK,SAAU,CAAA,IAAA,CAAK,WAAW,EAAE,CAAA,CAAA,EAAI,CAAC,GAAQ,KAAA;AAC1D,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,OAAA,CAAQ,IAAI,IAAS,CAAA;AAAA,OACtB,CAAA;AAAA,KACF,CAAA;AAAA;AACH,EAEU,UAAU,CAAiB,EAAA;AACnC,IAAA,MAAM,MAA+D,CAAE,CAAA,IAAA;AACvE,IAAK,IAAA,CAAA,GAAA,CAAI,MAAM,GAAG,CAAA;AAGlB,IAAA,IAAI,IAAK,CAAA,QAAA,CAAS,GAAI,CAAA,YAAY,CAAG,EAAA;AACnC,MAAO,OAAA,IAAA,CAAK,QAAS,CAAA,GAAA,CAAI,YAAY,CAAA;AACrC,MAAA,IAAA,CAAK,UAAU,IAAK,CAAA,CAAA,QAAA,EAAW,IAAI,YAAY,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA;AACzD,MAAA;AAAA;AAGF,IAAA,IAAA,CAAK,QAAS,CAAA,IAAA,CAAK,SAAW,EAAA,CAAA,CAAE,IAAI,CAAA;AAAA;AAExC","file":"window-client.mjs","sourcesContent":["import * as uuid from 'uuid';\nimport { ConsoleLogger, EventEmitter, Logger } from '@teams.sdk/common';\n\nimport { ErrorMessageResponse, MessageRequest, MessageResponse } from './message';\n\n/**\n * the window client used to execute\n * functions and receive events from the\n * parent window\n */\nexport class WindowClient {\n  /**\n   * requests that are waiting\n   * for a response\n   */\n  get pending() {\n    return Object.values(this.inFlight);\n  }\n\n  protected id: number;\n  protected log: Logger;\n  protected inFlight: Record<string, MessageRequest> = {};\n  protected requests: EventEmitter<Record<string, MessageRequest>>;\n  protected responses: EventEmitter<Record<string, MessageResponse | ErrorMessageResponse>>;\n\n  constructor(logger?: Logger) {\n    this.id = 0;\n    this.log = logger?.child('window') || new ConsoleLogger('@teams.sdk/client/window');\n    this.requests = new EventEmitter();\n    this.responses = new EventEmitter();\n    window.addEventListener('message', this.onMessage.bind(this));\n  }\n\n  async on(name: string, handler: (...args: any[]) => any) {\n    this.send('registerHandler', name);\n    return this.requests.on(name, handler);\n  }\n\n  off(id: number) {\n    this.requests.off(id);\n  }\n\n  send<T extends Array<any> = Array<any>>(name: string, ...args: any[]) {\n    return new Promise<T>((resolve, reject) => {\n      const id = uuid.v4();\n      const request: MessageRequest = {\n        id: this.id++,\n        uuidAsString: id,\n        func: name,\n        args,\n        timestamp: Date.now(),\n        monotonicTimestamp: Date.now(),\n        apiVersionTag: `v2_${name}`,\n      };\n\n      this.inFlight[id] = request;\n      this.log.debug(request);\n      window.parent.postMessage(request, '*');\n\n      const timer = setTimeout(() => {\n        this.responses.off(subId);\n        reject({ errorCode: 408, message: 'response timeout' });\n      }, 10000);\n\n      const subId = this.responses.once(`message.${id}`, (res) => {\n        clearTimeout(timer);\n        resolve(res.args as T);\n      });\n    });\n  }\n\n  protected onMessage(e: MessageEvent) {\n    const res: MessageRequest | MessageResponse | ErrorMessageResponse = e.data;\n    this.log.debug(res);\n\n    // response message\n    if (this.inFlight[res.uuidAsString]) {\n      delete this.inFlight[res.uuidAsString];\n      this.responses.emit(`message.${res.uuidAsString}`, e.data);\n      return;\n    }\n\n    this.requests.emit('message', e.data);\n  }\n}\n"]}