plivo
Version:
A Node.js SDK to make voice calls and send SMS using Plivo and to generate Plivo XML
491 lines (400 loc) • 20.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PhoneNumberComplianceLinkInterface = exports.PhoneNumberComplianceLinkResponse = exports.PhoneNumberComplianceInterface = exports.PhoneNumberCompliance = exports.UpdatePhoneNumberComplianceResponse = exports.ListPhoneNumberComplianceResponse = exports.CreatePhoneNumberComplianceResponse = exports.PhoneNumberComplianceResponse = exports.PhoneNumberComplianceRequirementInterface = exports.PhoneNumberComplianceRequirementResponse = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _base = require('../base');
var _common = require('../utils/common.js');
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var clientKey = Symbol();
var action = 'PhoneNumber/Compliance/';
var requirementsAction = 'PhoneNumber/Compliance/Requirements/';
var linkAction = 'PhoneNumber/Compliance/Link/';
var idField = 'complianceId';
// ---- Requirements ----
var PhoneNumberComplianceRequirementResponse = exports.PhoneNumberComplianceRequirementResponse = function PhoneNumberComplianceRequirementResponse(params) {
_classCallCheck(this, PhoneNumberComplianceRequirementResponse);
params = params || {};
this.apiId = params.apiId;
this.requirementId = params.requirementId;
this.countryIso = params.countryIso;
this.numberType = params.numberType;
this.userType = params.userType;
this.documentTypes = params.documentTypes;
};
/**
* Represents a Phone Number Compliance Requirement Interface
* @constructor
* @param {function} client - make api call
* @param {object} [data] - data of call
*/
var PhoneNumberComplianceRequirementInterface = exports.PhoneNumberComplianceRequirementInterface = function (_PlivoResourceInterfa) {
_inherits(PhoneNumberComplianceRequirementInterface, _PlivoResourceInterfa);
function PhoneNumberComplianceRequirementInterface(client) {
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, PhoneNumberComplianceRequirementInterface);
var _this = _possibleConstructorReturn(this, (PhoneNumberComplianceRequirementInterface.__proto__ || Object.getPrototypeOf(PhoneNumberComplianceRequirementInterface)).call(this, requirementsAction, PhoneNumberComplianceRequirementInterface, idField, client));
(0, _common.extend)(_this, data);
_this[clientKey] = client;
return _this;
}
/**
* get phone number compliance requirements
* @method
* @param {object} params - params to get requirements
* @param {string} [params.countryIso] - Country ISO code
* @param {string} [params.numberType] - Number type
* @param {string} [params.userType] - User type
* @promise {object} return {@link PhoneNumberComplianceRequirementResponse} object
* @fail {Error} return Error
*/
_createClass(PhoneNumberComplianceRequirementInterface, [{
key: 'get',
value: function get() {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var client = this[clientKey];
return new Promise(function (resolve, reject) {
client('GET', requirementsAction, params).then(function (response) {
resolve(new PhoneNumberComplianceRequirementResponse(response.body, client));
}).catch(function (error) {
reject(error);
});
});
}
}]);
return PhoneNumberComplianceRequirementInterface;
}(_base.PlivoResourceInterface);
// ---- Phone Number Compliance (main CRUD) ----
var PhoneNumberComplianceResponse = exports.PhoneNumberComplianceResponse = function PhoneNumberComplianceResponse(params) {
_classCallCheck(this, PhoneNumberComplianceResponse);
params = params || {};
this.apiId = params.apiId;
this.complianceId = params.complianceId;
this.alias = params.alias;
this.status = params.status;
this.countryIso = params.countryIso;
this.numberType = params.numberType;
this.userType = params.userType;
this.callbackUrl = params.callbackUrl;
this.callbackMethod = params.callbackMethod;
this.rejectionReason = params.rejectionReason;
this.createdAt = params.createdAt;
this.updatedAt = params.updatedAt;
this.endUser = params.endUser;
this.documents = params.documents;
this.linkedNumbers = params.linkedNumbers;
};
var CreatePhoneNumberComplianceResponse = exports.CreatePhoneNumberComplianceResponse = function CreatePhoneNumberComplianceResponse(params) {
_classCallCheck(this, CreatePhoneNumberComplianceResponse);
params = params || {};
this.apiId = params.apiId;
this.complianceId = params.complianceId;
this.message = params.message;
};
var ListPhoneNumberComplianceResponse = exports.ListPhoneNumberComplianceResponse = function ListPhoneNumberComplianceResponse(params) {
_classCallCheck(this, ListPhoneNumberComplianceResponse);
params = params || {};
this.apiId = params.apiId;
this.meta = params.meta;
this.compliances = params.compliances;
};
var UpdatePhoneNumberComplianceResponse = exports.UpdatePhoneNumberComplianceResponse = function UpdatePhoneNumberComplianceResponse(params) {
_classCallCheck(this, UpdatePhoneNumberComplianceResponse);
params = params || {};
this.apiId = params.apiId;
this.message = params.message;
this.compliance = params.compliance;
};
var PhoneNumberCompliance = exports.PhoneNumberCompliance = function (_PlivoResource) {
_inherits(PhoneNumberCompliance, _PlivoResource);
function PhoneNumberCompliance(client) {
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, PhoneNumberCompliance);
var _this2 = _possibleConstructorReturn(this, (PhoneNumberCompliance.__proto__ || Object.getPrototypeOf(PhoneNumberCompliance)).call(this, action, PhoneNumberCompliance, idField, client));
if (idField in data) {
_this2.id = data[idField];
}
_this2[clientKey] = client;
(0, _common.extend)(_this2, data);
return _this2;
}
/**
* update PhoneNumberCompliance
* @method
* @param {string} id - id to update
* @param {object} params
* @promise {object} return {@link PhoneNumberCompliance} object if success
* @fail {Error} return Error
*/
_createClass(PhoneNumberCompliance, [{
key: 'update',
value: function update(params, id) {
var client = this[clientKey];
var that = this;
// Handle multipart with documents
if (params.documents && Array.isArray(params.documents)) {
var documents = params.documents;
for (var i = 0; i < documents.length; i++) {
if (documents[i].file) {
params['documents[' + i + '].file'] = documents[i].file;
}
}
delete params.documents;
}
if (params.data) {
params.data = JSON.stringify(params.data);
}
params.multipart = true;
return new Promise(function (resolve, reject) {
client('PATCH', action + id + '/', params).then(function (response) {
(0, _common.extend)(that, response.body);
resolve(new UpdatePhoneNumberComplianceResponse(that));
}).catch(function (error) {
reject(error);
});
});
}
/**
* delete a PhoneNumberCompliance
* @method
* @param {string} id - id to delete
* @promise {boolean} return true if success
* @fail {Error} return Error
*/
}, {
key: 'delete',
value: function _delete() {
var client = this[clientKey];
var id = this.id;
return new Promise(function (resolve, reject) {
client('DELETE', action + id + '/').then(function () {
resolve(true);
}).catch(function (error) {
reject(error);
});
});
}
}]);
return PhoneNumberCompliance;
}(_base.PlivoResource);
/**
* Represents a Phone Number Compliance Interface
* @constructor
* @param {function} client - make api call
* @param {object} [data] - data of call
*/
var PhoneNumberComplianceInterface = exports.PhoneNumberComplianceInterface = function (_PlivoResourceInterfa2) {
_inherits(PhoneNumberComplianceInterface, _PlivoResourceInterfa2);
function PhoneNumberComplianceInterface(client) {
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, PhoneNumberComplianceInterface);
var _this3 = _possibleConstructorReturn(this, (PhoneNumberComplianceInterface.__proto__ || Object.getPrototypeOf(PhoneNumberComplianceInterface)).call(this, action, PhoneNumberCompliance, idField, client));
(0, _common.extend)(_this3, data);
_this3[clientKey] = client;
return _this3;
}
/**
* get phone number compliance by given id
* @method
* @param {string} id - id of the compliance
* @param {object} [params] - optional query params
* @param {string} [params.expand] - Comma-separated related objects to include (end_user, documents, linked_numbers)
* @promise {object} return {@link PhoneNumberComplianceResponse} object
* @fail {Error} return Error
*/
_createClass(PhoneNumberComplianceInterface, [{
key: 'get',
value: function get(id) {
var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var client = this[clientKey];
return new Promise(function (resolve, reject) {
if (action !== '' && !id) {
reject(new Error(idField + ' must be set'));
}
client('GET', action + (id ? id + '/' : ''), params).then(function (response) {
var body = response.body;
// The API wraps the compliance data inside a "compliance" key.
// Unwrap it and merge with the top-level apiId so the
// response constructor can read all fields flat.
if (body && body.compliance && _typeof(body.compliance) === 'object') {
body = Object.assign({ apiId: body.apiId }, body.compliance);
}
resolve(new PhoneNumberComplianceResponse(body, client));
}).catch(function (error) {
reject(error);
});
});
}
/**
* list phone number compliances
* @method
* @param {object} params - params to list compliances
* @param {string} [params.status] - Filter by status (draft, submitted, accepted, rejected, suspended, expired)
* @param {string} [params.countryIso] - Filter by country ISO code (e.g., IN, DE, US)
* @param {string} [params.numberType] - Filter by number type (local, mobile, tollfree)
* @param {string} [params.userType] - Filter by user type (individual, business)
* @param {string} [params.alias] - Filter by alias
* @param {string} [params.expand] - Comma-separated related objects to include (end_user, documents, linked_numbers)
* @param {integer} [params.offset] - No of value items by which results should be offset
* @param {integer} [params.limit] - Max results per page (default 20, max 100)
*/
}, {
key: 'list',
value: function list() {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var client = this[clientKey];
return new Promise(function (resolve, reject) {
client('GET', action, params).then(function (response) {
resolve(new ListPhoneNumberComplianceResponse(response.body, client));
}).catch(function (error) {
reject(error);
});
});
}
/**
* Create a phone number compliance application
* @method
* @param {object} params
* @param {object} params.data - Compliance application data (JSON stringified internally). Contains:
* country_iso (string, required), number_type (string, required), alias (string, required),
* end_user (object, required: {type, name, email, address_line1, city, state, postal_code, country}),
* documents (array, required: [{document_type_id, data_fields: {key: value}}]),
* callback_url (string, optional), callback_method (string, optional: GET or POST)
* @param {Array} [params.documents] - Array of file objects [{file: '/path/to/file.pdf'}] for document uploads.
* Each entry corresponds to the document at the same index in data.documents.
* Required when document type has proof_required: true.
* @promise {object} return {@link CreatePhoneNumberComplianceResponse} object
* @fail {Error} return Error
*/
}, {
key: 'create',
value: function create() {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var client = this[clientKey];
// Handle multipart with documents
if (params.documents && Array.isArray(params.documents)) {
var documents = params.documents;
for (var i = 0; i < documents.length; i++) {
if (documents[i].file) {
params['documents[' + i + '].file'] = documents[i].file;
}
}
delete params.documents;
}
if (params.data) {
params.data = JSON.stringify(params.data);
}
params.multipart = true;
return new Promise(function (resolve, reject) {
client('POST', action, params).then(function (response) {
resolve(new CreatePhoneNumberComplianceResponse(response.body, idField));
}).catch(function (error) {
reject(error);
});
});
}
/**
* update PhoneNumberCompliance
* @method
* @param {string} id - id to update
* @param {object} params
* @param {object} [params.data] - Data object (will be JSON stringified)
* @param {Array} [params.documents] - Array of document objects with file paths
* @promise {object} return {@link PhoneNumberCompliance} object if success
* @fail {Error} return Error
*/
}, {
key: 'update',
value: function update(id, params) {
var errors = (0, _common.validate)([{
field: 'id',
value: id,
validators: ['isRequired']
}]);
if (errors) {
return errors;
}
return new PhoneNumberCompliance(this[clientKey], {
id: id
}).update(params, id);
}
/**
* delete PhoneNumberCompliance
* @method
* @param {string} id - id to delete
* @promise {boolean} return true if success
* @fail {Error} return Error
*/
}, {
key: 'delete',
value: function _delete(id) {
var errors = (0, _common.validate)([{
field: 'id',
value: id,
validators: ['isRequired']
}]);
if (errors) {
return errors;
}
return new PhoneNumberCompliance(this[clientKey], {
id: id
}).delete();
}
}]);
return PhoneNumberComplianceInterface;
}(_base.PlivoResourceInterface);
// ---- Link ----
var PhoneNumberComplianceLinkResponse = exports.PhoneNumberComplianceLinkResponse = function PhoneNumberComplianceLinkResponse(params) {
_classCallCheck(this, PhoneNumberComplianceLinkResponse);
params = params || {};
this.apiId = params.apiId;
this.totalCount = params.totalCount;
this.updatedCount = params.updatedCount;
this.report = params.report;
};
/**
* Represents a Phone Number Compliance Link Interface
* @constructor
* @param {function} client - make api call
* @param {object} [data] - data of call
*/
var PhoneNumberComplianceLinkInterface = exports.PhoneNumberComplianceLinkInterface = function (_PlivoResourceInterfa3) {
_inherits(PhoneNumberComplianceLinkInterface, _PlivoResourceInterfa3);
function PhoneNumberComplianceLinkInterface(client) {
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
_classCallCheck(this, PhoneNumberComplianceLinkInterface);
var _this4 = _possibleConstructorReturn(this, (PhoneNumberComplianceLinkInterface.__proto__ || Object.getPrototypeOf(PhoneNumberComplianceLinkInterface)).call(this, linkAction, PhoneNumberComplianceLinkInterface, idField, client));
(0, _common.extend)(_this4, data);
_this4[clientKey] = client;
return _this4;
}
/**
* Bulk link phone numbers to compliance applications
* @method
* @param {object} params
* @param {Array} params.numbers - Array of objects, each with:
* number (string, required: phone number in E.164 format),
* compliance_application_id (string, required: UUID of an accepted compliance application)
* @promise {object} return {@link PhoneNumberComplianceLinkResponse} object
* @fail {Error} return Error
*/
_createClass(PhoneNumberComplianceLinkInterface, [{
key: 'link',
value: function link() {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var client = this[clientKey];
return new Promise(function (resolve, reject) {
client('POST', linkAction, params).then(function (response) {
resolve(new PhoneNumberComplianceLinkResponse(response.body, client));
}).catch(function (error) {
reject(error);
});
});
}
}]);
return PhoneNumberComplianceLinkInterface;
}(_base.PlivoResourceInterface);