@attachmentav/virus-scan-sdk-ts
Version:
An SDK to integrate virus and malware scan capabilities into JavaScript / TypeScript applications. Scan files for viruses, trojans, and other kinds of malware with attachmentAV powered by Sophos.
1 lines • 59.1 kB
Source Map (JSON)
{"version":3,"sources":["../sdk/runtime.ts","../sdk/models/AsyncDownloadScanRequest.ts","../sdk/models/AsyncS3ScanRequest.ts","../sdk/models/ScanResult.ts","../sdk/models/SyncDownloadScanRequest.ts","../sdk/models/SyncS3ScanRequest.ts","../sdk/models/Whoami.ts","../sdk/apis/AttachmentAVApi.ts"],"sourcesContent":["/* tslint:disable */\n/* eslint-disable */\n/**\n * attachmentAV\n * An SDK to integrate virus and malware scan capabilities into JavaScript / TypeScript applications. Scan files for viruses, trojans, and other kinds of malware with attachmentAV powered by Sophos.\n *\n * The version of the OpenAPI document: 1.0.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nexport const BASE_PATH = \"https://eu.developer.attachmentav.com/v1\".replace(/\\/+$/, \"\");\n\nexport interface ConfigurationParameters {\n basePath?: string; // override base path\n fetchApi?: FetchAPI; // override for fetch implementation\n middleware?: Middleware[]; // middleware to apply before/after fetch requests\n queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings\n username?: string; // parameter for basic security\n password?: string; // parameter for basic security\n apiKey?: string | Promise<string> | ((name: string) => string | Promise<string>); // parameter for apiKey security\n accessToken?: string | Promise<string> | ((name?: string, scopes?: string[]) => string | Promise<string>); // parameter for oauth2 security\n headers?: HTTPHeaders; //header params we want to use on every request\n credentials?: RequestCredentials; //value for the credentials param we want to use on each request\n}\n\nexport class Configuration {\n constructor(private configuration: ConfigurationParameters = {}) {}\n\n set config(configuration: Configuration) {\n this.configuration = configuration;\n }\n\n get basePath(): string {\n return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH;\n }\n\n get fetchApi(): FetchAPI | undefined {\n return this.configuration.fetchApi;\n }\n\n get middleware(): Middleware[] {\n return this.configuration.middleware || [];\n }\n\n get queryParamsStringify(): (params: HTTPQuery) => string {\n return this.configuration.queryParamsStringify || querystring;\n }\n\n get username(): string | undefined {\n return this.configuration.username;\n }\n\n get password(): string | undefined {\n return this.configuration.password;\n }\n\n get apiKey(): ((name: string) => string | Promise<string>) | undefined {\n const apiKey = this.configuration.apiKey;\n if (apiKey) {\n return typeof apiKey === 'function' ? apiKey : () => apiKey;\n }\n return undefined;\n }\n\n get accessToken(): ((name?: string, scopes?: string[]) => string | Promise<string>) | undefined {\n const accessToken = this.configuration.accessToken;\n if (accessToken) {\n return typeof accessToken === 'function' ? accessToken : async () => accessToken;\n }\n return undefined;\n }\n\n get headers(): HTTPHeaders | undefined {\n return this.configuration.headers;\n }\n\n get credentials(): RequestCredentials | undefined {\n return this.configuration.credentials;\n }\n}\n\nexport const DefaultConfig = new Configuration();\n\n/**\n * This is the base class for all generated API classes.\n */\nexport class BaseAPI {\n\n private static readonly jsonRegex = new RegExp('^(:?application\\/json|[^;/ \\t]+\\/[^;/ \\t]+[+]json)[ \\t]*(:?;.*)?$', 'i');\n private middleware: Middleware[];\n\n constructor(protected configuration = DefaultConfig) {\n this.middleware = configuration.middleware;\n }\n\n withMiddleware<T extends BaseAPI>(this: T, ...middlewares: Middleware[]) {\n const next = this.clone<T>();\n next.middleware = next.middleware.concat(...middlewares);\n return next;\n }\n\n withPreMiddleware<T extends BaseAPI>(this: T, ...preMiddlewares: Array<Middleware['pre']>) {\n const middlewares = preMiddlewares.map((pre) => ({ pre }));\n return this.withMiddleware<T>(...middlewares);\n }\n\n withPostMiddleware<T extends BaseAPI>(this: T, ...postMiddlewares: Array<Middleware['post']>) {\n const middlewares = postMiddlewares.map((post) => ({ post }));\n return this.withMiddleware<T>(...middlewares);\n }\n\n /**\n * Check if the given MIME is a JSON MIME.\n * JSON MIME examples:\n * application/json\n * application/json; charset=UTF8\n * APPLICATION/JSON\n * application/vnd.company+json\n * @param mime - MIME (Multipurpose Internet Mail Extensions)\n * @return True if the given MIME is JSON, false otherwise.\n */\n protected isJsonMime(mime: string | null | undefined): boolean {\n if (!mime) {\n return false;\n }\n return BaseAPI.jsonRegex.test(mime);\n }\n\n protected async request(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction): Promise<Response> {\n const { url, init } = await this.createFetchParams(context, initOverrides);\n const response = await this.fetchApi(url, init);\n if (response && (response.status >= 200 && response.status < 300)) {\n return response;\n }\n throw new ResponseError(response, 'Response returned an error code');\n }\n\n private async createFetchParams(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction) {\n let url = this.configuration.basePath + context.path;\n if (context.query !== undefined && Object.keys(context.query).length !== 0) {\n // only add the querystring to the URL if there are query parameters.\n // this is done to avoid urls ending with a \"?\" character which buggy webservers\n // do not handle correctly sometimes.\n url += '?' + this.configuration.queryParamsStringify(context.query);\n }\n\n const headers = Object.assign({}, this.configuration.headers, context.headers);\n Object.keys(headers).forEach(key => headers[key] === undefined ? delete headers[key] : {});\n\n const initOverrideFn =\n typeof initOverrides === \"function\"\n ? initOverrides\n : async () => initOverrides;\n\n const initParams = {\n method: context.method,\n headers,\n body: context.body,\n credentials: this.configuration.credentials,\n };\n\n const overriddenInit: RequestInit = {\n ...initParams,\n ...(await initOverrideFn({\n init: initParams,\n context,\n }))\n };\n\n let body: any;\n if (isFormData(overriddenInit.body)\n || (overriddenInit.body instanceof URLSearchParams)\n || isBlob(overriddenInit.body)) {\n body = overriddenInit.body;\n } else if (this.isJsonMime(headers['Content-Type'])) {\n body = JSON.stringify(overriddenInit.body);\n } else {\n body = overriddenInit.body;\n }\n\n const init: RequestInit = {\n ...overriddenInit,\n body\n };\n\n return { url, init };\n }\n\n private fetchApi = async (url: string, init: RequestInit) => {\n let fetchParams = { url, init };\n for (const middleware of this.middleware) {\n if (middleware.pre) {\n fetchParams = await middleware.pre({\n fetch: this.fetchApi,\n ...fetchParams,\n }) || fetchParams;\n }\n }\n let response: Response | undefined = undefined;\n try {\n response = await (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init);\n } catch (e) {\n for (const middleware of this.middleware) {\n if (middleware.onError) {\n response = await middleware.onError({\n fetch: this.fetchApi,\n url: fetchParams.url,\n init: fetchParams.init,\n error: e,\n response: response ? response.clone() : undefined,\n }) || response;\n }\n }\n if (response === undefined) {\n if (e instanceof Error) {\n throw new FetchError(e, 'The request failed and the interceptors did not return an alternative response');\n } else {\n throw e;\n }\n }\n }\n for (const middleware of this.middleware) {\n if (middleware.post) {\n response = await middleware.post({\n fetch: this.fetchApi,\n url: fetchParams.url,\n init: fetchParams.init,\n response: response.clone(),\n }) || response;\n }\n }\n return response;\n }\n\n /**\n * Create a shallow clone of `this` by constructing a new instance\n * and then shallow cloning data members.\n */\n private clone<T extends BaseAPI>(this: T): T {\n const constructor = this.constructor as any;\n const next = new constructor(this.configuration);\n next.middleware = this.middleware.slice();\n return next;\n }\n};\n\nfunction isBlob(value: any): value is Blob {\n return typeof Blob !== 'undefined' && value instanceof Blob;\n}\n\nfunction isFormData(value: any): value is FormData {\n return typeof FormData !== \"undefined\" && value instanceof FormData;\n}\n\nexport class ResponseError extends Error {\n override name: \"ResponseError\" = \"ResponseError\";\n constructor(public response: Response, msg?: string) {\n super(msg);\n }\n}\n\nexport class FetchError extends Error {\n override name: \"FetchError\" = \"FetchError\";\n constructor(public cause: Error, msg?: string) {\n super(msg);\n }\n}\n\nexport class RequiredError extends Error {\n override name: \"RequiredError\" = \"RequiredError\";\n constructor(public field: string, msg?: string) {\n super(msg);\n }\n}\n\nexport const COLLECTION_FORMATS = {\n csv: \",\",\n ssv: \" \",\n tsv: \"\\t\",\n pipes: \"|\",\n};\n\nexport type FetchAPI = WindowOrWorkerGlobalScope['fetch'];\n\nexport type Json = any;\nexport type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD';\nexport type HTTPHeaders = { [key: string]: string };\nexport type HTTPQuery = { [key: string]: string | number | null | boolean | Array<string | number | null | boolean> | Set<string | number | null | boolean> | HTTPQuery };\nexport type HTTPBody = Json | FormData | URLSearchParams;\nexport type HTTPRequestInit = { headers?: HTTPHeaders; method: HTTPMethod; credentials?: RequestCredentials; body?: HTTPBody };\nexport type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original';\n\nexport type InitOverrideFunction = (requestContext: { init: HTTPRequestInit, context: RequestOpts }) => Promise<RequestInit>\n\nexport interface FetchParams {\n url: string;\n init: RequestInit;\n}\n\nexport interface RequestOpts {\n path: string;\n method: HTTPMethod;\n headers: HTTPHeaders;\n query?: HTTPQuery;\n body?: HTTPBody;\n}\n\nexport function querystring(params: HTTPQuery, prefix: string = ''): string {\n return Object.keys(params)\n .map(key => querystringSingleKey(key, params[key], prefix))\n .filter(part => part.length > 0)\n .join('&');\n}\n\nfunction querystringSingleKey(key: string, value: string | number | null | undefined | boolean | Array<string | number | null | boolean> | Set<string | number | null | boolean> | HTTPQuery, keyPrefix: string = ''): string {\n const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key);\n if (value instanceof Array) {\n const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue)))\n .join(`&${encodeURIComponent(fullKey)}=`);\n return `${encodeURIComponent(fullKey)}=${multiValue}`;\n }\n if (value instanceof Set) {\n const valueAsArray = Array.from(value);\n return querystringSingleKey(key, valueAsArray, keyPrefix);\n }\n if (value instanceof Date) {\n return `${encodeURIComponent(fullKey)}=${encodeURIComponent(value.toISOString())}`;\n }\n if (value instanceof Object) {\n return querystring(value as HTTPQuery, fullKey);\n }\n return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`;\n}\n\nexport function exists(json: any, key: string) {\n const value = json[key];\n return value !== null && value !== undefined;\n}\n\nexport function mapValues(data: any, fn: (item: any) => any) {\n const result: { [key: string]: any } = {};\n for (const key of Object.keys(data)) {\n result[key] = fn(data[key]);\n }\n return result;\n}\n\nexport function canConsumeForm(consumes: Consume[]): boolean {\n for (const consume of consumes) {\n if ('multipart/form-data' === consume.contentType) {\n return true;\n }\n }\n return false;\n}\n\nexport interface Consume {\n contentType: string;\n}\n\nexport interface RequestContext {\n fetch: FetchAPI;\n url: string;\n init: RequestInit;\n}\n\nexport interface ResponseContext {\n fetch: FetchAPI;\n url: string;\n init: RequestInit;\n response: Response;\n}\n\nexport interface ErrorContext {\n fetch: FetchAPI;\n url: string;\n init: RequestInit;\n error: unknown;\n response?: Response;\n}\n\nexport interface Middleware {\n pre?(context: RequestContext): Promise<FetchParams | void>;\n post?(context: ResponseContext): Promise<Response | void>;\n onError?(context: ErrorContext): Promise<Response | void>;\n}\n\nexport interface ApiResponse<T> {\n raw: Response;\n value(): Promise<T>;\n}\n\nexport interface ResponseTransformer<T> {\n (json: any): T;\n}\n\nexport class JSONApiResponse<T> {\n constructor(public raw: Response, private transformer: ResponseTransformer<T> = (jsonValue: any) => jsonValue) {}\n\n async value(): Promise<T> {\n return this.transformer(await this.raw.json());\n }\n}\n\nexport class VoidApiResponse {\n constructor(public raw: Response) {}\n\n async value(): Promise<void> {\n return undefined;\n }\n}\n\nexport class BlobApiResponse {\n constructor(public raw: Response) {}\n\n async value(): Promise<Blob> {\n return await this.raw.blob();\n };\n}\n\nexport class TextApiResponse {\n constructor(public raw: Response) {}\n\n async value(): Promise<string> {\n return await this.raw.text();\n };\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * attachmentAV\n * An SDK to integrate virus and malware scan capabilities into JavaScript / TypeScript applications. Scan files for viruses, trojans, and other kinds of malware with attachmentAV powered by Sophos.\n *\n * The version of the OpenAPI document: 1.0.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface AsyncDownloadScanRequest\n */\nexport interface AsyncDownloadScanRequest {\n /**\n * \n * @type {string}\n * @memberof AsyncDownloadScanRequest\n */\n downloadUrl: string;\n /**\n * \n * @type {{ [key: string]: string; }}\n * @memberof AsyncDownloadScanRequest\n */\n downloadHeaders?: { [key: string]: string; };\n /**\n * \n * @type {string}\n * @memberof AsyncDownloadScanRequest\n */\n callbackUrl: string;\n /**\n * \n * @type {{ [key: string]: string; }}\n * @memberof AsyncDownloadScanRequest\n */\n callbackHeaders?: { [key: string]: string; };\n /**\n * \n * @type {string}\n * @memberof AsyncDownloadScanRequest\n */\n traceId?: string;\n /**\n * \n * @type {string}\n * @memberof AsyncDownloadScanRequest\n */\n customData?: string;\n}\n\n/**\n * Check if a given object implements the AsyncDownloadScanRequest interface.\n */\nexport function instanceOfAsyncDownloadScanRequest(value: object): value is AsyncDownloadScanRequest {\n if (!('downloadUrl' in value) || value['downloadUrl'] === undefined) return false;\n if (!('callbackUrl' in value) || value['callbackUrl'] === undefined) return false;\n return true;\n}\n\nexport function AsyncDownloadScanRequestFromJSON(json: any): AsyncDownloadScanRequest {\n return AsyncDownloadScanRequestFromJSONTyped(json, false);\n}\n\nexport function AsyncDownloadScanRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): AsyncDownloadScanRequest {\n if (json == null) {\n return json;\n }\n return {\n \n 'downloadUrl': json['download_url'],\n 'downloadHeaders': json['download_headers'] == null ? undefined : json['download_headers'],\n 'callbackUrl': json['callback_url'],\n 'callbackHeaders': json['callback_headers'] == null ? undefined : json['callback_headers'],\n 'traceId': json['trace_id'] == null ? undefined : json['trace_id'],\n 'customData': json['custom_data'] == null ? undefined : json['custom_data'],\n };\n}\n\nexport function AsyncDownloadScanRequestToJSON(json: any): AsyncDownloadScanRequest {\n return AsyncDownloadScanRequestToJSONTyped(json, false);\n}\n\nexport function AsyncDownloadScanRequestToJSONTyped(value?: AsyncDownloadScanRequest | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'download_url': value['downloadUrl'],\n 'download_headers': value['downloadHeaders'],\n 'callback_url': value['callbackUrl'],\n 'callback_headers': value['callbackHeaders'],\n 'trace_id': value['traceId'],\n 'custom_data': value['customData'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * attachmentAV\n * An SDK to integrate virus and malware scan capabilities into JavaScript / TypeScript applications. Scan files for viruses, trojans, and other kinds of malware with attachmentAV powered by Sophos.\n *\n * The version of the OpenAPI document: 1.0.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface AsyncS3ScanRequest\n */\nexport interface AsyncS3ScanRequest {\n /**\n * \n * @type {string}\n * @memberof AsyncS3ScanRequest\n */\n bucket: string;\n /**\n * \n * @type {string}\n * @memberof AsyncS3ScanRequest\n */\n key: string;\n /**\n * \n * @type {string}\n * @memberof AsyncS3ScanRequest\n */\n version?: string;\n /**\n * \n * @type {string}\n * @memberof AsyncS3ScanRequest\n */\n callbackUrl: string;\n /**\n * \n * @type {{ [key: string]: string; }}\n * @memberof AsyncS3ScanRequest\n */\n callbackHeaders?: { [key: string]: string; };\n /**\n * \n * @type {string}\n * @memberof AsyncS3ScanRequest\n */\n traceId?: string;\n /**\n * \n * @type {string}\n * @memberof AsyncS3ScanRequest\n */\n customData?: string;\n}\n\n/**\n * Check if a given object implements the AsyncS3ScanRequest interface.\n */\nexport function instanceOfAsyncS3ScanRequest(value: object): value is AsyncS3ScanRequest {\n if (!('bucket' in value) || value['bucket'] === undefined) return false;\n if (!('key' in value) || value['key'] === undefined) return false;\n if (!('callbackUrl' in value) || value['callbackUrl'] === undefined) return false;\n return true;\n}\n\nexport function AsyncS3ScanRequestFromJSON(json: any): AsyncS3ScanRequest {\n return AsyncS3ScanRequestFromJSONTyped(json, false);\n}\n\nexport function AsyncS3ScanRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): AsyncS3ScanRequest {\n if (json == null) {\n return json;\n }\n return {\n \n 'bucket': json['bucket'],\n 'key': json['key'],\n 'version': json['version'] == null ? undefined : json['version'],\n 'callbackUrl': json['callback_url'],\n 'callbackHeaders': json['callback_headers'] == null ? undefined : json['callback_headers'],\n 'traceId': json['trace_id'] == null ? undefined : json['trace_id'],\n 'customData': json['custom_data'] == null ? undefined : json['custom_data'],\n };\n}\n\nexport function AsyncS3ScanRequestToJSON(json: any): AsyncS3ScanRequest {\n return AsyncS3ScanRequestToJSONTyped(json, false);\n}\n\nexport function AsyncS3ScanRequestToJSONTyped(value?: AsyncS3ScanRequest | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'bucket': value['bucket'],\n 'key': value['key'],\n 'version': value['version'],\n 'callback_url': value['callbackUrl'],\n 'callback_headers': value['callbackHeaders'],\n 'trace_id': value['traceId'],\n 'custom_data': value['customData'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * attachmentAV\n * An SDK to integrate virus and malware scan capabilities into JavaScript / TypeScript applications. Scan files for viruses, trojans, and other kinds of malware with attachmentAV powered by Sophos.\n *\n * The version of the OpenAPI document: 1.0.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface ScanResult\n */\nexport interface ScanResult {\n /**\n * \n * @type {string}\n * @memberof ScanResult\n */\n status?: string;\n /**\n * \n * @type {string}\n * @memberof ScanResult\n */\n finding?: string;\n /**\n * \n * @type {string}\n * @memberof ScanResult\n */\n size?: string;\n /**\n * \n * @type {string}\n * @memberof ScanResult\n */\n realfiletype?: string;\n}\n\n/**\n * Check if a given object implements the ScanResult interface.\n */\nexport function instanceOfScanResult(value: object): value is ScanResult {\n return true;\n}\n\nexport function ScanResultFromJSON(json: any): ScanResult {\n return ScanResultFromJSONTyped(json, false);\n}\n\nexport function ScanResultFromJSONTyped(json: any, ignoreDiscriminator: boolean): ScanResult {\n if (json == null) {\n return json;\n }\n return {\n \n 'status': json['status'] == null ? undefined : json['status'],\n 'finding': json['finding'] == null ? undefined : json['finding'],\n 'size': json['size'] == null ? undefined : json['size'],\n 'realfiletype': json['realfiletype'] == null ? undefined : json['realfiletype'],\n };\n}\n\nexport function ScanResultToJSON(json: any): ScanResult {\n return ScanResultToJSONTyped(json, false);\n}\n\nexport function ScanResultToJSONTyped(value?: ScanResult | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'status': value['status'],\n 'finding': value['finding'],\n 'size': value['size'],\n 'realfiletype': value['realfiletype'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * attachmentAV\n * An SDK to integrate virus and malware scan capabilities into JavaScript / TypeScript applications. Scan files for viruses, trojans, and other kinds of malware with attachmentAV powered by Sophos.\n *\n * The version of the OpenAPI document: 1.0.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface SyncDownloadScanRequest\n */\nexport interface SyncDownloadScanRequest {\n /**\n * \n * @type {string}\n * @memberof SyncDownloadScanRequest\n */\n downloadUrl: string;\n /**\n * \n * @type {{ [key: string]: string; }}\n * @memberof SyncDownloadScanRequest\n */\n downloadHeaders?: { [key: string]: string; };\n}\n\n/**\n * Check if a given object implements the SyncDownloadScanRequest interface.\n */\nexport function instanceOfSyncDownloadScanRequest(value: object): value is SyncDownloadScanRequest {\n if (!('downloadUrl' in value) || value['downloadUrl'] === undefined) return false;\n return true;\n}\n\nexport function SyncDownloadScanRequestFromJSON(json: any): SyncDownloadScanRequest {\n return SyncDownloadScanRequestFromJSONTyped(json, false);\n}\n\nexport function SyncDownloadScanRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): SyncDownloadScanRequest {\n if (json == null) {\n return json;\n }\n return {\n \n 'downloadUrl': json['download_url'],\n 'downloadHeaders': json['download_headers'] == null ? undefined : json['download_headers'],\n };\n}\n\nexport function SyncDownloadScanRequestToJSON(json: any): SyncDownloadScanRequest {\n return SyncDownloadScanRequestToJSONTyped(json, false);\n}\n\nexport function SyncDownloadScanRequestToJSONTyped(value?: SyncDownloadScanRequest | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'download_url': value['downloadUrl'],\n 'download_headers': value['downloadHeaders'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * attachmentAV\n * An SDK to integrate virus and malware scan capabilities into JavaScript / TypeScript applications. Scan files for viruses, trojans, and other kinds of malware with attachmentAV powered by Sophos.\n *\n * The version of the OpenAPI document: 1.0.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface SyncS3ScanRequest\n */\nexport interface SyncS3ScanRequest {\n /**\n * \n * @type {string}\n * @memberof SyncS3ScanRequest\n */\n bucket: string;\n /**\n * \n * @type {string}\n * @memberof SyncS3ScanRequest\n */\n key: string;\n /**\n * \n * @type {string}\n * @memberof SyncS3ScanRequest\n */\n version?: string;\n}\n\n/**\n * Check if a given object implements the SyncS3ScanRequest interface.\n */\nexport function instanceOfSyncS3ScanRequest(value: object): value is SyncS3ScanRequest {\n if (!('bucket' in value) || value['bucket'] === undefined) return false;\n if (!('key' in value) || value['key'] === undefined) return false;\n return true;\n}\n\nexport function SyncS3ScanRequestFromJSON(json: any): SyncS3ScanRequest {\n return SyncS3ScanRequestFromJSONTyped(json, false);\n}\n\nexport function SyncS3ScanRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): SyncS3ScanRequest {\n if (json == null) {\n return json;\n }\n return {\n \n 'bucket': json['bucket'],\n 'key': json['key'],\n 'version': json['version'] == null ? undefined : json['version'],\n };\n}\n\nexport function SyncS3ScanRequestToJSON(json: any): SyncS3ScanRequest {\n return SyncS3ScanRequestToJSONTyped(json, false);\n}\n\nexport function SyncS3ScanRequestToJSONTyped(value?: SyncS3ScanRequest | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'bucket': value['bucket'],\n 'key': value['key'],\n 'version': value['version'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * attachmentAV\n * An SDK to integrate virus and malware scan capabilities into JavaScript / TypeScript applications. Scan files for viruses, trojans, and other kinds of malware with attachmentAV powered by Sophos.\n *\n * The version of the OpenAPI document: 1.0.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport { mapValues } from '../runtime';\n/**\n * \n * @export\n * @interface Whoami\n */\nexport interface Whoami {\n /**\n * \n * @type {string}\n * @memberof Whoami\n */\n tenantId?: string;\n}\n\n/**\n * Check if a given object implements the Whoami interface.\n */\nexport function instanceOfWhoami(value: object): value is Whoami {\n return true;\n}\n\nexport function WhoamiFromJSON(json: any): Whoami {\n return WhoamiFromJSONTyped(json, false);\n}\n\nexport function WhoamiFromJSONTyped(json: any, ignoreDiscriminator: boolean): Whoami {\n if (json == null) {\n return json;\n }\n return {\n \n 'tenantId': json['tenantId'] == null ? undefined : json['tenantId'],\n };\n}\n\nexport function WhoamiToJSON(json: any): Whoami {\n return WhoamiToJSONTyped(json, false);\n}\n\nexport function WhoamiToJSONTyped(value?: Whoami | null, ignoreDiscriminator: boolean = false): any {\n if (value == null) {\n return value;\n }\n\n return {\n \n 'tenantId': value['tenantId'],\n };\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * attachmentAV\n * An SDK to integrate virus and malware scan capabilities into JavaScript / TypeScript applications. Scan files for viruses, trojans, and other kinds of malware with attachmentAV powered by Sophos.\n *\n * The version of the OpenAPI document: 1.0.0\n * \n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\n\nimport * as runtime from '../runtime';\nimport type {\n AsyncDownloadScanRequest,\n AsyncS3ScanRequest,\n ScanResult,\n SyncDownloadScanRequest,\n SyncS3ScanRequest,\n Whoami,\n} from '../models/index';\nimport {\n AsyncDownloadScanRequestFromJSON,\n AsyncDownloadScanRequestToJSON,\n AsyncS3ScanRequestFromJSON,\n AsyncS3ScanRequestToJSON,\n ScanResultFromJSON,\n ScanResultToJSON,\n SyncDownloadScanRequestFromJSON,\n SyncDownloadScanRequestToJSON,\n SyncS3ScanRequestFromJSON,\n SyncS3ScanRequestToJSON,\n WhoamiFromJSON,\n WhoamiToJSON,\n} from '../models/index';\n\nexport interface ScanAsyncDownloadPostRequest {\n asyncDownloadScanRequest: AsyncDownloadScanRequest;\n}\n\nexport interface ScanAsyncS3PostRequest {\n asyncS3ScanRequest: AsyncS3ScanRequest;\n}\n\nexport interface ScanSyncBinaryPostRequest {\n body: Blob;\n}\n\nexport interface ScanSyncDownloadPostRequest {\n syncDownloadScanRequest: SyncDownloadScanRequest;\n}\n\nexport interface ScanSyncS3PostRequest {\n syncS3ScanRequest: SyncS3ScanRequest;\n}\n\n/**\n * \n */\nexport class AttachmentAVApi extends runtime.BaseAPI {\n\n /**\n * Download a file from a remote location (HTTP/HTTPS), scan the file, and post the scan result to your callback URL.\n */\n async scanAsyncDownloadPostRaw(requestParameters: ScanAsyncDownloadPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {\n if (requestParameters['asyncDownloadScanRequest'] == null) {\n throw new runtime.RequiredError(\n 'asyncDownloadScanRequest',\n 'Required parameter \"asyncDownloadScanRequest\" was null or undefined when calling scanAsyncDownloadPost().'\n );\n }\n\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/json';\n\n if (this.configuration && this.configuration.apiKey) {\n headerParameters[\"x-api-key\"] = await this.configuration.apiKey(\"x-api-key\"); // apiKeyAuth authentication\n }\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = await token(\"bearerAuth\", []);\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n\n let urlPath = `/scan/async/download`;\n\n const response = await this.request({\n path: urlPath,\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n body: AsyncDownloadScanRequestToJSON(requestParameters['asyncDownloadScanRequest']),\n }, initOverrides);\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Download a file from a remote location (HTTP/HTTPS), scan the file, and post the scan result to your callback URL.\n */\n async scanAsyncDownloadPost(requestParameters: ScanAsyncDownloadPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {\n await this.scanAsyncDownloadPostRaw(requestParameters, initOverrides);\n }\n\n /**\n * Download a file from S3, scan the file, and post the scan result to your callback URL. A bucket policy is required to grant attachmentAV access to the S3 objects.\n */\n async scanAsyncS3PostRaw(requestParameters: ScanAsyncS3PostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {\n if (requestParameters['asyncS3ScanRequest'] == null) {\n throw new runtime.RequiredError(\n 'asyncS3ScanRequest',\n 'Required parameter \"asyncS3ScanRequest\" was null or undefined when calling scanAsyncS3Post().'\n );\n }\n\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/json';\n\n if (this.configuration && this.configuration.apiKey) {\n headerParameters[\"x-api-key\"] = await this.configuration.apiKey(\"x-api-key\"); // apiKeyAuth authentication\n }\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = await token(\"bearerAuth\", []);\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n\n let urlPath = `/scan/async/s3`;\n\n const response = await this.request({\n path: urlPath,\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n body: AsyncS3ScanRequestToJSON(requestParameters['asyncS3ScanRequest']),\n }, initOverrides);\n\n return new runtime.VoidApiResponse(response);\n }\n\n /**\n * Download a file from S3, scan the file, and post the scan result to your callback URL. A bucket policy is required to grant attachmentAV access to the S3 objects.\n */\n async scanAsyncS3Post(requestParameters: ScanAsyncS3PostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {\n await this.scanAsyncS3PostRaw(requestParameters, initOverrides);\n }\n\n /**\n * Upload a file, scan the file, and return the scan result.\n */\n async scanSyncBinaryPostRaw(requestParameters: ScanSyncBinaryPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ScanResult>> {\n if (requestParameters['body'] == null) {\n throw new runtime.RequiredError(\n 'body',\n 'Required parameter \"body\" was null or undefined when calling scanSyncBinaryPost().'\n );\n }\n\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/octet-stream';\n\n if (this.configuration && this.configuration.apiKey) {\n headerParameters[\"x-api-key\"] = await this.configuration.apiKey(\"x-api-key\"); // apiKeyAuth authentication\n }\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = await token(\"bearerAuth\", []);\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n\n let urlPath = `/scan/sync/binary`;\n\n const response = await this.request({\n path: urlPath,\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n body: requestParameters['body'] as any,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => ScanResultFromJSON(jsonValue));\n }\n\n /**\n * Upload a file, scan the file, and return the scan result.\n */\n async scanSyncBinaryPost(requestParameters: ScanSyncBinaryPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ScanResult> {\n const response = await this.scanSyncBinaryPostRaw(requestParameters, initOverrides);\n return await response.value();\n }\n\n /**\n * Download a file from a remote location (HTTP/HTTPS), scan the file, and return the scan result.\n */\n async scanSyncDownloadPostRaw(requestParameters: ScanSyncDownloadPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ScanResult>> {\n if (requestParameters['syncDownloadScanRequest'] == null) {\n throw new runtime.RequiredError(\n 'syncDownloadScanRequest',\n 'Required parameter \"syncDownloadScanRequest\" was null or undefined when calling scanSyncDownloadPost().'\n );\n }\n\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/json';\n\n if (this.configuration && this.configuration.apiKey) {\n headerParameters[\"x-api-key\"] = await this.configuration.apiKey(\"x-api-key\"); // apiKeyAuth authentication\n }\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = await token(\"bearerAuth\", []);\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n\n let urlPath = `/scan/sync/download`;\n\n const response = await this.request({\n path: urlPath,\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n body: SyncDownloadScanRequestToJSON(requestParameters['syncDownloadScanRequest']),\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => ScanResultFromJSON(jsonValue));\n }\n\n /**\n * Download a file from a remote location (HTTP/HTTPS), scan the file, and return the scan result.\n */\n async scanSyncDownloadPost(requestParameters: ScanSyncDownloadPostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ScanResult> {\n const response = await this.scanSyncDownloadPostRaw(requestParameters, initOverrides);\n return await response.value();\n }\n\n /**\n * Download a file from S3, scan the file, and return the scan result. A bucket policy is required to grant attachmentAV access to the S3 objects.\n */\n async scanSyncS3PostRaw(requestParameters: ScanSyncS3PostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ScanResult>> {\n if (requestParameters['syncS3ScanRequest'] == null) {\n throw new runtime.RequiredError(\n 'syncS3ScanRequest',\n 'Required parameter \"syncS3ScanRequest\" was null or undefined when calling scanSyncS3Post().'\n );\n }\n\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n headerParameters['Content-Type'] = 'application/json';\n\n if (this.configuration && this.configuration.apiKey) {\n headerParameters[\"x-api-key\"] = await this.configuration.apiKey(\"x-api-key\"); // apiKeyAuth authentication\n }\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = await token(\"bearerAuth\", []);\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n\n let urlPath = `/scan/sync/s3`;\n\n const response = await this.request({\n path: urlPath,\n method: 'POST',\n headers: headerParameters,\n query: queryParameters,\n body: SyncS3ScanRequestToJSON(requestParameters['syncS3ScanRequest']),\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => ScanResultFromJSON(jsonValue));\n }\n\n /**\n * Download a file from S3, scan the file, and return the scan result. A bucket policy is required to grant attachmentAV access to the S3 objects.\n */\n async scanSyncS3Post(requestParameters: ScanSyncS3PostRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ScanResult> {\n const response = await this.scanSyncS3PostRaw(requestParameters, initOverrides);\n return await response.value();\n }\n\n /**\n * Get information abour yourself.\n */\n async whoamiGetRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Whoami>> {\n const queryParameters: any = {};\n\n const headerParameters: runtime.HTTPHeaders = {};\n\n if (this.configuration && this.configuration.apiKey) {\n headerParameters[\"x-api-key\"] = await this.configuration.apiKey(\"x-api-key\"); // apiKeyAuth authentication\n }\n\n if (this.configuration && this.configuration.accessToken) {\n const token = this.configuration.accessToken;\n const tokenString = await token(\"bearerAuth\", []);\n\n if (tokenString) {\n headerParameters[\"Authorization\"] = `Bearer ${tokenString}`;\n }\n }\n\n let urlPath = `/whoami`;\n\n const response = await this.request({\n path: urlPath,\n method: 'GET',\n headers: headerParameters,\n query: queryParameters,\n }, initOverrides);\n\n return new runtime.JSONApiResponse(response, (jsonValue) => WhoamiFromJSON(jsonValue));\n }\n\n /**\n * Get information abour yourself.\n */\n async whoamiGet(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Whoami> {\n const response = await this.whoamiGetRaw(initOverrides);\n return await response.value();\n }\n\n}\n"],"mappings":"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