plivo-node/lib/resources/powerpacks.js
2021-08-11 18:30:24 +05:30

779 lines
25 KiB
JavaScript

import * as _ from 'lodash';
import {
PlivoResource,
PlivoResourceInterface
} from '../base';
import {
extend,
validate
} from '../utils/common.js';
const action = 'Powerpack/';
const idField = 'uuid';
const numberpoolIdField = 'numberPool';
const clientKey = Symbol();
export class ListAllNumbersResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.meta = params.meta;
this.objects = params.objects;
}
}
export class CreatePowerpackResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.applicationId = params.applicationId;
this.applicationType = params.applicationType;
this.createdOn = params.createdOn;
this.localConnect = params.localConnect;
this.name = params.name;
this.numberPool = params.numberPool;
this.numberPriority = params.numberPriority;
this.stickySender = params.stickySender;
this.uuid = params.uuid;
}
}
export class UpdatePowerpackResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.applicationId = params.applicationId;
this.applicationType = params.applicationType;
this.createdOn = params.createdOn;
this.localConnect = params.localConnect;
this.name = params.name;
this.numberPool = params.numberPool;
this.stickySender = params.stickySender;
this.numberPriority = params.numberPriority;
this.uuid = params.uuid;
}
}
export class ListShortCodeResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.meta = params.meta;
this.objects = params.objects;
}
}
export class ListTollFreeResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.meta = params.meta;
this.objects = params.objects;
}
}
export class AddNumberResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.accountPhoneNumberResource = params.accountPhoneNumberResource;
this.addedOn = params.addedOn;
this.countryIso2 = params.countryIso2;
this.number = params.number;
this.numberPoolUuid = params.numberPoolUuid;
this.type = params.type;
this.service = params.service;
}
}
export class RemoveNumberResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.response = params.response;
}
}
export class RemoveTollFreeNumberResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.response = params.response;
}
}
export class RemoveShortCodeResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.response = params.response;
}
}
export class AddTollFreeNumberresponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.accountPhoneNumberResource = params.accountPhoneNumberResource;
this.addedOn = params.addedOn;
this.countryIso2 = params.countryIso2;
this.number = params.number;
this.numberPoolUuid = params.numberPoolUuid;
this.type = params.type;
this.service = params.service;
}
}
export class RetrieveNumberResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.accountPhoneNumberResource = params.accountPhoneNumberResource;
this.addedOn = params.addedOn;
this.countryIso2 = params.countryIso2;
this.number = params.number;
this.numberPoolUuid = params.numberPoolUuid;
this.type = params.type;
}
}
export class RetrieveTollFreeResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.accountPhoneNumberResource = params.accountPhoneNumberResource;
this.addedOn = params.addedOn;
this.countryIso2 = params.countryIso2;
this.number = params.number;
this.numberPoolUuid = params.numberPoolUuid;
this.type = params.type;
}
}
export class RetrieveShortCodeResponse {
constructor(params) {
params = params || {};
this.apiId = params.apiId;
this.addedOn = params.addedOn;
this.countryIso2 = params.countryIso2;
this.shortCode = params.shortCode;
this.numberPoolUuid = params.numberPoolUuid;
}
}
/**
* Represents a Powerpack
* @constructor
* @param {function} client - make api call
* @param {object} [data] - data of call
*/
export class Powerpack extends PlivoResource {
constructor(client, data = {}) {
super(action, Powerpack, idField, client);
if (idField in data) {
this.uuid = data[idField];
}
if (numberpoolIdField in data) {
this.number_pool_id = data[numberpoolIdField].split('/')[5];
}
this.number_pool = new NumberPool(client, {
number_pool_id: this.number_pool_id
});
extend(this, data);
this[clientKey] = client;
}
list_numbers(params) {
let query = this.search_query(params);
var queryparams = {};
queryparams['search'] = 'hack';
let path = 'NumberPool/' + this.number_pool_id + '/Number/?' + query;
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('GET', path.toString().trim(), queryparams)
.then(response => {
resolve(new ListAllNumbersResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
search_query(params) {
if (params === undefined) {
params = {};
}
var query = '';
if (params.type != undefined) {
query = 'type=' + params.type;
}
if (params.starts_with != undefined) {
if (query == '') {
query = 'starts_with=' + params.starts_with;
} else {
query += '&starts_with=' + params.starts_with;
}
}
// return params;
if (params.country_iso2 != undefined) {
if (query == '') {
query = 'country_iso2=' + params.country_iso2;
} else {
query += '&country_iso2=' + params.country_iso2;
}
}
if (params.limit != undefined) {
if (query == '') {
query = 'limit=' + params.limit;
} else {
query += '&limit=' + params.limit;
}
}
if (params.offset != undefined) {
if (query == '') {
query = 'offset=' + params.offset;
} else {
query += '&offset=' + params.offset;
}
}
if (params.service != undefined) {
if (query == '') {
query = 'service=' + params.service;
} else {
query += '&service=' + params.service;
}
}
query = query + '&';
return query;
}
count_numbers(params) {
let query = this.search_query(params);
var queryparams = {};
queryparams['search'] = 'hack';
let path = 'NumberPool/' + this.number_pool_id + '/Number/?' + query;
return super.getMetaResponse(path.toString().trim(), 'GET', queryparams);
}
find_number(number) {
let path = 'NumberPool/' + this.number_pool_id + '/Number/' + number + '/';
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('GET', path.toString().trim())
.then(response => {
resolve(new RetrieveNumberResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
add_number(number, service = '') {
var params = {};
params['rent'] = 'false';
if (service != '') {
params['service'] = service
}
let client = this[clientKey];
let path = 'NumberPool/' + this.number_pool_id + '/Number/' + number + '/';
return new Promise((resolve, reject) => {
client('POST', path.toString().trim(), params)
.then(response => {
resolve(new AddNumberResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
add_tollfree(tollfree, service = '') {
var params = {};
params['rent'] = 'false';
if (service != '') {
params['service'] = service
}
let path = 'NumberPool/' + this.number_pool_id + '/Tollfree/' + tollfree + '/';
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('POST', path.toString().trim(), params)
.then(response => {
resolve(new AddTollFreeNumberresponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
remove_number(number, unrent = false) {
var params = {};
params['unrent'] = unrent.toString();
let path = 'NumberPool/' + this.number_pool_id + '/Number/' + number + '/';
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('DELETE', path.toString().trim(), params)
.then(response => {
resolve(new RemoveNumberResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
remove_tollfree(tollfree, unrent = false) {
var params = {};
params['unrent'] = unrent.toString();
let path = 'NumberPool/' + this.number_pool_id + '/Tollfree/' + tollfree + '/';
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('DELETE', path.toString().trim(), params)
.then(response => {
resolve(new RemoveTollFreeNumberResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
remove_shortcode(shortcode) {
let path = 'NumberPool/' + this.number_pool_id + '/Shortcode/' + shortcode + '/';
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('DELETE', path.toString().trim())
.then(response => {
resolve(new RemoveShortCodeResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
list_shortcodes(params) {
if (params === undefined) {
params = {};
}
let path = 'NumberPool/' + this.number_pool_id + '/Shortcode/';
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('GET', path.toString().trim(), params)
.then(response => {
resolve(new ListShortCodeResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
list_tollfree(params) {
if (params === undefined) {
params = {};
}
let path = 'NumberPool/' + this.number_pool_id + '/Tollfree/';
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('GET', path.toString().trim(), params)
.then(response => {
resolve(new ListTollFreeResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
find_shortcode(shortcode, service = '') {
let path = 'NumberPool/' + this.number_pool_id + '/Shortcode/' + shortcode + '/';
if (service != '') {
path = path + '&service=' + service
}
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('GET', path.toString().trim())
.then(response => {
resolve(new RetrieveShortCodeResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
find_tollfree(tollfree, service = '') {
let path = 'NumberPool/' + this.number_pool_id + '/Tollfree/' + tollfree + '/';
if (service != '') {
path = path + '&service=' + service
}
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('GET', path.toString().trim())
.then(response => {
resolve(new RetrieveTollFreeResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
buy_add_number(params) {
var number = params.number;
var rentparam = {};
rentparam['rent'] = 'true';
if (params.number == undefined) {
try {
if (params.country_iso2 != undefined) {
params['country_iso'] = params.country_iso2;
}
if (params.service != undefined) {
params['service'] = params.service;
}
var test = super.customexecuteGetNumberAction('PhoneNumber/', 'GET', params);
return test.then((val) => {
let path = 'NumberPool/' + this.number_pool_id + '/Number/' + val + '/';
return super.customexecuteAction(path.toString().trim(), 'POST', rentparam);
});
} catch (err) {
return err.message;
}
}
let path = 'NumberPool/' + this.number_pool_id + '/Number/' + number + '/';
return super.customexecuteAction(path.toString().trim(), 'POST', rentparam);
}
/**
* update powerpack
* @method
* @param {object} params - to update Powerpack
* @param {string} [params.name]
* @param {string} [params.application_type]
* @param {string} [params.application_id]
* @param {string} [params.sticky_sender]
* @param {string} [params.local_connect]
* @param {object} [params.number_priority]
* @promise {object} return {@link Powerpack} object
* @fail {Error} return Error
*/
update(params) {
let path = 'Powerpack/' + this.uuid + '/';
//return super.customexecuteAction(path.toString().trim(), 'POST', params);
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('POST', path.toString().trim(), params)
.then(response => {
resolve(new UpdatePowerpackResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
/**
* delete Powerpack
* @method
* @promise {object} return true on success
* @fail {Error} return Error
*/
delete(unrent_numbers = false) {
let params = {};
if (typeof unrent_numbers === 'boolean') {
params.unrent_numbers = unrent_numbers.toString();
}
let path = 'Powerpack/' + this.uuid + '/';
return super.customexecuteAction(path.toString().trim(), 'DELETE', params);
}
}
const numberPoolField = 'number_pool_id';
export class NumberPool extends PlivoResource {
constructor(client, data = {}) {
super(action, NumberPool, numberPoolField, client);
this.numbers = new Numbers(client, {
number_pool_id: data.number_pool_id
});
this.shortcodes = new Shortcode(client, {
number_pool_id: data.number_pool_id
});
this.tollfree = new Tollfree(client, {
number_pool_id: data.number_pool_id
});
extend(this, data);
}
}
export class Numbers extends PlivoResource {
constructor(client, data = {}) {
super(action, Numbers, numberPoolField, client);
extend(this, data);
}
buy_add_number(params) {
var number = params.number;
var rentparam = {};
rentparam['rent'] = 'true';
if (params.number == undefined) {
try {
if (params.country_iso2 != undefined) {
params['country_iso'] = params.country_iso2;
}
if (params.service != undefined) {
params['service'] = params.service;
}
var test = super.customexecuteGetNumberAction('PhoneNumber/', 'GET', params);
return test.then((val) => {
let path = 'NumberPool/' + this.number_pool_id + '/Number/' + val + '/';
return super.customexecuteAction(path.toString().trim(), 'POST', rentparam);
});
} catch (err) {
return err.message;
}
}
let path = 'NumberPool/' + this.number_pool_id + '/Number/' + number + '/';
return super.customexecuteAction(path.toString().trim(), 'POST', rentparam);
}
list(params) {
let query = this.search_query(params);
var queryparams = {};
queryparams['search'] = 'hack';
let path = 'NumberPool/' + this.number_pool_id + '/Number//?' + query;
return super.customexecuteAction(path.toString().trim(), 'GET', queryparams);
}
count(params) {
let query = this.search_query(params);
var queryparams = {};
queryparams['search'] = 'hack';
let path = 'NumberPool/' + this.number_pool_id + '/Number//?' + query;
return super.getMetaResponse(path.toString().trim(), 'GET', queryparams);
}
search_query(params) {
if (params === undefined) {
params = {};
}
var query = '';
if (params.type != undefined) {
query = 'type=' + params.type;
}
if (params.starts_with != undefined) {
if (query == '') {
query = 'starts_with=' + params.starts_with;
} else {
query += '&starts_with=' + params.starts_with;
}
}
// return params;
if (params.country_iso2 != undefined) {
if (query == '') {
query = 'country_iso2=' + params.country_iso2;
} else {
query += '&country_iso2=' + params.country_iso2;
}
}
if (params.limit != undefined) {
if (query == '') {
query = 'limit=' + params.limit;
} else {
query += '&limit=' + params.limit;
}
}
if (params.offset != undefined) {
if (query == '') {
query = 'offset=' + params.offset;
} else {
query += '&offset=' + params.offset;
}
}
if (params.service != undefined) {
if (query == '') {
query = 'service=' + params.service;
} else {
query += '&service=' + params.service;
}
}
query = query + '&';
return query;
}
find(number) {
let path = 'NumberPool/' + this.number_pool_id + '/Number/' + number + '/';
return super.customexecuteAction(path.toString().trim(), 'GET');
}
add(number, service = '') {
var params = {};
params['rent'] = 'false';
if (service != '') {
params['service'] = service
}
let path = 'NumberPool/' + this.number_pool_id + '/Number/' + number + '/';
return super.customexecuteAction(path.toString().trim(), 'POST', params);
}
remove(number, unrent = false) {
var params = {};
params['unrent'] = unrent.toString();
let path = 'NumberPool/' + this.number_pool_id + '/Number/' + number + '/';
return super.customexecuteAction(path.toString().trim(), 'DELETE', params);
}
}
export class Shortcode extends PlivoResource {
constructor(client, data = {}) {
super(action, Shortcode, numberPoolField, client);
extend(this, data);
this.number_pool_id = data.number_pool_id;
}
list(params) {
if (params === undefined) {
params = {};
}
let path = 'NumberPool/' + this.number_pool_id + '/Shortcode/';
return super.customexecuteAction(path.toString().trim(), 'GET', params);
}
find(shortcode) {
let path = 'NumberPool/' + this.number_pool_id + '/Shortcode/' + shortcode + '/';
return super.customexecuteAction(path.toString().trim(), 'GET');
}
remove(shortcode) {
let path = 'NumberPool/' + this.number_pool_id + '/Shortcode/' + shortcode + '/';
return super.customexecuteAction(path.toString().trim(), 'DELETE');
}
}
export class Tollfree extends PlivoResource {
constructor(client, data = {}) {
super(action, Tollfree, numberPoolField, client);
extend(this, data);
this.number_pool_id = data.number_pool_id;
}
add(tollfree) {
var params = {};
params['rent'] = 'false';
let path = 'NumberPool/' + this.number_pool_id + '/Tollfree/' + tollfree + '/';
return super.customexecuteAction(path.toString().trim(), 'POST', params);
}
remove(tollfree, unrent = false) {
var params = {};
params['unrent'] = unrent.toString();
let path = 'NumberPool/' + this.number_pool_id + '/Tollfree/' + tollfree + '/';
return super.customexecuteAction(path.toString().trim(), 'DELETE', params);
}
list(params) {
if (params === undefined) {
params = {};
}
let path = 'NumberPool/' + this.number_pool_id + '/Tollfree/';
return super.customexecuteAction(path.toString().trim(), 'GET', params);
}
find(tollfree) {
let path = 'NumberPool/' + this.number_pool_id + '/Tollfree/' + tollfree + '/';
return super.customexecuteAction(path.toString().trim(), 'GET');
}
}
/**
* Represents a Powerpack interface
* @constructor
* @param {function} client - make api call
* @param {object} [data] - data of call
*/
export class PowerpackInterface extends PlivoResourceInterface {
constructor(client, data = {}) {
super(action, Powerpack, idField, client);
extend(this, data);
this[clientKey] = client;
}
/**
* get Powerpack by given id
* @method
* @param {string} uuid - id of Powerpack
* @promise {object} return {@link Powerpack} object
* @fail {Error} return Error
*/
get(uuid) {
return super.get(uuid);
}
/**
* create Powerpack
* @method
* @param {string} name - name of Powerpack
* @param {object} params - params to create Powerpack
* @param {string} [params.sticky_sender] -
* @param {string} [params.local_connect]
* @param {string} [params.application_type]
* @param {string} [params.application_id]
* @param {object} [params.number_priority]
* @promise {object} return {@link PlivoGenericResponse} object
* @fail {Error} return Error
*/
create(name, params = {}) {
let errors = validate([{
field: 'name',
value: name,
validators: ['isRequired', 'isString']
}]);
if (errors) {
return errors;
}
params.name = name;
let client = this[clientKey];
return new Promise((resolve, reject) => {
client('POST', action, params)
.then(response => {
resolve(new CreatePowerpackResponse(response.body, idField));
})
.catch(error => {
reject(error);
});
});
}
/**
* update Powerpack
* @method
* @param {string} uuid - id of Powerpack
* @param {object} params - to update Powerpack
* @param {string} [params.name]
* @param {string} [params.sticky_sender]
* @param {string} [params.local_connect]
* @param {string} [params.application_type]
* @param {string} [params.application_id]
* @param {object} [params.number_priority]
* @promise {object} return {@link Powerpack} object
* @fail {Error} return Error
*/
update(uuid, params) {
let errors = validate([{
field: 'uuid',
value: uuid,
validators: ['isRequired']
}]);
if (errors) {
return errors;
}
return new Powerpack(this[clientKey], {
uuid: uuid
}).update(params);
}
/**
* Get All Call Detail
* @method
* @param {object} params - params to get all call details.
* @promise {object[]} returns list of Call Object
* @fail {Error} returns Error
*/
list(params) {
return super.list(params);
}
}