Reference Source Test

lib/user.js

'use strict';
const https = require('https');
const {
  responseHandler, errorHandler, buildRequestOptions, getUserAgent,
} = require('./common');

/**
 * User methods
 */
class User {

  /**
   * Create user payload
   * @typedef {Object} UserCreateParams
   * @property {string} email - email of new user
   * @property {string} password - password for new user
   * @property {string} [first_name] - first name of new user
   * @property {string} [last_name] - last name of new user
   */

  /**
   * Create user response data
   * @typedef {Object} UserCreateResponse
   * @property {string} id - user unique id
   * @property {number} verified - user is verified or not
   * @property {string} email - user email
   */

  /**
   * Create new user account
   * @param {UserCreateParams} data - create user payload
   * @param {function(err: ApiErrorResponse, res: UserCreateResponse)} [callback] - error first node.js callback
   */
  static create (data, callback) {
    const JSONData = JSON.stringify(data);
    const req = https
      .request(buildRequestOptions({
        method: 'POST',
        path: '/user',
        authorization: { type: 'Basic' },
        headers: {
          'Content-Type': 'application/json',
          'Content-Length': Buffer.byteLength(JSONData),
          'User-Agent': getUserAgent(),
        },
      }), responseHandler(callback))
      .on('error', errorHandler(callback));

    req.write(JSONData);
    req.end();
  }

  /**
   * Get user payload
   * @typedef {Object} UserGetParams
   * @property {string} token - your auth token
   */

  /**
   * Retrieve user response data
   * @typedef {Object} UserGetResponse
   * @property {string} id - user unique id
   * @property {string} first_name - first name
   * @property {string} last_name - last name
   * @property {number} active - user is active or not
   * @property {string} created - user creation timestamp
   * @property {string[]} emails - user emails
   * @property {string} primary_email - user primary email
   * @property {Object[]} subscriptions - user subscriptions data
   * @property {?Object} cloud_export_account_details - cloud export account details data
   * @property {boolean} is_logged_in - user is logged in or not
   * @property {{start_date: string, end_date: string, start_timestamp: number, end_timestamp: number}} billing_period - user billing period data
   * @property {Object[]} companies - companies where user is a member of
   * @property {?string} registration_source - resource where user was registered
   * @property {Object[]} teams - teams where user is a member of
   * @property {Object} settings - user specific settings
   * @property {Object[]} organization_settings - organization specific settings where user is a member of
   * @property {Object[]} merchant_accounts - merchant accounts data
   */

  /**
   * Retrieve user account details
   * @param {UserGetParams} data - get user payload
   * @param {function(err: ApiErrorResponse, res: UserGetResponse)} [callback] - error first node.js callback
   */
  static retrieve ({ token }, callback) {
    https
      .request(buildRequestOptions({
        method: 'GET',
        path: '/user',
        authorization: {
          type: 'Bearer',
          token,
        },
      }), responseHandler(callback))
      .on('error', errorHandler(callback))
      .end();
  }

}

module.exports = User;