From a99e810e569a373c70fa732086307d30d638835c Mon Sep 17 00:00:00 2001 From: narayana Date: Thu, 31 Mar 2022 10:42:22 +0530 Subject: [PATCH 1/7] profile api change --- lib/resources/profile.js | 160 +++++++++++++++++++++++++++++++++++++++ lib/rest/client-test.js | 4 + lib/rest/client.js | 2 + lib/rest/request-test.js | 119 +++++++++++++++++++++++++++++ test/profile.js | 42 ++++++++++ 5 files changed, 327 insertions(+) create mode 100644 lib/resources/profile.js create mode 100644 test/profile.js diff --git a/lib/resources/profile.js b/lib/resources/profile.js new file mode 100644 index 00000000..f4644d40 --- /dev/null +++ b/lib/resources/profile.js @@ -0,0 +1,160 @@ +import * as _ from "lodash"; + +import { + PlivoResource, + PlivoResourceInterface +} from '../base'; +import { + extend, + validate +} from '../utils/common.js'; + +const action = 'Profile/'; +const idField = 'profileUUID'; +let actionKey = Symbol('api action'); +let klassKey = Symbol('constructor'); +let idKey = Symbol('id filed'); +let clientKey = Symbol('make api call'); + + + +/** + * Represents a Profile + * @constructor + * @param {function} client - make api call + * @param {object} [data] - data of call + */ + export class Profile extends PlivoResource { + constructor(client, data = {}) { + super(action, Profile, idField, client); + this[actionKey] = action; + this[clientKey] = client; + if (idField in data) { + this.id = data[idField]; + }; + + extend(this, data); + } +} + +export class ProfileResponse { + constructor(params) { + params = params || {}; + this.apiId = params.apiId; + this.profileUuid = params.profileUuid; + } +} + +/** + * Represents a Profile Interface + * @constructor + * @param {function} client - make api call + * @param {object} [data] - data of call + */ + export class ProfileInterface extends PlivoResource { + constructor(client, data = {}) { + super(action, Profile, idField, client); + extend(this, data); + this[clientKey] = client; + this[actionKey] = action; + this[klassKey] = Profile; + this[idKey] = idField; + } + + /** + * get Profile by given profileuuid + * @method + * @param {string} profileUUID - id of profileUUID + * @promise {object} return {@link profile} object + * @fail {Error} return Error + */ + get(profileUUID) { + let params = {}; + return super.customexecuteAction(action+profileUUID+'/', 'GET', params); + } + + /** + * Get All Profile Detail + * @method + * @param {object} params - params limit and offset + * @promise {object[]} returns list of profile Object + * @fail {Error} returns Error + */ + list(params) { + return super.customexecuteAction(action,'GET', params); + } + + /** + * delete Profile by given profileuuid + * @method + * @param {string} profileUUID - id of profileUUID + * @fail {Error} return Error + */ + deelet(profileUUID) { + let params = {}; + return super.customexecuteAction(action+profileUUID+'/', 'DELETE', params); + } + + /** + * Create a new Profile + * + * @param {string} profile_alias + * @param {string} profile_type + * @param {string} customer_type + * @param {string} entity_type + * @param {string} company_name + * @param {string} ein + * @param {string} vertical + * @param {string} ein_issuing_country + * @param {string} stock_symbol + * @param {string} stock_exchange + * @param {string} alt_business_id_type + * @param {string} website + * @param {object} address + * @param {object} authorized_contact + * @return profileResponse response output + */ + create(profile_alias,profile_type,customer_type,entity_type, company_name,ein,vertical,ein_issuing_country,stock_symbol,stock_exchange, alt_business_id_type, website, address, authorized_contact){ + let params = {} + params.profile_alias=profile_alias; + params.profile_type=profile_type; + params.customer_type=customer_type; + params.entity_type=entity_type; + params.company_name=company_name; + params.ein=ein; + params.vertical=vertical; + params.ein_issuing_country=ein_issuing_country; + params.stock_symbol=stock_symbol; + params.stock_exchange=stock_exchange; + params.alt_business_id_type=alt_business_id_type; + params.website=website; + params.address=address; + params.authorized_contact=authorized_contact; + let client = this[clientKey]; + return new Promise((resolve, reject) => { + client('POST', action, params) + .then(response => { + resolve(new ProfileResponse(response.body, idField)); + }) + .catch(error => { + reject(error); + }); + }); + + } + /** + * update a new Profile + * + * @param {string} profile_uuid + * @param {object } address + * @param {object } authorized_contact + * @param {string} entity_type + * @param {string} vertical + * @param {string} company_name + * @param {string} website + * @return profileResponse response output + */ + update(profile_uuid, params){ + return super.customexecuteAction(action+profile_uuid+'/', 'POST', params); + } +} \ No newline at end of file diff --git a/lib/rest/client-test.js b/lib/rest/client-test.js index 7dbed8e6..d8ce65a9 100644 --- a/lib/rest/client-test.js +++ b/lib/rest/client-test.js @@ -39,6 +39,9 @@ import { import{ CampaignInterface } from '../resources/campaign.js'; +import{ + ProfileInterface +}from '../resources/profile.js'; import { NumberInterface } from '../resources/numbers.js'; @@ -101,6 +104,7 @@ export class Client { this.messages = new MessageInterface(client); this.brand = new BrandInterface(client); this.campaign = new CampaignInterface(client); + this.profile = new ProfileInterface(client); this.lookup = new LookupInterface(client); this.powerpacks = new PowerpackInterface(client); this.numbers = new NumberInterface(client); diff --git a/lib/rest/client.js b/lib/rest/client.js index 81a34a77..8948cea4 100644 --- a/lib/rest/client.js +++ b/lib/rest/client.js @@ -12,6 +12,7 @@ import { LookupInterface } from "../resources/lookup"; import { PowerpackInterface } from "../resources/powerpacks"; import { BrandInterface } from "../resources/brand.js"; import { CampaignInterface } from "../resources/campaign.js"; +import { ProfileInterface } from "../resources/profile.js"; import { NumberInterface } from "../resources/numbers"; import { PricingInterface } from "../resources/pricings"; import { RecordingInterface } from "../resources/recordings"; @@ -94,6 +95,7 @@ export class Client { this.powerpacks = new PowerpackInterface(client); this.brand = new BrandInterface(client); this.campaign = new CampaignInterface(client); + this.profile = new ProfileInterface(client); this.numbers = new NumberInterface(client); this.pricings = new PricingInterface(client); this.recordings = new RecordingInterface(client); diff --git a/lib/rest/request-test.js b/lib/rest/request-test.js index cda9dc42..c1348de1 100644 --- a/lib/rest/request-test.js +++ b/lib/rest/request-test.js @@ -1231,6 +1231,125 @@ export function Request(config) { } }); } + else if(action == 'Profile/' && method == 'LIST'){ + resolve({ + response: {}, + body: { + api_id: "97a1c5ee-b019-11ec-88b1-0242ac110002", + count: 10, + limit: 2, + offset: 0, + profiles: [ + { + alt_business_id_type: "NONE", + authorized_contact: { + email: "johndoe.com", + name: "John Doe", + seniority: "admin", + title: "Doe" + }, + company_name: "ABC Inc.", + customer_type: "RESELLER", + ein_issuing_country: "US", + entity_type: "PUBLIC_PROFIT", + profile_alias: "vishnu1", + profile_type: "SECONDARY", + profile_uuid: "1c41faed-a38e-42a3-a966-fe7df34b51b9", + stock_symbol: "ABC", + vertical: "ENERGY" + }, + { + alt_business_id_type: "NONE", + authorized_contact: { + email: "johndoe.com", + name: "John Doe", + seniority: "admin", + title: "Doe" + }, + company_name: "ABC Inc.", + customer_type: "RESELLER", + ein_issuing_country: "US", + entity_type: "SOLE_PROPRIETOR", + profile_alias: "vishnu1", + profile_type: "SECONDARY", + profile_uuid: "1d77a5fe-bca4-4a6d-a7c4-58b70e8cd7a2", + stock_symbol: "ABC", + vertical: "ENERGY" + } + ] + } + }); + } + else if(action == 'Profile/06ecae31-4bf8-40b9-ac62-e902418e9935/' && method == 'GET'){ + resolve({ + response: {}, + body: { + api_id: "63287a98-b018-11ec-bc21-0242ac110002", + profile: { + alt_business_id_type: "NONE", + authorized_contact: { + name: " " + }, + company_name: "ABC Inc.", + customer_type: "RESELLER", + ein: "111111111", + ein_issuing_country: "US", + entity_type: "PUBLIC_PROFIT", + profile_alias: "vishnu1", + profile_type: "SECONDARY", + profile_uuid: "06ecae31-4bf8-40b9-ac62-e902418e9935", + stock_symbol: "ABC", + vertical: "ENERGY" + } + } + }); + } + else if(action == 'Profile/06ecae31-4bf8-40b9-ac62-e902418e9935/' && method == 'DELETE'){ + resolve({ + response: {}, + body: { + api_id: "eb1e71ae-b01e-11ec-88b1-0242ac110002" + } + }); + } + else if(action == 'Profile/06ecae31-4bf8-40b9-ac62-e902418e9935/' && method == 'POST'){ + resolve({ + response: {}, + body: { + api_id: "15783daa-b01e-11ec-88b1-0242ac110002", + profile: { + address: "123 New York NY 10001 IN", + alt_business_id_type: "NONE", + authorized_contact: { + email: "Doe", + name: "Joh11n Doe", + seniority: "admin", + title: "Doe" + }, + company_name: "ABC Inc.", + customer_type: "RESELLER", + ein_issuing_country: "US", + entity_type: "PRIVATE_PROFIT", + primary_profile: "303edff6-8525-43e5-87e6-48c571ddca25", + profile_alias: "vishnu1", + profile_type: "SECONDARY", + profile_uuid: "1c41faed-a38e-42a3-a966-fe7df34b51b9", + stock_symbol: "ABC", + vertical: "PROFESSIONAL", + website: "google.com" + } + } + }); + } + else if(action == 'Profile/' && method == 'POST'){ + resolve({ + response: {}, + body: { + api_id: "99ab47ae-b01c-11ec-bc21-0242ac110002", + profile_uuid: "43d0616e-d50a-445a-a84e-310a089f0618" + } + }); + } else if (action == '10dlc/Campaign/CMPT4EP/' && method == 'GET'){ resolve({ response: {}, diff --git a/test/profile.js b/test/profile.js new file mode 100644 index 00000000..7fe00de4 --- /dev/null +++ b/test/profile.js @@ -0,0 +1,42 @@ +import { + Client + } from '../lib/rest/client-test'; + import { + PlivoGenericResponse + } from '../lib/base.js'; + import assert from 'assert'; + import sinon from 'sinon'; + + let client = new Client('sampleid', 'sammpletoken', 'sampleproxy'); + + describe('profile', function () { + it('should get profile', function () { + return client.profile.get("06ecae31-4bf8-40b9-ac62-e902418e9935") + .then(function (response) { + assert.equal(response.profile.profileUuid, "06ecae31-4bf8-40b9-ac62-e902418e9935") + }) + }); + + it('list profile', function () { + return client.profile.list() + .then(function (response) { + assert.equal(response.profiles.length, 2) + }) + }); + + it('delete profile', function () { + return client.profile.delete("06ecae31-4bf8-40b9-ac62-e902418e9935") + .then(function (response) { + assert.equal(response.api_id, "eb1e71ae-b01e-11ec-88b1-0242ac110002") + }) + }); + + it('create profile', function () { + var authorized_contact = {"first_name":"Hello", "last_name":"Test", "email":"vishnu@plivo.com", "title":"bro", "seniority":"admin"} + var address = {"street":"123", "city":"Band", "state":"NY", "postal_code":"10001", "country":"US"} + return client.profile.create("vishnu104", "SECONDARY", "RESELLER","PRIVATE_PROFIT","ABC Inc", "111111111", "PROFESSIONAL", "US", "ABC","NASDAQ","NONE", "google.com", address,authorized_contact) + .then(function (profile) { + assert.equal(profile.profile_uuid, '43d0616e-d50a-445a-a84e-310a089f0618') + }) + }); + }); \ No newline at end of file From 97810bb8a1a266891137ecf5c24e551999fd4511 Mon Sep 17 00:00:00 2001 From: narayana Date: Thu, 31 Mar 2022 11:58:57 +0530 Subject: [PATCH 2/7] UT fix --- lib/resources/profile.js | 4 ++-- test/profile.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/resources/profile.js b/lib/resources/profile.js index f4644d40..46f318fd 100644 --- a/lib/resources/profile.js +++ b/lib/resources/profile.js @@ -80,7 +80,7 @@ export class ProfileResponse { * @promise {object[]} returns list of profile Object * @fail {Error} returns Error */ - list(params) { + list(params) { return super.customexecuteAction(action,'GET', params); } @@ -90,7 +90,7 @@ export class ProfileResponse { * @param {string} profileUUID - id of profileUUID * @fail {Error} return Error */ - deelet(profileUUID) { + delete(profileUUID) { let params = {}; return super.customexecuteAction(action+profileUUID+'/', 'DELETE', params); } diff --git a/test/profile.js b/test/profile.js index 7fe00de4..706c8f08 100644 --- a/test/profile.js +++ b/test/profile.js @@ -18,7 +18,7 @@ import { }); it('list profile', function () { - return client.profile.list() + return client.profile.list({}) .then(function (response) { assert.equal(response.profiles.length, 2) }) @@ -36,7 +36,7 @@ import { var address = {"street":"123", "city":"Band", "state":"NY", "postal_code":"10001", "country":"US"} return client.profile.create("vishnu104", "SECONDARY", "RESELLER","PRIVATE_PROFIT","ABC Inc", "111111111", "PROFESSIONAL", "US", "ABC","NASDAQ","NONE", "google.com", address,authorized_contact) .then(function (profile) { - assert.equal(profile.profile_uuid, '43d0616e-d50a-445a-a84e-310a089f0618') + assert.equal(profile.profileUuid, '43d0616e-d50a-445a-a84e-310a089f0618') }) }); }); \ No newline at end of file From e8f8a23832d3560254e99ac3f84529630daf4218 Mon Sep 17 00:00:00 2001 From: narayana Date: Thu, 31 Mar 2022 12:09:36 +0530 Subject: [PATCH 3/7] UT fix --- lib/rest/request-test.js | 2 +- test/profile.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/rest/request-test.js b/lib/rest/request-test.js index c1348de1..ab4c9fec 100644 --- a/lib/rest/request-test.js +++ b/lib/rest/request-test.js @@ -1231,7 +1231,7 @@ export function Request(config) { } }); } - else if(action == 'Profile/' && method == 'LIST'){ + else if(action == 'Profile/' && method == 'GET'){ resolve({ response: {}, body: { diff --git a/test/profile.js b/test/profile.js index 706c8f08..fead5b03 100644 --- a/test/profile.js +++ b/test/profile.js @@ -27,7 +27,7 @@ import { it('delete profile', function () { return client.profile.delete("06ecae31-4bf8-40b9-ac62-e902418e9935") .then(function (response) { - assert.equal(response.api_id, "eb1e71ae-b01e-11ec-88b1-0242ac110002") + assert.equal(response.apiId, "eb1e71ae-b01e-11ec-88b1-0242ac110002") }) }); From d092a97e75b913561562e3bfd40e09aed4568d6d Mon Sep 17 00:00:00 2001 From: narayana Date: Thu, 31 Mar 2022 12:13:10 +0530 Subject: [PATCH 4/7] version upgrade --- CHANGELOG.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dec6dc01..79309616 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ # Change Log +## [v4.30.0](https://github.com/plivo/plivo-node/tree/v4.30.0) (2022-03-31) +**Features - Profile Api** +- Profile api added for 10dlc support ## [v4.29.1](https://github.com/plivo/plivo-node/tree/v4.29.1) (2022-03-25) **Bug Fix - DialElement** diff --git a/package.json b/package.json index 5614564f..b12d46ce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "plivo", - "version": "4.29.1", + "version": "4.30.0", "description": "A Node.js SDK to make voice calls and send SMS using Plivo and to generate Plivo XML", "homepage": "https://github.com/plivo/plivo-node", "files": [ From b47ddce6ad8f6922d5b39eea0203a3185358b9ad Mon Sep 17 00:00:00 2001 From: narayana Date: Mon, 11 Apr 2022 18:26:32 +0530 Subject: [PATCH 5/7] profile changes --- lib/resources/profile.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/resources/profile.js b/lib/resources/profile.js index 46f318fd..5d59ce48 100644 --- a/lib/resources/profile.js +++ b/lib/resources/profile.js @@ -99,7 +99,7 @@ export class ProfileResponse { * Create a new Profile * * @param {string} profile_alias - * @param {string} profile_type + * @param {string} plivo_subaccount * @param {string} customer_type * @param {string} entity_type * @param {string} company_name @@ -114,10 +114,10 @@ export class ProfileResponse { * @param {object} authorized_contact * @return profileResponse response output */ - create(profile_alias,profile_type,customer_type,entity_type, company_name,ein,vertical,ein_issuing_country,stock_symbol,stock_exchange, alt_business_id_type, website, address, authorized_contact){ + create(profile_alias,plivo_subaccount,customer_type,entity_type, company_name,ein,vertical,ein_issuing_country,stock_symbol,stock_exchange, alt_business_id_type, website, address, authorized_contact){ let params = {} params.profile_alias=profile_alias; - params.profile_type=profile_type; + params.plivo_subaccount=plivo_subaccount; params.customer_type=customer_type; params.entity_type=entity_type; params.company_name=company_name; From 66b435227c5a5df16846ff67012049cf1af749b7 Mon Sep 17 00:00:00 2001 From: narayana Date: Wed, 13 Apr 2022 16:25:41 +0530 Subject: [PATCH 6/7] profile message added --- lib/resources/profile.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/resources/profile.js b/lib/resources/profile.js index 5d59ce48..cf48d8c3 100644 --- a/lib/resources/profile.js +++ b/lib/resources/profile.js @@ -42,6 +42,7 @@ export class ProfileResponse { params = params || {}; this.apiId = params.apiId; this.profileUuid = params.profileUuid; + this.message = params.message; } } From f03716e9bb95648a1d4a6111dddd144548c84de9 Mon Sep 17 00:00:00 2001 From: Mohammed Huzaif Date: Thu, 14 Apr 2022 19:24:11 +0530 Subject: [PATCH 7/7] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79309616..e13ee893 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Change Log -## [v4.30.0](https://github.com/plivo/plivo-node/tree/v4.30.0) (2022-03-31) + +## [v4.30.0](https://github.com/plivo/plivo-node/tree/v4.30.0) (2022-04-14) **Features - Profile Api** - Profile api added for 10dlc support