{"version":3,"file":"IframeExecutionService.cjs","sourceRoot":"","sources":["../../../src/services/iframe/IframeExecutionService.ts"],"names":[],"mappings":";;;AACA,uEAAwE;AACxE,uDAAqD;AAErD,2CAA0C;AAK1C,8DAAuD;AAMvD,MAAa,sBAAuB,SAAQ,mCAAwB;IAC3D,SAAS,CAAM;IAEtB,YAAY,EACV,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,GAAG,IAAI,EAC+B;QACtC,KAAK,CAAC;YACJ,GAAG,IAAI;YACP,SAAS;YACT,iBAAiB;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAES,KAAK,CAAC,YAAY,CAC1B,UAAoC;QAEpC,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CACpC,UAAU,CAAC,EAAE,CACc,CAAC;QAE9B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QAEf,MAAM,IAAA,mBAAW,EACf,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5B,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC;QAC7B,CAAC,CAAC,EACF,EAAE,CACH,CAAC;QAEF,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAES,KAAK,CAAC,aAAa,CAAC,MAAc;QAI1C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAE3C,MAAM,YAAY,GAAG,MAAM,IAAA,0BAAY,EAAC;YACtC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC9B,EAAE,EAAE,MAAM;SACX,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,6CAAuB,CAAC;YACzC,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,OAAO;YACf,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,GAAG;SAClB,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC;CACF;AA7DD,wDA6DC","sourcesContent":["import type { BasePostMessageStream } from '@metamask/post-message-stream';\nimport { WindowPostMessageStream } from '@metamask/post-message-stream';\nimport { createWindow } from '@metamask/snaps-utils';\n\nimport { withTimeout } from '../../utils';\nimport type {\n  ExecutionServiceArgs,\n  TerminateJobArgs,\n} from '../ExecutionService';\nimport { ExecutionService } from '../ExecutionService';\n\ntype IframeExecutionEnvironmentServiceArgs = {\n  iframeUrl: URL;\n} & ExecutionServiceArgs;\n\nexport class IframeExecutionService extends ExecutionService<Window> {\n  public iframeUrl: URL;\n\n  constructor({\n    iframeUrl,\n    messenger,\n    setupSnapProvider,\n    ...args\n  }: IframeExecutionEnvironmentServiceArgs) {\n    super({\n      ...args,\n      messenger,\n      setupSnapProvider,\n    });\n    this.iframeUrl = iframeUrl;\n  }\n\n  protected async terminateJob(\n    jobWrapper: TerminateJobArgs<Window>,\n  ): Promise<void> {\n    const iframe = document.getElementById(\n      jobWrapper.id,\n    ) as HTMLIFrameElement | null;\n\n    if (!iframe) {\n      return;\n    }\n\n    iframe.id = '';\n\n    await withTimeout(\n      new Promise<void>((resolve) => {\n        iframe.addEventListener('load', () => resolve(), { once: true });\n        iframe.src = 'about:blank';\n      }),\n      10,\n    );\n\n    iframe.remove();\n  }\n\n  protected async initEnvStream(snapId: string): Promise<{\n    worker: Window;\n    stream: BasePostMessageStream;\n  }> {\n    this.setSnapStatus(snapId, 'initializing');\n\n    const iframeWindow = await createWindow({\n      uri: this.iframeUrl.toString(),\n      id: snapId,\n    });\n\n    const stream = new WindowPostMessageStream({\n      name: 'parent',\n      target: 'child',\n      targetWindow: iframeWindow,\n      targetOrigin: '*',\n    });\n\n    return { worker: iframeWindow, stream };\n  }\n}\n"]}