error.mjs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
  2. import { castToError } from "./core.mjs";
  3. export class OpenAIError extends Error {
  4. }
  5. export class APIError extends OpenAIError {
  6. constructor(status, error, message, headers) {
  7. super(`${APIError.makeMessage(status, error, message)}`);
  8. this.status = status;
  9. this.headers = headers;
  10. this.request_id = headers?.['x-request-id'];
  11. this.error = error;
  12. const data = error;
  13. this.code = data?.['code'];
  14. this.param = data?.['param'];
  15. this.type = data?.['type'];
  16. }
  17. static makeMessage(status, error, message) {
  18. const msg = error?.message ?
  19. typeof error.message === 'string' ?
  20. error.message
  21. : JSON.stringify(error.message)
  22. : error ? JSON.stringify(error)
  23. : message;
  24. if (status && msg) {
  25. return `${status} ${msg}`;
  26. }
  27. if (status) {
  28. return `${status} status code (no body)`;
  29. }
  30. if (msg) {
  31. return msg;
  32. }
  33. return '(no status code or body)';
  34. }
  35. static generate(status, errorResponse, message, headers) {
  36. if (!status || !headers) {
  37. return new APIConnectionError({ message, cause: castToError(errorResponse) });
  38. }
  39. const error = errorResponse?.['error'];
  40. if (status === 400) {
  41. return new BadRequestError(status, error, message, headers);
  42. }
  43. if (status === 401) {
  44. return new AuthenticationError(status, error, message, headers);
  45. }
  46. if (status === 403) {
  47. return new PermissionDeniedError(status, error, message, headers);
  48. }
  49. if (status === 404) {
  50. return new NotFoundError(status, error, message, headers);
  51. }
  52. if (status === 409) {
  53. return new ConflictError(status, error, message, headers);
  54. }
  55. if (status === 422) {
  56. return new UnprocessableEntityError(status, error, message, headers);
  57. }
  58. if (status === 429) {
  59. return new RateLimitError(status, error, message, headers);
  60. }
  61. if (status >= 500) {
  62. return new InternalServerError(status, error, message, headers);
  63. }
  64. return new APIError(status, error, message, headers);
  65. }
  66. }
  67. export class APIUserAbortError extends APIError {
  68. constructor({ message } = {}) {
  69. super(undefined, undefined, message || 'Request was aborted.', undefined);
  70. }
  71. }
  72. export class APIConnectionError extends APIError {
  73. constructor({ message, cause }) {
  74. super(undefined, undefined, message || 'Connection error.', undefined);
  75. // in some environments the 'cause' property is already declared
  76. // @ts-ignore
  77. if (cause)
  78. this.cause = cause;
  79. }
  80. }
  81. export class APIConnectionTimeoutError extends APIConnectionError {
  82. constructor({ message } = {}) {
  83. super({ message: message ?? 'Request timed out.' });
  84. }
  85. }
  86. export class BadRequestError extends APIError {
  87. }
  88. export class AuthenticationError extends APIError {
  89. }
  90. export class PermissionDeniedError extends APIError {
  91. }
  92. export class NotFoundError extends APIError {
  93. }
  94. export class ConflictError extends APIError {
  95. }
  96. export class UnprocessableEntityError extends APIError {
  97. }
  98. export class RateLimitError extends APIError {
  99. }
  100. export class InternalServerError extends APIError {
  101. }
  102. export class LengthFinishReasonError extends OpenAIError {
  103. constructor() {
  104. super(`Could not parse response content as the length limit was reached`);
  105. }
  106. }
  107. export class ContentFilterFinishReasonError extends OpenAIError {
  108. constructor() {
  109. super(`Could not parse response content as the request was rejected by the content filter`);
  110. }
  111. }
  112. //# sourceMappingURL=error.mjs.map