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

3 years ago
/**
@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;
};