UNPKG

unstructured-client

Version:

<h3 align="center"> <img src="https://raw.githubusercontent.com/Unstructured-IO/unstructured/main/img/unstructured_logo.png" height="200" > </h3>

261 lines (231 loc) 6 kB
/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import * as shared from "../sdk/models/shared/index.js"; type OAuth2PasswordFlow = { username: string; password?: string | undefined; clientID: string; clientSecret?: string | undefined; tokenURL: string; }; export enum SecurityErrorCode { Incomplete = "incomplete", UnrecognisedSecurityType = "unrecognized_security_type", } export class SecurityError extends Error { constructor( public code: SecurityErrorCode, message: string, ) { super(message); this.name = "SecurityError"; } static incomplete(): SecurityError { return new SecurityError( SecurityErrorCode.Incomplete, "Security requirements not met in order to perform the operation", ); } static unrecognizedType(type: string): SecurityError { return new SecurityError( SecurityErrorCode.UnrecognisedSecurityType, `Unrecognised security type: ${type}`, ); } } export type SecurityState = { basic: { username?: string | undefined; password?: string | undefined }; headers: Record<string, string>; queryParams: Record<string, string>; cookies: Record<string, string>; oauth2: ({ type: "password" } & OAuth2PasswordFlow) | { type: "none" }; }; type SecurityInputBasic = { type: "http:basic"; value: | { username?: string | undefined; password?: string | undefined } | null | undefined; }; type SecurityInputBearer = { type: "http:bearer"; value: string | null | undefined; fieldName: string; }; type SecurityInputAPIKey = { type: "apiKey:header" | "apiKey:query" | "apiKey:cookie"; value: string | null | undefined; fieldName: string; }; type SecurityInputOIDC = { type: "openIdConnect"; value: string | null | undefined; fieldName: string; }; type SecurityInputOAuth2 = { type: "oauth2"; value: string | null | undefined; fieldName: string; }; type SecurityInputOAuth2ClientCredentials = { type: "oauth2:client_credentials"; value: | { clientID?: string | undefined; clientSecret?: string | undefined } | null | string | undefined; fieldName?: string; }; type SecurityInputOAuth2PasswordCredentials = { type: "oauth2:password"; value: | string | null | undefined; fieldName?: string; }; type SecurityInputCustom = { type: "http:custom"; value: any | null | undefined; fieldName?: string; }; export type SecurityInput = | SecurityInputBasic | SecurityInputBearer | SecurityInputAPIKey | SecurityInputOAuth2 | SecurityInputOAuth2ClientCredentials | SecurityInputOAuth2PasswordCredentials | SecurityInputOIDC | SecurityInputCustom; export function resolveSecurity( ...options: SecurityInput[][] ): SecurityState | null { const state: SecurityState = { basic: {}, headers: {}, queryParams: {}, cookies: {}, oauth2: { type: "none" }, }; const option = options.find((opts) => { return opts.every((o) => { if (o.value == null) { return false; } else if (o.type === "http:basic") { return o.value.username != null || o.value.password != null; } else if (o.type === "http:custom") { return null; } else if (o.type === "oauth2:password") { return ( typeof o.value === "string" && !!o.value ); } else if (o.type === "oauth2:client_credentials") { if (typeof o.value == "string") { return !!o.value; } return o.value.clientID != null || o.value.clientSecret != null; } else if (typeof o.value === "string") { return !!o.value; } else { throw new Error( `Unrecognized security type: ${o.type} (value type: ${typeof o .value})`, ); } }); }); if (option == null) { return null; } option.forEach((spec) => { if (spec.value == null) { return; } const { type } = spec; switch (type) { case "apiKey:header": state.headers[spec.fieldName] = spec.value; break; case "apiKey:query": state.queryParams[spec.fieldName] = spec.value; break; case "apiKey:cookie": state.cookies[spec.fieldName] = spec.value; break; case "http:basic": applyBasic(state, spec); break; case "http:custom": break; case "http:bearer": applyBearer(state, spec); break; case "oauth2": applyBearer(state, spec); break; case "oauth2:password": applyBearer(state, spec); break; case "oauth2:client_credentials": break; case "openIdConnect": applyBearer(state, spec); break; default: spec satisfies never; throw SecurityError.unrecognizedType(type); } }); return state; } function applyBasic( state: SecurityState, spec: SecurityInputBasic, ) { if (spec.value == null) { return; } state.basic = spec.value; } function applyBearer( state: SecurityState, spec: | SecurityInputBearer | SecurityInputOAuth2 | SecurityInputOIDC | SecurityInputOAuth2PasswordCredentials, ) { if (typeof spec.value !== "string" || !spec.value) { return; } let value = spec.value; if (value.slice(0, 7).toLowerCase() !== "bearer ") { value = `Bearer ${value}`; } if (spec.fieldName !== undefined) { state.headers[spec.fieldName] = value; } } export function resolveGlobalSecurity( security: Partial<shared.Security> | null | undefined, ): SecurityState | null { return resolveSecurity( [ { fieldName: "unstructured-api-key", type: "apiKey:header", value: security?.apiKeyAuth, }, ], ); } export async function extractSecurity< T extends string | Record<string, unknown>, >(sec: T | (() => Promise<T>) | undefined): Promise<T | undefined> { if (sec == null) { return; } return typeof sec === "function" ? sec() : sec; }