@wazo/sdk 0.38.6 → 0.38.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/dist/wazo-sdk.js +2 -2
  2. package/esm/__tests__/api-client.test.js +142 -2
  3. package/esm/__tests__/web-rtc-client.test.js +249 -28
  4. package/esm/api/calld.js +8 -0
  5. package/esm/api/confd.js +134 -2
  6. package/esm/api-client.js +142 -2
  7. package/esm/checker/Checker.js +205 -25
  8. package/esm/checker/checks/aor.js +142 -2
  9. package/esm/checker/checks/api.js +142 -2
  10. package/esm/checker/checks/index.js +205 -25
  11. package/esm/checker/checks/wazo-websocket.js +2 -0
  12. package/esm/checker/checks/webrtc-transport.js +203 -25
  13. package/esm/checker/checks/webrtc.js +203 -25
  14. package/esm/domain/AdHocAPIConference.js +142 -2
  15. package/esm/domain/Features.js +142 -2
  16. package/esm/domain/Meeting.js +18 -0
  17. package/esm/domain/MeetingAuthorization.js +70 -0
  18. package/esm/domain/Phone/CTIPhone.js +142 -2
  19. package/esm/domain/Phone/WebRTCPhone.js +1 -3
  20. package/esm/domain/__tests__/Meeting.test.js +87 -1
  21. package/esm/domain/__tests__/MeetingAuthorization.test.js +109 -0
  22. package/esm/index.js +249 -31
  23. package/esm/lib/WazoSessionDescriptionHandler.js +22 -1
  24. package/esm/service/CallApi.js +142 -2
  25. package/esm/service/getApiClient.js +142 -2
  26. package/esm/simple/Auth.js +249 -31
  27. package/esm/simple/Configuration.js +249 -31
  28. package/esm/simple/Directory.js +142 -2
  29. package/esm/simple/Phone.js +249 -31
  30. package/esm/simple/Websocket.js +3 -0
  31. package/esm/simple/index.js +249 -31
  32. package/esm/simple/room/LocalParticipant.js +249 -31
  33. package/esm/simple/room/Participant.js +249 -31
  34. package/esm/simple/room/RemoteParticipant.js +249 -31
  35. package/esm/simple/room/Room.js +249 -31
  36. package/esm/simple/room/SipRoom.js +249 -31
  37. package/esm/simple/room/Stream.js +249 -31
  38. package/esm/simple/room/__tests__/Participant.test.js +14745 -0
  39. package/esm/simple/room/__tests__/RemoteParticipant.test.js +249 -31
  40. package/esm/simple/utils.js +249 -31
  41. package/esm/utils/__tests__/object.test.js +57 -0
  42. package/esm/utils/__tests__/sdp.test.js +50 -0
  43. package/esm/utils/__tests__/string.test.js +30 -0
  44. package/esm/utils/object.js +24 -0
  45. package/esm/utils/sdp.js +19 -1
  46. package/esm/utils/string.js +10 -0
  47. package/esm/web-rtc-client.js +203 -25
  48. package/esm/websocket-client.js +3 -1
  49. package/lib/__tests__/api-client.test.js +142 -2
  50. package/lib/__tests__/web-rtc-client.test.js +249 -28
  51. package/lib/api/calld.js +8 -0
  52. package/lib/api/confd.js +134 -2
  53. package/lib/api-client.js +142 -2
  54. package/lib/checker/Checker.js +205 -25
  55. package/lib/checker/checks/aor.js +142 -2
  56. package/lib/checker/checks/api.js +142 -2
  57. package/lib/checker/checks/index.js +205 -25
  58. package/lib/checker/checks/wazo-websocket.js +2 -0
  59. package/lib/checker/checks/webrtc-transport.js +203 -25
  60. package/lib/checker/checks/webrtc.js +203 -25
  61. package/lib/domain/AdHocAPIConference.js +142 -2
  62. package/lib/domain/Features.js +142 -2
  63. package/lib/domain/Meeting.js +18 -0
  64. package/lib/domain/MeetingAuthorization.js +79 -0
  65. package/lib/domain/Phone/CTIPhone.js +142 -2
  66. package/lib/domain/Phone/WebRTCPhone.js +1 -3
  67. package/lib/domain/__tests__/Meeting.test.js +87 -1
  68. package/lib/domain/__tests__/MeetingAuthorization.test.js +111 -0
  69. package/lib/index.js +249 -31
  70. package/lib/lib/WazoSessionDescriptionHandler.js +22 -1
  71. package/lib/service/CallApi.js +142 -2
  72. package/lib/service/getApiClient.js +142 -2
  73. package/lib/simple/Auth.js +249 -31
  74. package/lib/simple/Configuration.js +249 -31
  75. package/lib/simple/Directory.js +142 -2
  76. package/lib/simple/Phone.js +249 -31
  77. package/lib/simple/Websocket.js +3 -0
  78. package/lib/simple/index.js +249 -31
  79. package/lib/simple/room/LocalParticipant.js +249 -31
  80. package/lib/simple/room/Participant.js +249 -31
  81. package/lib/simple/room/RemoteParticipant.js +249 -31
  82. package/lib/simple/room/Room.js +249 -31
  83. package/lib/simple/room/SipRoom.js +249 -31
  84. package/lib/simple/room/Stream.js +249 -31
  85. package/lib/simple/room/__tests__/Participant.test.js +14755 -0
  86. package/lib/simple/room/__tests__/RemoteParticipant.test.js +249 -31
  87. package/lib/simple/utils.js +249 -31
  88. package/lib/utils/__tests__/object.test.js +59 -0
  89. package/lib/utils/__tests__/sdp.test.js +50 -0
  90. package/lib/utils/__tests__/string.test.js +32 -0
  91. package/lib/utils/object.js +28 -0
  92. package/lib/utils/sdp.js +19 -0
  93. package/lib/utils/string.js +14 -0
  94. package/lib/web-rtc-client.js +203 -25
  95. package/lib/websocket-client.js +3 -0
  96. package/package.json +2 -2
  97. package/src/__tests__/web-rtc-client.test.js +46 -3
  98. package/src/api/calld.js +8 -0
  99. package/src/api/confd.js +43 -2
  100. package/src/domain/Meeting.js +20 -0
  101. package/src/domain/MeetingAuthorization.js +67 -0
  102. package/src/domain/Phone/WebRTCPhone.js +1 -3
  103. package/src/domain/__tests__/Meeting.test.js +70 -1
  104. package/src/domain/__tests__/MeetingAuthorization.test.js +58 -0
  105. package/src/lib/WazoSessionDescriptionHandler.js +5 -2
  106. package/src/simple/room/Participant.js +40 -0
  107. package/src/simple/room/Room.js +2 -2
  108. package/src/simple/room/SipRoom.js +1 -1
  109. package/src/simple/room/__tests__/Participant.test.js +81 -0
  110. package/src/types/WebSocketMessage.js +7 -1
  111. package/src/utils/__tests__/object.test.js +35 -0
  112. package/src/utils/__tests__/sdp.test.js +33 -1
  113. package/src/utils/__tests__/string.test.js +23 -0
  114. package/src/utils/object.js +15 -0
  115. package/src/utils/sdp.js +18 -0
  116. package/src/utils/string.js +8 -0
  117. package/src/web-rtc-client.js +39 -22
  118. package/src/websocket-client.js +2 -0
@@ -3600,6 +3600,70 @@ class ExternalApp {
3600
3600
 
3601
3601
  //
3602
3602
 
3603
+ class MeetingAuthorization {
3604
+
3605
+
3606
+
3607
+
3608
+
3609
+
3610
+ constructor({
3611
+ meetingUuid,
3612
+ uuid,
3613
+ userUuid,
3614
+ userName,
3615
+ } = {}) {
3616
+ this.meetingUuid = meetingUuid;
3617
+ this.uuid = uuid;
3618
+ this.userUuid = userUuid;
3619
+ this.userName = userName;
3620
+ }
3621
+
3622
+ setStatus(status ) {
3623
+ this.status = status;
3624
+ }
3625
+
3626
+ getStatus() {
3627
+ return this.status;
3628
+ }
3629
+
3630
+ static parse(plain ) {
3631
+ const {
3632
+ meeting_uuid: meetingUuid,
3633
+ uuid,
3634
+ guest_uuid: userUuid,
3635
+ guest_name: userName,
3636
+ } = plain;
3637
+
3638
+ return new MeetingAuthorization({
3639
+ meetingUuid,
3640
+ uuid,
3641
+ userUuid,
3642
+ userName,
3643
+ });
3644
+ }
3645
+
3646
+ static parseMany(items ) {
3647
+ if (!items) {
3648
+ return [];
3649
+ }
3650
+ return items.map(MeetingAuthorization.parse);
3651
+ }
3652
+ }
3653
+
3654
+ //
3655
+
3656
+
3657
+
3658
+
3659
+
3660
+
3661
+
3662
+
3663
+
3664
+
3665
+
3666
+
3603
3667
 
3604
3668
 
3605
3669
 
@@ -3610,6 +3674,7 @@ class ExternalApp {
3610
3674
 
3611
3675
 
3612
3676
 
3677
+
3613
3678
 
3614
3679
 
3615
3680
  class Meeting {
@@ -3624,6 +3689,8 @@ class Meeting {
3624
3689
 
3625
3690
 
3626
3691
 
3692
+
3693
+
3627
3694
 
3628
3695
  static parse(plain ) {
3629
3696
  return new Meeting({
@@ -3636,6 +3703,7 @@ class Meeting {
3636
3703
  extension: plain.exten,
3637
3704
  persistent: plain.persistent,
3638
3705
  creationTime: moment__default['default'](plain.creation_time).toDate(),
3706
+ requireAuthorization: plain.require_authorization,
3639
3707
  });
3640
3708
  }
3641
3709
 
@@ -3660,6 +3728,7 @@ class Meeting {
3660
3728
  extension,
3661
3729
  persistent,
3662
3730
  creationTime,
3731
+ requireAuthorization,
3663
3732
  } = {}) {
3664
3733
  this.guestSipAuthorization = guestSipAuthorization;
3665
3734
  this.uri = uri;
@@ -3670,6 +3739,7 @@ class Meeting {
3670
3739
  this.extension = extension;
3671
3740
  this.persistent = persistent;
3672
3741
  this.creationTime = creationTime;
3742
+ this.requireAuthorization = requireAuthorization;
3673
3743
 
3674
3744
  // Useful to compare instead of instanceof with minified code
3675
3745
  this.type = 'Meeting';
@@ -3680,8 +3750,32 @@ class Meeting {
3680
3750
  const [username, secret] = atob(this.guestSipAuthorization).split(':');
3681
3751
  return { username, secret };
3682
3752
  }
3753
+
3683
3754
  }
3684
3755
 
3756
+ //
3757
+
3758
+ const camelToUnderscore = (key ) => {
3759
+ if (typeof key !== 'string') {
3760
+ throw new Error('Input is not a string');
3761
+ }
3762
+ return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
3763
+ };
3764
+
3765
+ //
3766
+
3767
+ const convertKeysFromCamelToUnderscore = (args ) => {
3768
+ if (!args || typeof args !== 'object' || Array.isArray(args)) {
3769
+ throw new Error('Input is not an object');
3770
+ }
3771
+
3772
+ return Object.keys(args).reduce((acc, key) => {
3773
+ acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
3774
+ ? convertKeysFromCamelToUnderscore(args[key]) : args[key];
3775
+ return acc;
3776
+ }, {});
3777
+ };
3778
+
3685
3779
  /* */
3686
3780
 
3687
3781
  var confdMethods = (client , baseUrl ) => ({
@@ -3750,8 +3844,18 @@ var confdMethods = (client , baseUrl ) => ({
3750
3844
  getMyMeetings: () =>
3751
3845
  client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
3752
3846
 
3753
- createMyMeeting: (name , persistent ) =>
3754
- client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
3847
+ createMyMeeting: (args ) =>
3848
+ client
3849
+ .post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
3850
+ .then(Meeting.parse),
3851
+
3852
+ updateMyMeeting: (meetingUuid , data ) =>
3853
+ client.put(
3854
+ `${baseUrl}/users/me/meetings/${meetingUuid}`,
3855
+ convertKeysFromCamelToUnderscore(data),
3856
+ null,
3857
+ ApiRequester.successResponseParser,
3858
+ ),
3755
3859
 
3756
3860
  deleteMyMeeting: (meetingUuid ) =>
3757
3861
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
@@ -3759,8 +3863,36 @@ var confdMethods = (client , baseUrl ) => ({
3759
3863
  getMeeting: (meetingUuid ) =>
3760
3864
  client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
3761
3865
 
3866
+ meetingAuthorizations: (meetingUuid ) =>
3867
+ client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
3868
+
3869
+ meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
3870
+ client.put(
3871
+ `${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
3872
+ {},
3873
+ null,
3874
+ ApiRequester.successResponseParser,
3875
+ ),
3876
+
3877
+ meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
3878
+ client.put(
3879
+ `${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
3880
+ {},
3881
+ null,
3882
+ ApiRequester.successResponseParser,
3883
+ ),
3884
+
3762
3885
  guestGetMeeting: (meetingUuid ) =>
3763
3886
  client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
3887
+
3888
+ guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
3889
+ client
3890
+ .post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
3891
+ .then(MeetingAuthorization.parse),
3892
+
3893
+ guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
3894
+ client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
3895
+
3764
3896
  });
3765
3897
 
3766
3898
  //
@@ -4629,6 +4761,14 @@ var calldMethods = (client , baseUrl ) => ({
4629
4761
  getMeetingParticipantsAsUser: async (meetingUuid ) =>
4630
4762
  client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
4631
4763
 
4764
+ banMeetingParticipant: (meetingUuid , participantUuid ) =>
4765
+ client.delete(
4766
+ `${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
4767
+ null,
4768
+ null,
4769
+ ApiRequester.successResponseParser,
4770
+ ),
4771
+
4632
4772
  listTrunks: () => client.get(`${baseUrl}/trunks`),
4633
4773
 
4634
4774
  mute: (callId ) =>
@@ -1442,9 +1442,7 @@ class WebRTCPhone extends Emitter {
1442
1442
 
1443
1443
  try {
1444
1444
  if (this.currentScreenShare.stream) {
1445
- this.currentScreenShare.stream.getTracks()
1446
- .filter(track => track.kind === 'video')
1447
- .forEach(track => track.stop());
1445
+ this.currentScreenShare.stream.getTracks().forEach(track => track.stop());
1448
1446
  }
1449
1447
 
1450
1448
  if (restoreLocalStream) {
@@ -19,6 +19,17 @@ var newFrom = (instance , ToClass ) => {
19
19
 
20
20
  //
21
21
 
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
22
33
 
23
34
 
24
35
 
@@ -29,6 +40,7 @@ var newFrom = (instance , ToClass ) => {
29
40
 
30
41
 
31
42
 
43
+
32
44
 
33
45
 
34
46
  class Meeting {
@@ -43,6 +55,8 @@ class Meeting {
43
55
 
44
56
 
45
57
 
58
+
59
+
46
60
 
47
61
  static parse(plain ) {
48
62
  return new Meeting({
@@ -55,6 +69,7 @@ class Meeting {
55
69
  extension: plain.exten,
56
70
  persistent: plain.persistent,
57
71
  creationTime: moment__default['default'](plain.creation_time).toDate(),
72
+ requireAuthorization: plain.require_authorization,
58
73
  });
59
74
  }
60
75
 
@@ -79,6 +94,7 @@ class Meeting {
79
94
  extension,
80
95
  persistent,
81
96
  creationTime,
97
+ requireAuthorization,
82
98
  } = {}) {
83
99
  this.guestSipAuthorization = guestSipAuthorization;
84
100
  this.uri = uri;
@@ -89,6 +105,7 @@ class Meeting {
89
105
  this.extension = extension;
90
106
  this.persistent = persistent;
91
107
  this.creationTime = creationTime;
108
+ this.requireAuthorization = requireAuthorization;
92
109
 
93
110
  // Useful to compare instead of instanceof with minified code
94
111
  this.type = 'Meeting';
@@ -99,11 +116,78 @@ class Meeting {
99
116
  const [username, secret] = atob(this.guestSipAuthorization).split(':');
100
117
  return { username, secret };
101
118
  }
119
+
102
120
  }
103
121
 
104
122
  //
105
123
 
124
+ const rawCreationTime = '2021-12-21T15:56:42.880Z';
125
+
106
126
  describe('Meeting domain', () => {
127
+ it('should retain its values when parsed', () => {
128
+ const args = {
129
+ guest_sip_authorization: 'some-guest-sip-authorization',
130
+ ingress_http_uri: 'some-uri',
131
+ name: 'some-name',
132
+ owner_uuids: ['some-owner-uuid'],
133
+ port: 'some-port',
134
+ uuid: 'some-uuid',
135
+ exten: 'some-exten',
136
+ persistent: true,
137
+ creation_time: rawCreationTime,
138
+ require_authorization: true,
139
+ };
140
+
141
+ const meeting = Meeting.parse(args);
142
+ const {
143
+ uri,
144
+ uuid,
145
+ name,
146
+ port,
147
+ extension,
148
+ persistent,
149
+ ownerUuids,
150
+ creationTime,
151
+ requireAuthorization,
152
+ } = meeting;
153
+
154
+ expect(uri).toEqual(args.ingress_http_uri);
155
+ expect(uuid).toEqual(args.uuid);
156
+ expect(name).toEqual(args.name);
157
+ expect(port).toEqual(args.port);
158
+ expect(extension).toEqual(args.exten);
159
+ expect(persistent).toEqual(args.persistent);
160
+ expect(ownerUuids).toEqual(args.owner_uuids);
161
+ expect(creationTime).toEqual(moment__default['default'](rawCreationTime).toDate());
162
+ expect(requireAuthorization).toEqual(args.require_authorization);
163
+ });
164
+
165
+ it('should retain its values when instantiated', () => {
166
+ const keys = [
167
+ 'uuid',
168
+ 'name',
169
+ 'guestSipAuthorization',
170
+ 'ownerUuids',
171
+ 'port',
172
+ 'uri',
173
+ 'extension',
174
+ 'persistent',
175
+ 'creationTime',
176
+ 'requireAuthorization',
177
+ ];
178
+
179
+ const args = keys.reduce((acc, key) => {
180
+ acc[key] = `some-${key}`;
181
+ return acc;
182
+ }, {});
183
+
184
+ const meeting = new Meeting(args);
185
+
186
+ keys.forEach(key =>
187
+ // $FlowFixMe
188
+ expect(meeting[key]).toEqual(`some-${key}`));
189
+ });
190
+
107
191
  it('can return username and secret from an base64 encrypted string', () => {
108
192
  const USERNAME = 'username';
109
193
  const SECRET = 'secret';
@@ -118,6 +202,7 @@ describe('Meeting domain', () => {
118
202
  uuid: '',
119
203
  exten: '',
120
204
  persistent: false,
205
+ require_authorization: false,
121
206
  };
122
207
 
123
208
  const meeting = Meeting.parse(args);
@@ -130,7 +215,7 @@ describe('Meeting domain', () => {
130
215
 
131
216
  it('should return a date from a string', () => {
132
217
  const args = {
133
- creation_time: '2021-12-21T15:56:42.880Z',
218
+ creation_time: rawCreationTime,
134
219
  guest_sip_authorization: '',
135
220
  ingress_http_uri: '',
136
221
  name: '',
@@ -139,6 +224,7 @@ describe('Meeting domain', () => {
139
224
  uuid: '',
140
225
  exten: '',
141
226
  persistent: false,
227
+ require_authorization: false,
142
228
  };
143
229
 
144
230
  const { creationTime } = Meeting.parse(args);
@@ -0,0 +1,111 @@
1
+ 'use strict';
2
+
3
+ //
4
+
5
+ class MeetingAuthorization {
6
+
7
+
8
+
9
+
10
+
11
+
12
+ constructor({
13
+ meetingUuid,
14
+ uuid,
15
+ userUuid,
16
+ userName,
17
+ } = {}) {
18
+ this.meetingUuid = meetingUuid;
19
+ this.uuid = uuid;
20
+ this.userUuid = userUuid;
21
+ this.userName = userName;
22
+ }
23
+
24
+ setStatus(status ) {
25
+ this.status = status;
26
+ }
27
+
28
+ getStatus() {
29
+ return this.status;
30
+ }
31
+
32
+ static parse(plain ) {
33
+ const {
34
+ meeting_uuid: meetingUuid,
35
+ uuid,
36
+ guest_uuid: userUuid,
37
+ guest_name: userName,
38
+ } = plain;
39
+
40
+ return new MeetingAuthorization({
41
+ meetingUuid,
42
+ uuid,
43
+ userUuid,
44
+ userName,
45
+ });
46
+ }
47
+
48
+ static parseMany(items ) {
49
+ if (!items) {
50
+ return [];
51
+ }
52
+ return items.map(MeetingAuthorization.parse);
53
+ }
54
+ }
55
+
56
+ describe('MeetingAuthorization', () => {
57
+ describe('parse', () => {
58
+ it('should parse a raw input', () => {
59
+ const rawAuthorization = {
60
+ created_at: 'today',
61
+ meeting_uuid: 'meeting_uuid',
62
+ uuid: 'uuid',
63
+ guest_uuid: 'guest_uuid',
64
+ guest_name: 'guest_name',
65
+ };
66
+
67
+ const authorization = {
68
+ meetingUuid: rawAuthorization.meeting_uuid,
69
+ uuid: rawAuthorization.uuid,
70
+ userUuid: rawAuthorization.guest_uuid,
71
+ userName: rawAuthorization.guest_name,
72
+ status: undefined,
73
+ };
74
+
75
+ const response = MeetingAuthorization.parse(rawAuthorization);
76
+ expect(response).toEqual(authorization);
77
+ });
78
+ });
79
+
80
+ describe('parseMany', () => {
81
+ it('should parse multiple raw inputs', () => {
82
+ const rawAuthorizations = [
83
+ {
84
+ created_at: 'today1',
85
+ meeting_uuid: 'meeting_uuid1',
86
+ uuid: 'uuid1',
87
+ guest_uuid: 'guest_uuid1',
88
+ guest_name: 'guest_name1',
89
+ },
90
+ {
91
+ created_at: 'today2',
92
+ meeting_uuid: 'meeting_uuid2',
93
+ uuid: 'uuid2',
94
+ guest_uuid: 'guest_uuid2',
95
+ guest_name: 'guest_name2',
96
+ },
97
+ ];
98
+
99
+ const authorizations = rawAuthorizations.map(rawAuthorization => ({
100
+ meetingUuid: rawAuthorization.meeting_uuid,
101
+ uuid: rawAuthorization.uuid,
102
+ userUuid: rawAuthorization.guest_uuid,
103
+ userName: rawAuthorization.guest_name,
104
+ status: undefined,
105
+ }));
106
+
107
+ const response = MeetingAuthorization.parseMany(rawAuthorizations);
108
+ expect(response).toEqual(authorizations);
109
+ });
110
+ });
111
+ });