unstructured-client
Version:
<h3 align="center"> <img src="https://raw.githubusercontent.com/Unstructured-IO/unstructured/main/img/unstructured_logo.png" height="200" > </h3>
270 lines • 12.4 kB
JavaScript
/*
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
*/
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _ClientSDK_httpClient, _ClientSDK_hooks, _ClientSDK_logger;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ClientSDK = void 0;
const hooks_js_1 = require("../hooks/hooks.js");
const httpclienterrors_js_1 = require("../sdk/models/errors/httpclienterrors.js");
const fp_js_1 = require("../sdk/types/fp.js");
const base64_js_1 = require("./base64.js");
const config_js_1 = require("./config.js");
const encodings_js_1 = require("./encodings.js");
const http_js_1 = require("./http.js");
const retries_js_1 = require("./retries.js");
const gt = typeof globalThis === "undefined" ? null : globalThis;
const webWorkerLike = typeof gt === "object"
&& gt != null
&& "importScripts" in gt
&& typeof gt["importScripts"] === "function";
const isBrowserLike = webWorkerLike
|| (typeof navigator !== "undefined" && "serviceWorker" in navigator)
|| (typeof window === "object" && typeof window.document !== "undefined");
class ClientSDK {
constructor(options = {}) {
_ClientSDK_httpClient.set(this, void 0);
_ClientSDK_hooks.set(this, void 0);
_ClientSDK_logger.set(this, void 0);
const opt = options;
if (typeof opt === "object"
&& opt != null
&& "hooks" in opt
&& opt.hooks instanceof hooks_js_1.SDKHooks) {
__classPrivateFieldSet(this, _ClientSDK_hooks, opt.hooks, "f");
}
else {
__classPrivateFieldSet(this, _ClientSDK_hooks, new hooks_js_1.SDKHooks(), "f");
}
const url = (0, config_js_1.serverURLFromOptions)(options);
if (url) {
url.pathname = url.pathname.replace(/\/+$/, "") + "/";
}
const { baseURL, client } = __classPrivateFieldGet(this, _ClientSDK_hooks, "f").sdkInit({
baseURL: url,
client: options.httpClient || new http_js_1.HTTPClient(),
});
this._baseURL = baseURL;
__classPrivateFieldSet(this, _ClientSDK_httpClient, client, "f");
this._options = { ...options, hooks: __classPrivateFieldGet(this, _ClientSDK_hooks, "f") };
__classPrivateFieldSet(this, _ClientSDK_logger, this._options.debugLogger, "f");
}
_createRequest(context, conf, options) {
const { method, path, query, headers: opHeaders, security } = conf;
const base = conf.baseURL ?? this._baseURL;
if (!base) {
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.InvalidRequestError("No base URL provided for operation"));
}
const reqURL = new URL(base);
const inputURL = new URL(path, reqURL);
if (path) {
reqURL.pathname += reqURL.pathname.endsWith("/") ? "" : "/";
reqURL.pathname += inputURL.pathname.replace(/^\/+/, "");
}
let finalQuery = query || "";
const secQuery = [];
for (const [k, v] of Object.entries(security?.queryParams || {})) {
const q = (0, encodings_js_1.encodeForm)(k, v, { charEncoding: "percent" });
if (typeof q !== "undefined") {
secQuery.push(q);
}
}
if (secQuery.length) {
finalQuery += `&${secQuery.join("&")}`;
}
if (finalQuery) {
const q = finalQuery.startsWith("&") ? finalQuery.slice(1) : finalQuery;
reqURL.search = `?${q}`;
}
const headers = new Headers(opHeaders);
const username = security?.basic.username;
const password = security?.basic.password;
if (username != null || password != null) {
const encoded = (0, base64_js_1.stringToBase64)([username || "", password || ""].join(":"));
headers.set("Authorization", `Basic ${encoded}`);
}
const securityHeaders = new Headers(security?.headers || {});
for (const [k, v] of securityHeaders) {
headers.set(k, v);
}
let cookie = headers.get("cookie") || "";
for (const [k, v] of Object.entries(security?.cookies || {})) {
cookie += `; ${k}=${v}`;
}
cookie = cookie.startsWith("; ") ? cookie.slice(2) : cookie;
headers.set("cookie", cookie);
const userHeaders = new Headers(options?.headers ?? options?.fetchOptions?.headers);
for (const [k, v] of userHeaders) {
headers.set(k, v);
}
// Only set user agent header in non-browser-like environments since CORS
// policy disallows setting it in browsers e.g. Chrome throws an error.
if (!isBrowserLike) {
headers.set(conf.uaHeader ?? "user-agent", conf.userAgent ?? config_js_1.SDK_METADATA.userAgent);
}
const fetchOptions = {
...options?.fetchOptions,
...options,
};
if (!fetchOptions?.signal && conf.timeoutMs && conf.timeoutMs > 0) {
const timeoutSignal = AbortSignal.timeout(conf.timeoutMs);
fetchOptions.signal = timeoutSignal;
}
if (conf.body instanceof ReadableStream) {
Object.assign(fetchOptions, { duplex: "half" });
}
let input;
try {
input = __classPrivateFieldGet(this, _ClientSDK_hooks, "f").beforeCreateRequest(context, {
url: reqURL,
options: {
...fetchOptions,
body: conf.body ?? null,
headers,
method,
},
});
}
catch (err) {
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.UnexpectedClientError("Create request hook failed to execute", {
cause: err,
}));
}
return (0, fp_js_1.OK)(new Request(input.url, input.options));
}
async _do(request, options) {
const { context, errorCodes } = options;
return (0, retries_js_1.retry)(async () => {
const req = await __classPrivateFieldGet(this, _ClientSDK_hooks, "f").beforeRequest(context, request.clone());
await logRequest(__classPrivateFieldGet(this, _ClientSDK_logger, "f"), req).catch((e) => __classPrivateFieldGet(this, _ClientSDK_logger, "f")?.log("Failed to log request:", e));
let response = await __classPrivateFieldGet(this, _ClientSDK_httpClient, "f").request(req);
try {
if ((0, http_js_1.matchStatusCode)(response, errorCodes)) {
const result = await __classPrivateFieldGet(this, _ClientSDK_hooks, "f").afterError(context, response, null);
if (result.error) {
throw result.error;
}
response = result.response || response;
}
else {
response = await __classPrivateFieldGet(this, _ClientSDK_hooks, "f").afterSuccess(context, response);
}
}
finally {
await logResponse(__classPrivateFieldGet(this, _ClientSDK_logger, "f"), response, req)
.catch(e => __classPrivateFieldGet(this, _ClientSDK_logger, "f")?.log("Failed to log response:", e));
}
return response;
}, { config: options.retryConfig, statusCodes: options.retryCodes }).then((r) => (0, fp_js_1.OK)(r), (err) => {
switch (true) {
case (0, http_js_1.isAbortError)(err):
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.RequestAbortedError("Request aborted by client", {
cause: err,
}));
case (0, http_js_1.isTimeoutError)(err):
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.RequestTimeoutError("Request timed out", { cause: err }));
case (0, http_js_1.isConnectionError)(err):
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.ConnectionError("Unable to make request", { cause: err }));
default:
return (0, fp_js_1.ERR)(new httpclienterrors_js_1.UnexpectedClientError("Unexpected HTTP client error", {
cause: err,
}));
}
});
}
}
exports.ClientSDK = ClientSDK;
_ClientSDK_httpClient = new WeakMap(), _ClientSDK_hooks = new WeakMap(), _ClientSDK_logger = new WeakMap();
const jsonLikeContentTypeRE = /(application|text)\/.*?\+*json.*/;
const jsonlLikeContentTypeRE = /(application|text)\/(.*?\+*\bjsonl\b.*|.*?\+*\bx-ndjson\b.*)/;
async function logRequest(logger, req) {
if (!logger) {
return;
}
const contentType = req.headers.get("content-type");
const ct = contentType?.split(";")[0] || "";
logger.group(`> Request: ${req.method} ${req.url}`);
logger.group("Headers:");
for (const [k, v] of req.headers.entries()) {
logger.log(`${k}: ${v}`);
}
logger.groupEnd();
logger.group("Body:");
switch (true) {
case jsonLikeContentTypeRE.test(ct):
logger.log(await req.clone().json());
break;
case ct.startsWith("text/"):
logger.log(await req.clone().text());
break;
case ct === "multipart/form-data": {
const body = await req.clone().formData();
for (const [k, v] of body) {
const vlabel = v instanceof Blob ? "<Blob>" : v;
logger.log(`${k}: ${vlabel}`);
}
break;
}
default:
logger.log(`<${contentType}>`);
break;
}
logger.groupEnd();
logger.groupEnd();
}
async function logResponse(logger, res, req) {
if (!logger) {
return;
}
const contentType = res.headers.get("content-type");
const ct = contentType?.split(";")[0] || "";
logger.group(`< Response: ${req.method} ${req.url}`);
logger.log("Status Code:", res.status, res.statusText);
logger.group("Headers:");
for (const [k, v] of res.headers.entries()) {
logger.log(`${k}: ${v}`);
}
logger.groupEnd();
logger.group("Body:");
switch (true) {
case (0, http_js_1.matchContentType)(res, "application/json")
|| jsonLikeContentTypeRE.test(ct) && !jsonlLikeContentTypeRE.test(ct):
logger.log(await res.clone().json());
break;
case (0, http_js_1.matchContentType)(res, "application/jsonl")
|| jsonlLikeContentTypeRE.test(ct):
logger.log(await res.clone().text());
break;
case (0, http_js_1.matchContentType)(res, "text/event-stream"):
logger.log(`<${contentType}>`);
break;
case (0, http_js_1.matchContentType)(res, "text/*"):
logger.log(await res.clone().text());
break;
case (0, http_js_1.matchContentType)(res, "multipart/form-data"): {
const body = await res.clone().formData();
for (const [k, v] of body) {
const vlabel = v instanceof Blob ? "<Blob>" : v;
logger.log(`${k}: ${vlabel}`);
}
break;
}
default:
logger.log(`<${contentType}>`);
break;
}
logger.groupEnd();
logger.groupEnd();
}
//# sourceMappingURL=sdks.js.map
;