Reference Source Test

src/video/resources/uploads.js

/*!
 * Mux Assets
 * Copyright(c) 2018 Mux Inc.
 */
const Base = require('../../base');

/**
 * @private Base asset path for the Mux API
 * */
const PATH = '/video/v1/uploads';

/**
 * @private
 * Build the base asset path for the Mux API
 * */
const buildBasePath = uploadId => `${PATH}/${uploadId}`;

/**
 * Uploads Class - Provides access to the Mux Video Uploads API
 *
 * @example
 * const { Video } = new Mux(accessToken, secret);
 *
 * // Create an upload
 * Video.Uploads.create({ new_asset_settings: { playback_policy: 'public' } });
 */
class Uploads extends Base {
  /**
   * Creates a direct upload with the specified JSON parameters
   * @extends Base
   * @param {Object} params - Upload JSON parameters (e.g timeout)
   * @returns {Promise} - Returns a resolved Promise with a response from the Mux API
   *
   * @example
   * const muxClient = new Mux(accessToken, secret);
   * const { Video } = muxClient;
   *
   * // Create a new upload
   * const upload = await Video.Uploads.create({new_asset_settings: {playback_policy: 'public'}});
   * // Now push a file to the URL returned.
   * fs.createReadStream(pathToFile).pipe(request.put(upload.url))
   *
   * @see https://docs.mux.com/api-reference/video#operation/create-direct-upload
   */
  create(params) {
    if (!params) {
      return Promise.reject(
        new Error('Params are required for creating a direct upload')
      );
    }

    return this.http.post(PATH, params);
  }

  /**
   * Cancels an upload
   * @param {string} uploadId - The ID for the upload intended for cancellation
   * @returns {Promise} - Returns a resolved Promise with a response from the Mux API
   *
   * @example
   * const { Video } = new Mux(accessToken, secret);
   *
   * // Cancels an upload
   * Video.Uploads.cancel(uploadId);
   *
   * @see https://docs.mux.com/api-reference/video#operation/cancel-direct-upload
   */
  cancel(uploadId) {
    if (!uploadId) {
      return Promise.reject(new Error('An upload ID is required'));
    }
    return this.http.put(`${buildBasePath(uploadId)}/cancel`);
  }

  /**
   * Get an upload
   * @param {string} uploadId - The ID for the upload
   * @returns {Promise} - Returns a resolved Promise with a response from the Mux API
   *
   * @example
   * const { Video } = new Mux(accessToken, secret);
   *
   * // Get an upload
   * Video.Uploads.get(uploadId);
   *
   * @see https://docs.mux.com/api-reference/video#operation/get-direct-upload
   */
  get(uploadId) {
    if (!uploadId) {
      return Promise.reject(
        new Error('An upload ID is required to get an asset')
      );
    }
    return this.http.get(buildBasePath(uploadId));
  }

  /**
   * List all uploads
   * @returns {Promise} - Returns a resolved Promise with a response from the Mux API
   *
   * @example
   * const { Video } = new Mux(accessToken, secret);
   *
   * // List all uploads
   * Video.Uploads.list();
   *
   * @see https://docs.mux.com/api-reference/video#operation/list-direct-uploads
   */
  list(params) {
    return this.http.get(PATH, { params });
  }
}

module.exports = Uploads;