Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 49 additions & 39 deletions lib/client.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import unirest from 'unirest';
import request from 'request';
import Bluebird from 'bluebird';
import User from './user';
import Event from './event';
Expand Down Expand Up @@ -54,7 +54,7 @@ export default class Client {
this.baseUrl = baseUrl;
return this;
}
promiseProxy(f, req) {
promiseProxy(f, args) {
if (this.promises || !f) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is f supposed to be?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a function, it's either a promise resolver, or a callback passed in at the call site.

const callbackHandler = this.callback;
return new Bluebird((resolve, reject) => {
Expand All @@ -65,69 +65,79 @@ export default class Client {
resolve(data);
}
};
req.end(r => callbackHandler(resolver, r));
this.request(args, (_, r) => {
callbackHandler(resolver, r);
});
});
} else {
req.end(r => this.callback(f, r));
this.request(args, (_, r) => this.callback(f, r));
}
}
ping(f) {
unirest.get(`${this.baseUrl}/admins`)
.auth(this.usernamePart, this.passwordPart)
.type('json')
.header('Accept', 'application/json')
.header('User-Agent', 'intercom-node-client/2.0.0')
.end(r => f(r.status));
this.request({
uri: '/admins'
}, (_, response) => f(response.statusCode));
}
put(endpoint, data, f) {
return this.promiseProxy(f,
unirest.put(`${this.baseUrl}${endpoint}`)
.auth(this.usernamePart, this.passwordPart)
.type('json')
.send(data)
.header('Accept', 'application/json')
.header('User-Agent', 'intercom-node-client/2.0.0')
{
method: 'put',
uri: endpoint,
body: data
}
);
}
post(endpoint, data, f) {
return this.promiseProxy(f,
unirest.post(`${this.baseUrl}${endpoint}`)
.auth(this.usernamePart, this.passwordPart)
.type('json')
.send(data)
.header('Accept', 'application/json')
.header('User-Agent', 'intercom-node-client/2.0.0')
{
method: 'post',
uri: endpoint,
body: data
}
);
}
get(endpoint, data, f) {
return this.promiseProxy(f,
unirest.get(`${this.baseUrl}${endpoint}`)
.auth(this.usernamePart, this.passwordPart)
.type('json')
.query(data)
.header('Accept', 'application/json')
.header('User-Agent', 'intercom-node-client/2.0.0')
{
method: 'get',
uri: endpoint,
qs: data
}
);
}
nextPage(paginationObject, f) {
return this.promiseProxy(f,
unirest.get(paginationObject.next)
.auth(this.usernamePart, this.passwordPart)
.type('json')
.header('Accept', 'application/json')
.header('User-Agent', 'intercom-node-client/2.0.0')
{
method: 'get',
uri: paginationObject.next,
baseUrl: null
}
);
}
delete(endpoint, data, f) {
return this.promiseProxy(f,
unirest.delete(`${this.baseUrl}${endpoint}`)
.auth(this.usernamePart, this.passwordPart)
.type('json')
.query(data)
.header('Accept', 'application/json')
.header('User-Agent', 'intercom-node-client/2.0.0')
{
method: 'delete',
uri: endpoint,
qs: data
}
);
}
request(args, callback) {
const defaultArgs = {
baseUrl: this.baseUrl,
json: true,
headers: {
Accept: 'application/json',
'User-Agent': 'intercom-node-client/2.0.0'
}
};

return request(
Object.assign({}, defaultArgs, args),
callback
).auth(this.usernamePart, this.passwordPart);
}
callback(f, data) {
if (!f) {
return;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
],
"dependencies": {
"bluebird": "^3.3.4",
"unirest": "^0.5.1"
"request": "^2.83.0"
},
"devDependencies": {
"babel-core": "^6.7.4",
Expand Down
6 changes: 3 additions & 3 deletions test/admin.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,23 @@ describe('admins', () => {
nock('https://api.intercom.io').get('/admins').reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.admins.list().then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should find current admin', done => {
nock('https://api.intercom.io').get('/me').reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.admins.me().then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should find admins by id', done => {
nock('https://api.intercom.io').get('/admins/baz').reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.admins.find('baz').then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
Expand Down
2 changes: 1 addition & 1 deletion test/base-url.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ describe('base-url', () => {
.useBaseUrl('http://local.test-server.com');

client.admins.list().then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
Expand Down
4 changes: 2 additions & 2 deletions test/bulk.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ describe('bulk', () => {
{ create: { email: 'wash@serenity.io' }},
{ create: { email: 'mal@serenity.io'}}
]).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
Expand Down Expand Up @@ -55,7 +55,7 @@ describe('bulk', () => {
{ create: { foo: 'bar' }},
{ create: { bar: 'baz'}}
]).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
Expand Down
4 changes: 2 additions & 2 deletions test/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ describe('clients', () => {
const client = new Client('foo', 'bar').usePromises();
assert.equal(true, client.promises);
client.users.list().then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should use promises when callbacks are absent', done => {
nock('https://api.intercom.io').get('/users').reply(200, {});
const client = new Client('foo', 'bar');
client.users.list().then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
Expand Down
18 changes: 9 additions & 9 deletions test/company.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,71 +7,71 @@ describe('companies', () => {
nock('https://api.intercom.io').post('/companies', { name: 'baz' }).reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.companies.create({ name: 'baz' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should list', done => {
nock('https://api.intercom.io').get('/companies').reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.companies.list().then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should list by params', done => {
nock('https://api.intercom.io').get('/companies').query({ tag_id: '1234' }).reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.companies.listBy({ tag_id: '1234' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should find companies by id', done => {
nock('https://api.intercom.io').get('/companies/baz').reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.companies.find({ id: 'baz' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should find companies by company_id', done => {
nock('https://api.intercom.io').get('/companies').query({ company_id: 'baz' }).reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.companies.find({ company_id: 'baz' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should find companies by name', done => {
nock('https://api.intercom.io').get('/companies').query({ name: 'baz' }).reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.companies.find({ name: 'baz' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should list company users by id', done => {
nock('https://api.intercom.io').get('/companies/baz/users').reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.companies.listUsers({ id: 'baz' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should list company users by company_id', done => {
nock('https://api.intercom.io').get('/companies').query({ company_id: 'baz', type: 'user' }).reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.companies.listUsers({ company_id: 'baz' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should list company users by company name', done => {
nock('https://api.intercom.io').get('/companies').query({ name: 'baz', type: 'user' }).reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.companies.listUsers({ name: 'baz' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
Expand Down
18 changes: 9 additions & 9 deletions test/contact.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,63 +12,63 @@ describe('contacts', () => {
nock('https://api.intercom.io').post('/contacts').reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.leads.create().then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should be created with parameters', done => {
nock('https://api.intercom.io').post('/contacts', { foo: 'bar' }).reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.leads.create({ foo: 'bar' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should be updated', done => {
nock('https://api.intercom.io').post('/contacts', { id: 'baz', email: 'foo@intercom.io' }).reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.leads.update({ id: 'baz', email: 'foo@intercom.io' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should list', done => {
nock('https://api.intercom.io').get('/contacts').reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.leads.list().then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should list by params', done => {
nock('https://api.intercom.io').get('/contacts').query({ email: 'jayne@serenity.io' }).reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.leads.listBy({ email: 'jayne@serenity.io' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should find by id', done => {
nock('https://api.intercom.io').get('/contacts/baz').reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.leads.find({ id: 'baz' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('should find by user_id', done => {
nock('https://api.intercom.io').get('/contacts?user_id=baz').reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.leads.find({ user_id: 'baz' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
it('delete by id', done => {
nock('https://api.intercom.io').delete('/contacts/baz').reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.leads.delete({ id: 'baz' }).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
Expand All @@ -80,7 +80,7 @@ describe('contacts', () => {
nock('https://api.intercom.io').post('/contacts/convert', conversionObject).reply(200, {});
const client = new Client('foo', 'bar').usePromises();
client.leads.convert(conversionObject).then(r => {
assert.equal(200, r.status);
assert.equal(200, r.statusCode);
done();
});
});
Expand Down
Loading