{"version":3,"file":"OffscreenExecutionService.mjs","sourceRoot":"","sources":["../../../src/services/offscreen/OffscreenExecutionService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,sCAAsC;AAGhF,OAAO,EAAE,qBAAqB,EAAE,2CAAuC;AAMvE,MAAM,OAAO,yBAA0B,SAAQ,qBAAqB;IACzD,iBAAiB,CAAmB;IAE7C;;;;;;;;;;OAUG;IACH,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,GAAG,IAAI,EACkC;QACzC,KAAK,CAAC;YACJ,GAAG,IAAI;YACP,SAAS;YACT,iBAAiB;YACjB,MAAM,EAAE,IAAI,+BAA+B,CAAC;gBAC1C,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,OAAO;aAChB,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;IAC5C,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,aAAa,CAAC,MAAc;QAC1C,MAAM,IAAI,CAAC,iBAAiB,CAAC;QAE7B,OAAO,MAAM,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;CACF","sourcesContent":["import { BrowserRuntimePostMessageStream } from '@metamask/post-message-stream';\n\nimport type { ExecutionServiceArgs } from '../ExecutionService';\nimport { ProxyExecutionService } from '../proxy/ProxyExecutionService';\n\ntype OffscreenExecutionEnvironmentServiceArgs = {\n  offscreenPromise: Promise<unknown>;\n} & ExecutionServiceArgs;\n\nexport class OffscreenExecutionService extends ProxyExecutionService {\n  readonly #offscreenPromise: Promise<unknown>;\n\n  /**\n   * Create a new offscreen execution service.\n   *\n   * @param args - The constructor arguments.\n   * @param args.messenger - The messenger to use for communication with the\n   * `SnapController`.\n   * @param args.setupSnapProvider - The function to use to set up the snap\n   * provider.\n   * @param args.offscreenPromise - A promise that resolves when the offscreen\n   * environment is ready.\n   */\n  constructor({\n    messenger,\n    setupSnapProvider,\n    offscreenPromise,\n    ...args\n  }: OffscreenExecutionEnvironmentServiceArgs) {\n    super({\n      ...args,\n      messenger,\n      setupSnapProvider,\n      stream: new BrowserRuntimePostMessageStream({\n        name: 'parent',\n        target: 'child',\n      }),\n    });\n\n    this.#offscreenPromise = offscreenPromise;\n  }\n\n  /**\n   * Create a new stream for the given Snap ID. This will wait for the offscreen\n   * environment to be ready before creating the stream.\n   *\n   * @param snapId - The Snap ID to create a stream for.\n   * @returns The stream for the given Snap ID.\n   */\n  protected async initEnvStream(snapId: string) {\n    await this.#offscreenPromise;\n\n    return await super.initEnvStream(snapId);\n  }\n}\n"]}