box-node-sdk
Version:
Official SDK for Box Platform APIs
163 lines (162 loc) • 4.48 kB
text/typescript
import { Authentication } from './auth';
import { NetworkSession } from './network';
import { SerializedData } from '../serialization/json';
import { ByteStream } from '../internal/utils';
import { CancellationToken } from '../internal/utils';
export type ResponseFormat = 'json' | 'binary' | 'no_content';
export interface MultipartItem {
/**
* Name of the part */
readonly partName: string;
/**
* Data of the part */
readonly data?: SerializedData;
/**
* File stream of the part */
readonly fileStream?: ByteStream;
/**
* File name of the part */
readonly fileName?: string;
/**
* Content type of the part */
readonly contentType?: string;
}
export class FetchOptions {
/**
* URL of the request */
readonly url!: string;
/**
* HTTP verb of the request */
readonly method!: string;
/**
* HTTP query parameters */
readonly params?: {
readonly [key: string]: string;
};
/**
* HTTP headers */
readonly headers?: {
readonly [key: string]: string;
};
/**
* Request body of the request */
readonly data?: SerializedData;
/**
* Stream data of the request */
readonly fileStream?: ByteStream;
/**
* Multipart data of the request */
readonly multipartData?: readonly MultipartItem[];
/**
* Content type of the request body */
readonly contentType: string = 'application/json';
/**
* Expected response format */
readonly responseFormat: ResponseFormat = 'json' as ResponseFormat;
/**
* Authentication object */
readonly auth?: Authentication;
/**
* Network session object */
readonly networkSession?: NetworkSession;
/**
* Cancellation token */
readonly cancellationToken?: CancellationToken;
/**
* A boolean value indicate if the request should follow redirects. Defaults to True. Not supported in Browser environment. */
readonly followRedirects?: boolean = true;
constructor(
fields: Omit<
FetchOptions,
'contentType' | 'responseFormat' | 'followRedirects'
> &
Partial<
Pick<FetchOptions, 'contentType' | 'responseFormat' | 'followRedirects'>
>,
) {
if (fields.url !== undefined) {
this.url = fields.url;
}
if (fields.method !== undefined) {
this.method = fields.method;
}
if (fields.params !== undefined) {
this.params = fields.params;
}
if (fields.headers !== undefined) {
this.headers = fields.headers;
}
if (fields.data !== undefined) {
this.data = fields.data;
}
if (fields.fileStream !== undefined) {
this.fileStream = fields.fileStream;
}
if (fields.multipartData !== undefined) {
this.multipartData = fields.multipartData;
}
if (fields.contentType !== undefined) {
this.contentType = fields.contentType;
}
if (fields.responseFormat !== undefined) {
this.responseFormat = fields.responseFormat;
}
if (fields.auth !== undefined) {
this.auth = fields.auth;
}
if (fields.networkSession !== undefined) {
this.networkSession = fields.networkSession;
}
if (fields.cancellationToken !== undefined) {
this.cancellationToken = fields.cancellationToken;
}
if (fields.followRedirects !== undefined) {
this.followRedirects = fields.followRedirects;
}
}
}
export interface FetchOptionsInput {
/**
* URL of the request */
readonly url: string;
/**
* HTTP verb of the request */
readonly method: string;
/**
* HTTP query parameters */
readonly params?: {
readonly [key: string]: string;
};
/**
* HTTP headers */
readonly headers?: {
readonly [key: string]: string;
};
/**
* Request body of the request */
readonly data?: SerializedData;
/**
* Stream data of the request */
readonly fileStream?: ByteStream;
/**
* Multipart data of the request */
readonly multipartData?: readonly MultipartItem[];
/**
* Content type of the request body */
readonly contentType?: string;
/**
* Expected response format */
readonly responseFormat?: ResponseFormat;
/**
* Authentication object */
readonly auth?: Authentication;
/**
* Network session object */
readonly networkSession?: NetworkSession;
/**
* Cancellation token */
readonly cancellationToken?: CancellationToken;
/**
* A boolean value indicate if the request should follow redirects. Defaults to True. Not supported in Browser environment. */
readonly followRedirects?: boolean;
}