@hyperbrowser/sdk
Version:
Node SDK for Hyperbrowser API
69 lines (68 loc) • 2.73 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseService = void 0;
const node_fetch_1 = __importDefault(require("node-fetch"));
const client_1 = require("../client");
class BaseService {
constructor(apiKey, baseUrl, timeout = 30000) {
this.apiKey = apiKey;
this.baseUrl = baseUrl;
this.timeout = timeout;
}
async request(path, init, params) {
try {
const url = new URL(`${this.baseUrl}/api${path}`);
if (params) {
Object.entries(params).forEach(([key, value]) => {
if (value !== undefined) {
url.searchParams.append(key, value.toString());
}
});
}
const headerKeys = Object.keys(init?.headers || {});
const contentTypeKey = headerKeys.find((key) => key.toLowerCase() === "content-type");
const response = await (0, node_fetch_1.default)(url.toString(), {
...init,
timeout: this.timeout,
headers: {
"x-api-key": this.apiKey,
...(contentTypeKey && init?.headers
? { "content-type": init.headers[contentTypeKey] }
: { "content-type": "application/json" }),
...init?.headers,
},
});
if (!response.ok) {
let errorMessage;
try {
const errorData = await response.json();
errorMessage =
errorData.message || errorData.error || `HTTP error! status: ${response.status}`;
}
catch {
errorMessage = `HTTP error! status: ${response.status}`;
}
throw new client_1.HyperbrowserError(errorMessage, response.status);
}
if (response.headers.get("content-length") === "0") {
return {};
}
try {
return (await response.json());
}
catch {
throw new client_1.HyperbrowserError("Failed to parse JSON response", response.status);
}
}
catch (error) {
if (error instanceof client_1.HyperbrowserError) {
throw error;
}
throw new client_1.HyperbrowserError(error instanceof Error ? error.message : "Unknown error occurred", undefined);
}
}
}
exports.BaseService = BaseService;
;