(e: unknown, ctx: { providerID: string })
| 607 | } |
| 608 | |
| 609 | export function fromError(e: unknown, ctx: { providerID: string }) { |
| 610 | switch (true) { |
| 611 | case e instanceof DOMException && e.name === "AbortError": |
| 612 | return new MessageV2.AbortedError( |
| 613 | { message: e.message }, |
| 614 | { |
| 615 | cause: e, |
| 616 | }, |
| 617 | ).toObject() |
| 618 | case MessageV2.OutputLengthError.isInstance(e): |
| 619 | return e |
| 620 | case LoadAPIKeyError.isInstance(e): |
| 621 | return new MessageV2.AuthError( |
| 622 | { |
| 623 | providerID: ctx.providerID, |
| 624 | message: e.message, |
| 625 | }, |
| 626 | { cause: e }, |
| 627 | ).toObject() |
| 628 | case APICallError.isInstance(e): |
| 629 | const message = iife(() => { |
| 630 | let msg = e.message |
| 631 | const transformed = ProviderTransform.error(ctx.providerID, e) |
| 632 | if (transformed !== msg) { |
| 633 | return transformed |
| 634 | } |
| 635 | if (!e.responseBody || (e.statusCode && msg !== STATUS_CODES[e.statusCode])) { |
| 636 | return msg |
| 637 | } |
| 638 | |
| 639 | try { |
| 640 | const body = JSON.parse(e.responseBody) |
| 641 | // try to extract common error message fields |
| 642 | const errMsg = |
| 643 | (typeof body.error?.friendly_message === "string" && body.error.friendly_message) || |
| 644 | (typeof body.error?.message === "string" && body.error.message) || |
| 645 | (typeof body.message === "string" && body.message) |
| 646 | if (errMsg && typeof errMsg === "string") { |
| 647 | return `${msg}: ${errMsg}` |
| 648 | } |
| 649 | } catch {} |
| 650 | |
| 651 | return `${msg}: ${e.responseBody}` |
| 652 | }) |
| 653 | |
| 654 | return new MessageV2.APIError( |
| 655 | { |
| 656 | message, |
| 657 | statusCode: e.statusCode, |
| 658 | isRetryable: e.isRetryable, |
| 659 | responseHeaders: e.responseHeaders, |
| 660 | responseBody: e.responseBody, |
| 661 | }, |
| 662 | { cause: e }, |
| 663 | ).toObject() |
| 664 | case e instanceof Error: |
| 665 | return new NamedError.Unknown({ message: e.toString() }, { cause: e }).toObject() |
| 666 | default: |
nothing calls this directly
no test coverage detected