"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UploadsManager = exports.UploadWithPreflightCheckHeaders = exports.UploadFileHeaders = exports.PreflightFileUploadCheckHeaders = exports.UploadFileVersionHeaders = exports.UploadWithPreflightCheckOptionals = exports.UploadFileOptionals = exports.UploadFileVersionOptionals = void 0;
exports.serializeUploadFileVersionRequestBodyAttributesField = serializeUploadFileVersionRequestBodyAttributesField;
exports.deserializeUploadFileVersionRequestBodyAttributesField = deserializeUploadFileVersionRequestBodyAttributesField;
exports.serializePreflightFileUploadCheckRequestBodyParentField = serializePreflightFileUploadCheckRequestBodyParentField;
exports.deserializePreflightFileUploadCheckRequestBodyParentField = deserializePreflightFileUploadCheckRequestBodyParentField;
exports.serializePreflightFileUploadCheckRequestBody = serializePreflightFileUploadCheckRequestBody;
exports.deserializePreflightFileUploadCheckRequestBody = deserializePreflightFileUploadCheckRequestBody;
exports.serializeUploadFileRequestBodyAttributesParentField = serializeUploadFileRequestBodyAttributesParentField;
exports.deserializeUploadFileRequestBodyAttributesParentField = deserializeUploadFileRequestBodyAttributesParentField;
exports.serializeUploadFileRequestBodyAttributesField = serializeUploadFileRequestBodyAttributesField;
exports.deserializeUploadFileRequestBodyAttributesField = deserializeUploadFileRequestBodyAttributesField;
exports.serializeUploadWithPreflightCheckRequestBodyAttributesParentField = serializeUploadWithPreflightCheckRequestBodyAttributesParentField;
exports.deserializeUploadWithPreflightCheckRequestBodyAttributesParentField = deserializeUploadWithPreflightCheckRequestBodyAttributesParentField;
exports.serializeUploadWithPreflightCheckRequestBodyAttributesField = serializeUploadWithPreflightCheckRequestBodyAttributesField;
exports.deserializeUploadWithPreflightCheckRequestBodyAttributesField = deserializeUploadWithPreflightCheckRequestBodyAttributesField;
const files_1 = require("../schemas/files");
const uploadUrl_1 = require("../schemas/uploadUrl");
const utils_1 = require("../internal/utils");
const utils_2 = require("../internal/utils");
const errors_1 = require("../box/errors");
const network_1 = require("../networking/network");
const fetchOptions_1 = require("../networking/fetchOptions");
const utils_3 = require("../internal/utils");
const utils_4 = require("../internal/utils");
const json_1 = require("../serialization/json");
const json_2 = require("../serialization/json");
const json_3 = require("../serialization/json");
class UploadFileVersionOptionals {
    queryParams = {};
    headers = new UploadFileVersionHeaders({});
    cancellationToken = void 0;
    constructor(fields) {
        if (fields.queryParams !== undefined) {
            this.queryParams = fields.queryParams;
        }
        if (fields.headers !== undefined) {
            this.headers = fields.headers;
        }
        if (fields.cancellationToken !== undefined) {
            this.cancellationToken = fields.cancellationToken;
        }
    }
}
exports.UploadFileVersionOptionals = UploadFileVersionOptionals;
class UploadFileOptionals {
    queryParams = {};
    headers = new UploadFileHeaders({});
    cancellationToken = void 0;
    constructor(fields) {
        if (fields.queryParams !== undefined) {
            this.queryParams = fields.queryParams;
        }
        if (fields.headers !== undefined) {
            this.headers = fields.headers;
        }
        if (fields.cancellationToken !== undefined) {
            this.cancellationToken = fields.cancellationToken;
        }
    }
}
exports.UploadFileOptionals = UploadFileOptionals;
class UploadWithPreflightCheckOptionals {
    queryParams = {};
    headers = new UploadWithPreflightCheckHeaders({});
    cancellationToken = void 0;
    constructor(fields) {
        if (fields.queryParams !== undefined) {
            this.queryParams = fields.queryParams;
        }
        if (fields.headers !== undefined) {
            this.headers = fields.headers;
        }
        if (fields.cancellationToken !== undefined) {
            this.cancellationToken = fields.cancellationToken;
        }
    }
}
exports.UploadWithPreflightCheckOptionals = UploadWithPreflightCheckOptionals;
class UploadFileVersionHeaders {
    /**
     * Ensures this item hasn't recently changed before
     * making changes.
     *
     * Pass in the item's last observed `etag` value
     * into this header and the endpoint will fail
     * with a `412 Precondition Failed` if it
     * has changed since. */
    ifMatch;
    /**
     * An optional header containing the SHA1 hash of the file to
     * ensure that the file was not corrupted in transit. */
    contentMd5;
    /**
     * Extra headers that will be included in the HTTP request. */
    extraHeaders = {};
    constructor(fields) {
        if (fields.ifMatch !== undefined) {
            this.ifMatch = fields.ifMatch;
        }
        if (fields.contentMd5 !== undefined) {
            this.contentMd5 = fields.contentMd5;
        }
        if (fields.extraHeaders !== undefined) {
            this.extraHeaders = fields.extraHeaders;
        }
    }
}
exports.UploadFileVersionHeaders = UploadFileVersionHeaders;
class PreflightFileUploadCheckHeaders {
    /**
     * Extra headers that will be included in the HTTP request. */
    extraHeaders = {};
    constructor(fields) {
        if (fields.extraHeaders !== undefined) {
            this.extraHeaders = fields.extraHeaders;
        }
    }
}
exports.PreflightFileUploadCheckHeaders = PreflightFileUploadCheckHeaders;
class UploadFileHeaders {
    /**
     * An optional header containing the SHA1 hash of the file to
     * ensure that the file was not corrupted in transit. */
    contentMd5;
    /**
     * Extra headers that will be included in the HTTP request. */
    extraHeaders = {};
    constructor(fields) {
        if (fields.contentMd5 !== undefined) {
            this.contentMd5 = fields.contentMd5;
        }
        if (fields.extraHeaders !== undefined) {
            this.extraHeaders = fields.extraHeaders;
        }
    }
}
exports.UploadFileHeaders = UploadFileHeaders;
class UploadWithPreflightCheckHeaders {
    /**
     * An optional header containing the SHA1 hash of the file to
     * ensure that the file was not corrupted in transit. */
    contentMd5;
    /**
     * Extra headers that will be included in the HTTP request. */
    extraHeaders = {};
    constructor(fields) {
        if (fields.contentMd5 !== undefined) {
            this.contentMd5 = fields.contentMd5;
        }
        if (fields.extraHeaders !== undefined) {
            this.extraHeaders = fields.extraHeaders;
        }
    }
}
exports.UploadWithPreflightCheckHeaders = UploadWithPreflightCheckHeaders;
class UploadsManager {
    auth;
    networkSession = new network_1.NetworkSession({});
    constructor(fields) {
        if (fields.auth !== undefined) {
            this.auth = fields.auth;
        }
        if (fields.networkSession !== undefined) {
            this.networkSession = fields.networkSession;
        }
    }
    /**
       * Update a file's content. For file sizes over 50MB we recommend
       * using the Chunk Upload APIs.
       *
       * The `attributes` part of the body must come **before** the
       * `file` part. Requests that do not follow this format when
       * uploading the file will receive a HTTP `400` error with a
       * `metadata_after_file_contents` error code.
       * @param {string} fileId The unique identifier that represents a file.
      
      The ID for any file can be determined
      by visiting a file in the web application
      and copying the ID from the URL. For example,
      for the URL `https://*.app.box.com/files/123`
      the `file_id` is `123`.
      Example: "12345"
       * @param {UploadFileVersionRequestBody} requestBody Request body of uploadFileVersion method
       * @param {UploadFileVersionOptionalsInput} optionalsInput
       * @returns {Promise<Files>}
       */
    async uploadFileVersion(fileId, requestBody, optionalsInput = {}) {
        const optionals = new UploadFileVersionOptionals({
            queryParams: optionalsInput.queryParams,
            headers: optionalsInput.headers,
            cancellationToken: optionalsInput.cancellationToken,
        });
        const queryParams = optionals.queryParams;
        const headers = optionals.headers;
        const cancellationToken = optionals.cancellationToken;
        const queryParamsMap = (0, utils_3.prepareParams)({
            ['fields']: queryParams.fields
                ? queryParams.fields.map(utils_4.toString).join(',')
                : undefined,
        });
        const headersMap = (0, utils_3.prepareParams)({
            ...{
                ['if-match']: (0, utils_4.toString)(headers.ifMatch),
                ['content-md5']: (0, utils_4.toString)(headers.contentMd5),
            },
            ...headers.extraHeaders,
        });
        const response = await this.networkSession.networkClient.fetch(new fetchOptions_1.FetchOptions({
            url: ''.concat(this.networkSession.baseUrls.uploadUrl, '/2.0/files/', (0, utils_4.toString)(fileId), '/content'),
            method: 'POST',
            params: queryParamsMap,
            headers: headersMap,
            multipartData: [
                {
                    partName: 'attributes',
                    data: serializeUploadFileVersionRequestBodyAttributesField(requestBody.attributes),
                },
                {
                    partName: 'file',
                    fileStream: requestBody.file,
                    fileName: requestBody.fileFileName,
                    contentType: requestBody.fileContentType,
                },
            ],
            contentType: 'multipart/form-data',
            responseFormat: 'json',
            auth: this.auth,
            networkSession: this.networkSession,
            cancellationToken: cancellationToken,
        }));
        return {
            ...(0, files_1.deserializeFiles)(response.data),
            rawData: response.data,
        };
    }
    /**
     * Performs a check to verify that a file will be accepted by Box
     * before you upload the entire file.
     * @param {PreflightFileUploadCheckRequestBody} requestBody Request body of preflightFileUploadCheck method
     * @param {PreflightFileUploadCheckHeadersInput} headersInput Headers of preflightFileUploadCheck method
     * @param {CancellationToken} cancellationToken Token used for request cancellation.
     * @returns {Promise<UploadUrl>}
     */
    async preflightFileUploadCheck(requestBody = {}, headersInput = new PreflightFileUploadCheckHeaders({}), cancellationToken) {
        const headers = new PreflightFileUploadCheckHeaders({
            extraHeaders: headersInput.extraHeaders,
        });
        const headersMap = (0, utils_3.prepareParams)({ ...{}, ...headers.extraHeaders });
        const response = await this.networkSession.networkClient.fetch(new fetchOptions_1.FetchOptions({
            url: ''.concat(this.networkSession.baseUrls.baseUrl, '/2.0/files/content'),
            method: 'OPTIONS',
            headers: headersMap,
            data: serializePreflightFileUploadCheckRequestBody(requestBody),
            contentType: 'application/json',
            responseFormat: 'json',
            auth: this.auth,
            networkSession: this.networkSession,
            cancellationToken: cancellationToken,
        }));
        return {
            ...(0, uploadUrl_1.deserializeUploadUrl)(response.data),
            rawData: response.data,
        };
    }
    /**
     * Uploads a small file to Box. For file sizes over 50MB we recommend
     * using the Chunk Upload APIs.
     *
     * The `attributes` part of the body must come **before** the
     * `file` part. Requests that do not follow this format when
     * uploading the file will receive a HTTP `400` error with a
     * `metadata_after_file_contents` error code.
     * @param {UploadFileRequestBody} requestBody Request body of uploadFile method
     * @param {UploadFileOptionalsInput} optionalsInput
     * @returns {Promise<Files>}
     */
    async uploadFile(requestBody, optionalsInput = {}) {
        const optionals = new UploadFileOptionals({
            queryParams: optionalsInput.queryParams,
            headers: optionalsInput.headers,
            cancellationToken: optionalsInput.cancellationToken,
        });
        const queryParams = optionals.queryParams;
        const headers = optionals.headers;
        const cancellationToken = optionals.cancellationToken;
        const queryParamsMap = (0, utils_3.prepareParams)({
            ['fields']: queryParams.fields
                ? queryParams.fields.map(utils_4.toString).join(',')
                : undefined,
        });
        const headersMap = (0, utils_3.prepareParams)({
            ...{ ['content-md5']: (0, utils_4.toString)(headers.contentMd5) },
            ...headers.extraHeaders,
        });
        const response = await this.networkSession.networkClient.fetch(new fetchOptions_1.FetchOptions({
            url: ''.concat(this.networkSession.baseUrls.uploadUrl, '/2.0/files/content'),
            method: 'POST',
            params: queryParamsMap,
            headers: headersMap,
            multipartData: [
                {
                    partName: 'attributes',
                    data: serializeUploadFileRequestBodyAttributesField(requestBody.attributes),
                },
                {
                    partName: 'file',
                    fileStream: requestBody.file,
                    fileName: requestBody.fileFileName,
                    contentType: requestBody.fileContentType,
                },
            ],
            contentType: 'multipart/form-data',
            responseFormat: 'json',
            auth: this.auth,
            networkSession: this.networkSession,
            cancellationToken: cancellationToken,
        }));
        return {
            ...(0, files_1.deserializeFiles)(response.data),
            rawData: response.data,
        };
    }
    /**
     *  Upload a file with a preflight check
     * @param {UploadWithPreflightCheckRequestBody} requestBody
     * @param {UploadWithPreflightCheckOptionalsInput} optionalsInput
     * @returns {Promise<Files>}
     */
    async uploadWithPreflightCheck(requestBody, optionalsInput = {}) {
        const optionals = new UploadWithPreflightCheckOptionals({
            queryParams: optionalsInput.queryParams,
            headers: optionalsInput.headers,
            cancellationToken: optionalsInput.cancellationToken,
        });
        const queryParams = optionals.queryParams;
        const headers = optionals.headers;
        const cancellationToken = optionals.cancellationToken;
        const queryParamsMap = (0, utils_3.prepareParams)({
            ['fields']: queryParams.fields
                ? queryParams.fields.map(utils_4.toString).join(',')
                : undefined,
        });
        const headersMap = (0, utils_3.prepareParams)({
            ...{ ['content-md5']: (0, utils_4.toString)(headers.contentMd5) },
            ...headers.extraHeaders,
        });
        const preflightUploadUrl = await this.preflightFileUploadCheck({
            name: requestBody.attributes.name,
            size: requestBody.attributes.size,
            parent: {
                id: requestBody.attributes.parent.id,
            },
        }, {
            extraHeaders: headers.extraHeaders,
        }, cancellationToken);
        if (preflightUploadUrl.uploadUrl == void 0 ||
            !preflightUploadUrl.uploadUrl.includes('http')) {
            throw new errors_1.BoxSdkError({ message: 'Unable to get preflight upload URL' });
        }
        const response = await this.networkSession.networkClient.fetch(new fetchOptions_1.FetchOptions({
            url: preflightUploadUrl.uploadUrl,
            method: 'POST',
            params: queryParamsMap,
            headers: headersMap,
            multipartData: [
                {
                    partName: 'attributes',
                    data: serializeUploadFileRequestBodyAttributesField(requestBody.attributes),
                },
                {
                    partName: 'file',
                    fileStream: requestBody.file,
                    fileName: requestBody.fileFileName,
                    contentType: requestBody.fileContentType,
                },
            ],
            contentType: 'multipart/form-data',
            responseFormat: 'json',
            auth: this.auth,
            networkSession: this.networkSession,
            cancellationToken: cancellationToken,
        }));
        return {
            ...(0, files_1.deserializeFiles)(response.data),
            rawData: response.data,
        };
    }
}
exports.UploadsManager = UploadsManager;
function serializeUploadFileVersionRequestBodyAttributesField(val) {
    return {
        ['name']: val.name,
        ['content_modified_at']: val.contentModifiedAt == void 0
            ? val.contentModifiedAt
            : (0, utils_1.serializeDateTime)(val.contentModifiedAt),
    };
}
function deserializeUploadFileVersionRequestBodyAttributesField(val) {
    if (!(0, json_3.sdIsMap)(val)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting a map for "UploadFileVersionRequestBodyAttributesField"',
        });
    }
    if (val.name == void 0) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting "name" of type "UploadFileVersionRequestBodyAttributesField" to be defined',
        });
    }
    if (!(0, json_2.sdIsString)(val.name)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "name" of type "UploadFileVersionRequestBodyAttributesField"',
        });
    }
    const name = val.name;
    if (!(val.content_modified_at == void 0) &&
        !(0, json_2.sdIsString)(val.content_modified_at)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "content_modified_at" of type "UploadFileVersionRequestBodyAttributesField"',
        });
    }
    const contentModifiedAt = val.content_modified_at == void 0
        ? void 0
        : (0, utils_2.deserializeDateTime)(val.content_modified_at);
    return {
        name: name,
        contentModifiedAt: contentModifiedAt,
    };
}
function serializePreflightFileUploadCheckRequestBodyParentField(val) {
    return { ['id']: val.id };
}
function deserializePreflightFileUploadCheckRequestBodyParentField(val) {
    if (!(0, json_3.sdIsMap)(val)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting a map for "PreflightFileUploadCheckRequestBodyParentField"',
        });
    }
    if (!(val.id == void 0) && !(0, json_2.sdIsString)(val.id)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "id" of type "PreflightFileUploadCheckRequestBodyParentField"',
        });
    }
    const id = val.id == void 0 ? void 0 : val.id;
    return { id: id };
}
function serializePreflightFileUploadCheckRequestBody(val) {
    return {
        ['name']: val.name,
        ['size']: val.size,
        ['parent']: val.parent == void 0
            ? val.parent
            : serializePreflightFileUploadCheckRequestBodyParentField(val.parent),
    };
}
function deserializePreflightFileUploadCheckRequestBody(val) {
    if (!(0, json_3.sdIsMap)(val)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting a map for "PreflightFileUploadCheckRequestBody"',
        });
    }
    if (!(val.name == void 0) && !(0, json_2.sdIsString)(val.name)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "name" of type "PreflightFileUploadCheckRequestBody"',
        });
    }
    const name = val.name == void 0 ? void 0 : val.name;
    if (!(val.size == void 0) && !(0, json_1.sdIsNumber)(val.size)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting number for "size" of type "PreflightFileUploadCheckRequestBody"',
        });
    }
    const size = val.size == void 0 ? void 0 : val.size;
    const parent = val.parent == void 0
        ? void 0
        : deserializePreflightFileUploadCheckRequestBodyParentField(val.parent);
    return {
        name: name,
        size: size,
        parent: parent,
    };
}
function serializeUploadFileRequestBodyAttributesParentField(val) {
    return { ['id']: val.id };
}
function deserializeUploadFileRequestBodyAttributesParentField(val) {
    if (!(0, json_3.sdIsMap)(val)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting a map for "UploadFileRequestBodyAttributesParentField"',
        });
    }
    if (val.id == void 0) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting "id" of type "UploadFileRequestBodyAttributesParentField" to be defined',
        });
    }
    if (!(0, json_2.sdIsString)(val.id)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "id" of type "UploadFileRequestBodyAttributesParentField"',
        });
    }
    const id = val.id;
    return { id: id };
}
function serializeUploadFileRequestBodyAttributesField(val) {
    return {
        ['name']: val.name,
        ['parent']: serializeUploadFileRequestBodyAttributesParentField(val.parent),
        ['content_created_at']: val.contentCreatedAt == void 0
            ? val.contentCreatedAt
            : (0, utils_1.serializeDateTime)(val.contentCreatedAt),
        ['content_modified_at']: val.contentModifiedAt == void 0
            ? val.contentModifiedAt
            : (0, utils_1.serializeDateTime)(val.contentModifiedAt),
    };
}
function deserializeUploadFileRequestBodyAttributesField(val) {
    if (!(0, json_3.sdIsMap)(val)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting a map for "UploadFileRequestBodyAttributesField"',
        });
    }
    if (val.name == void 0) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting "name" of type "UploadFileRequestBodyAttributesField" to be defined',
        });
    }
    if (!(0, json_2.sdIsString)(val.name)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "name" of type "UploadFileRequestBodyAttributesField"',
        });
    }
    const name = val.name;
    if (val.parent == void 0) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting "parent" of type "UploadFileRequestBodyAttributesField" to be defined',
        });
    }
    const parent = deserializeUploadFileRequestBodyAttributesParentField(val.parent);
    if (!(val.content_created_at == void 0) &&
        !(0, json_2.sdIsString)(val.content_created_at)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "content_created_at" of type "UploadFileRequestBodyAttributesField"',
        });
    }
    const contentCreatedAt = val.content_created_at == void 0
        ? void 0
        : (0, utils_2.deserializeDateTime)(val.content_created_at);
    if (!(val.content_modified_at == void 0) &&
        !(0, json_2.sdIsString)(val.content_modified_at)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "content_modified_at" of type "UploadFileRequestBodyAttributesField"',
        });
    }
    const contentModifiedAt = val.content_modified_at == void 0
        ? void 0
        : (0, utils_2.deserializeDateTime)(val.content_modified_at);
    return {
        name: name,
        parent: parent,
        contentCreatedAt: contentCreatedAt,
        contentModifiedAt: contentModifiedAt,
    };
}
function serializeUploadWithPreflightCheckRequestBodyAttributesParentField(val) {
    return { ['id']: val.id };
}
function deserializeUploadWithPreflightCheckRequestBodyAttributesParentField(val) {
    if (!(0, json_3.sdIsMap)(val)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting a map for "UploadWithPreflightCheckRequestBodyAttributesParentField"',
        });
    }
    if (val.id == void 0) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting "id" of type "UploadWithPreflightCheckRequestBodyAttributesParentField" to be defined',
        });
    }
    if (!(0, json_2.sdIsString)(val.id)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "id" of type "UploadWithPreflightCheckRequestBodyAttributesParentField"',
        });
    }
    const id = val.id;
    return {
        id: id,
    };
}
function serializeUploadWithPreflightCheckRequestBodyAttributesField(val) {
    return {
        ['name']: val.name,
        ['parent']: serializeUploadWithPreflightCheckRequestBodyAttributesParentField(val.parent),
        ['content_created_at']: val.contentCreatedAt == void 0
            ? val.contentCreatedAt
            : (0, utils_1.serializeDateTime)(val.contentCreatedAt),
        ['content_modified_at']: val.contentModifiedAt == void 0
            ? val.contentModifiedAt
            : (0, utils_1.serializeDateTime)(val.contentModifiedAt),
        ['size']: val.size,
    };
}
function deserializeUploadWithPreflightCheckRequestBodyAttributesField(val) {
    if (!(0, json_3.sdIsMap)(val)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting a map for "UploadWithPreflightCheckRequestBodyAttributesField"',
        });
    }
    if (val.name == void 0) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting "name" of type "UploadWithPreflightCheckRequestBodyAttributesField" to be defined',
        });
    }
    if (!(0, json_2.sdIsString)(val.name)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "name" of type "UploadWithPreflightCheckRequestBodyAttributesField"',
        });
    }
    const name = val.name;
    if (val.parent == void 0) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting "parent" of type "UploadWithPreflightCheckRequestBodyAttributesField" to be defined',
        });
    }
    const parent = deserializeUploadWithPreflightCheckRequestBodyAttributesParentField(val.parent);
    if (!(val.content_created_at == void 0) &&
        !(0, json_2.sdIsString)(val.content_created_at)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "content_created_at" of type "UploadWithPreflightCheckRequestBodyAttributesField"',
        });
    }
    const contentCreatedAt = val.content_created_at == void 0
        ? void 0
        : (0, utils_2.deserializeDateTime)(val.content_created_at);
    if (!(val.content_modified_at == void 0) &&
        !(0, json_2.sdIsString)(val.content_modified_at)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting string for "content_modified_at" of type "UploadWithPreflightCheckRequestBodyAttributesField"',
        });
    }
    const contentModifiedAt = val.content_modified_at == void 0
        ? void 0
        : (0, utils_2.deserializeDateTime)(val.content_modified_at);
    if (val.size == void 0) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting "size" of type "UploadWithPreflightCheckRequestBodyAttributesField" to be defined',
        });
    }
    if (!(0, json_1.sdIsNumber)(val.size)) {
        throw new errors_1.BoxSdkError({
            message: 'Expecting number for "size" of type "UploadWithPreflightCheckRequestBodyAttributesField"',
        });
    }
    const size = val.size;
    return {
        name: name,
        parent: parent,
        contentCreatedAt: contentCreatedAt,
        contentModifiedAt: contentModifiedAt,
        size: size,
    };
}
//# sourceMappingURL=uploads.js.map