diff --git a/packages/e2b/code-runtime-e2b/src/index.ts b/packages/e2b/code-runtime-e2b/src/index.ts index b6245244ba..c37cb3cc64 100644 --- a/packages/e2b/code-runtime-e2b/src/index.ts +++ b/packages/e2b/code-runtime-e2b/src/index.ts @@ -199,24 +199,20 @@ export class E2BCodeRuntime extends CodeRuntime { } /* jscpd:ignore-end */ - private awaitPreparation(signal: AbortSignal | undefined): Promise { - if (signal === undefined) return this.ready - return new Promise((resolve, reject) => { - const onAbort = (): void => { cleanup(); resolve(undefined) } - const cleanup = (): void => { signal.removeEventListener('abort', onAbort) } - signal.addEventListener('abort', onAbort, { once: true }) - if (signal.aborted) { - onAbort() - return - } - void this.ready.then( - (runtime) => { cleanup(); resolve(runtime) }, - (error: unknown) => { - cleanup() - reject(new Error(messageOf(error), { cause: error })) - }, - ) - }) + private async awaitPreparation(signal: AbortSignal | undefined): Promise { + if (signal === undefined) return await this.ready + const aborted = Promise.withResolvers() + const onAbort = (): void => { aborted.resolve(undefined) } + signal.addEventListener('abort', onAbort, { once: true }) + if (signal.aborted) { + signal.removeEventListener('abort', onAbort) + return undefined + } + try { + return await Promise.race([this.ready, aborted.promise]) + } finally { + signal.removeEventListener('abort', onAbort) + } } private assertPreparationActive(): void {