error.mjs 3.3 KB

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