@@ -8,93 +8,111 @@ const TaskRouterCapability = taskrouter.TaskRouterCapability;
88const Policy = TaskRouterCapability . Policy ;
99
1010class WorkerCapabilityTokenGenerator extends TwilioClientCommand {
11- constructor ( argv , config ) {
12- super ( argv , config ) ;
13-
14- this . showHeaders = true ;
15- }
16-
17- async run ( ) {
18- await super . run ( ) ;
19-
20- const workerSid = await this . flags [ 'worker-sid' ] ;
21- const workspaceSid = await this . flags [ 'workspace-sid' ] ;
22- let ttl = await this . flags [ 'ttl' ] ;
23- const TASKROUTER_BASE_URL = 'https://taskrouter.twilio.com' ;
24- const version = 'v1' ;
25-
26- if ( ! validateSid ( 'WK' , workerSid ) ) {
27- this . logger . error (
28- 'Invalid Worker SID, must look like WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
29- ) ;
30- process . exit ( 1 ) ;
31- }
32-
33- if ( ! validateSid ( 'WS' , workspaceSid ) ) {
34- this . logger . error (
35- 'Invalid Workspace SID, must look like WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
36- ) ;
37- process . exit ( 1 ) ;
38- }
39-
40- const accountSid = this . twilioClient . accountSid ;
41- const authToken = this . twilioClient . password ;
42-
43- const capability = new TaskRouterCapability ( {
44- accountSid,
45- authToken,
46- workspaceSid,
47- channelId : workerSid ,
48- ttl
49- } ) ;
50-
51- // Helper function to create Policy
52- function buildWorkspacePolicy ( options ) {
53- options = options || { } ;
54- var resources = options . resources || [ ] ;
55- var urlComponents = [ TASKROUTER_BASE_URL , version , 'Workspaces' , workspaceSid ]
56-
57- return new Policy ( {
58- url : urlComponents . concat ( resources ) . join ( '/' ) ,
59- method : options . method || 'GET' ,
60- allow : true
61- } ) ;
62- }
63-
64- // Event Bridge Policies
65- var eventBridgePolicies = util . defaultEventBridgePolicies ( accountSid , workerSid ) ;
66-
67- // Worker Policies
68- var workerPolicies = util . defaultWorkerPolicies ( version , workspaceSid , workerSid ) ;
69-
70- var workspacePolicies = [
71- // Workspace fetch Policy
72- buildWorkspacePolicy ( ) ,
73- // Workspace subresources fetch Policy
74- buildWorkspacePolicy ( { resources : [ '**' ] } ) ,
75- // Workspace Activities Update Policy
76- buildWorkspacePolicy ( { resources : [ 'Activities' ] , method : 'POST' } ) ,
77- // Workspace Activities Worker Reserations Policy
78- buildWorkspacePolicy ( { resources : [ 'Workers' , workerSid , 'Reservations' , '**' ] , method : 'POST' } ) ,
79- ] ;
80-
81- eventBridgePolicies . concat ( workerPolicies ) . concat ( workspacePolicies ) . forEach ( function ( policy ) {
82- capability . addPolicy ( policy ) ;
83- } ) ;
84-
85- this . logger . info ( 'Copy/paste this video token into your test application:' ) ;
86- this . output ( { jwt : capability . toJwt ( ) } , undefined , {
87- showHeaders : false ,
88- } ) ;
89- }
11+ constructor ( argv , config ) {
12+ super ( argv , config ) ;
13+
14+ this . showHeaders = true ;
15+ }
16+
17+ async run ( ) {
18+ await super . run ( ) ;
19+
20+ const workerSid = await this . flags [ 'worker-sid' ] ;
21+ const workspaceSid = await this . flags [ 'workspace-sid' ] ;
22+ const ttl = await this . flags . ttl ;
23+ const TASKROUTER_BASE_URL = 'https://taskrouter.twilio.com' ;
24+ const version = 'v1' ;
25+
26+ if ( ! validateSid ( 'WK' , workerSid ) ) {
27+ this . logger . error (
28+ 'Invalid Worker SID, must look like WKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' ,
29+ ) ;
30+ process . exit ( 1 ) ;
31+ }
32+
33+ if ( ! validateSid ( 'WS' , workspaceSid ) ) {
34+ this . logger . error (
35+ 'Invalid Workspace SID, must look like WSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' ,
36+ ) ;
37+ process . exit ( 1 ) ;
38+ }
39+
40+ const accountSid = this . twilioClient . accountSid ;
41+ const authToken = this . twilioClient . password ;
42+
43+ const capability = new TaskRouterCapability ( {
44+ accountSid,
45+ authToken,
46+ workspaceSid,
47+ channelId : workerSid ,
48+ ttl,
49+ } ) ;
50+
51+ // Helper function to create Policy
52+ function buildWorkspacePolicy ( options ) {
53+ const internalOptions = options || { } ;
54+ const resources = internalOptions . resources || [ ] ;
55+ const urlComponents = [
56+ TASKROUTER_BASE_URL ,
57+ version ,
58+ 'Workspaces' ,
59+ workspaceSid ,
60+ ] ;
61+
62+ return new Policy ( {
63+ url : urlComponents . concat ( resources ) . join ( '/' ) ,
64+ method : internalOptions . method || 'GET' ,
65+ allow : true ,
66+ } ) ;
67+ }
68+
69+ // Event Bridge Policies
70+ const eventBridgePolicies = util . defaultEventBridgePolicies (
71+ accountSid ,
72+ workerSid ,
73+ ) ;
74+
75+ // Worker Policies
76+ const workerPolicies = util . defaultWorkerPolicies (
77+ version ,
78+ workspaceSid ,
79+ workerSid ,
80+ ) ;
81+
82+ const workspacePolicies = [
83+ // Workspace fetch Policy
84+ buildWorkspacePolicy ( ) ,
85+ // Workspace subresources fetch Policy
86+ buildWorkspacePolicy ( { resources : [ '**' ] } ) ,
87+ // Workspace Activities Update Policy
88+ buildWorkspacePolicy ( { resources : [ 'Activities' ] , method : 'POST' } ) ,
89+ // Workspace Activities Worker Reserations Policy
90+ buildWorkspacePolicy ( {
91+ resources : [ 'Workers' , workerSid , 'Reservations' , '**' ] ,
92+ method : 'POST' ,
93+ } ) ,
94+ ] ;
95+
96+ eventBridgePolicies . concat ( workerPolicies ) . concat ( workspacePolicies ) ;
97+
98+ for ( const policy of eventBridgePolicies ) {
99+ capability . addPolicy ( policy ) ;
100+ }
101+
102+ this . logger . info ( 'Copy/paste this video token into your test application:' ) ;
103+ this . output ( { jwt : capability . toJwt ( ) } , undefined , {
104+ showHeaders : false ,
105+ } ) ;
106+ }
90107}
91108
92- let globals = { ...globalFlags } ;
93- delete globals . identity ;
109+ const globals = { ...globalFlags } ;
110+ globals . identity = undefined ;
94111
95112WorkerCapabilityTokenGenerator . flags = Object . assign (
96- taskrouterFlags ,
97- TwilioClientCommand . flags ,
98- globals ,
113+ taskrouterFlags ,
114+ TwilioClientCommand . flags ,
115+ globals ,
99116) ;
117+
100118module . exports = WorkerCapabilityTokenGenerator ;
0 commit comments