// Type definitions for twilio 2.11 // Project: https://github.com/twilio/twilio-node // Definitions by: nickiannone // Ashley Brener // Anthony Messerschmidt // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 /// import Express = require("express"); import Http = require("http"); import Q = require("q"); declare interface twilio { (sid?: string, tkn?: string, options?: twilio.ClientOptions): twilio.RestClient } declare function twilio(sid?: string, tkn?: string, options?: twilio.ClientOptions): twilio.RestClient; declare namespace twilio { // Composite Classes: //============================== // RestClient // PricingClient // MonitorClient // TaskRouterClient // IpMessagingClient // LookupsClient // TrunkingClient // Classes: //============================== // AccessToken // Capability // TaskRouterCapability // TaskRouterWorkerCapability // TaskRouterWorkspaceCapability // TaskRouterTaskQueueCapability // TwimlResponse (TODO main export is generator function) // webhook // Methods: //=============================== // validateRequest // validateExpressRequest /// Random stuff export interface GrantPayload {} export interface Grant { toPayload(): GrantPayload; } export interface RequestCallback { (err: any, data: any): void; } export interface RestMethod { (callback: RequestCallback): Q.Promise; (args: any, callback?: RequestCallback): Q.Promise; } /// Resource stock interfaces export interface BaseMappedResource { (resourceSid: string): T; } export interface Resource { get: RestMethod; } export interface DeletableResource extends Resource { delete: RestMethod; } export interface ListableResource extends Resource { list: RestMethod; } export interface MappedResource extends Resource, BaseMappedResource {} export interface PostableResource extends Resource { post: RestMethod; } export interface InstanceResource extends PostableResource, DeletableResource { update: RestMethod; } export interface CreatableMappedResource extends MappedResource, PostableResource { create: RestMethod; } export interface ListMappedResource extends CreatableMappedResource, ListableResource {} /// AccessToken.js export interface IpMessagingGrantOptions { serviceSid: string; endpointId: string; deploymentRoleSid: string; pushCredentialSid: string; } export interface IpMessagingGrantPayload extends GrantPayload { service_sid: string; endpoint_id: string; deployment_role_sid: string; push_credential_sid: string; } export class IpMessagingGrant implements Grant { serviceSid: string; endpointId: string; deploymentRoleSid: string; pushCredentialSid: string; key: string; constructor(options?: IpMessagingGrantOptions); toPayload(): IpMessagingGrantPayload; } export interface ConversationsGrantOptions { configurationProfileSid: string; } export interface ConversationsGrantPayload extends GrantPayload { configuration_profile_sid: string; } export class ConversationsGrant implements Grant { configurationProfileSid: string; constructor(options?: ConversationsGrantOptions); toPayload(): ConversationsGrantPayload; } export interface AccessTokenOptions { ttl: number; identity: string; nbf: number; } export class AccessToken { accountSid: string; keySid: string; secret: string; ttl: number; identity: string; nbf: number; grants: Array; static IpMessagingGrant: IpMessagingGrant; static ConversationGrant: ConversationsGrant; static DEFAULT_ALGORITHM: string; static ALGORITHMS: Array; constructor(accountSid: string, keySid: string, secret: string, opts?: AccessTokenOptions); addGrant(grant: Grant): void; toJwt(algorithm: string): any; // TODO Find correct typedef } /// Capability.js export class Capability { accountSid: string; authToken: string; capabilities: Array; clientName: string; outgoingScopeParams: any; scopeParams: any; constructor(sid?: string, tkn?: string); allowClientIncoming(clientName: string): Capability; allowClientOutgoing(appSid: string, params?: any): Capability; allowEventStream(filters?: any): Capability; generate(timeout?: number): string; } /// Client.js export interface ClientOptions { host?: string; apiVersion?: string; timeout?: number; } export interface ClientRequestOptions { url: string; method?: string; form?: any; } export class Client { accountSid: string; authToken: string; host: string; apiVersion: string; timeout: number; constructor(sid?: string, tkn?: string, host?: string, api_version?: string, timeout?: number); getBaseUrl(): string; request(options: ClientRequestOptions, callback?: RequestCallback): Q.Promise; } /// IpMessagingClient.js export class IpMessagingClient extends Client { services: ServiceResource; credentials: CredentialResource; constructor(sid?: string, tkn?: string, options?: ClientOptions); } /// LookupsClient.js export class LookupsClient extends Client { phoneNumbers: PhoneNumberResource; constructor(sid?: string, tkn?: string, options?: ClientOptions); } /// MonitorClient.js export class MonitorClient extends Client { events: EventResource; alerts: AlertResource; constructor(sid?: string, tkn?: string, options?: ClientOptions); } /// PricingClient.js export class PricingClient extends Client { voice: PricingVoiceResource; phoneNumbers: PricingPhoneNumberResource; messaging: PricingMessagingResource; constructor(sid?: string, tkn?: string, options?: ClientOptions); } /// RestClient.js export class RestClient extends Client { constructor(sid?: string, tkn?: string, options?: ClientOptions); accounts: AccountResource; // Imported from AccountResource availablePhoneNumbers: AvailablePhoneNumberResource; outgoingCallerIds: OutgoingCallerIdResource; incomingPhoneNumbers: IncomingPhoneNumberResource; messages: MessageResource; sms: SMSIntermediary; applications: ApplicationResource; connectApps: ConnectAppResource; authorizedConnectApps: AuthorizedConnectAppResource; calls: CallResource; conferences: ConferenceResource; queues: QueueResource; recordings: RecordingResource; tokens: TokenResource; transcriptions: TranscriptionResource; notifications: NotificationResource; usage: UsageIntermediary; sip: SIPIntermediary; addresses: AddressResource; keys: KeyResource; // Mixed-in Methods put: RestMethod; post: RestMethod; get: RestMethod; update: RestMethod; list: RestMethod; // Messaging shorthand sendSms: RestMethod; sendMms: RestMethod; sendMessage: RestMethod; listSms: RestMethod; listMessages: RestMethod; getSms(messageSid: string, callback?: RequestCallback): Q.Promise; getMessage(messageSid: string, callback?: RequestCallback): Q.Promise; // Calls shorthand makeCall: RestMethod; listCalls: RestMethod; getCall(callSid: string, callback?: RequestCallback): Q.Promise; // Overrides Client.request(...) request(options: ClientRequestOptions, callback?: RequestCallback): Q.Promise; } /// TaskRouterCapability.js export interface Policy { url: string; method: string; query_filter?: any; // Map, where FilterRequirement ::= Map post_filter?: any; // Map, where FilterRequirement ::= Map allow: boolean; } export class TaskRouterCapability { accountSid: string; authToken: string; policies: Array; workspaceSid: string; channelId: string; private _baseUrl: string; private _resourceUrl: string; constructor(accountSid: string, authToken: string, workspaceSid: string, channelId: string); protected _setupResource(): void; private _validateJWT(): void; private _generate(ttl: number, extraAttributes: any): string; allowFetchSubresources(): void; allowUpdates(): void; allowUpdatesSubresources(): void; allowDelete(): void; allowDeleteSubresources(): void; allowWorkerActivityUpdates(): void; allowWorkerFetchAttributes(): void; allowTaskReservationUpdates(): void; addPolicy(url: string, method: string, allowed?: boolean, queryFilter?: any, postFilter?: any): void; allow(url: string, method: string, queryFilter?: any, postFilter?: any): void; deny(url: string, method: string, queryFilter?: any, postFilter?: any): void; generate(ttl: number): string; } /// TaskRouterClient.js export class TaskRouterClient extends Client { workspaces: WorkspaceResource; workspace: WorkspaceResource; constructor(sid?: string, tkn?: string, workspaceSid?: string, options?: ClientOptions); } /// TaskRouterTaskQueueCapability.js export class TaskRouterTaskQueueCapability extends TaskRouterCapability { constructor(accountSid: string, authToken: string, workspaceSid: string, taskQueueSid: string); protected _setupResource(): void; } /// TaskRouterWorkerCapability.js export class TaskRouterWorkerCapability extends TaskRouterCapability { reservationsUrl: string; activityUrl: string; workerReservationsUrl: string; constructor(accountSid: string, authToken: string, workspaceSid: string, workerSid: string); protected _setupResource(): void; allowActivityUpdates(): void; allowReservationUpdates(): void; } /// TaskRouterWorkspaceCapability.js export class TaskRouterWorkspaceCapability extends TaskRouterCapability { constructor(accountSid: string, authToken: string, workspaceSid: string); protected _setupResource(): void; } /// TrunkingClient.js export class TrunkingClient extends Client { trunks: TrunkResource; constructor(sid?: string, tkn?: string, options?: ClientOptions); } /// TwimlResponse.js // ???? - Someone else should look at this thing to make sure it's correct export interface NodeOptions { name: string; attributes?: any; text?: string; topLevel?: boolean; legalNodes: Array; } export interface TwimlMethod { (): Node; (arg1: TwimlCallback | string, arg2?: any): Node; (arg1: any, arg2?: TwimlCallback | string): Node; } export interface TwimlCallback { (node: Node): void; } export class Node implements NodeOptions { name: string; attributes: any; text: any; topLevel: boolean; legalNodes: Array; constructor(config?: NodeOptions); // TwiML Verbs/Nouns: gather: TwimlMethod; say: TwimlMethod; play: TwimlMethod; pause: TwimlMethod; dial: TwimlMethod; number: TwimlMethod; client: TwimlMethod; conference: TwimlMethod; queue: TwimlMethod; sip: TwimlMethod; message: TwimlMethod; media: TwimlMethod; body: TwimlMethod; enqueue: TwimlMethod; task: TwimlMethod; record: TwimlMethod; sms: TwimlMethod; hangup: TwimlMethod; redirect: TwimlMethod; reject: TwimlMethod; leave: TwimlMethod; toString(): string; } export class TwimlResponse extends Node {} /// webhook.js export interface WebhookOptions { validate?: boolean; includeHelpers?: boolean; host?: string; protocol?: string; } export interface WebhookExpressOptions { // The full URL (with query string) you used to configure the webhook with Twilio - overrides host/protocol options url?: string; // manually specify the host name used by Twilio in a number's webhook config host?: string; // manually specify the protocol used by Twilio in a number's webhook config protocol?: string; } // For interop with node middleware chains export interface MiddlewareFunction { (request: Http.IncomingMessage, response: Http.ServerResponse, next: Express.NextFunction): void; } export function webhook(authToken: string, options?: WebhookOptions): MiddlewareFunction; export function webhook(options?: WebhookOptions): MiddlewareFunction; export function validateRequest(authToken: string, twilioHeader: string, url: string, params?: any): boolean; export function validateExpressRequest(request: Express.Request, authToken: string, options?: WebhookExpressOptions): boolean; /// resources/Accounts.js export interface OutgoingCallerIdInstance extends InstanceResource { put: RestMethod; } export interface OutgoingCallerIdResource extends CreatableMappedResource {} export interface SMSMessageInstance extends Resource {} export interface SMSMessageResource extends CreatableMappedResource {} export interface SMSShortCodeInstance extends PostableResource { update: RestMethod; } export interface SMSShortCodeResource extends MappedResource {} export interface SMSIntermediary { messages: SMSMessageResource; shortCodes: SMSShortCodeResource; } export interface ApplicationInstance extends InstanceResource {} export interface ApplicationResource extends CreatableMappedResource {} export interface ConnectAppInstance extends PostableResource { update: RestMethod; } export interface ConnectAppResource extends MappedResource {} export interface AuthorizedConnectAppInstance extends Resource {} export interface AuthorizedConnectAppResource extends MappedResource {} export interface TokenInstance {} export interface TokenResource extends BaseMappedResource { post: RestMethod; create: RestMethod; } export interface TranscriptionInstance extends DeletableResource {} export interface TranscriptionResource extends MappedResource {} export interface NotificationInstance extends DeletableResource {} export interface NotificationResource extends MappedResource {} export interface UsageTriggerInstance extends InstanceResource {} export interface UsageTriggerResource extends CreatableMappedResource {} export interface UsageIntermediary { records: UsageRecordResource; triggers: UsageTriggerResource; } export interface SIPIntermediary { domains: DomainResource; ipAccessControlLists: IPAccessControlListResource; credentialLists: CredentialListResource; } export interface KeyInstance extends InstanceResource {} export interface KeyResource extends CreatableMappedResource {} export interface AccountInstance extends PostableResource { update: RestMethod; put: RestMethod; // Mixed-in resources availablePhoneNumbers: AvailablePhoneNumberResource; outgoingCallerIds: OutgoingCallerIdResource; incomingPhoneNumbers: IncomingPhoneNumberResource; messages: MessageResource; sms: SMSIntermediary; applications: ApplicationResource; connectApps: ConnectAppResource; authorizedConnectApps: AuthorizedConnectAppResource; calls: CallResource; conferences: ConferenceResource; queues: QueueResource; recordings: RecordingResource; tokens: TokenResource; transcriptions: TranscriptionResource; notifications: NotificationResource; usage: UsageIntermediary; sip: SIPIntermediary; addresses: AddressResource; keys: KeyResource; } export interface AccountResource extends AccountInstance, ListMappedResource {} /// resources/Addresses.js export interface DependentPhoneNumberResource extends ListableResource {} export interface AddressInstance extends PostableResource, DeletableResource { // Mixins dependentPhoneNumbers: DependentPhoneNumberResource; } export interface AddressResource extends ListMappedResource {} /// resources/AvailablePhoneNumbers.js export interface AvailablePhoneNumberResourceGroup extends ListableResource { search: RestMethod; } export interface AvailablePhoneNumberInstance { local: AvailablePhoneNumberResourceGroup; tollFree: AvailablePhoneNumberResourceGroup; mobile: AvailablePhoneNumberResourceGroup; } export interface AvailablePhoneNumberResource extends BaseMappedResource {} /// resources/Calls.js export interface CallRecordingResource extends ListableResource {} export interface CallNotificationResource extends ListableResource {} export interface CallFeedbackResource extends PostableResource, DeletableResource { create: RestMethod; } export interface CallInstance extends InstanceResource { recordings: CallRecordingResource; notifications: CallNotificationResource; feedback: CallFeedbackResource; } export interface CallFeedbackSummaryInstance extends DeletableResource {} export interface CallFeedbackSummaryResource extends BaseMappedResource { post: RestMethod; create: RestMethod; } export interface CallResource extends CreatableMappedResource, ListableResource { feedbackSummary: CallFeedbackSummaryResource; } /// resources/Conferences.js export interface ConferenceParticipantInstance extends InstanceResource { kick: RestMethod; } export interface ConferenceParticipantResource extends MappedResource, ListableResource {} export interface ConferenceInstance extends Resource { participants: ConferenceParticipantResource; } export interface ConferenceResource extends MappedResource, ListableResource {} /// resources/IncomingPhoneNumbers.js export interface IncomingPhoneNumberResourceGroup extends PostableResource { create: RestMethod; } export interface IncomingPhoneNumberInstance extends InstanceResource { put: RestMethod; } export interface IncomingPhoneNumberResource extends CreatableMappedResource { local: IncomingPhoneNumberResourceGroup; tollFree: IncomingPhoneNumberResourceGroup; mobile: IncomingPhoneNumberResourceGroup; } /// resources/Messages.js export interface MessageMediaInstance extends DeletableResource {} export interface MessageMediaResource extends MappedResource, ListableResource {} export interface MessageInstance extends PostableResource, DeletableResource { media: MessageMediaResource; } export interface MessageResource extends ListMappedResource {} /// resources/Queues.js export interface QueueMemberInstance extends PostableResource { update: RestMethod; } export interface QueueMemberResource extends MappedResource { front: QueueMemberInstance; } export interface QueueInstance extends InstanceResource { members: QueueMemberResource; } export interface QueueResource extends CreatableMappedResource {} /// resources/Recordings.js export interface RecordingTranscriptionResource extends ListableResource {} export interface RecordingInstance extends ListableResource, DeletableResource { transcriptions: RecordingTranscriptionResource; } export interface RecordingResource extends MappedResource, ListableResource {} /// resources/UsageRecords.js export interface UsageRecordInstance extends Resource {} export interface UsageRecordRange extends ListableResource {} export interface UsageRecordResource extends MappedResource { daily: UsageRecordRange; monthly: UsageRecordRange; yearly: UsageRecordRange; allTime: UsageRecordRange; today: UsageRecordRange; yesterday: UsageRecordRange; thisMonth: UsageRecordRange; lastMonth: UsageRecordRange; } /// resources/ip_messaging/Credentials.js export interface CredentialInstance extends InstanceResource {} export interface CredentialResource extends ListMappedResource {} /// resources/ip_messaging/Services.js export interface ServiceUserInstance extends InstanceResource {} export interface ServiceUserResource extends ListMappedResource {} export interface ServiceRoleInstance extends Resource {} export interface ServiceRoleResource extends MappedResource, ListableResource {} export interface ServiceChannelMessageInstance extends InstanceResource {} export interface ServiceChannelMessageResource extends ListMappedResource {} export interface ServiceChannelMemberInstance extends InstanceResource {} export interface ServiceChannelMemberResource extends ListMappedResource {} export interface ServiceChannelInstance extends InstanceResource { messages: ServiceChannelMessageResource; members: ServiceChannelMemberResource; } export interface ServiceChannelResource extends ListMappedResource {} export interface ServiceInstance extends InstanceResource { users: ServiceUserResource; roles: ServiceRoleResource; channels: ServiceChannelResource; } export interface ServiceResource extends ListMappedResource {} /// resources/lookups/PhoneNumbers.js export interface PhoneNumberInstance extends Resource {} export interface PhoneNumberResource extends BaseMappedResource {} /// resources/monitor/Alerts.js export interface AlertInstance extends Resource {} export interface AlertResource extends MappedResource, ListableResource {} /// resources/monitor/Events.js export interface EventInstance extends Resource {} export interface EventResource extends MappedResource, ListableResource {} /// resources/pricing/Messaging.js export interface CountryInstance extends Resource {} export interface CountryResource extends MappedResource, ListableResource {} export interface PricingMessagingResource { countries: CountryResource; } /// resources/pricing/PhoneNumbers.js export interface PricingPhoneNumberResource { countries: CountryResource; } /// resources/pricing/Voice.js export interface NumberInstance extends Resource {} export interface NumberResource extends MappedResource, ListableResource {} export interface PricingVoiceResource { countries: CountryResource; numbers: NumberResource; } /// resources/sip/CredentialLists.js export interface CredentialListInstance extends InstanceResource { credentials: CredentialResource; } export interface CredentialListResource extends ListMappedResource {} /// resources/sip/Domains.js export interface IPAccessControlListMappingInstance extends DeletableResource {} export interface IPAccessControlListMappingResource extends ListMappedResource {} export interface CredentialListMappingInstance extends DeletableResource {} export interface CredentialListMappingResource extends ListMappedResource {} export interface DomainInstance extends InstanceResource { ipAccessControlListMappings: IPAccessControlListMappingResource; credentialListMappings: CredentialListMappingResource; } export interface DomainResource extends ListMappedResource {} /// resources/sip/IpAccessControlLists.js export interface IPAddressInstance extends InstanceResource {} export interface IPAddressResource extends ListMappedResource {} export interface IPAccessControlListInstance extends InstanceResource { ipAddresses: IPAddressResource; } export interface IPAccessControlListResource extends ListMappedResource {} /// resources/task_router/WorkflowBuilder.js export interface WorkflowRuleTargetOptions { queue: string; expression?: string; priority?: number; timeout?: number; } export class WorkflowRuleTarget { queue: string; expression: string; priority: number; timeout: number; constructor(options?: WorkflowRuleTargetOptions); } export interface WorkflowRuleOptions { expression: string; targets: Array; // Don't ask me why, but all of these are supported options. friendly_name?: string; friendlyName?: string; filter_friendly_name?: string; } export class WorkflowRule { friendly_name: string; expression: string; targets: Array; friendlyName: string; // Defined property mapped to friendly_name. constructor(options?: WorkflowRuleOptions); } export interface TaskRoutingConfigurationOptions { filters: Array; default_filter?: WorkflowRuleOptions; defaultFilter?: WorkflowRuleOptions; } export class TaskRoutingConfiguration { filters: Array; default_filter: WorkflowRuleOptions; defaultFilter: WorkflowRuleOptions; // Defined property mapped to default_filter. constructor(options?: TaskRoutingConfigurationOptions); } export interface WorkflowConfigurationOptions { task_routing?: TaskRoutingConfigurationOptions; taskRouting?: TaskRoutingConfigurationOptions; } export class WorkflowConfiguration { task_routing: TaskRoutingConfiguration; taskRouting: TaskRoutingConfiguration; // Defined property mapped to task_routing. constructor(options?: WorkflowConfigurationOptions); static fromJSON(json: string): WorkflowConfiguration; toJSON(): string; } /// resources/task_router/Workspaces.js export interface WorkspaceActivityInstance extends InstanceResource {} export interface WorkspaceActivityResource extends ListMappedResource {} export interface WorkspaceEventInstance extends Resource {} export interface WorkspaceEventResource extends MappedResource, ListableResource {} export interface WorkspaceTaskReservationInstance extends PostableResource { update: RestMethod; } export interface WorkspaceTaskReservationResource extends MappedResource, ListableResource {} export interface WorkspaceTaskInstance extends InstanceResource { reservations: WorkspaceTaskReservationResource; } export interface WorkspaceTaskResource extends ListMappedResource {} export interface WorkspaceInstanceStatisticResource extends Resource {} export interface WorkspaceStatisticResource extends ListableResource {} export interface WorkspaceTaskQueueInstance extends InstanceResource { statistics: WorkspaceInstanceStatisticResource; } export interface WorkspaceTaskQueueResource extends ListMappedResource { statistics: WorkspaceStatisticResource; } export interface WorkspaceWorkerReservationInstance extends PostableResource { update: RestMethod; } export interface WorkspaceWorkerReservationResource extends MappedResource, ListableResource {} export interface WorkspaceWorkerInstance extends InstanceResource { statistics: WorkspaceInstanceStatisticResource; reservations: WorkspaceWorkerReservationResource; } export interface WorkspaceWorkerResource extends ListMappedResource { statistics: WorkspaceStatisticResource; } export interface WorkspaceWorkflowInstance extends InstanceResource { statistics: WorkspaceInstanceStatisticResource; } export interface WorkspaceWorkflowResource extends ListMappedResource { statistics: WorkspaceStatisticResource; } export interface WorkspaceInstance extends InstanceResource { activities: WorkspaceActivityResource; events: WorkspaceEventResource; tasks: WorkspaceTaskResource; taskQueues: WorkspaceTaskQueueResource; workers: WorkspaceWorkerResource; workflows: WorkspaceWorkflowResource; statistics: WorkspaceInstanceStatisticResource; } export interface WorkspaceResource extends CreatableMappedResource {} /// resources/trunking/Trunks.js export interface OriginationURLInstance extends InstanceResource {} export interface OriginationURLResource extends ListMappedResource {} export interface TrunkInstance extends InstanceResource { ipAccessControlLists: IPAccessControlListResource; credentialLists: CredentialListResource; phoneNumbers: PhoneNumberResource; originationUrls: OriginationURLResource; } export interface TrunkResource extends ListMappedResource {} } export = twilio;