Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Add base types & foundation for TypeScript definition files #330

Closed
wants to merge 10 commits into from
Prev Previous commit
Next Next commit
Add JWT generation typings
dkundel committed Mar 8, 2018
commit f8243387d82a799b5786918f70020da583eeeda2
161 changes: 161 additions & 0 deletions lib/jwt/AccessToken.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
declare class AccessToken {
static DEFAULT_ALGORITHM: 'HS256';
static ALGORITHMS: ['HS256', 'HS384', 'HS512'];

/**
* Creates new AccessToken instance
*
* @param accountSid - The account's unique ID to which access is scoped
* @param keySid - The signing key's unique ID
* @param secret - The secret to sign the token with
* @param options - Options
*/
constructor(
accountSid: string,
keySid: string,
secret: string,
options?: AccessToken.AccessTokenOptions
);

/**
* Adds a grant for a respective Twilio service to the access token
* @param grant The grant to add
*/
addGrant<T extends AccessToken.Grant<any, any, any>>(grant: T): void;

/**
* Turns the access token instance into a JWT that can be used in the front-end
* @param algorithm The algorithm to sign the JWT
*/
toJwt(algorithm: 'HS256' | 'HS384' | 'HS512'): string;
}

declare namespace AccessToken {
export abstract class Grant<TOptions, TPayload, TKey> {
constructor(opts?: TOptions);
key: TKey;
toPayload(): TPayload;
}

export interface TaskRouterGrantOptions {
workspaceSid?: string;
workerSid?: string;
role?: string;
}

export interface TaskRouterGrantPayload {
workspace_sid?: string;
worker_id?: string;
role?: string;
}

export class TaskRouterGrant extends Grant<
TaskRouterGrantOptions,
TaskRouterGrantPayload,
'task_router'
> {}

export interface ChatGrantOptions {
serviceSid?: string;
endpointId?: string;
deploymentRoleSid?: string;
pushCredentialSid?: string;
}

export interface ChatGrantPayload {
service_sid?: string;
endpoint_id?: string;
deployment_role_sid?: string;
push_credential_sid?: string;
}

export class ChatGrant extends Grant<
ChatGrantOptions,
ChatGrantPayload,
'chat'
> {}

export class IpMessagingGrant extends Grant<
ChatGrantOptions,
ChatGrantPayload,
'ip_messaging'
> {}

export interface ConversationsGrantOptions {
configurationProfileSid?: string;
}

export interface ConversationsGrantPayload {
configuration_profile_sid?: string;
}

export class ConversationsGrant extends Grant<
ConversationsGrantOptions,
ConversationsGrantPayload,
'rtc'
> {}

export interface VideoGrantOptions {
room?: string;
}

export interface VideoGrantPayload {
room?: string;
}

export class VideoGrant extends Grant<
VideoGrantOptions,
VideoGrantPayload,
'video'
> {}

export interface SyncGrantOptions {
serviceSid?: string;
endpointId?: string;
}

export interface SyncGrantPayload {
service_sid?: string;
endpoint_id?: string;
}

export class SyncGrant extends Grant<
SyncGrantOptions,
SyncGrantPayload,
'data_sync'
> {}

export interface VoiceGrantOptions {
outgoingApplicationSid?: string;
outgoingApplicationParams?: object;
pushCredentialSid?: string;
endpointId?: string;
}

export interface VoiceGrantPayload {
outgoing?: { application_sid: string; params?: object };
push_credential_sid?: string;
endpoint_id?: string;
}

export class VoiceGrant extends Grant<
VoiceGrantOptions,
VoiceGrantPayload,
'voice'
> {}

export interface AccessTokenOptions {
/**
* Time to live in seconds
*/
ttl: number /**
* The identity of the first person
*/;
identity: string /**
* Time from epoch in seconds for not before value
*/;
nbf: number;
}
}

export = AccessToken;
53 changes: 53 additions & 0 deletions lib/jwt/ClientCapability.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
declare class ClientCapability {
constructor(options: ClientCapability.ClientCapabilityOptions);

accountSid: string;
authToken: string;
ttl: number;
scopes: ClientCapability.Scope[];
addScope(scope: ClientCapability.Scope): void;
toJwt(): string;
}

declare namespace ClientCapability {
export interface Scope {
scope: string;
payload(): string;
}

export interface OutgoingClientScopeOptions {
applicationSid: string;
clientName?: string;
params?: object;
}

export class EventStreamScope implements Scope {
constructor(filters: object);
filters: object;
scope: 'scope:stream:subscribe';
payload(): string;
}

export class IncomingClientScope implements Scope {
constructor(clientName: string);
clientName: string
scope: 'scope:client:incoming';
payload(): string;
}

export class OutgoingClientScope implements Scope {
constructor(options: OutgoingClientScopeOptions);
applicationSid: string;
clientName?: string;
params?: object;
scope: 'scope:client:outgoing';
payload(): string;
}

export interface ClientCapabilityOptions {
accountSid: string;
authToken: string;
}
}

export = ClientCapability;
64 changes: 64 additions & 0 deletions lib/jwt/taskrouter/TaskRouterCapability.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
declare class TaskRouterCapability {
/**
* TaskRouterCapability class
* @param options Options to initiate
*/
constructor(options: TaskRouterCapability.TaskRouterCapabilityOptions);

accountSid: string;
authToken: string;
workspaceSid: string;
channelId: string;
ttl: number;
version: string;
policies: TaskRouterCapability.Policy[];
friendlyName?: string;

addPolicy(policy: TaskRouterCapability.Policy): void;
toJwt(): string;
}

declare namespace TaskRouterCapability {
export interface TaskRouterCapabilityOptions {
accountSid: string;
authToken: string;
workspaceSid: string;
channelId: string;
friendlyName?: string;
ttl?: number;
version?: string;
}

export interface PolicyOptions {
/** Policy URL */
url?: string;
/** HTTP Method */
method?: string;
/** Request query filter allowances */
queryFilter?: object;
/** Request post filter allowances */
postFilter?: object;
/** Allow the policy */
allowed?: boolean;
}

export interface PolicyPayload {
url: string;
method: string;
query_filter: object;
post_filter: object;
allow: boolean;
}

export class Policy {
/**
* Create a new Policy
* @param options Options to initiate policy
*/
constructor(options: PolicyOptions);

payload(): PolicyPayload;
}
}

export = TaskRouterCapability;
91 changes: 91 additions & 0 deletions lib/jwt/taskrouter/util.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import TaskRouterCapability = require('./TaskRouterCapability');

/**
* Build the default Policies for a worker
*
* @param version TaskRouter version
* @param workspaceSid workspace sid
* @param workerSid worker sid
* @returns list of Policies
*/
export function defaultWorkerPolicies(
version: string,
workspaceSid: string,
workerSid: string
): TaskRouterCapability.Policy[];

/**
* Build the default Event Bridge Policies
*
* @param accountSid account sid
* @param channelId channel id
* @returns list of Policies
*/
export function defaultEventBridgePolicies(
accountSid: string,
channelId: string
): TaskRouterCapability.Policy[];

/**
* Generate TaskRouter workspace url
*
* @param workspaceSid workspace sid or '**' for all workspaces
* @return generated url
*/
export function workspacesUrl(workspaceSid?: string): string;

/**
* Generate TaskRouter task queue url
*
* @param workspaceSid workspace sid
* @param taskQueueSid task queue sid or '**' for all task queues
* @return generated url
*/
export function taskQueuesUrl(
workspaceSid: string,
taskQueueSid?: string
): string;

/**
* Generate TaskRouter task url
*
* @param workspaceSid workspace sid
* @param taskSid task sid or '**' for all tasks
* @returns generated url
*/
export function tasksUrl(workspaceSid: string, taskSid?: string): string;

/**
* Generate TaskRouter activity url
*
* @param workspaceSid workspace sid
* @param activitySid activity sid or '**' for all activities
* @returns generated url
*/
export function activitiesUrl(
workspaceSid: string,
activitySid?: string
): string;

/**
* Generate TaskRouter worker url
*
* @param workspaceSid workspace sid
* @param workerSid worker sid or '**' for all workers
* @returns generated url
*/
export function workersUrl(workspaceSid: string, workerSid?: string): string;

/**
* Generate TaskRouter worker reservation url
*
* @param workspaceSid workspace sid
* @param workerSid worker sid
* @param reservationSid reservation sid or '**' for all reservations
* @returns generated url
*/
export function reservationsUrl(
workspaceSid: string,
workerSid: string,
reservationSid?: string
): string;