diff --git a/package.json b/package.json index 17d0479..b2d8231 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "twitter-api-sdk", - "version": "1.0.7", + "version": "1.0.8", "description": "A TypeScript SDK for the Twitter API", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/src/request.ts b/src/request.ts index ed87c10..99b798c 100644 --- a/src/request.ts +++ b/src/request.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import fetch from "node-fetch"; -import type { RequestInfo, RequestInit, Response } from "node-fetch"; +import type { RequestInfo, RequestInit, Response, Headers } from "node-fetch"; import { buildQueryString } from "./utils"; import { AuthClient, @@ -39,6 +39,25 @@ async function fetchWithRetries( return res; } +class TwitterResponseError extends Error { + status: number; + statusText: string; + headers: Record; + error: Record; + constructor( + status: number, + statusText: string, + headers: Headers, + error: Record + ) { + super(); + this.status = status; + this.statusText = statusText; + this.headers = Object.fromEntries(headers); + this.error = error; + } +} + export async function request({ auth, endpoint, @@ -60,7 +79,7 @@ export async function request({ url.toString(), { headers: { - "User-Agent": `twitter-api-typescript-sdk/1.0.7`, + "User-Agent": `twitter-api-typescript-sdk/1.0.8`, ...(isPost ? { "Content-Type": "application/json; charset=utf-8" } : undefined), @@ -77,7 +96,13 @@ export async function request({ max_retries ); if (!response.ok) { - throw new Error(`${response.status}, ${response.statusText}`); + const error = await response.json(); + throw new TwitterResponseError( + response.status, + response.statusText, + response.headers, + error + ); } return response; }