UNPKG

5.04 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.convertResponseToReadable = void 0;
4const node_stream_1 = require("node:stream");
5const exceptions_1 = require("./exceptions");
6const pkg = require("../package.json");
7function convertResponseToReadable(response) {
8 const reader = response.body.getReader();
9 return new node_stream_1.Readable({
10 async read() {
11 const { done, value } = await reader.read();
12 if (done) {
13 this.push(null);
14 }
15 else {
16 this.push(Buffer.from(value));
17 }
18 },
19 });
20}
21exports.convertResponseToReadable = convertResponseToReadable;
22class HTTPFetchClient {
23 constructor(config) {
24 this.baseURL = config.baseURL;
25 this.defaultHeaders = Object.assign({ "User-Agent": `${pkg.name}/${pkg.version}` }, config.defaultHeaders);
26 }
27 async get(url, params) {
28 const requestUrl = new URL(url, this.baseURL);
29 if (params) {
30 const searchParams = new URLSearchParams();
31 for (const key in params) {
32 if (params.hasOwnProperty(key)) {
33 searchParams.append(key, params[key]);
34 }
35 }
36 requestUrl.search = searchParams.toString();
37 }
38 const response = await fetch(requestUrl, {
39 headers: this.defaultHeaders,
40 });
41 await this.checkResponseStatus(response);
42 return response;
43 }
44 async post(url, body, config) {
45 const requestUrl = new URL(url, this.baseURL);
46 const response = await fetch(requestUrl, {
47 method: "POST",
48 headers: Object.assign(Object.assign({ "Content-Type": "application/json" }, this.defaultHeaders), (config && config.headers)),
49 body: JSON.stringify(body),
50 });
51 await this.checkResponseStatus(response);
52 return response;
53 }
54 async put(url, body, config) {
55 const requestUrl = new URL(url, this.baseURL);
56 const response = await fetch(requestUrl, {
57 method: "PUT",
58 headers: Object.assign(Object.assign({ "Content-Type": "application/json" }, this.defaultHeaders), (config && config.headers)),
59 body: JSON.stringify(body),
60 });
61 await this.checkResponseStatus(response);
62 return response;
63 }
64 async postForm(url, body) {
65 const requestUrl = new URL(url, this.baseURL);
66 const params = new URLSearchParams();
67 for (const key in body) {
68 if (body.hasOwnProperty(key)) {
69 params.append(key, body[key]);
70 }
71 }
72 const response = await fetch(requestUrl, {
73 method: "POST",
74 headers: Object.assign({ "Content-Type": "application/x-www-form-urlencoded" }, this.defaultHeaders),
75 body: params.toString(),
76 });
77 await this.checkResponseStatus(response);
78 return response;
79 }
80 async postFormMultipart(url, form) {
81 const requestUrl = new URL(url, this.baseURL);
82 const response = await fetch(requestUrl, {
83 method: "POST",
84 headers: Object.assign({}, this.defaultHeaders),
85 body: form,
86 });
87 await this.checkResponseStatus(response);
88 return response;
89 }
90 async putFormMultipart(url, form, config) {
91 const requestUrl = new URL(url, this.baseURL);
92 const response = await fetch(requestUrl, {
93 method: "PUT",
94 headers: Object.assign(Object.assign({}, this.defaultHeaders), (config && (config.headers ? config.headers : {}))),
95 body: form,
96 });
97 await this.checkResponseStatus(response);
98 return response;
99 }
100 async postBinaryContent(url, body) {
101 const requestUrl = new URL(url, this.baseURL);
102 const response = await fetch(requestUrl, {
103 method: "POST",
104 headers: Object.assign({ "Content-Type": body.type }, this.defaultHeaders),
105 body: body,
106 });
107 await this.checkResponseStatus(response);
108 return response;
109 }
110 async delete(url, params) {
111 const requestUrl = new URL(url, this.baseURL);
112 if (params) {
113 requestUrl.search = new URLSearchParams(params).toString();
114 }
115 const response = await fetch(requestUrl, {
116 method: "DELETE",
117 headers: Object.assign({}, this.defaultHeaders),
118 });
119 await this.checkResponseStatus(response);
120 return response;
121 }
122 async checkResponseStatus(response) {
123 const { ok, status, statusText, headers } = response;
124 const message = `${status} - ${statusText}`;
125 if (!ok) {
126 const body = await response.text();
127 throw new exceptions_1.HTTPFetchError(message, {
128 status,
129 statusText,
130 headers,
131 body,
132 });
133 }
134 }
135}
136exports.default = HTTPFetchClient;