You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
4.7 KiB
116 lines
4.7 KiB
/**
|
|
@module resources/Accounts
|
|
The Twilio "Accounts" Resource.
|
|
*/
|
|
var _ = require('underscore'),
|
|
generate = require('./generate'),
|
|
ListInstanceResource = require('./ListInstanceResource');
|
|
|
|
module.exports = function (client) {
|
|
|
|
//Define subresources on the accounts resource, with the given account SID
|
|
function mixinResources(obj, sid) {
|
|
//All other REST resources are based on account - some can simply be generated, others need additonal URL params
|
|
//TODO: This can probably be smarter. Should eventually refactor generator to do subresources too. Shouldn't need to be custom
|
|
//Probably should generate the whole f***ing thing from an object literal describing the resource structure. But this does work.
|
|
var subresources = {
|
|
availablePhoneNumbers:require('./AvailablePhoneNumbers')(client, sid),
|
|
outgoingCallerIds:ListInstanceResource(client, sid, 'OutgoingCallerIds',
|
|
['GET', 'POST', 'PUT', 'DELETE', { update:'PUT' }],
|
|
['GET', 'POST', { create:'POST' }]
|
|
),
|
|
incomingPhoneNumbers:require('./IncomingPhoneNumbers')(client, sid),
|
|
messages: require('./Messages')(client, sid),
|
|
sms:{
|
|
messages:ListInstanceResource(client, sid, 'SMS/Messages',
|
|
['GET'],
|
|
['GET', 'POST', {create:'POST'}]
|
|
),
|
|
shortCodes:ListInstanceResource(client, sid, 'SMS/ShortCodes',
|
|
['GET', 'POST', {update:'POST'}],
|
|
['GET']
|
|
)
|
|
},
|
|
applications:ListInstanceResource(client, sid, 'Applications',
|
|
['GET', 'POST', 'DELETE', {update:'POST'}],
|
|
['GET', 'POST', {create:'POST'}]
|
|
),
|
|
connectApps:ListInstanceResource(client, sid, 'ConnectApps',
|
|
['GET', 'POST', {update:'POST'}],
|
|
['GET']
|
|
),
|
|
authorizedConnectApps:ListInstanceResource(client, sid, 'AuthorizedConnectApps',
|
|
['GET'],
|
|
['GET']
|
|
),
|
|
calls:require('./Calls')(client, sid),
|
|
conferences:require('./Conferences')(client, sid),
|
|
queues:require('./Queues')(client, sid),
|
|
recordings:require('./Recordings')(client, sid),
|
|
tokens: ListInstanceResource(client, sid, 'Tokens',
|
|
[],
|
|
['POST', {create:'POST'}]
|
|
),
|
|
transcriptions:ListInstanceResource(client, sid, 'Transcriptions',
|
|
['GET', 'DELETE'],
|
|
['GET']
|
|
),
|
|
notifications:ListInstanceResource(client, sid, 'Notifications',
|
|
['GET', 'DELETE'],
|
|
['GET']
|
|
),
|
|
usage:{
|
|
records:require('./UsageRecords')(client, sid),
|
|
triggers:ListInstanceResource(client,sid,'Usage/Triggers',
|
|
['GET','POST','DELETE',{update:'POST'}],
|
|
['GET','POST',{create:'POST'}]
|
|
)
|
|
},
|
|
sip:{
|
|
domains:require('./sip/Domains')(client, sid),
|
|
ipAccessControlLists:require('./sip/IpAccessControlLists')(client,sid),
|
|
credentialLists:require('./sip/CredentialLists')(client,sid)
|
|
},
|
|
addresses:require('./Addresses')(client, sid),
|
|
keys:ListInstanceResource(client, sid, 'Keys',
|
|
['GET', 'POST', 'DELETE', {update: 'POST'}],
|
|
['GET', 'POST', {create: 'POST'}]
|
|
)
|
|
};
|
|
|
|
//Add resources to Accounts.* or Accounts(sid).*
|
|
_.extend(obj, subresources);
|
|
}
|
|
|
|
/**
|
|
The Twilio Accounts Resource
|
|
@constructor
|
|
@param {string} accountSid - The specific account for which to scope requests
|
|
*/
|
|
function Accounts(accountSid) {
|
|
//This is the resource for accounts aside from the default master account
|
|
var resourceApi = {};
|
|
|
|
//generate REST function calls for the appropriate resource
|
|
generate.restFunctions(resourceApi, client, ['GET', 'PUT', 'POST'], '/Accounts/' + accountSid);
|
|
resourceApi.update = resourceApi.post;
|
|
resourceApi.list = resourceApi.get;
|
|
|
|
//Mix in sub resources
|
|
mixinResources(resourceApi, accountSid);
|
|
|
|
//Return resource API, plus sub-resources
|
|
return resourceApi;
|
|
}
|
|
|
|
//Create REST functions with the default account
|
|
generate.restFunctions(Accounts, client, ['GET', 'POST'], '/Accounts');
|
|
Accounts.create = Accounts.post;
|
|
Accounts.list = Accounts.get;
|
|
|
|
//Define other sub-resources of Accounts for master account
|
|
mixinResources(Accounts, client.accountSid);
|
|
|
|
return Accounts;
|
|
};
|