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
			| 
								 
											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;
							 | 
						||
| 
								 | 
							
								};
							 |