@wazo/sdk 0.38.21 → 0.39.0-beta.1

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 (884) hide show
  1. package/README.md +0 -293
  2. package/dist/wazo-sdk.js +9 -25
  3. package/esm/__tests__/api-client.test.js +183 -5059
  4. package/esm/__tests__/web-rtc-client.test.js +177 -7932
  5. package/esm/api/agentd.js +23 -832
  6. package/esm/api/amid.js +9 -411
  7. package/esm/api/application.js +60 -829
  8. package/esm/api/auth.js +164 -1213
  9. package/esm/api/call-logd.js +24 -733
  10. package/esm/api/calld.js +114 -1469
  11. package/esm/api/chatd.js +35 -1312
  12. package/esm/api/confd.js +67 -1580
  13. package/esm/api/ctid-ng.js +92 -1343
  14. package/esm/api/dird.js +100 -1590
  15. package/esm/api/webhookd.js +7 -513
  16. package/esm/api-client.js +143 -4881
  17. package/esm/checker/Checker.js +45 -8729
  18. package/esm/checker/checks/aor.js +24 -4924
  19. package/esm/checker/checks/api.js +70 -4968
  20. package/esm/checker/checks/ice-ipv4.js +63 -117
  21. package/esm/checker/checks/index.js +8 -8679
  22. package/esm/checker/checks/symmetric-nat.js +54 -102
  23. package/esm/checker/checks/wazo-websocket.js +34 -999
  24. package/esm/checker/checks/webrtc-transport.js +28 -7847
  25. package/esm/checker/checks/webrtc.js +31 -7854
  26. package/esm/domain/AdHocAPIConference.js +86 -5115
  27. package/esm/domain/Agent.js +27 -61
  28. package/esm/domain/BadResponse.js +20 -43
  29. package/esm/domain/Call.js +120 -210
  30. package/esm/domain/CallLog.js +123 -305
  31. package/esm/domain/CallSession.js +251 -423
  32. package/esm/domain/ChatMessage.js +52 -105
  33. package/esm/domain/ChatRoom.js +28 -60
  34. package/esm/domain/Contact.js +430 -741
  35. package/esm/domain/Country.js +17 -19
  36. package/esm/domain/Device/DebugDevice.js +31 -47
  37. package/esm/domain/Device/Device.js +1 -1
  38. package/esm/domain/DirectorySource.js +1 -1
  39. package/esm/domain/ExternalApp.js +23 -56
  40. package/esm/domain/Features.js +57 -5009
  41. package/esm/domain/ForwardOption.js +35 -70
  42. package/esm/domain/IndirectTransfer.js +38 -97
  43. package/esm/domain/Line.js +37 -88
  44. package/esm/domain/Meeting.js +58 -113
  45. package/esm/domain/MeetingAuthorization.js +38 -68
  46. package/esm/domain/MeetingStatus.js +13 -28
  47. package/esm/domain/NotificationOptions.js +43 -77
  48. package/esm/domain/Phone/CTIPhone.js +245 -5743
  49. package/esm/domain/Phone/Phone.js +1 -2
  50. package/esm/domain/Phone/WebRTCPhone.js +1446 -2670
  51. package/esm/domain/Profile.js +120 -405
  52. package/esm/domain/Recording.js +27 -51
  53. package/esm/domain/Relocation.js +16 -40
  54. package/esm/domain/Room.js +90 -133
  55. package/esm/domain/SFUNotAvailableError.js +5 -8
  56. package/esm/domain/ServerError.js +8 -61
  57. package/esm/domain/Session.js +125 -251
  58. package/esm/domain/SipLine.js +78 -155
  59. package/esm/domain/Subscription.js +39 -83
  60. package/esm/domain/SwitchboardCall.js +51 -143
  61. package/esm/domain/Voicemail.js +57 -122
  62. package/esm/domain/__tests__/Agent.test.js +31 -101
  63. package/esm/domain/__tests__/Call.test.js +24 -232
  64. package/esm/domain/__tests__/CallLog.test.js +60 -386
  65. package/esm/domain/__tests__/CallSession.test.js +74 -502
  66. package/esm/domain/__tests__/Contact.test.js +220 -902
  67. package/esm/domain/__tests__/IndirectTransfer.test.js +63 -546
  68. package/esm/domain/__tests__/Line.test.js +48 -156
  69. package/esm/domain/__tests__/Meeting.test.js +73 -226
  70. package/esm/domain/__tests__/MeetingAuthorization.test.js +45 -105
  71. package/esm/domain/__tests__/Profile.test.js +135 -496
  72. package/esm/domain/__tests__/Room.test.js +227 -719
  73. package/esm/domain/__tests__/Session.test.js +357 -1025
  74. package/esm/domain/__tests__/SipLine.test.js +24 -179
  75. package/esm/domain/__tests__/Voicemail.test.js +82 -200
  76. package/esm/domain/types.js +1 -1
  77. package/esm/index.js +63 -14987
  78. package/esm/lib/WazoSessionDescriptionHandler.js +406 -890
  79. package/esm/pubkey.js +10 -0
  80. package/esm/service/CallApi.js +42 -5014
  81. package/esm/service/IssueReporter.js +278 -360
  82. package/esm/service/__tests__/IssueReporter.test.js +92 -494
  83. package/esm/service/getApiClient.js +53 -4972
  84. package/esm/simple/Auth.js +211 -14749
  85. package/esm/simple/Configuration.js +8 -14798
  86. package/esm/simple/Directory.js +6 -4964
  87. package/esm/simple/Phone.js +309 -14729
  88. package/esm/simple/Websocket.js +68 -1112
  89. package/esm/simple/index.js +125 -14794
  90. package/esm/simple/room/LocalParticipant.js +1 -14799
  91. package/esm/simple/room/Participant.js +274 -14762
  92. package/esm/simple/room/RemoteParticipant.js +6 -14798
  93. package/esm/simple/room/Room.js +648 -14738
  94. package/esm/simple/room/SipRoom.js +111 -14792
  95. package/esm/simple/room/Stream.js +40 -14794
  96. package/esm/simple/room/__tests__/Participant.test.js +68 -14874
  97. package/esm/simple/room/__tests__/RemoteParticipant.test.js +10 -14807
  98. package/esm/simple/utils.js +9 -14801
  99. package/esm/types/WebSocketMessage.js +1 -1
  100. package/esm/types/__tests__/api-client.test.d.ts +2 -0
  101. package/esm/types/__tests__/api-client.test.d.ts.map +1 -0
  102. package/esm/types/__tests__/web-rtc-client.test.d.ts +2 -0
  103. package/esm/types/__tests__/web-rtc-client.test.d.ts.map +1 -0
  104. package/esm/types/api/agentd.d.ts +17 -0
  105. package/esm/types/api/agentd.d.ts.map +1 -0
  106. package/esm/types/api/amid.d.ts +8 -0
  107. package/esm/types/api/amid.d.ts.map +1 -0
  108. package/esm/types/api/application.d.ts +34 -0
  109. package/esm/types/api/application.d.ts.map +1 -0
  110. package/esm/types/api/auth.d.ts +64 -0
  111. package/esm/types/api/auth.d.ts.map +1 -0
  112. package/esm/types/api/call-logd.d.ts +12 -0
  113. package/esm/types/api/call-logd.d.ts.map +1 -0
  114. package/esm/types/api/calld.d.ts +51 -0
  115. package/esm/types/api/calld.d.ts.map +1 -0
  116. package/esm/types/api/chatd.d.ts +42 -0
  117. package/esm/types/api/chatd.d.ts.map +1 -0
  118. package/esm/types/api/confd.d.ts +39 -0
  119. package/esm/types/api/confd.d.ts.map +1 -0
  120. package/esm/types/api/ctid-ng.d.ts +36 -0
  121. package/esm/types/api/ctid-ng.d.ts.map +1 -0
  122. package/esm/types/api/dird.d.ts +38 -0
  123. package/esm/types/api/dird.d.ts.map +1 -0
  124. package/esm/types/api/webhookd.d.ts +24 -0
  125. package/esm/types/api/webhookd.d.ts.map +1 -0
  126. package/esm/types/api-client.d.ts +63 -0
  127. package/esm/types/api-client.d.ts.map +1 -0
  128. package/esm/types/checker/Checker.d.ts +13 -0
  129. package/esm/types/checker/Checker.d.ts.map +1 -0
  130. package/esm/types/checker/checks/aor.d.ts +6 -0
  131. package/esm/types/checker/checks/aor.d.ts.map +1 -0
  132. package/esm/types/checker/checks/api.d.ts +6 -0
  133. package/esm/types/checker/checks/api.d.ts.map +1 -0
  134. package/esm/types/checker/checks/ice-ipv4.d.ts +6 -0
  135. package/esm/types/checker/checks/ice-ipv4.d.ts.map +1 -0
  136. package/esm/types/checker/checks/index.d.ts +9 -0
  137. package/esm/types/checker/checks/index.d.ts.map +1 -0
  138. package/esm/types/checker/checks/symmetric-nat.d.ts +6 -0
  139. package/esm/types/checker/checks/symmetric-nat.d.ts.map +1 -0
  140. package/esm/types/checker/checks/wazo-websocket.d.ts +6 -0
  141. package/esm/types/checker/checks/wazo-websocket.d.ts.map +1 -0
  142. package/esm/types/checker/checks/webrtc-transport.d.ts +7 -0
  143. package/esm/types/checker/checks/webrtc-transport.d.ts.map +1 -0
  144. package/esm/types/checker/checks/webrtc.d.ts +6 -0
  145. package/esm/types/checker/checks/webrtc.d.ts.map +1 -0
  146. package/esm/types/domain/AdHocAPIConference.d.ts +54 -0
  147. package/esm/types/domain/AdHocAPIConference.d.ts.map +1 -0
  148. package/esm/types/domain/Agent.d.ts +31 -0
  149. package/esm/types/domain/Agent.d.ts.map +1 -0
  150. package/esm/types/domain/BadResponse.d.ts +11 -0
  151. package/esm/types/domain/BadResponse.d.ts.map +1 -0
  152. package/esm/types/domain/Call.d.ts +79 -0
  153. package/esm/types/domain/Call.d.ts.map +1 -0
  154. package/esm/types/domain/CallLog.d.ts +91 -0
  155. package/esm/types/domain/CallLog.d.ts.map +1 -0
  156. package/esm/types/domain/CallSession.d.ts +120 -0
  157. package/esm/types/domain/CallSession.d.ts.map +1 -0
  158. package/esm/types/domain/ChatMessage.d.ts +41 -0
  159. package/esm/types/domain/ChatMessage.d.ts.map +1 -0
  160. package/esm/types/domain/ChatRoom.d.ts +22 -0
  161. package/esm/types/domain/ChatRoom.d.ts.map +1 -0
  162. package/esm/types/domain/Contact.d.ts +316 -0
  163. package/esm/types/domain/Contact.d.ts.map +1 -0
  164. package/esm/types/domain/Country.d.ts +20 -0
  165. package/esm/types/domain/Country.d.ts.map +1 -0
  166. package/esm/types/domain/Device/DebugDevice.d.ts +14 -0
  167. package/esm/types/domain/Device/DebugDevice.d.ts.map +1 -0
  168. package/esm/types/domain/Device/Device.d.ts +13 -0
  169. package/esm/types/domain/Device/Device.d.ts.map +1 -0
  170. package/esm/types/domain/DirectorySource.d.ts +13 -0
  171. package/esm/types/domain/DirectorySource.d.ts.map +1 -0
  172. package/esm/types/domain/ExternalApp.d.ts +22 -0
  173. package/esm/types/domain/ExternalApp.d.ts.map +1 -0
  174. package/esm/types/domain/Features.d.ts +24 -0
  175. package/esm/types/domain/Features.d.ts.map +1 -0
  176. package/esm/types/domain/ForwardOption.d.ts +27 -0
  177. package/esm/types/domain/ForwardOption.d.ts.map +1 -0
  178. package/esm/types/domain/IndirectTransfer.d.ts +31 -0
  179. package/esm/types/domain/IndirectTransfer.d.ts.map +1 -0
  180. package/esm/types/domain/Line.d.ts +46 -0
  181. package/esm/types/domain/Line.d.ts.map +1 -0
  182. package/esm/types/domain/Meeting.d.ts +45 -0
  183. package/esm/types/domain/Meeting.d.ts.map +1 -0
  184. package/esm/types/domain/MeetingAuthorization.d.ts +26 -0
  185. package/esm/types/domain/MeetingAuthorization.d.ts.map +1 -0
  186. package/esm/types/domain/MeetingStatus.d.ts +10 -0
  187. package/esm/types/domain/MeetingStatus.d.ts.map +1 -0
  188. package/esm/types/domain/NotificationOptions.d.ts +22 -0
  189. package/esm/types/domain/NotificationOptions.d.ts.map +1 -0
  190. package/esm/types/domain/Phone/CTIPhone.d.ts +76 -0
  191. package/esm/types/domain/Phone/CTIPhone.d.ts.map +1 -0
  192. package/esm/types/domain/Phone/Phone.d.ts +71 -0
  193. package/esm/types/domain/Phone/Phone.d.ts.map +1 -0
  194. package/esm/types/domain/Phone/WebRTCPhone.d.ts +179 -0
  195. package/esm/types/domain/Phone/WebRTCPhone.d.ts.map +1 -0
  196. package/esm/types/domain/Profile.d.ts +151 -0
  197. package/esm/types/domain/Profile.d.ts.map +1 -0
  198. package/esm/types/domain/Recording.d.ts +26 -0
  199. package/esm/types/domain/Recording.d.ts.map +1 -0
  200. package/esm/types/domain/Relocation.d.ts +23 -0
  201. package/esm/types/domain/Relocation.d.ts.map +1 -0
  202. package/esm/types/domain/Room.d.ts +35 -0
  203. package/esm/types/domain/Room.d.ts.map +1 -0
  204. package/esm/types/domain/SFUNotAvailableError.d.ts +4 -0
  205. package/esm/types/domain/SFUNotAvailableError.d.ts.map +1 -0
  206. package/esm/types/domain/ServerError.d.ts +6 -0
  207. package/esm/types/domain/ServerError.d.ts.map +1 -0
  208. package/esm/types/domain/Session.d.ts +90 -0
  209. package/esm/types/domain/Session.d.ts.map +1 -0
  210. package/esm/types/domain/SipLine.d.ts +54 -0
  211. package/esm/types/domain/SipLine.d.ts.map +1 -0
  212. package/esm/types/domain/Subscription.d.ts +43 -0
  213. package/esm/types/domain/Subscription.d.ts.map +1 -0
  214. package/esm/types/domain/SwitchboardCall.d.ts +62 -0
  215. package/esm/types/domain/SwitchboardCall.d.ts.map +1 -0
  216. package/esm/types/domain/Voicemail.d.ts +50 -0
  217. package/esm/types/domain/Voicemail.d.ts.map +1 -0
  218. package/esm/types/domain/__tests__/Agent.test.d.ts +2 -0
  219. package/esm/types/domain/__tests__/Agent.test.d.ts.map +1 -0
  220. package/esm/types/domain/__tests__/Call.test.d.ts +2 -0
  221. package/esm/types/domain/__tests__/Call.test.d.ts.map +1 -0
  222. package/esm/types/domain/__tests__/CallLog.test.d.ts +2 -0
  223. package/esm/types/domain/__tests__/CallLog.test.d.ts.map +1 -0
  224. package/esm/types/domain/__tests__/CallSession.test.d.ts +2 -0
  225. package/esm/types/domain/__tests__/CallSession.test.d.ts.map +1 -0
  226. package/esm/types/domain/__tests__/Contact.test.d.ts +2 -0
  227. package/esm/types/domain/__tests__/Contact.test.d.ts.map +1 -0
  228. package/esm/types/domain/__tests__/IndirectTransfer.test.d.ts +2 -0
  229. package/esm/types/domain/__tests__/IndirectTransfer.test.d.ts.map +1 -0
  230. package/esm/types/domain/__tests__/Line.test.d.ts +2 -0
  231. package/esm/types/domain/__tests__/Line.test.d.ts.map +1 -0
  232. package/esm/types/domain/__tests__/Meeting.test.d.ts +2 -0
  233. package/esm/types/domain/__tests__/Meeting.test.d.ts.map +1 -0
  234. package/esm/types/domain/__tests__/MeetingAuthorization.test.d.ts +2 -0
  235. package/esm/types/domain/__tests__/MeetingAuthorization.test.d.ts.map +1 -0
  236. package/esm/types/domain/__tests__/Profile.test.d.ts +2 -0
  237. package/esm/types/domain/__tests__/Profile.test.d.ts.map +1 -0
  238. package/esm/types/domain/__tests__/Room.test.d.ts +2 -0
  239. package/esm/types/domain/__tests__/Room.test.d.ts.map +1 -0
  240. package/esm/types/domain/__tests__/Session.test.d.ts +2 -0
  241. package/esm/types/domain/__tests__/Session.test.d.ts.map +1 -0
  242. package/esm/types/domain/__tests__/SipLine.test.d.ts +2 -0
  243. package/esm/types/domain/__tests__/SipLine.test.d.ts.map +1 -0
  244. package/esm/types/domain/__tests__/Voicemail.test.d.ts +2 -0
  245. package/esm/types/domain/__tests__/Voicemail.test.d.ts.map +1 -0
  246. package/esm/types/domain/types.d.ts +217 -0
  247. package/esm/types/domain/types.d.ts.map +1 -0
  248. package/esm/types/index.d.ts +304 -0
  249. package/esm/types/index.d.ts.map +1 -0
  250. package/esm/types/lib/WazoSessionDescriptionHandler.d.ts +30 -0
  251. package/esm/types/lib/WazoSessionDescriptionHandler.d.ts.map +1 -0
  252. package/esm/types/pubkey.d.ts +3 -0
  253. package/esm/types/pubkey.d.ts.map +1 -0
  254. package/esm/types/service/CallApi.d.ts +28 -0
  255. package/esm/types/service/CallApi.d.ts.map +1 -0
  256. package/esm/types/service/IssueReporter.d.ts +40 -0
  257. package/esm/types/service/IssueReporter.d.ts.map +1 -0
  258. package/esm/types/service/__tests__/IssueReporter.test.d.ts +2 -0
  259. package/esm/types/service/__tests__/IssueReporter.test.d.ts.map +1 -0
  260. package/esm/types/service/getApiClient.d.ts +16 -0
  261. package/esm/types/service/getApiClient.d.ts.map +1 -0
  262. package/esm/types/simple/Auth.d.ts +51 -0
  263. package/esm/types/simple/Auth.d.ts.map +1 -0
  264. package/esm/types/simple/Configuration.d.ts +3 -0
  265. package/esm/types/simple/Configuration.d.ts.map +1 -0
  266. package/esm/types/simple/Directory.d.ts +3 -0
  267. package/esm/types/simple/Directory.d.ts.map +1 -0
  268. package/esm/types/simple/Phone.d.ts +115 -0
  269. package/esm/types/simple/Phone.d.ts.map +1 -0
  270. package/esm/types/simple/Websocket.d.ts +19 -0
  271. package/esm/types/simple/Websocket.d.ts.map +1 -0
  272. package/esm/types/simple/index.d.ts +147 -0
  273. package/esm/types/simple/index.d.ts.map +1 -0
  274. package/esm/types/simple/room/LocalParticipant.d.ts +5 -0
  275. package/esm/types/simple/room/LocalParticipant.d.ts.map +1 -0
  276. package/esm/types/simple/room/Participant.d.ts +76 -0
  277. package/esm/types/simple/room/Participant.d.ts.map +1 -0
  278. package/esm/types/simple/room/RemoteParticipant.d.ts +7 -0
  279. package/esm/types/simple/room/RemoteParticipant.d.ts.map +1 -0
  280. package/esm/types/simple/room/Room.d.ts +116 -0
  281. package/esm/types/simple/room/Room.d.ts.map +1 -0
  282. package/esm/types/simple/room/SipRoom.d.ts +14 -0
  283. package/esm/types/simple/room/SipRoom.d.ts.map +1 -0
  284. package/esm/types/simple/room/Stream.d.ts +13 -0
  285. package/esm/types/simple/room/Stream.d.ts.map +1 -0
  286. package/esm/types/simple/room/__tests__/Participant.test.d.ts +2 -0
  287. package/esm/types/simple/room/__tests__/Participant.test.d.ts.map +1 -0
  288. package/esm/types/simple/room/__tests__/RemoteParticipant.test.d.ts +2 -0
  289. package/esm/types/simple/room/__tests__/RemoteParticipant.test.d.ts.map +1 -0
  290. package/esm/types/simple/utils.d.ts +3 -0
  291. package/esm/types/simple/utils.d.ts.map +1 -0
  292. package/esm/types/types/WebSocketMessage.d.ts +285 -0
  293. package/esm/types/types/WebSocketMessage.d.ts.map +1 -0
  294. package/esm/types/utils/Emitter.d.ts +18 -0
  295. package/esm/types/utils/Emitter.d.ts.map +1 -0
  296. package/esm/types/utils/Heartbeat.d.ts +21 -0
  297. package/esm/types/utils/Heartbeat.d.ts.map +1 -0
  298. package/esm/types/utils/PhoneNumberUtil.d.ts +8 -0
  299. package/esm/types/utils/PhoneNumberUtil.d.ts.map +1 -0
  300. package/esm/types/utils/__tests__/Heartbeat.test.d.ts +2 -0
  301. package/esm/types/utils/__tests__/Heartbeat.test.d.ts.map +1 -0
  302. package/esm/types/utils/__tests__/PhoneNumberUtil.test.d.ts +2 -0
  303. package/esm/types/utils/__tests__/PhoneNumberUtil.test.d.ts.map +1 -0
  304. package/esm/types/utils/__tests__/api-requester.test.d.ts +2 -0
  305. package/esm/types/utils/__tests__/api-requester.test.d.ts.map +1 -0
  306. package/esm/types/utils/__tests__/array.test.d.ts +2 -0
  307. package/esm/types/utils/__tests__/array.test.d.ts.map +1 -0
  308. package/esm/types/utils/__tests__/compare-version.test.d.ts +2 -0
  309. package/esm/types/utils/__tests__/compare-version.test.d.ts.map +1 -0
  310. package/esm/types/utils/__tests__/object.test.d.ts +2 -0
  311. package/esm/types/utils/__tests__/object.test.d.ts.map +1 -0
  312. package/esm/types/utils/__tests__/sdp.test.d.ts +2 -0
  313. package/esm/types/utils/__tests__/sdp.test.d.ts.map +1 -0
  314. package/esm/types/utils/__tests__/string.test.d.ts +2 -0
  315. package/esm/types/utils/__tests__/string.test.d.ts.map +1 -0
  316. package/esm/types/utils/api-requester.d.ts +45 -0
  317. package/esm/types/utils/api-requester.d.ts.map +1 -0
  318. package/esm/types/utils/array.d.ts +2 -0
  319. package/esm/types/utils/array.d.ts.map +1 -0
  320. package/esm/types/utils/compare-version.d.ts +3 -0
  321. package/esm/types/utils/compare-version.d.ts.map +1 -0
  322. package/esm/types/utils/isMobile.d.ts +3 -0
  323. package/esm/types/utils/isMobile.d.ts.map +1 -0
  324. package/esm/types/utils/new-from.d.ts +3 -0
  325. package/esm/types/utils/new-from.d.ts.map +1 -0
  326. package/esm/types/utils/object.d.ts +2 -0
  327. package/esm/types/utils/object.d.ts.map +1 -0
  328. package/esm/types/utils/once.d.ts +2 -0
  329. package/esm/types/utils/once.d.ts.map +1 -0
  330. package/esm/types/utils/sdp.d.ts +13 -0
  331. package/esm/types/utils/sdp.d.ts.map +1 -0
  332. package/esm/types/utils/string.d.ts +2 -0
  333. package/esm/types/utils/string.d.ts.map +1 -0
  334. package/esm/types/utils/update-from.d.ts +3 -0
  335. package/esm/types/utils/update-from.d.ts.map +1 -0
  336. package/esm/types/utils/webrtc.d.ts +15 -0
  337. package/esm/types/utils/webrtc.d.ts.map +1 -0
  338. package/esm/types/web-rtc-client.d.ts +211 -0
  339. package/esm/types/web-rtc-client.d.ts.map +1 -0
  340. package/esm/types/websocket-client.d.ts +134 -0
  341. package/esm/types/websocket-client.d.ts.map +1 -0
  342. package/esm/utils/Emitter.js +17 -27
  343. package/esm/utils/Heartbeat.js +60 -83
  344. package/esm/utils/PhoneNumberUtil.js +48 -63
  345. package/esm/utils/__tests__/Heartbeat.test.js +59 -168
  346. package/esm/utils/__tests__/PhoneNumberUtil.test.js +55 -125
  347. package/esm/utils/__tests__/api-requester.test.js +127 -780
  348. package/esm/utils/__tests__/array.test.js +16 -19
  349. package/esm/utils/__tests__/compare-version.test.js +8 -26
  350. package/esm/utils/__tests__/object.test.js +73 -54
  351. package/esm/utils/__tests__/sdp.test.js +87 -216
  352. package/esm/utils/__tests__/string.test.js +21 -27
  353. package/esm/utils/api-requester.js +197 -675
  354. package/esm/utils/array.js +7 -11
  355. package/esm/utils/compare-version.js +12 -15
  356. package/esm/utils/isMobile.js +0 -2
  357. package/esm/utils/new-from.js +7 -12
  358. package/esm/utils/object.js +9 -23
  359. package/esm/utils/once.js +12 -13
  360. package/esm/utils/sdp.js +87 -131
  361. package/esm/utils/string.js +5 -9
  362. package/esm/utils/update-from.js +9 -16
  363. package/esm/utils/webrtc.js +35 -36
  364. package/esm/web-rtc-client.js +1973 -7678
  365. package/esm/websocket-client.js +352 -944
  366. package/lib/__tests__/api-client.test.js +199 -5067
  367. package/lib/__tests__/web-rtc-client.test.js +191 -7943
  368. package/lib/api/agentd.js +27 -837
  369. package/lib/api/amid.js +18 -415
  370. package/lib/api/application.js +64 -834
  371. package/lib/api/auth.js +166 -1222
  372. package/lib/api/call-logd.js +28 -738
  373. package/lib/api/calld.js +126 -1473
  374. package/lib/api/chatd.js +49 -1316
  375. package/lib/api/confd.js +79 -1584
  376. package/lib/api/ctid-ng.js +96 -1348
  377. package/lib/api/dird.js +105 -1596
  378. package/lib/api/webhookd.js +11 -518
  379. package/lib/api-client.js +138 -4884
  380. package/lib/checker/Checker.js +61 -8741
  381. package/lib/checker/checks/aor.js +37 -4929
  382. package/lib/checker/checks/api.js +81 -4971
  383. package/lib/checker/checks/ice-ipv4.js +66 -118
  384. package/lib/checker/checks/index.js +13 -8689
  385. package/lib/checker/checks/symmetric-nat.js +56 -104
  386. package/lib/checker/checks/wazo-websocket.js +58 -1006
  387. package/lib/checker/checks/webrtc-transport.js +41 -7855
  388. package/lib/checker/checks/webrtc.js +42 -7860
  389. package/lib/domain/AdHocAPIConference.js +80 -5116
  390. package/lib/domain/Agent.js +23 -64
  391. package/lib/domain/BadResponse.js +17 -44
  392. package/lib/domain/Call.js +108 -215
  393. package/lib/domain/CallLog.js +117 -311
  394. package/lib/domain/CallSession.js +221 -424
  395. package/lib/domain/ChatMessage.js +49 -110
  396. package/lib/domain/ChatRoom.js +28 -60
  397. package/lib/domain/Contact.js +404 -742
  398. package/lib/domain/Country.js +19 -21
  399. package/lib/domain/Device/DebugDevice.js +34 -49
  400. package/lib/domain/Device/Device.js +2 -2
  401. package/lib/domain/DirectorySource.js +2 -2
  402. package/lib/domain/ExternalApp.js +24 -56
  403. package/lib/domain/Features.js +68 -5018
  404. package/lib/domain/ForwardOption.js +36 -71
  405. package/lib/domain/IndirectTransfer.js +39 -98
  406. package/lib/domain/Line.js +35 -88
  407. package/lib/domain/Meeting.js +51 -118
  408. package/lib/domain/MeetingAuthorization.js +35 -75
  409. package/lib/domain/MeetingStatus.js +13 -29
  410. package/lib/domain/NotificationOptions.js +45 -77
  411. package/lib/domain/Phone/CTIPhone.js +283 -5755
  412. package/lib/domain/Phone/Phone.js +2 -5
  413. package/lib/domain/Phone/WebRTCPhone.js +1446 -2715
  414. package/lib/domain/Profile.js +127 -406
  415. package/lib/domain/Recording.js +28 -57
  416. package/lib/domain/Relocation.js +15 -43
  417. package/lib/domain/Room.js +73 -134
  418. package/lib/domain/SFUNotAvailableError.js +7 -9
  419. package/lib/domain/ServerError.js +14 -63
  420. package/lib/domain/Session.js +118 -251
  421. package/lib/domain/SipLine.js +70 -155
  422. package/lib/domain/Subscription.js +32 -86
  423. package/lib/domain/SwitchboardCall.js +45 -145
  424. package/lib/domain/Voicemail.js +56 -127
  425. package/lib/domain/__tests__/Agent.test.js +36 -103
  426. package/lib/domain/__tests__/Call.test.js +28 -237
  427. package/lib/domain/__tests__/CallLog.test.js +65 -392
  428. package/lib/domain/__tests__/CallSession.test.js +78 -503
  429. package/lib/domain/__tests__/Contact.test.js +224 -903
  430. package/lib/domain/__tests__/IndirectTransfer.test.js +75 -546
  431. package/lib/domain/__tests__/Line.test.js +52 -157
  432. package/lib/domain/__tests__/Meeting.test.js +78 -232
  433. package/lib/domain/__tests__/MeetingAuthorization.test.js +50 -107
  434. package/lib/domain/__tests__/Profile.test.js +161 -496
  435. package/lib/domain/__tests__/Room.test.js +239 -719
  436. package/lib/domain/__tests__/Session.test.js +350 -1024
  437. package/lib/domain/__tests__/SipLine.test.js +28 -180
  438. package/lib/domain/__tests__/Voicemail.test.js +86 -205
  439. package/lib/domain/types.js +2 -2
  440. package/lib/index.js +105 -15012
  441. package/lib/lib/WazoSessionDescriptionHandler.js +409 -898
  442. package/lib/pubkey.js +12 -0
  443. package/lib/service/CallApi.js +88 -5015
  444. package/lib/service/IssueReporter.js +264 -366
  445. package/lib/service/__tests__/IssueReporter.test.js +97 -500
  446. package/lib/service/getApiClient.js +70 -4990
  447. package/lib/simple/Auth.js +271 -14779
  448. package/lib/simple/Configuration.js +23 -14807
  449. package/lib/simple/Directory.js +18 -4966
  450. package/lib/simple/Phone.js +345 -14748
  451. package/lib/simple/Websocket.js +98 -1117
  452. package/lib/simple/index.js +151 -14802
  453. package/lib/simple/room/LocalParticipant.js +7 -14810
  454. package/lib/simple/room/Participant.js +269 -14780
  455. package/lib/simple/room/RemoteParticipant.js +11 -14808
  456. package/lib/simple/room/Room.js +655 -14763
  457. package/lib/simple/room/SipRoom.js +136 -14807
  458. package/lib/simple/room/Stream.js +43 -14804
  459. package/lib/simple/room/__tests__/Participant.test.js +79 -14881
  460. package/lib/simple/room/__tests__/RemoteParticipant.test.js +14 -14816
  461. package/lib/simple/utils.js +22 -14810
  462. package/lib/types/WebSocketMessage.js +2 -4
  463. package/lib/types/__tests__/api-client.test.d.ts +2 -0
  464. package/lib/types/__tests__/api-client.test.d.ts.map +1 -0
  465. package/lib/types/__tests__/web-rtc-client.test.d.ts +2 -0
  466. package/lib/types/__tests__/web-rtc-client.test.d.ts.map +1 -0
  467. package/lib/types/api/agentd.d.ts +17 -0
  468. package/lib/types/api/agentd.d.ts.map +1 -0
  469. package/lib/types/api/amid.d.ts +8 -0
  470. package/lib/types/api/amid.d.ts.map +1 -0
  471. package/lib/types/api/application.d.ts +34 -0
  472. package/lib/types/api/application.d.ts.map +1 -0
  473. package/lib/types/api/auth.d.ts +64 -0
  474. package/lib/types/api/auth.d.ts.map +1 -0
  475. package/lib/types/api/call-logd.d.ts +12 -0
  476. package/lib/types/api/call-logd.d.ts.map +1 -0
  477. package/lib/types/api/calld.d.ts +51 -0
  478. package/lib/types/api/calld.d.ts.map +1 -0
  479. package/lib/types/api/chatd.d.ts +42 -0
  480. package/lib/types/api/chatd.d.ts.map +1 -0
  481. package/lib/types/api/confd.d.ts +39 -0
  482. package/lib/types/api/confd.d.ts.map +1 -0
  483. package/lib/types/api/ctid-ng.d.ts +36 -0
  484. package/lib/types/api/ctid-ng.d.ts.map +1 -0
  485. package/lib/types/api/dird.d.ts +38 -0
  486. package/lib/types/api/dird.d.ts.map +1 -0
  487. package/lib/types/api/webhookd.d.ts +24 -0
  488. package/lib/types/api/webhookd.d.ts.map +1 -0
  489. package/lib/types/api-client.d.ts +63 -0
  490. package/lib/types/api-client.d.ts.map +1 -0
  491. package/lib/types/checker/Checker.d.ts +13 -0
  492. package/lib/types/checker/Checker.d.ts.map +1 -0
  493. package/lib/types/checker/checks/aor.d.ts +6 -0
  494. package/lib/types/checker/checks/aor.d.ts.map +1 -0
  495. package/lib/types/checker/checks/api.d.ts +6 -0
  496. package/lib/types/checker/checks/api.d.ts.map +1 -0
  497. package/lib/types/checker/checks/ice-ipv4.d.ts +6 -0
  498. package/lib/types/checker/checks/ice-ipv4.d.ts.map +1 -0
  499. package/lib/types/checker/checks/index.d.ts +9 -0
  500. package/lib/types/checker/checks/index.d.ts.map +1 -0
  501. package/lib/types/checker/checks/symmetric-nat.d.ts +6 -0
  502. package/lib/types/checker/checks/symmetric-nat.d.ts.map +1 -0
  503. package/lib/types/checker/checks/wazo-websocket.d.ts +6 -0
  504. package/lib/types/checker/checks/wazo-websocket.d.ts.map +1 -0
  505. package/lib/types/checker/checks/webrtc-transport.d.ts +7 -0
  506. package/lib/types/checker/checks/webrtc-transport.d.ts.map +1 -0
  507. package/lib/types/checker/checks/webrtc.d.ts +6 -0
  508. package/lib/types/checker/checks/webrtc.d.ts.map +1 -0
  509. package/lib/types/domain/AdHocAPIConference.d.ts +54 -0
  510. package/lib/types/domain/AdHocAPIConference.d.ts.map +1 -0
  511. package/lib/types/domain/Agent.d.ts +31 -0
  512. package/lib/types/domain/Agent.d.ts.map +1 -0
  513. package/lib/types/domain/BadResponse.d.ts +11 -0
  514. package/lib/types/domain/BadResponse.d.ts.map +1 -0
  515. package/lib/types/domain/Call.d.ts +79 -0
  516. package/lib/types/domain/Call.d.ts.map +1 -0
  517. package/lib/types/domain/CallLog.d.ts +91 -0
  518. package/lib/types/domain/CallLog.d.ts.map +1 -0
  519. package/lib/types/domain/CallSession.d.ts +120 -0
  520. package/lib/types/domain/CallSession.d.ts.map +1 -0
  521. package/lib/types/domain/ChatMessage.d.ts +41 -0
  522. package/lib/types/domain/ChatMessage.d.ts.map +1 -0
  523. package/lib/types/domain/ChatRoom.d.ts +22 -0
  524. package/lib/types/domain/ChatRoom.d.ts.map +1 -0
  525. package/lib/types/domain/Contact.d.ts +316 -0
  526. package/lib/types/domain/Contact.d.ts.map +1 -0
  527. package/lib/types/domain/Country.d.ts +20 -0
  528. package/lib/types/domain/Country.d.ts.map +1 -0
  529. package/lib/types/domain/Device/DebugDevice.d.ts +14 -0
  530. package/lib/types/domain/Device/DebugDevice.d.ts.map +1 -0
  531. package/lib/types/domain/Device/Device.d.ts +13 -0
  532. package/lib/types/domain/Device/Device.d.ts.map +1 -0
  533. package/lib/types/domain/DirectorySource.d.ts +13 -0
  534. package/lib/types/domain/DirectorySource.d.ts.map +1 -0
  535. package/lib/types/domain/ExternalApp.d.ts +22 -0
  536. package/lib/types/domain/ExternalApp.d.ts.map +1 -0
  537. package/lib/types/domain/Features.d.ts +24 -0
  538. package/lib/types/domain/Features.d.ts.map +1 -0
  539. package/lib/types/domain/ForwardOption.d.ts +27 -0
  540. package/lib/types/domain/ForwardOption.d.ts.map +1 -0
  541. package/lib/types/domain/IndirectTransfer.d.ts +31 -0
  542. package/lib/types/domain/IndirectTransfer.d.ts.map +1 -0
  543. package/lib/types/domain/Line.d.ts +46 -0
  544. package/lib/types/domain/Line.d.ts.map +1 -0
  545. package/lib/types/domain/Meeting.d.ts +45 -0
  546. package/lib/types/domain/Meeting.d.ts.map +1 -0
  547. package/lib/types/domain/MeetingAuthorization.d.ts +26 -0
  548. package/lib/types/domain/MeetingAuthorization.d.ts.map +1 -0
  549. package/lib/types/domain/MeetingStatus.d.ts +10 -0
  550. package/lib/types/domain/MeetingStatus.d.ts.map +1 -0
  551. package/lib/types/domain/NotificationOptions.d.ts +22 -0
  552. package/lib/types/domain/NotificationOptions.d.ts.map +1 -0
  553. package/lib/types/domain/Phone/CTIPhone.d.ts +76 -0
  554. package/lib/types/domain/Phone/CTIPhone.d.ts.map +1 -0
  555. package/lib/types/domain/Phone/Phone.d.ts +71 -0
  556. package/lib/types/domain/Phone/Phone.d.ts.map +1 -0
  557. package/lib/types/domain/Phone/WebRTCPhone.d.ts +179 -0
  558. package/lib/types/domain/Phone/WebRTCPhone.d.ts.map +1 -0
  559. package/lib/types/domain/Profile.d.ts +151 -0
  560. package/lib/types/domain/Profile.d.ts.map +1 -0
  561. package/lib/types/domain/Recording.d.ts +26 -0
  562. package/lib/types/domain/Recording.d.ts.map +1 -0
  563. package/lib/types/domain/Relocation.d.ts +23 -0
  564. package/lib/types/domain/Relocation.d.ts.map +1 -0
  565. package/lib/types/domain/Room.d.ts +35 -0
  566. package/lib/types/domain/Room.d.ts.map +1 -0
  567. package/lib/types/domain/SFUNotAvailableError.d.ts +4 -0
  568. package/lib/types/domain/SFUNotAvailableError.d.ts.map +1 -0
  569. package/lib/types/domain/ServerError.d.ts +6 -0
  570. package/lib/types/domain/ServerError.d.ts.map +1 -0
  571. package/lib/types/domain/Session.d.ts +90 -0
  572. package/lib/types/domain/Session.d.ts.map +1 -0
  573. package/lib/types/domain/SipLine.d.ts +54 -0
  574. package/lib/types/domain/SipLine.d.ts.map +1 -0
  575. package/lib/types/domain/Subscription.d.ts +43 -0
  576. package/lib/types/domain/Subscription.d.ts.map +1 -0
  577. package/lib/types/domain/SwitchboardCall.d.ts +62 -0
  578. package/lib/types/domain/SwitchboardCall.d.ts.map +1 -0
  579. package/lib/types/domain/Voicemail.d.ts +50 -0
  580. package/lib/types/domain/Voicemail.d.ts.map +1 -0
  581. package/lib/types/domain/__tests__/Agent.test.d.ts +2 -0
  582. package/lib/types/domain/__tests__/Agent.test.d.ts.map +1 -0
  583. package/lib/types/domain/__tests__/Call.test.d.ts +2 -0
  584. package/lib/types/domain/__tests__/Call.test.d.ts.map +1 -0
  585. package/lib/types/domain/__tests__/CallLog.test.d.ts +2 -0
  586. package/lib/types/domain/__tests__/CallLog.test.d.ts.map +1 -0
  587. package/lib/types/domain/__tests__/CallSession.test.d.ts +2 -0
  588. package/lib/types/domain/__tests__/CallSession.test.d.ts.map +1 -0
  589. package/lib/types/domain/__tests__/Contact.test.d.ts +2 -0
  590. package/lib/types/domain/__tests__/Contact.test.d.ts.map +1 -0
  591. package/lib/types/domain/__tests__/IndirectTransfer.test.d.ts +2 -0
  592. package/lib/types/domain/__tests__/IndirectTransfer.test.d.ts.map +1 -0
  593. package/lib/types/domain/__tests__/Line.test.d.ts +2 -0
  594. package/lib/types/domain/__tests__/Line.test.d.ts.map +1 -0
  595. package/lib/types/domain/__tests__/Meeting.test.d.ts +2 -0
  596. package/lib/types/domain/__tests__/Meeting.test.d.ts.map +1 -0
  597. package/lib/types/domain/__tests__/MeetingAuthorization.test.d.ts +2 -0
  598. package/lib/types/domain/__tests__/MeetingAuthorization.test.d.ts.map +1 -0
  599. package/lib/types/domain/__tests__/Profile.test.d.ts +2 -0
  600. package/lib/types/domain/__tests__/Profile.test.d.ts.map +1 -0
  601. package/lib/types/domain/__tests__/Room.test.d.ts +2 -0
  602. package/lib/types/domain/__tests__/Room.test.d.ts.map +1 -0
  603. package/lib/types/domain/__tests__/Session.test.d.ts +2 -0
  604. package/lib/types/domain/__tests__/Session.test.d.ts.map +1 -0
  605. package/lib/types/domain/__tests__/SipLine.test.d.ts +2 -0
  606. package/lib/types/domain/__tests__/SipLine.test.d.ts.map +1 -0
  607. package/lib/types/domain/__tests__/Voicemail.test.d.ts +2 -0
  608. package/lib/types/domain/__tests__/Voicemail.test.d.ts.map +1 -0
  609. package/lib/types/domain/types.d.ts +217 -0
  610. package/lib/types/domain/types.d.ts.map +1 -0
  611. package/lib/types/index.d.ts +304 -0
  612. package/lib/types/index.d.ts.map +1 -0
  613. package/lib/types/lib/WazoSessionDescriptionHandler.d.ts +30 -0
  614. package/lib/types/lib/WazoSessionDescriptionHandler.d.ts.map +1 -0
  615. package/lib/types/pubkey.d.ts +3 -0
  616. package/lib/types/pubkey.d.ts.map +1 -0
  617. package/lib/types/service/CallApi.d.ts +28 -0
  618. package/lib/types/service/CallApi.d.ts.map +1 -0
  619. package/lib/types/service/IssueReporter.d.ts +40 -0
  620. package/lib/types/service/IssueReporter.d.ts.map +1 -0
  621. package/lib/types/service/__tests__/IssueReporter.test.d.ts +2 -0
  622. package/lib/types/service/__tests__/IssueReporter.test.d.ts.map +1 -0
  623. package/lib/types/service/getApiClient.d.ts +16 -0
  624. package/lib/types/service/getApiClient.d.ts.map +1 -0
  625. package/lib/types/simple/Auth.d.ts +51 -0
  626. package/lib/types/simple/Auth.d.ts.map +1 -0
  627. package/lib/types/simple/Configuration.d.ts +3 -0
  628. package/lib/types/simple/Configuration.d.ts.map +1 -0
  629. package/lib/types/simple/Directory.d.ts +3 -0
  630. package/lib/types/simple/Directory.d.ts.map +1 -0
  631. package/lib/types/simple/Phone.d.ts +115 -0
  632. package/lib/types/simple/Phone.d.ts.map +1 -0
  633. package/lib/types/simple/Websocket.d.ts +19 -0
  634. package/lib/types/simple/Websocket.d.ts.map +1 -0
  635. package/lib/types/simple/index.d.ts +147 -0
  636. package/lib/types/simple/index.d.ts.map +1 -0
  637. package/lib/types/simple/room/LocalParticipant.d.ts +5 -0
  638. package/lib/types/simple/room/LocalParticipant.d.ts.map +1 -0
  639. package/lib/types/simple/room/Participant.d.ts +76 -0
  640. package/lib/types/simple/room/Participant.d.ts.map +1 -0
  641. package/lib/types/simple/room/RemoteParticipant.d.ts +7 -0
  642. package/lib/types/simple/room/RemoteParticipant.d.ts.map +1 -0
  643. package/lib/types/simple/room/Room.d.ts +116 -0
  644. package/lib/types/simple/room/Room.d.ts.map +1 -0
  645. package/lib/types/simple/room/SipRoom.d.ts +14 -0
  646. package/lib/types/simple/room/SipRoom.d.ts.map +1 -0
  647. package/lib/types/simple/room/Stream.d.ts +13 -0
  648. package/lib/types/simple/room/Stream.d.ts.map +1 -0
  649. package/lib/types/simple/room/__tests__/Participant.test.d.ts +2 -0
  650. package/lib/types/simple/room/__tests__/Participant.test.d.ts.map +1 -0
  651. package/lib/types/simple/room/__tests__/RemoteParticipant.test.d.ts +2 -0
  652. package/lib/types/simple/room/__tests__/RemoteParticipant.test.d.ts.map +1 -0
  653. package/lib/types/simple/utils.d.ts +3 -0
  654. package/lib/types/simple/utils.d.ts.map +1 -0
  655. package/lib/types/types/WebSocketMessage.d.ts +285 -0
  656. package/lib/types/types/WebSocketMessage.d.ts.map +1 -0
  657. package/lib/types/utils/Emitter.d.ts +18 -0
  658. package/lib/types/utils/Emitter.d.ts.map +1 -0
  659. package/lib/types/utils/Heartbeat.d.ts +21 -0
  660. package/lib/types/utils/Heartbeat.d.ts.map +1 -0
  661. package/lib/types/utils/PhoneNumberUtil.d.ts +8 -0
  662. package/lib/types/utils/PhoneNumberUtil.d.ts.map +1 -0
  663. package/lib/types/utils/__tests__/Heartbeat.test.d.ts +2 -0
  664. package/lib/types/utils/__tests__/Heartbeat.test.d.ts.map +1 -0
  665. package/lib/types/utils/__tests__/PhoneNumberUtil.test.d.ts +2 -0
  666. package/lib/types/utils/__tests__/PhoneNumberUtil.test.d.ts.map +1 -0
  667. package/lib/types/utils/__tests__/api-requester.test.d.ts +2 -0
  668. package/lib/types/utils/__tests__/api-requester.test.d.ts.map +1 -0
  669. package/lib/types/utils/__tests__/array.test.d.ts +2 -0
  670. package/lib/types/utils/__tests__/array.test.d.ts.map +1 -0
  671. package/lib/types/utils/__tests__/compare-version.test.d.ts +2 -0
  672. package/lib/types/utils/__tests__/compare-version.test.d.ts.map +1 -0
  673. package/lib/types/utils/__tests__/object.test.d.ts +2 -0
  674. package/lib/types/utils/__tests__/object.test.d.ts.map +1 -0
  675. package/lib/types/utils/__tests__/sdp.test.d.ts +2 -0
  676. package/lib/types/utils/__tests__/sdp.test.d.ts.map +1 -0
  677. package/lib/types/utils/__tests__/string.test.d.ts +2 -0
  678. package/lib/types/utils/__tests__/string.test.d.ts.map +1 -0
  679. package/lib/types/utils/api-requester.d.ts +45 -0
  680. package/lib/types/utils/api-requester.d.ts.map +1 -0
  681. package/lib/types/utils/array.d.ts +2 -0
  682. package/lib/types/utils/array.d.ts.map +1 -0
  683. package/lib/types/utils/compare-version.d.ts +3 -0
  684. package/lib/types/utils/compare-version.d.ts.map +1 -0
  685. package/lib/types/utils/isMobile.d.ts +3 -0
  686. package/lib/types/utils/isMobile.d.ts.map +1 -0
  687. package/lib/types/utils/new-from.d.ts +3 -0
  688. package/lib/types/utils/new-from.d.ts.map +1 -0
  689. package/lib/types/utils/object.d.ts +2 -0
  690. package/lib/types/utils/object.d.ts.map +1 -0
  691. package/lib/types/utils/once.d.ts +2 -0
  692. package/lib/types/utils/once.d.ts.map +1 -0
  693. package/lib/types/utils/sdp.d.ts +13 -0
  694. package/lib/types/utils/sdp.d.ts.map +1 -0
  695. package/lib/types/utils/string.d.ts +2 -0
  696. package/lib/types/utils/string.d.ts.map +1 -0
  697. package/lib/types/utils/update-from.d.ts +3 -0
  698. package/lib/types/utils/update-from.d.ts.map +1 -0
  699. package/lib/types/utils/webrtc.d.ts +15 -0
  700. package/lib/types/utils/webrtc.d.ts.map +1 -0
  701. package/lib/types/web-rtc-client.d.ts +211 -0
  702. package/lib/types/web-rtc-client.d.ts.map +1 -0
  703. package/lib/types/websocket-client.d.ts +134 -0
  704. package/lib/types/websocket-client.d.ts.map +1 -0
  705. package/lib/utils/Emitter.js +22 -33
  706. package/lib/utils/Heartbeat.js +54 -86
  707. package/lib/utils/PhoneNumberUtil.js +60 -77
  708. package/lib/utils/__tests__/Heartbeat.test.js +73 -170
  709. package/lib/utils/__tests__/PhoneNumberUtil.test.js +57 -131
  710. package/lib/utils/__tests__/api-requester.test.js +139 -784
  711. package/lib/utils/__tests__/array.test.js +18 -21
  712. package/lib/utils/__tests__/compare-version.test.js +12 -27
  713. package/lib/utils/__tests__/object.test.js +75 -56
  714. package/lib/utils/__tests__/sdp.test.js +99 -220
  715. package/lib/utils/__tests__/string.test.js +23 -29
  716. package/lib/utils/api-requester.js +191 -685
  717. package/lib/utils/array.js +10 -14
  718. package/lib/utils/compare-version.js +15 -18
  719. package/lib/utils/isMobile.js +3 -5
  720. package/lib/utils/new-from.js +9 -14
  721. package/lib/utils/object.js +12 -26
  722. package/lib/utils/once.js +15 -15
  723. package/lib/utils/sdp.js +97 -150
  724. package/lib/utils/string.js +8 -12
  725. package/lib/utils/update-from.js +11 -18
  726. package/lib/utils/webrtc.js +38 -39
  727. package/lib/web-rtc-client.js +1999 -7698
  728. package/lib/websocket-client.js +357 -1021
  729. package/package.json +40 -34
  730. package/src/__tests__/{api-client.test.js → api-client.test.ts} +71 -29
  731. package/src/__tests__/{web-rtc-client.test.js → web-rtc-client.test.ts} +95 -35
  732. package/src/api/agentd.ts +37 -0
  733. package/src/api/amid.ts +16 -0
  734. package/src/api/application.ts +96 -0
  735. package/src/api/auth.ts +259 -0
  736. package/src/api/call-logd.ts +38 -0
  737. package/src/api/calld.ts +183 -0
  738. package/src/api/chatd.ts +83 -0
  739. package/src/api/confd.ts +110 -0
  740. package/src/api/ctid-ng.ts +152 -0
  741. package/src/api/dird.ts +146 -0
  742. package/src/api/webhookd.ts +30 -0
  743. package/src/{api-client.js → api-client.ts} +99 -65
  744. package/src/checker/{Checker.js → Checker.ts} +27 -20
  745. package/src/checker/checks/{aor.js → aor.ts} +10 -6
  746. package/src/checker/checks/{api.js → api.ts} +18 -17
  747. package/src/checker/checks/{ice-ipv4.js → ice-ipv4.ts} +23 -26
  748. package/src/checker/checks/{index.js → index.ts} +1 -9
  749. package/src/checker/checks/{symmetric-nat.js → symmetric-nat.ts} +14 -15
  750. package/src/checker/checks/{wazo-websocket.js → wazo-websocket.ts} +7 -5
  751. package/src/checker/checks/{webrtc-transport.js → webrtc-transport.ts} +3 -2
  752. package/src/checker/checks/{webrtc.js → webrtc.ts} +3 -4
  753. package/src/domain/{AdHocAPIConference.js → AdHocAPIConference.ts} +38 -54
  754. package/src/domain/{Agent.js → Agent.ts} +11 -7
  755. package/src/domain/BadResponse.ts +29 -0
  756. package/src/domain/{Call.js → Call.ts} +62 -46
  757. package/src/domain/{CallLog.js → CallLog.ts} +61 -63
  758. package/src/domain/{CallSession.js → CallSession.ts} +55 -52
  759. package/src/domain/{ChatMessage.js → ChatMessage.ts} +32 -21
  760. package/src/domain/{ChatRoom.js → ChatRoom.ts} +15 -11
  761. package/src/domain/{Contact.js → Contact.ts} +373 -261
  762. package/src/domain/{Country.js → Country.ts} +0 -0
  763. package/src/domain/Device/{DebugDevice.js → DebugDevice.ts} +3 -5
  764. package/src/domain/Device/{Device.js → Device.ts} +0 -11
  765. package/src/domain/DirectorySource.ts +13 -0
  766. package/src/domain/{ExternalApp.js → ExternalApp.ts} +14 -13
  767. package/src/domain/{Features.js → Features.ts} +43 -17
  768. package/src/domain/{ForwardOption.js → ForwardOption.ts} +16 -16
  769. package/src/domain/{IndirectTransfer.js → IndirectTransfer.ts} +21 -19
  770. package/src/domain/{Line.js → Line.ts} +39 -26
  771. package/src/domain/{Meeting.js → Meeting.ts} +36 -29
  772. package/src/domain/{MeetingAuthorization.js → MeetingAuthorization.ts} +13 -12
  773. package/src/domain/{MeetingStatus.js → MeetingStatus.ts} +2 -6
  774. package/src/domain/{NotificationOptions.js → NotificationOptions.ts} +14 -13
  775. package/src/domain/Phone/{CTIPhone.js → CTIPhone.ts} +90 -60
  776. package/src/domain/Phone/{Phone.js → Phone.ts} +27 -72
  777. package/src/domain/Phone/{WebRTCPhone.js → WebRTCPhone.ts} +434 -413
  778. package/src/domain/{Profile.js → Profile.ts} +117 -100
  779. package/src/domain/{Recording.js → Recording.ts} +25 -16
  780. package/src/domain/{Relocation.js → Relocation.ts} +15 -14
  781. package/src/domain/{Room.js → Room.ts} +58 -27
  782. package/src/domain/{SFUNotAvailableError.js → SFUNotAvailableError.ts} +2 -2
  783. package/src/domain/ServerError.ts +12 -0
  784. package/src/domain/{Session.js → Session.ts} +89 -67
  785. package/src/domain/{SipLine.js → SipLine.ts} +52 -45
  786. package/src/domain/{Subscription.js → Subscription.ts} +22 -13
  787. package/src/domain/{SwitchboardCall.js → SwitchboardCall.ts} +48 -43
  788. package/src/domain/{Voicemail.js → Voicemail.ts} +38 -34
  789. package/src/domain/__tests__/{Agent.test.js → Agent.test.ts} +11 -19
  790. package/src/domain/__tests__/{Call.test.js → Call.test.ts} +12 -9
  791. package/src/domain/__tests__/CallLog.test.ts +65 -0
  792. package/src/domain/__tests__/{CallSession.test.js → CallSession.test.ts} +15 -19
  793. package/src/domain/__tests__/Contact.test.ts +238 -0
  794. package/src/domain/__tests__/{IndirectTransfer.test.js → IndirectTransfer.test.ts} +38 -31
  795. package/src/domain/__tests__/Line.test.ts +53 -0
  796. package/src/domain/__tests__/{Meeting.test.js → Meeting.test.ts} +12 -38
  797. package/src/domain/__tests__/{MeetingAuthorization.test.js → MeetingAuthorization.test.ts} +13 -21
  798. package/src/domain/__tests__/Profile.test.ts +139 -0
  799. package/src/domain/__tests__/{Room.test.js → Room.test.ts} +114 -76
  800. package/src/domain/__tests__/{Session.test.js → Session.test.ts} +137 -162
  801. package/src/domain/__tests__/{SipLine.test.js → SipLine.test.ts} +7 -3
  802. package/src/domain/__tests__/{Voicemail.test.js → Voicemail.test.ts} +26 -20
  803. package/src/domain/types.ts +227 -0
  804. package/src/global.d.ts +5 -0
  805. package/src/{index.js → index.ts} +4 -28
  806. package/src/lib/WazoSessionDescriptionHandler.ts +534 -0
  807. package/{config.js → src/pubkey.ts} +3 -3
  808. package/src/service/{CallApi.js → CallApi.ts} +14 -18
  809. package/src/service/{IssueReporter.js → IssueReporter.ts} +105 -56
  810. package/src/service/__tests__/{IssueReporter.test.js → IssueReporter.test.ts} +27 -23
  811. package/src/service/getApiClient.ts +94 -0
  812. package/src/simple/{Auth.js → Auth.ts} +127 -100
  813. package/src/simple/{Configuration.js → Configuration.ts} +2 -3
  814. package/src/simple/{Directory.js → Directory.ts} +2 -3
  815. package/src/simple/Phone.ts +623 -0
  816. package/src/simple/Websocket.ts +119 -0
  817. package/src/simple/{index.js → index.ts} +51 -21
  818. package/src/simple/room/{LocalParticipant.js → LocalParticipant.ts} +1 -3
  819. package/src/simple/room/{Participant.js → Participant.ts} +108 -46
  820. package/src/simple/room/{RemoteParticipant.js → RemoteParticipant.ts} +5 -4
  821. package/src/simple/room/{Room.js → Room.ts} +266 -183
  822. package/src/simple/room/{SipRoom.js → SipRoom.ts} +46 -29
  823. package/src/simple/room/{Stream.js → Stream.ts} +8 -6
  824. package/src/simple/room/__tests__/{Participant.test.js → Participant.test.ts} +9 -15
  825. package/src/simple/room/__tests__/{RemoteParticipant.test.js → RemoteParticipant.test.ts} +5 -1
  826. package/src/simple/utils.ts +12 -0
  827. package/src/types/WebSocketMessage.ts +335 -0
  828. package/src/types/global.d.ts +26 -0
  829. package/src/utils/Emitter.ts +34 -0
  830. package/src/utils/{Heartbeat.js → Heartbeat.ts} +17 -11
  831. package/src/utils/{PhoneNumberUtil.js → PhoneNumberUtil.ts} +12 -18
  832. package/src/utils/__tests__/{Heartbeat.test.js → Heartbeat.test.ts} +0 -15
  833. package/src/utils/__tests__/{PhoneNumberUtil.test.js → PhoneNumberUtil.test.ts} +6 -4
  834. package/src/utils/__tests__/{api-requester.test.js → api-requester.test.ts} +75 -24
  835. package/src/utils/__tests__/{array.test.js → array.test.ts} +10 -2
  836. package/src/utils/__tests__/{compare-version.test.js → compare-version.test.ts} +0 -0
  837. package/src/utils/__tests__/object.test.ts +77 -0
  838. package/src/utils/__tests__/{sdp.test.js → sdp.test.ts} +15 -37
  839. package/src/utils/__tests__/{string.test.js → string.test.ts} +4 -2
  840. package/src/utils/{api-requester.js → api-requester.ts} +104 -83
  841. package/src/utils/{array.js → array.ts} +2 -2
  842. package/src/utils/{compare-version.js → compare-version.ts} +3 -2
  843. package/src/utils/{isMobile.js → isMobile.ts} +1 -1
  844. package/src/utils/{new-from.js → new-from.ts} +3 -6
  845. package/src/utils/{object.js → object.ts} +3 -6
  846. package/src/utils/{once.js → once.ts} +5 -5
  847. package/src/utils/sdp.ts +119 -0
  848. package/src/utils/{string.js → string.ts} +2 -3
  849. package/src/utils/update-from.ts +11 -0
  850. package/src/utils/{webrtc.js → webrtc.ts} +21 -3
  851. package/src/{web-rtc-client.js → web-rtc-client.ts} +786 -459
  852. package/src/{websocket-client.js → websocket-client.ts} +146 -144
  853. package/esm/simple/Softphone.js +0 -394
  854. package/lib/simple/Softphone.js +0 -396
  855. package/src/api/agentd.js +0 -74
  856. package/src/api/amid.js +0 -13
  857. package/src/api/application.js +0 -137
  858. package/src/api/auth.js +0 -279
  859. package/src/api/call-logd.js +0 -20
  860. package/src/api/calld.js +0 -214
  861. package/src/api/chatd.js +0 -80
  862. package/src/api/confd.js +0 -127
  863. package/src/api/ctid-ng.js +0 -153
  864. package/src/api/dird.js +0 -159
  865. package/src/api/webhookd.js +0 -31
  866. package/src/domain/BadResponse.js +0 -42
  867. package/src/domain/DirectorySource.js +0 -16
  868. package/src/domain/ServerError.js +0 -18
  869. package/src/domain/__tests__/CallLog.test.js +0 -75
  870. package/src/domain/__tests__/Contact.test.js +0 -170
  871. package/src/domain/__tests__/Line.test.js +0 -73
  872. package/src/domain/__tests__/Profile.test.js +0 -104
  873. package/src/domain/types.js +0 -248
  874. package/src/lib/WazoSessionDescriptionHandler.js +0 -467
  875. package/src/service/getApiClient.js +0 -122
  876. package/src/simple/Phone.js +0 -425
  877. package/src/simple/Softphone.js +0 -392
  878. package/src/simple/Websocket.js +0 -86
  879. package/src/simple/utils.js +0 -17
  880. package/src/types/WebSocketMessage.js +0 -232
  881. package/src/utils/Emitter.js +0 -26
  882. package/src/utils/__tests__/object.test.js +0 -35
  883. package/src/utils/sdp.js +0 -140
  884. package/src/utils/update-from.js +0 -15
@@ -1,12 +1,10 @@
1
1
  /* eslint-disable no-param-reassign */
2
2
  /* eslint-disable no-underscore-dangle */
3
- // @flow
4
3
  import type { Message } from 'sip.js/lib/api/message';
5
- import type { Session } from 'sip.js/lib/core/session';
6
- import { Invitation } from 'sip.js/lib/api/invitation';
7
4
  import { SessionState } from 'sip.js/lib/api/session-state';
8
5
  import type { IncomingRequestMessage } from 'sip.js/lib/core/messages/incoming-request-message';
9
-
6
+ import { OutgoingInviteRequest } from 'sip.js/lib/core';
7
+ import { Inviter, Invitation, Session } from 'sip.js/lib/api';
10
8
  import CallSession from '../CallSession';
11
9
  import type { Phone, AvailablePhoneOptions } from './Phone';
12
10
  import WazoWebRTCClient from '../../web-rtc-client';
@@ -55,68 +53,26 @@ export const ON_CHAT = 'phone/ON_CHAT';
55
53
  export const ON_SIGNAL = 'phone/ON_SIGNAL';
56
54
  export const ON_DISCONNECTED = 'onDisconnected';
57
55
  export const ON_EARLY_MEDIA = 'onEarlyMedia';
58
-
59
56
  export const MESSAGE_TYPE_CHAT = 'message/TYPE_CHAT';
60
57
  export const MESSAGE_TYPE_SIGNAL = 'message/TYPE_SIGNAL';
61
-
62
- export const events = [
63
- ON_USER_AGENT,
64
- ON_REGISTERED,
65
- ON_UNREGISTERED,
66
- ON_PROGRESS,
67
- ON_CALL_ACCEPTED,
68
- ON_CALL_ANSWERED,
69
- ON_CALL_INCOMING,
70
- ON_CALL_OUTGOING,
71
- ON_CALL_MUTED,
72
- ON_CALL_UNMUTED,
73
- ON_CALL_RESUMED,
74
- ON_CALL_HELD,
75
- ON_CALL_UNHELD,
76
- ON_CAMERA_DISABLED,
77
- ON_CALL_FAILED,
78
- ON_CALL_ENDED,
79
- ON_CALL_REJECTED,
80
- ON_MESSAGE,
81
- ON_REINVITE,
82
- ON_TRACK,
83
- ON_AUDIO_STREAM,
84
- ON_VIDEO_STREAM,
85
- ON_REMOVE_STREAM,
86
- ON_SHARE_SCREEN_ENDED,
87
- ON_TERMINATE_SOUND,
88
- ON_PLAY_RING_SOUND,
89
- ON_PLAY_INBOUND_CALL_SIGNAL_SOUND,
90
- ON_PLAY_HANGUP_SOUND,
91
- ON_PLAY_PROGRESS_SOUND,
92
- ON_VIDEO_INPUT_CHANGE,
93
- ON_SHARE_SCREEN_STARTED,
94
- ON_CALL_ERROR,
95
- ON_CHAT,
96
- ON_SIGNAL,
97
- ON_NETWORK_STATS,
98
- ON_DISCONNECTED,
99
- ON_EARLY_MEDIA,
100
- ];
101
-
58
+ export const events = [ON_USER_AGENT, ON_REGISTERED, ON_UNREGISTERED, ON_PROGRESS, ON_CALL_ACCEPTED, ON_CALL_ANSWERED, ON_CALL_INCOMING, ON_CALL_OUTGOING, ON_CALL_MUTED, ON_CALL_UNMUTED, ON_CALL_RESUMED, ON_CALL_HELD, ON_CALL_UNHELD, ON_CAMERA_DISABLED, ON_CALL_FAILED, ON_CALL_ENDED, ON_CALL_REJECTED, ON_MESSAGE, ON_REINVITE, ON_TRACK, ON_AUDIO_STREAM, ON_VIDEO_STREAM, ON_REMOVE_STREAM, ON_SHARE_SCREEN_ENDED, ON_TERMINATE_SOUND, ON_PLAY_RING_SOUND, ON_PLAY_INBOUND_CALL_SIGNAL_SOUND, ON_PLAY_HANGUP_SOUND, ON_PLAY_PROGRESS_SOUND, ON_VIDEO_INPUT_CHANGE, ON_SHARE_SCREEN_STARTED, ON_CALL_ERROR, ON_CHAT, ON_SIGNAL, ON_NETWORK_STATS, ON_DISCONNECTED, ON_EARLY_MEDIA];
102
59
  const logger = IssueReporter.loggerFor('webrtc-phone');
103
-
104
60
  export default class WebRTCPhone extends Emitter implements Phone {
105
61
  client: WazoWebRTCClient;
106
62
 
107
63
  allowVideo: boolean;
108
64
 
109
- callSessions: { [string]: CallSession };
65
+ callSessions: Record<string, CallSession>;
110
66
 
111
67
  incomingSessions: string[];
112
68
 
113
- currentSipSession: Session;
69
+ currentSipSession: Invitation | Inviter | undefined;
114
70
 
115
- currentCallSession: ?CallSession;
71
+ currentCallSession: CallSession | null | undefined;
116
72
 
117
- audioOutputDeviceId: ?string;
73
+ audioOutputDeviceId: string | null | undefined;
118
74
 
119
- audioRingDeviceId: ?string;
75
+ audioRingDeviceId: string | null | undefined;
120
76
 
121
77
  audioOutputVolume: number;
122
78
 
@@ -124,26 +80,20 @@ export default class WebRTCPhone extends Emitter implements Phone {
124
80
 
125
81
  ringingEnabled: boolean;
126
82
 
127
- acceptedSessions: Object;
83
+ acceptedSessions: Record<string, any>;
128
84
 
129
- rejectedSessions: Object;
85
+ rejectedSessions: Record<string, any>;
130
86
 
131
- ignoredSessions: Object;
87
+ ignoredSessions: Record<string, any>;
132
88
 
133
- currentScreenShare: Object;
89
+ currentScreenShare: Record<string, any> | null;
134
90
 
135
- lastScreenShare: Object;
91
+ lastScreenShare: Record<string, any> | null;
136
92
 
137
93
  shouldSendReinvite: boolean;
138
94
 
139
- constructor(
140
- client: WazoWebRTCClient,
141
- audioOutputDeviceId: ?string,
142
- allowVideo: boolean = false,
143
- audioRingDeviceId?: string,
144
- ) {
95
+ constructor(client: WazoWebRTCClient, audioOutputDeviceId: string | null | undefined, allowVideo = false, audioRingDeviceId?: string) {
145
96
  super();
146
-
147
97
  this.client = client;
148
98
  this.allowVideo = allowVideo;
149
99
  this.callSessions = {};
@@ -154,9 +104,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
154
104
  this.incomingSessions = [];
155
105
  this.ringingEnabled = true;
156
106
  this.shouldSendReinvite = false;
157
-
158
107
  this.bindClientEvents();
159
-
160
108
  this.acceptedSessions = {};
161
109
  this.rejectedSessions = {};
162
110
  this.ignoredSessions = {};
@@ -172,7 +120,10 @@ export default class WebRTCPhone extends Emitter implements Phone {
172
120
  }).catch(error => {
173
121
  // Avoid exception on `t.server.scheme` in sip transport when losing the webrtc socket connection
174
122
  console.error('register error', error, error.message, error.stack);
175
- logger.error('WebRTC register error', { message: error.message, stack: error.stack });
123
+ logger.error('WebRTC register error', {
124
+ message: error.message,
125
+ stack: error.stack,
126
+ });
176
127
  });
177
128
  }
178
129
 
@@ -180,6 +131,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
180
131
  if (!this.client || !this.client.isRegistered()) {
181
132
  return null;
182
133
  }
134
+
183
135
  return this.client.unregister();
184
136
  }
185
137
 
@@ -187,6 +139,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
187
139
  if (!this.client) {
188
140
  return;
189
141
  }
142
+
190
143
  logger.info('WebRTC phone stop');
191
144
  this.client.stop();
192
145
  }
@@ -199,8 +152,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
199
152
  return true;
200
153
  }
201
154
 
202
- async sendReinvite(callSession: ?CallSession, constraints: ?Object = null, conference: boolean = false,
203
- audioOnly: boolean = false, iceRestart: boolean = false) {
155
+ async sendReinvite(callSession: CallSession | null | undefined, constraints: Record<string, any> | null | undefined = null, conference = false, audioOnly = false, iceRestart = false): Promise<OutgoingInviteRequest | void> {
204
156
  const sipSession = this.findSipSession(callSession);
205
157
  logger.info('WebRTC phone - send reinvite', {
206
158
  sessionId: sipSession ? sipSession.id : null,
@@ -211,24 +163,25 @@ export default class WebRTCPhone extends Emitter implements Phone {
211
163
  });
212
164
 
213
165
  if (!sipSession) {
214
- return false;
166
+ return;
215
167
  }
216
168
 
217
- // $FlowFixMe
218
- const shouldScreenShare = constraints && constraints.screen;
219
- const isUpgrade = shouldScreenShare || (constraints && constraints.video);
169
+ const shouldScreenShare = constraints?.screen;
170
+ const isUpgrade = shouldScreenShare || constraints?.video;
220
171
 
221
172
  // Downgrade
222
173
  if (constraints && !isUpgrade) {
223
174
  // No reinvite needed
224
175
  this._downgradeToAudio(callSession);
225
- return false;
176
+
177
+ return;
226
178
  }
227
179
 
228
180
  if (isUpgrade) {
229
181
  const shouldReinvite = await this._upgradeToVideo(callSession, constraints, conference);
182
+
230
183
  if (!shouldReinvite) {
231
- return false;
184
+ return;
232
185
  }
233
186
  }
234
187
 
@@ -236,11 +189,15 @@ export default class WebRTCPhone extends Emitter implements Phone {
236
189
  }
237
190
 
238
191
  getUserAgent() {
239
- return (this.client && this.client.config && this.client.config.userAgentString) || 'webrtc-phone';
192
+ return this.client?.config?.userAgentString || 'webrtc-phone';
240
193
  }
241
194
 
242
195
  startHeartbeat() {
243
- logger.info('WebRTC phone - start heartbeat', { client: !!this.client, hasHeartbeat: this.client.hasHeartbeat() });
196
+ logger.info('WebRTC phone - start heartbeat', {
197
+ client: !!this.client,
198
+ hasHeartbeat: this.client.hasHeartbeat(),
199
+ });
200
+
244
201
  if (!this.client || this.client.hasHeartbeat()) {
245
202
  return;
246
203
  }
@@ -249,7 +206,10 @@ export default class WebRTCPhone extends Emitter implements Phone {
249
206
  }
250
207
 
251
208
  stopHeartbeat() {
252
- logger.info('WebRTC phone - stopHeartbeat', { client: !!this.client });
209
+ logger.info('WebRTC phone - stopHeartbeat', {
210
+ client: !!this.client,
211
+ });
212
+
253
213
  if (!this.client) {
254
214
  return;
255
215
  }
@@ -257,19 +217,23 @@ export default class WebRTCPhone extends Emitter implements Phone {
257
217
  this.client.stopHeartbeat();
258
218
  }
259
219
 
260
- setOnHeartbeatTimeout(cb: Function) {
220
+ setOnHeartbeatTimeout(cb: (...args: Array<any>) => any) {
261
221
  this.client.setOnHeartbeatTimeout(cb);
262
222
  }
263
223
 
264
- setOnHeartbeatCallback(cb: Function) {
224
+ setOnHeartbeatCallback(cb: (...args: Array<any>) => any) {
265
225
  this.client.setOnHeartbeatCallback(cb);
266
226
  }
267
227
 
268
228
  reconnect() {
269
- logger.info('WebRTC phone - reconnect', { client: !!this.client });
229
+ logger.info('WebRTC phone - reconnect', {
230
+ client: !!this.client,
231
+ });
232
+
270
233
  if (!this.client) {
271
234
  return;
272
235
  }
236
+
273
237
  this.client.attemptReconnection();
274
238
  }
275
239
 
@@ -291,6 +255,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
291
255
  if (!this.client) {
292
256
  return Promise.reject(new Error('No webrtc client'));
293
257
  }
258
+
294
259
  return this.client.onConnect();
295
260
  }
296
261
 
@@ -298,21 +263,26 @@ export default class WebRTCPhone extends Emitter implements Phone {
298
263
  if (!this.client) {
299
264
  return Promise.reject(new Error('No webrtc client'));
300
265
  }
266
+
301
267
  return this.client.onDisconnect();
302
268
  }
303
269
 
304
- _downgradeToAudio(callSession: ?CallSession, withMessage: boolean = true) {
270
+ _downgradeToAudio(callSession: CallSession | null | undefined, withMessage = true) {
305
271
  const sipSession = this.findSipSession(callSession);
272
+
306
273
  if (!sipSession) {
307
274
  return false;
308
275
  }
309
276
 
310
- logger.info('Downgrade to video', { id: callSession ? callSession.getId() : null, withMessage });
311
-
277
+ logger.info('Downgrade to video', {
278
+ id: callSession ? callSession.getId() : null,
279
+ withMessage,
280
+ });
312
281
  this.client.downgradeToAudio(sipSession);
313
282
 
314
283
  if (callSession) {
315
284
  callSession.cameraEnabled = false;
285
+
316
286
  this._updateCallSession(callSession);
317
287
  }
318
288
 
@@ -324,8 +294,9 @@ export default class WebRTCPhone extends Emitter implements Phone {
324
294
  }
325
295
 
326
296
  // Returns true if we need to send a re-INVITE request
327
- async _upgradeToVideo(callSession: ?CallSession, constraints: ?Object, isConference: boolean): Promise<boolean> {
297
+ async _upgradeToVideo(callSession: CallSession | null | undefined, constraints: Record<string, any>, isConference: boolean): Promise<boolean> {
328
298
  const sipSession = this.findSipSession(callSession);
299
+
329
300
  if (!sipSession) {
330
301
  return Promise.resolve(false);
331
302
  }
@@ -335,16 +306,16 @@ export default class WebRTCPhone extends Emitter implements Phone {
335
306
  constraints,
336
307
  isConference,
337
308
  });
338
-
339
309
  const shouldScreenShare = constraints && !!constraints.screen;
340
310
  const desktop = constraints && constraints.desktop;
341
311
  const options = sipSession.sessionDescriptionHandlerOptionsReInvite;
342
- const wasAudioOnly = options && options.audioOnly;
343
-
312
+ // @ts-ignore
313
+ const wasAudioOnly = options?.audioOnly;
344
314
  const newStream = await this.client.upgradeToVideo(sipSession, constraints, isConference);
345
315
 
346
316
  if (callSession) {
347
317
  callSession.cameraEnabled = true;
318
+
348
319
  this._updateCallSession(callSession);
349
320
  }
350
321
 
@@ -368,13 +339,12 @@ export default class WebRTCPhone extends Emitter implements Phone {
368
339
  return false;
369
340
  }
370
341
 
371
- _sendReinviteMessage(callSession: ?CallSession, isUpgrade: boolean) {
342
+ _sendReinviteMessage(callSession: CallSession | null | undefined, isUpgrade: boolean) {
372
343
  const sipSession = this.findSipSession(callSession);
373
344
  logger.info('Sending reinvite message', {
374
345
  id: callSession ? callSession.getId() : null,
375
346
  isUpgrade,
376
347
  });
377
-
378
348
  // Have to send the message after a delay due to latency to update the remote peer
379
349
  setTimeout(() => {
380
350
  this.sendMessage(sipSession, JSON.stringify({
@@ -382,7 +352,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
382
352
  content: {
383
353
  type: ON_MESSAGE_TRACK_UPDATED,
384
354
  update: isUpgrade ? 'upgrade' : 'downgrade',
385
- sipCallId: this.getSipSessionId(sipSession),
355
+ sipCallId: sipSession && this.getSipSessionId(sipSession),
386
356
  callId: callSession ? callSession.callId : null,
387
357
  number: callSession ? callSession.number : null,
388
358
  callerNumber: callSession ? callSession.callerNumber : null,
@@ -391,18 +361,21 @@ export default class WebRTCPhone extends Emitter implements Phone {
391
361
  }, 2500);
392
362
  }
393
363
 
394
- _bindEvents(sipSession: Session) {
395
- if (sipSession._onCancel) {
364
+ _bindEvents(sipSession: Invitation | Inviter) {
365
+ if (sipSession instanceof Invitation) {
396
366
  // Monkey patch to know when canceled with the CANCEL message
397
367
  const onCancel = sipSession._onCancel.bind(sipSession);
398
- sipSession._onCancel = (message: IncomingRequestMessage) => {
399
- logger.trace('on sip session canceled', { callId: message.callId });
400
368
 
369
+ sipSession._onCancel = (message: IncomingRequestMessage) => {
370
+ logger.trace('on sip session canceled', {
371
+ callId: message.callId,
372
+ });
401
373
  onCancel(message);
402
374
  const elsewhere = message.data.indexOf('cause=26') !== -1 && message.data.indexOf('completed elsewhere') !== -1;
375
+
403
376
  const callSession = this._createCallSession(sipSession);
404
- delete this.callSessions[callSession.getId()];
405
377
 
378
+ delete this.callSessions[callSession.getId()];
406
379
  this.eventEmitter.emit(ON_CALL_CANCELED, callSession, elsewhere);
407
380
  };
408
381
  } else if (sipSession instanceof Invitation) {
@@ -416,29 +389,36 @@ export default class WebRTCPhone extends Emitter implements Phone {
416
389
  // No need to trigger progress for an invitation (eg: when we answer the call).
417
390
  return;
418
391
  }
392
+
419
393
  // When receiving a progress event, we know we are the caller so we have to force incoming to false
420
- return this.eventEmitter.emit(
421
- ON_PROGRESS,
422
- this._createCallSession(sipSession, null, { incoming: false, ringing: true }),
423
- this.audioOutputDeviceId,
424
- this.audioOutputVolume,
425
- );
426
- case SessionState.Terminating:
427
- logger.info('WebRTC phone - call terminating', { sipId: sipSession.id });
394
+ return this.eventEmitter.emit(ON_PROGRESS, this._createCallSession(sipSession, null, {
395
+ incoming: false,
396
+ ringing: true,
397
+ }), this.audioOutputDeviceId, this.audioOutputVolume);
428
398
 
399
+ case SessionState.Terminating:
400
+ logger.info('WebRTC phone - call terminating', {
401
+ sipId: sipSession.id,
402
+ });
429
403
  this.eventEmitter.emit(ON_CALL_ENDING, this._createCallSession(sipSession));
430
-
431
404
  break;
432
- case SessionState.Terminated: {
433
- logger.info('WebRTC phone - call terminated', { sipId: sipSession.id });
405
+
406
+ case SessionState.Terminated:
407
+ {
408
+ logger.info('WebRTC phone - call terminated', {
409
+ sipId: sipSession.id,
410
+ });
434
411
 
435
412
  // Should be called before `_onCallTerminated` or the callCount will not decrement...
436
413
  const callSession = this._createCallSession(sipSession);
414
+
437
415
  callSession.endTime = new Date();
416
+
438
417
  const wasCurrentSession = this._onCallTerminated(sipSession);
439
418
 
440
419
  return this.eventEmitter.emit(ON_CALL_ENDED, callSession, wasCurrentSession);
441
420
  }
421
+
442
422
  default:
443
423
  break;
444
424
  }
@@ -449,12 +429,15 @@ export default class WebRTCPhone extends Emitter implements Phone {
449
429
  }
450
430
 
451
431
  // Video events
452
- const { peerConnection } = sipSession.sessionDescriptionHandler;
453
- peerConnection.ontrack = rawEvent => {
432
+ const {
433
+ // @ts-ignore
434
+ peerConnection,
435
+ } = sipSession.sessionDescriptionHandler;
436
+
437
+ peerConnection.ontrack = (rawEvent: any) => {
454
438
  const event = rawEvent;
455
439
  const [stream] = event.streams;
456
440
  const kind = event && event.track && event.track.kind;
457
-
458
441
  logger.info('on track stream called on the peer connection', {
459
442
  callId: this.getSipSessionId(sipSession),
460
443
  streamId: stream ? stream.id : null,
@@ -474,29 +457,31 @@ export default class WebRTCPhone extends Emitter implements Phone {
474
457
  return this.eventEmitter.emit(ON_VIDEO_STREAM, stream, event.track.id, event, sipSession);
475
458
  };
476
459
 
477
- peerConnection.onremovestream = event => {
460
+ peerConnection.onremovestream = (event: any) => {
478
461
  logger.info('on remove stream called on the peer connection', {
479
462
  id: event.stream.id,
480
463
  tracks: event.stream.getTracks(),
481
464
  });
482
-
483
465
  this.eventEmitter.emit(ON_REMOVE_STREAM, event.stream);
484
466
  };
485
467
  }
486
468
 
487
- async startScreenSharing(constraints: Object, callSession?: CallSession) {
488
- logger.info('WebRTC - start screen sharing', { constraints, id: callSession ? callSession.getId() : null });
489
-
469
+ async startScreenSharing(constraints: Record<string, any>, callSession?: CallSession): Promise<MediaStream> {
470
+ logger.info('WebRTC - start screen sharing', {
471
+ constraints,
472
+ id: callSession ? callSession.getId() : null,
473
+ });
490
474
  const screenShareStream = await this.client.getStreamFromConstraints(constraints);
475
+
491
476
  if (!screenShareStream) {
492
477
  throw new Error(`Can't create media stream for screensharing with: ${JSON.stringify(constraints)}`);
493
478
  }
494
479
 
495
480
  const screenTrack = screenShareStream.getVideoTracks()[0];
496
481
  const sipSession = this.currentSipSession;
497
- const pc = this.client.getPeerConnection(this.getSipSessionId(sipSession));
498
- const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
499
- const localStream = this.client.getLocalStream(this.getSipSessionId(sipSession));
482
+ const pc = sipSession && this.client.getPeerConnection(this.getSipSessionId(sipSession));
483
+ const sender = pc && pc.getSenders && pc.getSenders().find((s: any) => s && s.track && s.track.kind === 'video');
484
+ const localStream = sipSession && this.client.getLocalStream(this.getSipSessionId(sipSession));
500
485
  const videoTrack = localStream ? localStream.getTracks().find(track => track.kind === 'video') : null;
501
486
  const hadVideo = !!videoTrack;
502
487
 
@@ -515,12 +500,12 @@ export default class WebRTCPhone extends Emitter implements Phone {
515
500
  sender.replaceTrack(screenTrack);
516
501
  }
517
502
 
518
- this._onScreenSharing(screenShareStream, sipSession, callSession, hadVideo, constraints.desktop);
503
+ this._onScreenSharing(screenShareStream, sipSession as Inviter | Invitation, callSession, hadVideo, constraints.desktop);
519
504
 
520
505
  return screenShareStream;
521
506
  }
522
507
 
523
- async stopScreenSharing(restoreLocalStream: boolean = true, callSession?: ?CallSession) {
508
+ async stopScreenSharing(restoreLocalStream = true, callSession?: CallSession | null | undefined): Promise<OutgoingInviteRequest | void> {
524
509
  if (!this.currentScreenShare) {
525
510
  return;
526
511
  }
@@ -528,57 +513,49 @@ export default class WebRTCPhone extends Emitter implements Phone {
528
513
  logger.info('WebRTC phone - stop screen sharing', {
529
514
  restoreLocalStream,
530
515
  });
531
-
532
- let reinvited = false;
516
+ let reinvited: OutgoingInviteRequest | void;
533
517
 
534
518
  try {
535
519
  if (this.currentScreenShare.stream) {
536
- this.currentScreenShare.stream.getTracks().forEach(track => track.stop());
520
+ this.currentScreenShare.stream.getTracks().forEach((track: MediaStreamTrack) => track.stop());
537
521
  }
538
522
 
539
523
  if (restoreLocalStream) {
540
524
  const targetCallSession = callSession || this.currentCallSession;
541
525
  const conference = this.isConference(targetCallSession);
542
-
543
526
  // When stopping screenshare and we had video before that, we have to re-upgrade
544
527
  // When upgrading directly to screenshare (eg: we don't have a videoLocalStream to replace)
545
528
  // We have to downgrade to audio.
546
529
  const screenshareStopped = this.currentScreenShare.hadVideo;
547
- const constraints = { audio: false, video: screenshareStopped };
530
+ const constraints = {
531
+ audio: false,
532
+ video: screenshareStopped,
533
+ };
548
534
 
549
535
  // We have to remove the video sender to be able to re-upgrade to video in `sendReinvite` below
550
536
  this._downgradeToAudio(targetCallSession, false);
537
+
551
538
  // Wait for the track to be removed, unless the video sender won't have a null track in `_upgradeToVideo`.
552
539
  await new Promise(resolve => setTimeout(resolve, 500));
553
-
554
540
  reinvited = await this.sendReinvite(targetCallSession, constraints, conference);
555
541
  }
556
- } catch (e) {
542
+ } catch (e: any) {
557
543
  console.warn(e);
558
544
  }
559
545
 
560
546
  const sipSession = this.currentSipSession;
561
-
562
- this.eventEmitter.emit(
563
- ON_SHARE_SCREEN_ENDED,
564
- callSession ? this._createCallSession(sipSession, callSession, { screensharing: false }) : null,
565
- );
566
-
547
+ this.eventEmitter.emit(ON_SHARE_SCREEN_ENDED, callSession && sipSession ? this._createCallSession(sipSession, callSession, {
548
+ screensharing: false,
549
+ }) : null);
567
550
  this.currentScreenShare = null;
568
-
569
551
  return reinvited;
570
552
  }
571
553
 
572
- _onScreenSharing(screenStream: Object,
573
- sipSession: Session,
574
- callSession: ?CallSession,
575
- hadVideo: boolean,
576
- desktop?: ?boolean = false) {
554
+ _onScreenSharing(screenStream: MediaStream, sipSession: Invitation | Inviter, callSession: CallSession | null | undefined, hadVideo: boolean, desktop?: boolean | null | undefined) {
577
555
  const screenTrack = screenStream.getVideoTracks()[0];
578
556
  const sipSessionId = this.getSipSessionId(sipSession);
579
557
  const pc = this.client.getPeerConnection(sipSessionId);
580
- const sender = pc && pc.getSenders && pc.getSenders().find(s => s && s.track && s.track.kind === 'video');
581
-
558
+ const sender = pc && pc.getSenders && pc.getSenders().find((s: any) => s && s.track && s.track.kind === 'video');
582
559
  logger.info('WebRTC phone - on screensharing', {
583
560
  hadVideo,
584
561
  id: this.getSipSessionId(sipSession),
@@ -592,11 +569,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
592
569
  id: this.getSipSessionId(sipSession),
593
570
  screenTrack,
594
571
  });
595
-
596
- this.eventEmitter.emit(
597
- ON_SHARE_SCREEN_ENDING,
598
- this._createCallSession(sipSession, callSession),
599
- );
572
+ this.eventEmitter.emit(ON_SHARE_SCREEN_ENDING, this._createCallSession(sipSession, callSession));
600
573
  };
601
574
  }
602
575
 
@@ -607,38 +580,41 @@ export default class WebRTCPhone extends Emitter implements Phone {
607
580
  sipSessionId,
608
581
  desktop,
609
582
  };
610
-
611
583
  this.client.setLocalMediaStream(this.getSipSessionId(sipSession), screenStream);
612
-
613
- this.eventEmitter.emit(
614
- ON_SHARE_SCREEN_STARTED,
615
- this._createCallSession(sipSession, callSession, { screensharing: true }),
616
- screenStream,
617
- );
584
+ this.eventEmitter.emit(ON_SHARE_SCREEN_STARTED, this._createCallSession(sipSession, callSession, {
585
+ screensharing: true,
586
+ }), screenStream);
618
587
  }
619
588
 
620
- _onCallAccepted(sipSession: Session, cameraEnabled: boolean): CallSession {
621
- logger.info('WebRTC phone - on call accepted', { sipId: sipSession.id, cameraEnabled });
589
+ _onCallAccepted(sipSession: Inviter | Invitation, cameraEnabled: boolean): CallSession {
590
+ logger.info('WebRTC phone - on call accepted', {
591
+ sipId: sipSession.id,
592
+ cameraEnabled,
593
+ });
622
594
 
623
595
  const callSession = this._createAcceptedCallSession(sipSession, cameraEnabled);
596
+
624
597
  this.currentSipSession = sipSession;
625
598
  this.currentCallSession = callSession;
626
-
627
599
  this.eventEmitter.emit(ON_TERMINATE_SOUND, callSession, 'call accepted');
628
600
  const sipSessionId = this.getSipSessionId(sipSession);
601
+
629
602
  if (sipSessionId) {
630
603
  this.removeIncomingSessions(sipSessionId);
631
604
  }
632
605
 
633
606
  callSession.answerTime = new Date();
607
+
634
608
  this._updateCallSession(callSession);
635
- this.eventEmitter.emit(ON_CALL_ACCEPTED, callSession, cameraEnabled);
636
609
 
610
+ this.eventEmitter.emit(ON_CALL_ACCEPTED, callSession, cameraEnabled);
637
611
  return callSession;
638
612
  }
639
613
 
640
614
  changeAudioDevice(id: string) {
641
- logger.info('WebRTC phone - change audio device', { deviceId: id });
615
+ logger.info('WebRTC phone - change audio device', {
616
+ deviceId: id,
617
+ });
642
618
  this.audioOutputDeviceId = id;
643
619
  this.client.changeAudioOutputDevice(id);
644
620
  }
@@ -648,52 +624,60 @@ export default class WebRTCPhone extends Emitter implements Phone {
648
624
  }
649
625
 
650
626
  changeRingDevice(id: string) {
651
- logger.info('WebRTC phone - changing ring device', { id });
652
-
627
+ logger.info('WebRTC phone - changing ring device', {
628
+ id,
629
+ });
653
630
  this.audioRingDeviceId = id;
654
631
  }
655
632
 
656
633
  // volume is a value between 0 and 1
657
634
  changeAudioVolume(volume: number) {
658
- logger.info('WebRTC phone - changing audio volume', { volume });
659
-
635
+ logger.info('WebRTC phone - changing audio volume', {
636
+ volume,
637
+ });
660
638
  this.audioOutputVolume = volume;
661
639
  this.client.changeAudioOutputVolume(volume);
662
640
  }
663
641
 
664
642
  // volume is a value between 0 and 1
665
643
  changeRingVolume(volume: number) {
666
- logger.info('WebRTC phone - changing ring volume', { volume });
667
-
644
+ logger.info('WebRTC phone - changing ring volume', {
645
+ volume,
646
+ });
668
647
  this.audioRingVolume = volume;
669
648
  }
670
649
 
671
- changeAudioInputDevice(id: string, force: ?boolean) {
672
- logger.info('WebRTC phone - changeAudio input device', { deviceId: id });
673
-
650
+ changeAudioInputDevice(id: string, force?: boolean) {
651
+ logger.info('WebRTC phone - changeAudio input device', {
652
+ deviceId: id,
653
+ });
674
654
  return this.client.changeAudioInputDevice(id, this.currentSipSession, force);
675
655
  }
676
656
 
677
- changeVideoInputDevice(id: ?string) {
678
- logger.info('WebRTC phone - change video input device', { deviceId: id });
679
-
657
+ async changeVideoInputDevice(id: string): Promise<void | MediaStream | null | undefined> {
658
+ logger.info('WebRTC phone - change video input device', {
659
+ deviceId: id,
660
+ });
680
661
  return this.client.changeVideoInputDevice(id, this.currentSipSession);
681
662
  }
682
663
 
683
- changeSessionVideoInputDevice(id: ?string) {
684
- logger.info('WebRTC phone - change session video input device', { deviceId: id });
685
-
686
- return this.client.changeSessionVideoInputDevice(id, this.currentSipSession);
664
+ changeSessionVideoInputDevice(id: string | null | undefined) {
665
+ logger.info('WebRTC phone - change session video input device', {
666
+ deviceId: id,
667
+ });
668
+ return this.currentSipSession && this.client.changeSessionVideoInputDevice(id, this.currentSipSession);
687
669
  }
688
670
 
689
- _onCallTerminated(sipSession: Session) {
690
- logger.info('WebRTC phone - on call terminated', { sipId: sipSession.id });
691
-
671
+ _onCallTerminated(sipSession: Invitation | Inviter): boolean {
672
+ logger.info('WebRTC phone - on call terminated', {
673
+ sipId: sipSession.id,
674
+ });
692
675
  const sipSessionId = this.getSipSessionId(sipSession);
676
+
693
677
  const callSession = this._createCallSession(sipSession);
678
+
694
679
  const isCurrentSession = this.isCurrentCallSipSession(callSession);
695
680
  const isCurrentIncomingCall = callSession.is(this.getIncomingCallSession());
696
-
697
681
  // If the terminated call was an incoming call, we have to re-trigger if it's was the first incoming call
698
682
  // Otherwise, we have to re-trigger an incoming call event if another call is incoming
699
683
  const shouldRetrigger = isCurrentSession ? this.incomingSessions.length : isCurrentIncomingCall;
@@ -719,14 +703,12 @@ export default class WebRTCPhone extends Emitter implements Phone {
719
703
  }
720
704
 
721
705
  const hasIncomingCallSession = this.hasIncomingCallSession();
722
-
723
706
  // Re-trigger incoming call event for remaining incoming calls
724
707
  logger.info('WebRTC phone - check to re-trigger incoming call', {
725
708
  sipId: sipSession.id,
726
709
  shouldRetrigger,
727
710
  hasIncomingCallSession,
728
711
  });
729
-
730
712
  this.client.onCallEnded(sipSession);
731
713
 
732
714
  if (hasIncomingCallSession && shouldRetrigger) {
@@ -737,22 +719,19 @@ export default class WebRTCPhone extends Emitter implements Phone {
737
719
  if (!this.currentCallSession) {
738
720
  this.eventEmitter.emit(ON_PLAY_RING_SOUND, this.audioRingDeviceId, this.audioRingVolume, nextCallSession);
739
721
  } else {
740
- this.eventEmitter.emit(ON_PLAY_INBOUND_CALL_SIGNAL_SOUND,
741
- this.audioOutputDeviceId,
742
- this.audioOutputVolume,
743
- nextCallSession);
722
+ this.eventEmitter.emit(ON_PLAY_INBOUND_CALL_SIGNAL_SOUND, this.audioOutputDeviceId, this.audioOutputVolume, nextCallSession);
744
723
  }
745
724
  }
746
725
 
747
- // $FlowFixMe
748
- this.eventEmitter.emit(ON_CALL_INCOMING, nextCallSession, nextCallSession.cameraEnabled);
726
+ this.eventEmitter.emit(ON_CALL_INCOMING, nextCallSession, nextCallSession?.cameraEnabled);
749
727
  }, 100);
750
728
  }
751
729
 
752
730
  if (callSession.getId() in this.ignoredSessions) {
753
- return;
731
+ return false;
754
732
  }
755
733
 
734
+ // @ts-ignore
756
735
  if (!sipSession.isCanceled) {
757
736
  setTimeout(() => {
758
737
  this.eventEmitter.emit(ON_PLAY_HANGUP_SOUND, this.audioOutputDeviceId, this.audioOutputVolume, callSession);
@@ -764,6 +743,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
764
743
 
765
744
  setActiveSipSession(callSession: CallSession) {
766
745
  const sipSessionId = this.findSipSession(callSession);
746
+
767
747
  if (!sipSessionId) {
768
748
  return;
769
749
  }
@@ -780,17 +760,20 @@ export default class WebRTCPhone extends Emitter implements Phone {
780
760
  // Maybe due to https://github.com/react-native-webrtc/react-native-webrtc/issues/401
781
761
  hasActiveRemoteVideoStream() {
782
762
  const sipSession = this.currentSipSession;
763
+
783
764
  if (!sipSession) {
784
765
  return false;
785
766
  }
786
767
 
787
- const { peerConnection } = sipSession.sessionDescriptionHandler;
788
- const remoteStream = peerConnection.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
789
-
768
+ const {
769
+ // @ts-ignore
770
+ peerConnection,
771
+ } = sipSession.sessionDescriptionHandler;
772
+ const remoteStream: MediaStream = peerConnection.getRemoteStreams().find((stream: MediaStream) => !!stream.getVideoTracks().length);
790
773
  return remoteStream && remoteStream.getVideoTracks().some(track => !track.muted);
791
774
  }
792
775
 
793
- callCount() {
776
+ callCount(): number {
794
777
  return Object.keys(this.callSessions).length;
795
778
  }
796
779
 
@@ -811,33 +794,30 @@ export default class WebRTCPhone extends Emitter implements Phone {
811
794
  }
812
795
 
813
796
  // Deprecated
814
- getLocalStreamForCall(callSession: CallSession): ?MediaStream {
797
+ getLocalStreamForCall(callSession: CallSession): MediaStream | null | undefined {
815
798
  logger.warn('WebRTCPhone.getLocalStreamForCall is deprecated, use WebRTCPhone.getLocalStream instead');
816
-
817
799
  return this.getLocalStream(callSession);
818
800
  }
819
801
 
820
802
  // Deprecated
821
- getRemoteStreamForCall(callSession: CallSession): ?MediaStream {
803
+ getRemoteStreamForCall(callSession: CallSession): MediaStream | null | undefined {
822
804
  logger.warn('WebRTCPhone.getRemoteStreamForCall is deprecated, use WebRTCPhone.getRemoteStream instead');
823
-
824
805
  return this.getRemoteVideoStream(callSession);
825
806
  }
826
807
 
827
- getRemoteStreamsForCall(callSession: CallSession): ?MediaStream {
808
+ getRemoteStreamsForCall(callSession: CallSession): MediaStream | null | undefined {
828
809
  logger.warn('WebRTCPhone.getRemoteStreamsForCall is deprecated, use WebRTCPhone.getRemoteStreams instead');
829
-
830
810
  return this.getRemoteStream(callSession);
831
811
  }
832
812
 
833
813
  accept(callSession: CallSession, cameraEnabled?: boolean): Promise<string | null> {
834
- logger.info('WebRTC phone - accept call', { id: callSession ? callSession.getId() : 'n/a', cameraEnabled });
814
+ logger.info('WebRTC phone - accept call', {
815
+ id: callSession ? callSession.getId() : 'n/a',
816
+ cameraEnabled,
817
+ });
818
+
835
819
  if (this.currentSipSession) {
836
- this.holdSipSession(
837
- this.currentSipSession,
838
- this.currentCallSession,
839
- true,
840
- );
820
+ this.holdSipSession(this.currentSipSession, this.currentCallSession, true);
841
821
  }
842
822
 
843
823
  if (!callSession) {
@@ -846,34 +826,39 @@ export default class WebRTCPhone extends Emitter implements Phone {
846
826
  }
847
827
 
848
828
  const sipSessionId = this.getSipSessionIdFromCallSession(callSession);
829
+
849
830
  if (sipSessionId && !(sipSessionId in this.callSessions)) {
850
- logger.warn('Call session already ended or not found, can\'t accept it.', { sipSessionId });
831
+ logger.warn('Call session already ended or not found, can\'t accept it.', {
832
+ sipSessionId,
833
+ });
851
834
  return Promise.resolve(null);
852
835
  }
853
836
 
854
837
  if (callSession.getId() in this.acceptedSessions) {
855
- logger.warn('CallSession already accepted.', { id: callSession ? callSession.getId() : 'n/a' });
838
+ logger.warn('CallSession already accepted.', {
839
+ id: callSession ? callSession.getId() : 'n/a',
840
+ });
856
841
  return Promise.resolve(callSession.sipCallId);
857
842
  }
858
843
 
859
844
  this.shouldSendReinvite = false;
860
845
  callSession.answerTime = new Date();
846
+
861
847
  this._updateCallSession(callSession);
862
- this.acceptedSessions[callSession.getId()] = true;
863
848
 
849
+ this.acceptedSessions[callSession.getId()] = true;
864
850
  this.eventEmitter.emit(ON_CALL_ANSWERED, callSession);
851
+ const sipSession = this.client.getSipSession(callSession.getId()) as Invitation;
865
852
 
866
- const sipSession = this.client.getSipSession(callSession.getId());
867
853
  if (sipSession) {
868
854
  if (sipSession.state === SessionState.Terminated || sipSession.state === SessionState.Terminating) {
869
855
  logger.warn('Trying to answer a terminated sipSession.');
870
-
871
856
  return Promise.resolve(null);
872
857
  }
873
858
 
874
- logger.info('accept call, session found', { sipId: sipSession.id });
875
-
876
- // $FlowFixMe
859
+ logger.info('accept call, session found', {
860
+ sipId: sipSession.id,
861
+ });
877
862
  return this.client.answer(sipSession, this.allowVideo ? cameraEnabled : false).then(() => {
878
863
  return callSession.sipCallId;
879
864
  }).catch(e => {
@@ -883,8 +868,9 @@ export default class WebRTCPhone extends Emitter implements Phone {
883
868
  });
884
869
  }
885
870
 
886
- logger.warn('no CallSession found to accept.', { id: callSession ? callSession.getId() : 'n/a' });
887
-
871
+ logger.warn('no CallSession found to accept.', {
872
+ id: callSession ? callSession.getId() : 'n/a',
873
+ });
888
874
  return Promise.resolve(null);
889
875
  }
890
876
 
@@ -893,80 +879,87 @@ export default class WebRTCPhone extends Emitter implements Phone {
893
879
  }
894
880
 
895
881
  async reject(callSession: CallSession): Promise<void> {
896
- logger.info('reject WebRTC called', { id: callSession.getId() });
897
-
882
+ logger.info('reject WebRTC called', {
883
+ id: callSession.getId(),
884
+ });
898
885
  this.eventEmitter.emit(ON_TERMINATE_SOUND, callSession, 'call rejected locally');
886
+
899
887
  if (!callSession || callSession.getId() in this.rejectedSessions) {
900
888
  return;
901
889
  }
902
890
 
903
891
  this.shouldSendReinvite = false;
904
892
  this.rejectedSessions[callSession.getId()] = true;
905
-
906
893
  const sipSession = this.findSipSession(callSession);
907
- if (sipSession) {
908
- logger.info('WebRTC rejecting', { sipId: sipSession.id });
909
894
 
895
+ if (sipSession) {
896
+ logger.info('WebRTC rejecting', {
897
+ sipId: sipSession.id,
898
+ });
910
899
  this.client.hangup(sipSession);
911
900
  }
912
901
  }
913
902
 
914
903
  async ignore(callSession: CallSession): Promise<void> {
915
- logger.info('WebRTC ignore', { id: callSession.getId() });
916
-
904
+ logger.info('WebRTC ignore', {
905
+ id: callSession.getId(),
906
+ });
917
907
  // kill the ring
918
908
  this.eventEmitter.emit(ON_TERMINATE_SOUND, callSession, 'ignoring call');
919
909
  this.ignoredSessions[callSession.getId()] = true;
920
910
  callSession.ignore();
921
911
  }
922
912
 
923
- atxfer(callSession: CallSession): ?Object {
924
- const sipSession = this.findSipSession(callSession);
913
+ atxfer(callSession: CallSession): Record<string, any> | null | undefined {
914
+ const sipSession = this.findSipSession(callSession) as Inviter;
925
915
 
926
916
  if (sipSession) {
927
- logger.info('WebRTC atxfer', { sipId: sipSession.id });
928
-
917
+ logger.info('WebRTC atxfer', {
918
+ sipId: sipSession.id,
919
+ });
929
920
  return this.client.atxfer(sipSession);
930
921
  }
931
922
  }
932
923
 
933
- hold(callSession: CallSession, withEvent: boolean = true): ?Promise<any> {
934
- logger.info('WebRTC hold', { id: callSession.getId() });
935
-
924
+ hold(callSession: CallSession, withEvent = true): Promise<OutgoingInviteRequest | void> | null | undefined {
925
+ logger.info('WebRTC hold', {
926
+ id: callSession.getId(),
927
+ });
936
928
  const sipSession = this.findSipSession(callSession);
937
-
938
929
  return sipSession ? this.holdSipSession(sipSession, callSession, withEvent) : null;
939
930
  }
940
931
 
941
932
  // @Deprecated
942
- unhold(callSession: CallSession, withEvent: boolean = true): ?Promise<any> {
933
+ unhold(callSession: CallSession, withEvent = true): Promise<MediaStream | void | null> {
943
934
  console.warn('Please note that `phone.unhold()` is being deprecated; `phone.resume()` is the preferred method');
944
-
945
935
  return this.resume(callSession, withEvent);
946
936
  }
947
937
 
948
- resume(callSession?: CallSession, withEvent: boolean = true): Promise<any> {
949
- logger.info('WebRTC resume called', { id: callSession ? callSession.getId() : null });
950
-
938
+ resume(callSession?: CallSession, withEvent = true): Promise<MediaStream | void | null> {
939
+ logger.info('WebRTC resume called', {
940
+ id: callSession ? callSession.getId() : null,
941
+ });
951
942
  const sipSession = this.findSipSession(callSession);
943
+
952
944
  if (!sipSession) {
953
945
  return new Promise((resolve, reject) => reject(new Error('No session to resume')));
954
946
  }
955
947
 
956
- logger.info('WebRTC resuming', { sipId: sipSession.id });
948
+ logger.info('WebRTC resuming', {
949
+ sipId: sipSession.id,
950
+ });
957
951
 
958
952
  // Hold current session if different from the current one (we don't want 2 sessions active at the same time).
959
953
  if (this.currentSipSession && this.currentSipSession.id !== sipSession.id) {
960
- logger.info('WebRTC hold call after resume', { id: this.currentSipSession.id });
961
- this.holdSipSession(
962
- this.currentSipSession,
963
- this.currentCallSession,
964
- withEvent,
965
- );
954
+ logger.info('WebRTC hold call after resume', {
955
+ id: this.currentSipSession.id,
956
+ });
957
+ this.holdSipSession(this.currentSipSession, this.currentCallSession, withEvent);
966
958
  }
967
959
 
968
960
  const promise = this.unholdSipSession(sipSession, callSession, withEvent);
969
961
  this.currentSipSession = sipSession;
962
+
970
963
  if (callSession) {
971
964
  this.currentCallSession = callSession;
972
965
  }
@@ -974,18 +967,17 @@ export default class WebRTCPhone extends Emitter implements Phone {
974
967
  return promise;
975
968
  }
976
969
 
977
- async holdSipSession(
978
- sipSession: Session,
979
- callSession: ?CallSession,
980
- withEvent: boolean = true,
981
- ): Promise<any> {
970
+ async holdSipSession(sipSession: Inviter | Invitation, callSession: CallSession | null | undefined, withEvent = true): Promise<OutgoingInviteRequest | void> {
982
971
  if (!sipSession) {
983
972
  return new Promise((resolve, reject) => reject(new Error('No session to hold')));
984
973
  }
974
+
985
975
  const sessionId = this.getSipSessionId(sipSession);
986
976
  const hasVideo = this.client.hasLocalVideo(sessionId);
987
-
988
- logger.info('WebRTC hold sip session', { sipId: sipSession.id, hasVideo });
977
+ logger.info('WebRTC hold sip session', {
978
+ sipId: sipSession.id,
979
+ hasVideo,
980
+ });
989
981
 
990
982
  // Stop screenshare if needed
991
983
  if (this.currentScreenShare && this.currentScreenShare.sipSessionId === sessionId) {
@@ -999,8 +991,8 @@ export default class WebRTCPhone extends Emitter implements Phone {
999
991
  }
1000
992
 
1001
993
  const isConference = !!callSession && callSession.isConference();
1002
-
1003
994
  const promise = this.client.hold(sipSession, isConference, hasVideo);
995
+
1004
996
  if (withEvent) {
1005
997
  this.eventEmitter.emit(ON_CALL_HELD, this._createCallSession(sipSession, callSession));
1006
998
  }
@@ -1008,21 +1000,20 @@ export default class WebRTCPhone extends Emitter implements Phone {
1008
1000
  return promise;
1009
1001
  }
1010
1002
 
1011
- async unholdSipSession(
1012
- sipSession: Session,
1013
- callSession: ?CallSession,
1014
- withEvent: boolean = true,
1015
- ): Promise<any> {
1003
+ async unholdSipSession(sipSession: Inviter | Invitation, callSession: CallSession | null | undefined, withEvent = true): Promise<MediaStream | void | null> {
1016
1004
  if (!sipSession) {
1017
1005
  return new Promise((resolve, reject) => reject(new Error('No session to unhold')));
1018
1006
  }
1019
1007
 
1020
1008
  const isConference = !!callSession && callSession.isConference();
1021
-
1022
1009
  const sessionId = this.getSipSessionId(sipSession);
1023
- logger.info('WebRTC unhold sip session', { sessionId, isConference });
1024
-
1025
- const { hasVideo } = this.client.getHeldSession(sessionId) || {};
1010
+ logger.info('WebRTC unhold sip session', {
1011
+ sessionId,
1012
+ isConference,
1013
+ });
1014
+ const {
1015
+ hasVideo,
1016
+ } = this.client.getHeldSession(sessionId) || {};
1026
1017
  const wasScreensharing = this.lastScreenShare && this.lastScreenShare.sipSessionId === sessionId;
1027
1018
  const wasDesktop = this.lastScreenShare && this.lastScreenShare.desktop;
1028
1019
  const promise = this.client.unhold(sipSession, isConference);
@@ -1034,20 +1025,22 @@ export default class WebRTCPhone extends Emitter implements Phone {
1034
1025
  screen: wasScreensharing,
1035
1026
  desktop: wasDesktop,
1036
1027
  };
1037
-
1038
1028
  await this.client.upgradeToVideo(sipSession, constraints, isConference);
1039
1029
  }
1040
1030
 
1041
- const onScreenSharing = stream => {
1031
+ const onScreenSharing = (stream: MediaStream | null | undefined) => {
1042
1032
  const hadVideo = this.lastScreenShare && this.lastScreenShare.hadVideo;
1033
+
1043
1034
  if (stream) {
1044
1035
  this._onScreenSharing(stream, sipSession, callSession, hadVideo);
1045
1036
  }
1037
+
1046
1038
  this.lastScreenShare = null;
1047
1039
  };
1048
1040
 
1049
1041
  if (withEvent) {
1050
1042
  const updatedCallSession = this._createCallSession(sipSession, callSession);
1043
+
1051
1044
  // Deprecated event
1052
1045
  this.eventEmitter.emit(ON_CALL_UNHELD, updatedCallSession);
1053
1046
  this.eventEmitter.emit(ON_CALL_RESUMED, updatedCallSession);
@@ -1055,6 +1048,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
1055
1048
 
1056
1049
  return promise.then(() => {
1057
1050
  const stream = callSession ? this.getLocalVideoStream(callSession) : null;
1051
+
1058
1052
  if (wasScreensharing) {
1059
1053
  onScreenSharing(stream);
1060
1054
  }
@@ -1063,17 +1057,24 @@ export default class WebRTCPhone extends Emitter implements Phone {
1063
1057
  });
1064
1058
  }
1065
1059
 
1066
- mute(callSession: ?CallSession, withEvent: boolean = true): void {
1067
- logger.info('WebRTC mute called', { id: callSession ? callSession.getId() : null });
1068
-
1060
+ mute(callSession: CallSession | null | undefined, withEvent = true): void {
1061
+ logger.info('WebRTC mute called', {
1062
+ id: callSession ? callSession.getId() : null,
1063
+ });
1069
1064
  const sipSession = this.findSipSession(callSession);
1065
+
1070
1066
  if (!sipSession) {
1071
1067
  return;
1072
1068
  }
1073
1069
 
1074
- logger.info('WebRTC muting', { sipId: sipSession.id });
1070
+ logger.info('WebRTC muting', {
1071
+ sipId: sipSession.id,
1072
+ });
1075
1073
  this.client.mute(sipSession);
1076
- const newCallSession = this._createCallSession(sipSession, callSession, { muted: true });
1074
+
1075
+ const newCallSession = this._createCallSession(sipSession, callSession, {
1076
+ muted: true,
1077
+ });
1077
1078
 
1078
1079
  if (this.currentCallSession && newCallSession.is(this.currentCallSession)) {
1079
1080
  this.currentCallSession = newCallSession;
@@ -1084,17 +1085,24 @@ export default class WebRTCPhone extends Emitter implements Phone {
1084
1085
  }
1085
1086
  }
1086
1087
 
1087
- unmute(callSession: ?CallSession, withEvent: boolean = true): void {
1088
- logger.info('WebRTC unmute called', { id: callSession ? callSession.getId() : null });
1089
-
1088
+ unmute(callSession: CallSession | null | undefined, withEvent = true): void {
1089
+ logger.info('WebRTC unmute called', {
1090
+ id: callSession ? callSession.getId() : null,
1091
+ });
1090
1092
  const sipSession = this.findSipSession(callSession);
1093
+
1091
1094
  if (!sipSession) {
1092
1095
  return;
1093
1096
  }
1094
1097
 
1095
- logger.info('WebRTC unmuting', { sipId: sipSession.id });
1098
+ logger.info('WebRTC unmuting', {
1099
+ sipId: sipSession.id,
1100
+ });
1096
1101
  this.client.unmute(sipSession);
1097
- const newCallSession = this._createCallSession(sipSession, callSession, { muted: false });
1102
+
1103
+ const newCallSession = this._createCallSession(sipSession, callSession, {
1104
+ muted: false,
1105
+ });
1098
1106
 
1099
1107
  if (this.currentCallSession && newCallSession.is(this.currentCallSession)) {
1100
1108
  this.currentCallSession = newCallSession;
@@ -1107,6 +1115,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
1107
1115
 
1108
1116
  isAudioMuted(callSession: CallSession): boolean {
1109
1117
  const sipSession = this.findSipSession(callSession);
1118
+
1110
1119
  if (!sipSession) {
1111
1120
  return true;
1112
1121
  }
@@ -1116,42 +1125,57 @@ export default class WebRTCPhone extends Emitter implements Phone {
1116
1125
 
1117
1126
  turnCameraOn(callSession?: CallSession): void {
1118
1127
  const sipSession = this.findSipSession(callSession);
1128
+
1119
1129
  if (!sipSession) {
1120
1130
  return;
1121
1131
  }
1122
- logger.info('WebRTC turn camera on', { sipId: sipSession.id });
1123
1132
 
1133
+ logger.info('WebRTC turn camera on', {
1134
+ sipId: sipSession.id,
1135
+ });
1124
1136
  this.client.toggleCameraOn(sipSession);
1125
-
1126
1137
  this.eventEmitter.emit(ON_CAMERA_RESUMED, this._createCameraResumedCallSession(sipSession, callSession));
1127
1138
  }
1128
1139
 
1129
1140
  turnCameraOff(callSession?: CallSession): void {
1130
1141
  const sipSession = this.findSipSession(callSession);
1142
+
1131
1143
  if (!sipSession) {
1132
1144
  return;
1133
1145
  }
1134
- logger.info('WebRTC turn camera off', { sipId: sipSession.id });
1135
1146
 
1147
+ logger.info('WebRTC turn camera off', {
1148
+ sipId: sipSession.id,
1149
+ });
1136
1150
  this.client.toggleCameraOff(sipSession);
1137
1151
  this.eventEmitter.emit(ON_CAMERA_DISABLED, this._createCameraDisabledCallSession(sipSession, callSession));
1138
1152
  }
1139
1153
 
1140
- sendKey(callSession: ?CallSession, tone: string): void {
1154
+ sendKey(callSession: CallSession | null | undefined, tone: string): void {
1141
1155
  const sipSession = this.findSipSession(callSession);
1156
+
1142
1157
  if (!sipSession) {
1143
1158
  return;
1144
1159
  }
1145
1160
 
1146
- logger.info('WebRTC send key', { sipId: sipSession.id, tone });
1161
+ logger.info('WebRTC send key', {
1162
+ sipId: sipSession.id,
1163
+ tone,
1164
+ });
1147
1165
  this.client.sendDTMF(sipSession, tone);
1148
1166
  }
1149
1167
 
1150
1168
  // Should be async to match CTIPhone definition
1151
1169
  // @TODO: line is not used here
1152
- async makeCall(number: string, line: any, cameraEnabled?: boolean,
1153
- audioOnly: boolean = false, conference: boolean = false): Promise<?CallSession> {
1154
- logger.info('make WebRTC call', { number, lineId: line ? line.id : null, cameraEnabled, audioOnly, conference });
1170
+ async makeCall(number: string, line: any, cameraEnabled?: boolean, audioOnly = false, conference = false): Promise<CallSession | null | undefined> {
1171
+ logger.info('make WebRTC call', {
1172
+ number,
1173
+ lineId: line ? line.id : null,
1174
+ cameraEnabled,
1175
+ audioOnly,
1176
+ conference,
1177
+ });
1178
+
1155
1179
  if (!number) {
1156
1180
  return Promise.resolve(null);
1157
1181
  }
@@ -1159,39 +1183,44 @@ export default class WebRTCPhone extends Emitter implements Phone {
1159
1183
  if (!this.client.isRegistered()) {
1160
1184
  await this.client.register();
1161
1185
  }
1186
+
1162
1187
  if (this.currentSipSession) {
1163
- this.holdSipSession(
1164
- this.currentSipSession,
1165
- this.currentCallSession,
1166
- true,
1167
- ).catch(e => {
1188
+ this.holdSipSession(this.currentSipSession, this.currentCallSession, true).catch(e => {
1168
1189
  logger.warn('Unable to hold current session when making another call', e);
1169
1190
  });
1170
1191
  }
1171
1192
 
1172
- let sipSession: Session;
1193
+ let sipSession: Inviter | Invitation;
1194
+
1173
1195
  try {
1174
1196
  sipSession = this.client.call(number, this.allowVideo ? cameraEnabled : false, audioOnly, conference);
1197
+
1175
1198
  this._bindEvents(sipSession);
1176
- } catch (error) {
1199
+ } catch (error: any) {
1177
1200
  console.warn(error);
1178
- logger.warn('make WebRTC call, error', { message: error.message, stack: error.stack });
1201
+ logger.warn('make WebRTC call, error', {
1202
+ message: error.message,
1203
+ stack: error.stack,
1204
+ });
1179
1205
  return Promise.resolve(null);
1180
1206
  }
1207
+
1181
1208
  const callSession = this._createOutgoingCallSession(sipSession, cameraEnabled || false);
1209
+
1182
1210
  callSession.setIsConference(conference);
1183
1211
  callSession.creationTime = new Date();
1212
+
1184
1213
  this._updateCallSession(callSession);
1185
1214
 
1186
1215
  this.eventEmitter.emit(ON_PLAY_PROGRESS_SOUND, this.audioOutputDeviceId, this.audioOutputVolume);
1187
-
1188
1216
  this.currentSipSession = sipSession;
1189
1217
  this.currentCallSession = callSession;
1190
-
1191
1218
  this.eventEmitter.emit(ON_CALL_OUTGOING, callSession);
1192
1219
 
1193
1220
  // If an invite promise exists, catch exceptions on it to trigger error like OverConstraintsError.
1221
+ // @ts-ignore
1194
1222
  if (sipSession.invitePromise) {
1223
+ // @ts-ignore
1195
1224
  sipSession.invitePromise.catch(error => {
1196
1225
  this.eventEmitter.emit(ON_CALL_ERROR, error, callSession);
1197
1226
  });
@@ -1200,21 +1229,23 @@ export default class WebRTCPhone extends Emitter implements Phone {
1200
1229
  return Promise.resolve(callSession);
1201
1230
  }
1202
1231
 
1203
- transfer(callSession: ?CallSession, target: string): void {
1232
+ transfer(callSession: CallSession | null | undefined, target: string): void {
1204
1233
  const sipSession = this.findSipSession(callSession);
1234
+
1205
1235
  if (!sipSession) {
1206
1236
  return;
1207
1237
  }
1208
1238
 
1209
- logger.info('WebRTC transfer', { sipId: sipSession.id, target });
1210
-
1239
+ logger.info('WebRTC transfer', {
1240
+ sipId: sipSession.id,
1241
+ target,
1242
+ });
1211
1243
  this.client.transfer(sipSession, target);
1212
1244
  }
1213
1245
 
1214
1246
  async indirectTransfer(source: CallSession, destination: CallSession): Promise<boolean> {
1215
1247
  const sipSession = this.client.getSipSession(source.sipCallId);
1216
1248
  const sipSessionTarget = this.client.getSipSession(destination.sipCallId);
1217
-
1218
1249
  logger.info('WebRTC indirect transfer', {
1219
1250
  sipId: sipSession ? sipSession.id : null,
1220
1251
  target: sipSessionTarget ? sipSessionTarget.id : null,
@@ -1236,7 +1267,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
1236
1267
  },
1237
1268
  };
1238
1269
 
1239
- return sipSessionTarget.refer(sipSession, options);
1270
+ return sipSessionTarget.refer((sipSession as Session), options);
1240
1271
  });
1241
1272
  }
1242
1273
 
@@ -1246,25 +1277,26 @@ export default class WebRTCPhone extends Emitter implements Phone {
1246
1277
 
1247
1278
  confirmCTIIndirectTransfer() {}
1248
1279
 
1249
- async hangup(callSession: ?CallSession): Promise<boolean> {
1280
+ async hangup(callSession?: CallSession | null): Promise<boolean> {
1250
1281
  const sipSession = this.findSipSession(callSession);
1282
+
1251
1283
  if (!sipSession) {
1252
- console.error('Call is unknown to the WebRTC phone', callSession ? callSession.sipCallId : null,
1253
- callSession ? callSession.callId : null);
1284
+ console.error('Call is unknown to the WebRTC phone', callSession ? callSession.sipCallId : null, callSession ? callSession.callId : null);
1254
1285
  return false;
1255
1286
  }
1256
1287
 
1257
- logger.info('WebRTC hangup', { sipId: sipSession.id });
1258
-
1288
+ logger.info('WebRTC hangup', {
1289
+ sipId: sipSession.id,
1290
+ });
1259
1291
  const sipSessionId = this.getSipSessionId(sipSession);
1260
-
1261
1292
  await this.client.hangup(sipSession);
1293
+
1262
1294
  if (callSession) {
1263
1295
  // Removal of `this.callSessions` will be done in `_onCallTerminated`.
1264
1296
  this.endCurrentCall(callSession);
1265
1297
  } else if (sipSessionId) {
1266
1298
  if (callSession) {
1267
- delete this.callSessions[callSession.getId()];
1299
+ delete this.callSessions[sipSessionId];
1268
1300
  }
1269
1301
  }
1270
1302
 
@@ -1272,34 +1304,33 @@ export default class WebRTCPhone extends Emitter implements Phone {
1272
1304
  return true;
1273
1305
  }
1274
1306
 
1275
- async getStats(callSession: ?CallSession): Promise<?Object> {
1307
+ async getStats(callSession: CallSession | null | undefined): Promise<RTCStatsReport | null | undefined> {
1276
1308
  const sipSession = this.findSipSession(callSession);
1277
-
1278
1309
  return sipSession ? this.client.getStats(sipSession) : null;
1279
1310
  }
1280
1311
 
1281
- startNetworkMonitoring(callSession: ?CallSession, interval: number = 1000) {
1312
+ startNetworkMonitoring(callSession: CallSession | null | undefined, interval = 1000) {
1282
1313
  const sipSession = this.findSipSession(callSession);
1283
-
1284
1314
  return sipSession ? this.client.startNetworkMonitoring(sipSession, interval) : null;
1285
1315
  }
1286
1316
 
1287
- stopNetworkMonitoring(callSession: ?CallSession) {
1317
+ stopNetworkMonitoring(callSession: CallSession | null | undefined) {
1288
1318
  const sipSession = this.findSipSession(callSession);
1289
-
1290
1319
  return sipSession ? this.client.stopNetworkMonitoring(sipSession) : null;
1291
1320
  }
1292
1321
 
1293
- forceCancel(sipSession: Session): void {
1322
+ forceCancel(sipSession: Inviter): void {
1323
+ // @ts-ignore
1294
1324
  if (!sipSession || !sipSession.outgoingInviteRequest) {
1295
1325
  return;
1296
1326
  }
1327
+
1328
+ // @ts-ignore
1297
1329
  sipSession.outgoingInviteRequest.cancel();
1298
1330
  }
1299
1331
 
1300
1332
  endCurrentCall(callSession: CallSession): void {
1301
1333
  const isCurrent = this.isCurrentCallSipSession(callSession);
1302
-
1303
1334
  logger.info('Ending current call', {
1304
1335
  id: callSession ? callSession.getId() : null,
1305
1336
  isCurrent,
@@ -1315,7 +1346,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
1315
1346
 
1316
1347
  onConnectionMade(): void {}
1317
1348
 
1318
- isConference(callSession: ?CallSession): boolean {
1349
+ isConference(callSession: CallSession | null | undefined): boolean {
1319
1350
  if (!callSession) {
1320
1351
  return false;
1321
1352
  }
@@ -1323,23 +1354,19 @@ export default class WebRTCPhone extends Emitter implements Phone {
1323
1354
  return this.client && this.client.isConference(callSession.sipCallId);
1324
1355
  }
1325
1356
 
1326
- async close(force: boolean = false): Promise<void> {
1357
+ async close(force = false): Promise<void> {
1327
1358
  logger.info('WebRTC close');
1328
1359
 
1329
1360
  try {
1330
- await Promise.race([
1331
- this.unregister(),
1332
- new Promise((resolve, reject) => setTimeout(() => reject(new Error('Unregister, timed out')), 3000)),
1333
- ]);
1334
- } catch (e) {
1361
+ await Promise.race([this.unregister(), new Promise((resolve, reject) => setTimeout(() => reject(new Error('Unregister, timed out')), 3000))]);
1362
+ } catch (e: any) {
1335
1363
  logger.error('WebRTC close, unregister error', e);
1336
1364
  }
1337
1365
 
1338
1366
  this.client.close(force);
1339
1367
  this.unbind();
1340
-
1341
1368
  this.incomingSessions = [];
1342
- this.currentSipSession = null;
1369
+ this.currentSipSession = undefined;
1343
1370
  this.currentCallSession = null;
1344
1371
  this.shouldSendReinvite = false;
1345
1372
  this.rejectedSessions = {};
@@ -1359,7 +1386,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
1359
1386
  this.ringingEnabled = false;
1360
1387
  }
1361
1388
 
1362
- getCurrentCallSession(): ?CallSession {
1389
+ getCurrentCallSession(): CallSession | null | undefined {
1363
1390
  if (!this.currentSipSession) {
1364
1391
  return null;
1365
1392
  }
@@ -1371,13 +1398,14 @@ export default class WebRTCPhone extends Emitter implements Phone {
1371
1398
  return this.incomingSessions.length > 0;
1372
1399
  }
1373
1400
 
1374
- getIncomingCallSession(): ?CallSession {
1401
+ getIncomingCallSession(): CallSession | null | undefined {
1375
1402
  if (!this.hasIncomingCallSession()) {
1376
1403
  return null;
1377
1404
  }
1378
1405
 
1379
1406
  const sessionId = this.incomingSessions[0];
1380
1407
  const sipSession = this.client.getSipSession(sessionId);
1408
+
1381
1409
  if (!sipSession) {
1382
1410
  return null;
1383
1411
  }
@@ -1385,41 +1413,42 @@ export default class WebRTCPhone extends Emitter implements Phone {
1385
1413
  return this._createCallSession(sipSession);
1386
1414
  }
1387
1415
 
1388
- sendMessage(sipSession: Session = null, body: string, contentType: string = 'text/plain') {
1416
+ // eslint-disable-next-line @typescript-eslint/default-param-last
1417
+ sendMessage(sipSession: Invitation | Inviter | null = null, body: string, contentType = 'text/plain'): void {
1389
1418
  return this.client.sendMessage(sipSession, body, contentType);
1390
1419
  }
1391
1420
 
1392
- getLocalStream(callSession: CallSession): ?MediaStream {
1421
+ getLocalStream(callSession: CallSession): MediaStream | null | undefined {
1393
1422
  return callSession ? this.client.getLocalStream(callSession.sipCallId) : null;
1394
1423
  }
1395
1424
 
1396
- getLocalVideoStream(callSession: CallSession): ?MediaStream {
1425
+ getLocalVideoStream(callSession: CallSession): MediaStream | null | undefined {
1397
1426
  return callSession ? this.client.getLocalVideoStream(callSession.sipCallId) : null;
1398
1427
  }
1399
1428
 
1400
1429
  // Deprecated
1401
- getLocalMediaStream(callSession: CallSession) {
1430
+ getLocalMediaStream(callSession: CallSession): MediaStream | null | undefined {
1402
1431
  logger.warn('WebRTCPhone.getLocalMediaStream is deprecated, use WebRTCPhone.getLocalStream instead');
1403
1432
  return this.getLocalStream(callSession);
1404
1433
  }
1405
1434
 
1406
- hasLocalVideo(callSession: CallSession) {
1407
- return callSession ? this.client.hasLocalVideo(callSession.sipCallId) : null;
1435
+ hasLocalVideo(callSession: CallSession): boolean {
1436
+ return callSession ? this.client.hasLocalVideo(callSession.sipCallId) : false;
1408
1437
  }
1409
1438
 
1410
- hasALocalVideoTrack(callSession: CallSession) {
1411
- return callSession ? this.client.hasALocalVideoTrack(callSession.sipCallId) : null;
1439
+ hasALocalVideoTrack(callSession: CallSession): boolean {
1440
+ return callSession ? this.client.hasALocalVideoTrack(callSession.sipCallId) : false;
1412
1441
  }
1413
1442
 
1414
- getRemoteStream(callSession: CallSession): ?MediaStream {
1443
+ getRemoteStream(callSession: CallSession): MediaStream | null | undefined {
1415
1444
  return callSession ? this.client.getRemoteStream(callSession.sipCallId) : null;
1416
1445
  }
1417
1446
 
1418
- getRemoteVideoStream(callSession: CallSession): ?MediaStream {
1447
+ getRemoteVideoStream(callSession: CallSession): MediaStream | null | undefined {
1419
1448
  return callSession ? this.client.getRemoteVideoStream(callSession.sipCallId) : null;
1420
1449
  }
1421
1450
 
1422
- getRemoteVideoStreamFromPc(callSession: CallSession): ?MediaStream {
1451
+ getRemoteVideoStreamFromPc(callSession: CallSession): MediaStream | null | undefined {
1423
1452
  return callSession ? this.client.getRemoteVideoStreamFromPc(callSession.sipCallId) : null;
1424
1453
  }
1425
1454
 
@@ -1427,24 +1456,29 @@ export default class WebRTCPhone extends Emitter implements Phone {
1427
1456
  return callSession ? this.client.hasRemoteVideo(callSession.sipCallId) : false;
1428
1457
  }
1429
1458
 
1430
- setMediaConstraints(media: MediaStreamConstraints) {
1459
+ setMediaConstraints(media: MediaStreamConstraints): void {
1431
1460
  this.client.setMediaConstraints(media);
1432
1461
  }
1433
1462
 
1434
- isVideoRemotelyHeld(callSession: CallSession) {
1435
- return callSession ? this.client.isVideoRemotelyHeld(callSession.sipCallId) : null;
1463
+ isVideoRemotelyHeld(callSession: CallSession): boolean {
1464
+ return callSession ? this.client.isVideoRemotelyHeld(callSession.sipCallId) : false;
1436
1465
  }
1437
1466
 
1438
1467
  bindClientEvents() {
1439
1468
  this.client.unbind();
1440
-
1441
- this.client.on(this.client.INVITE, (sipSession: Session, wantsToDoVideo: boolean) => {
1469
+ this.client.on(this.client.INVITE, (sipSession: Invitation | Inviter, wantsToDoVideo: boolean) => {
1442
1470
  const autoAnswer = sipSession.request.getHeader('Answer-Mode') === 'Auto';
1443
1471
  const withVideo = this.allowVideo ? wantsToDoVideo : false;
1444
- logger.info('WebRTC invite received', { sipId: sipSession.id, withVideo, autoAnswer });
1472
+ logger.info('WebRTC invite received', {
1473
+ sipId: sipSession.id,
1474
+ withVideo,
1475
+ autoAnswer,
1476
+ });
1445
1477
 
1446
1478
  const callSession = this._createIncomingCallSession(sipSession, withVideo, null, autoAnswer);
1479
+
1447
1480
  this.incomingSessions.push(callSession.getId());
1481
+
1448
1482
  this._bindEvents(sipSession);
1449
1483
 
1450
1484
  this.client.storeSipSession(sipSession);
@@ -1454,18 +1488,15 @@ export default class WebRTCPhone extends Emitter implements Phone {
1454
1488
  this.eventEmitter.emit(ON_PLAY_RING_SOUND, this.audioRingDeviceId, this.audioRingVolume, callSession);
1455
1489
  }
1456
1490
  } else {
1457
- this.eventEmitter.emit(ON_PLAY_INBOUND_CALL_SIGNAL_SOUND,
1458
- this.audioOutputDeviceId,
1459
- this.audioOutputVolume,
1460
- callSession);
1491
+ this.eventEmitter.emit(ON_PLAY_INBOUND_CALL_SIGNAL_SOUND, this.audioOutputDeviceId, this.audioOutputVolume, callSession);
1461
1492
  }
1462
1493
 
1463
1494
  callSession.creationTime = new Date();
1495
+
1464
1496
  this._updateCallSession(callSession);
1465
1497
 
1466
1498
  this.eventEmitter.emit(ON_CALL_INCOMING, callSession, wantsToDoVideo);
1467
1499
  });
1468
-
1469
1500
  this.client.on(this.client.ON_REINVITE, (...args) => {
1470
1501
  logger.info('WebRTC on reinvite', {
1471
1502
  sessionId: args[0].id,
@@ -1473,9 +1504,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
1473
1504
  updatedCalleeName: args[2],
1474
1505
  updatedNumber: args[3],
1475
1506
  });
1476
-
1477
1507
  const sipSession = args[0];
1478
-
1479
1508
  // Give some time for the stream to be mounted.
1480
1509
  // if `_createCallSession` is called too soon `hasVideo` will return false because the stream doesn't exists yet
1481
1510
  setTimeout(() => {
@@ -1485,15 +1514,18 @@ export default class WebRTCPhone extends Emitter implements Phone {
1485
1514
  this.eventEmitter.emit.apply(this.eventEmitter, [this.client.ON_REINVITE, ...args]);
1486
1515
  }, 2000);
1487
1516
  });
1488
-
1489
- this.client.on(this.client.ACCEPTED, (sipSession: Session) => {
1517
+ this.client.on(this.client.ACCEPTED, (sipSession: Inviter | Invitation) => {
1490
1518
  const sessionId = this.getSipSessionId(sipSession);
1491
- const hasSession = sessionId in this.callSessions;
1492
-
1493
- logger.info('WebRTC call accepted', { sipId: sessionId, hasSession });
1519
+ const hasSession = (sessionId in this.callSessions);
1520
+ logger.info('WebRTC call accepted', {
1521
+ sipId: sessionId,
1522
+ hasSession,
1523
+ });
1494
1524
 
1495
1525
  if (!hasSession) {
1496
- logger.warn('Call accepted ignored, session is no longer present in the WebRtcPhone', { sessionId });
1526
+ logger.warn('Call accepted ignored, session is no longer present in the WebRtcPhone', {
1527
+ sessionId,
1528
+ });
1497
1529
  return;
1498
1530
  }
1499
1531
 
@@ -1504,36 +1536,36 @@ export default class WebRTCPhone extends Emitter implements Phone {
1504
1536
  }
1505
1537
  });
1506
1538
  this.client.on('ended', () => {});
1507
-
1508
1539
  this.client.on(this.client.ON_ERROR, e => {
1509
1540
  logger.error('WebRTC error', e);
1510
1541
  this.eventEmitter.emit(ON_CALL_ERROR, e);
1511
1542
  });
1512
-
1513
1543
  this.client.on(this.client.REJECTED, session => {
1514
1544
  logger.info('WebRTC call rejected', session.id);
1545
+
1515
1546
  const callSession = this._createCallSession(session);
1547
+
1516
1548
  callSession.endTime = new Date();
1549
+
1517
1550
  this._updateCallSession(callSession);
1518
1551
 
1519
1552
  this.eventEmitter.emit(ON_CALL_REJECTED, callSession);
1520
1553
  });
1521
-
1522
1554
  this.client.on(this.client.UNREGISTERED, () => {
1523
1555
  logger.info('WebRTC unregistered');
1524
1556
  this.eventEmitter.emit(ON_UNREGISTERED);
1525
1557
  });
1526
-
1527
1558
  this.client.on(this.client.ON_DISCONNECTED, () => {
1528
1559
  logger.info('WebRTC disconnected');
1529
1560
  this.eventEmitter.emit(ON_DISCONNECTED);
1530
1561
  });
1531
1562
  this.client.on(this.client.ON_EARLY_MEDIA, session => {
1532
1563
  logger.info('WebRTC early media');
1564
+
1533
1565
  const callSession = this._createCallSession(session);
1566
+
1534
1567
  this.eventEmitter.emit(ON_EARLY_MEDIA, callSession);
1535
1568
  });
1536
-
1537
1569
  this.client.on(this.client.REGISTERED, () => {
1538
1570
  logger.info('WebRTC registered', {
1539
1571
  shouldSendReinvite: this.shouldSendReinvite,
@@ -1545,31 +1577,30 @@ export default class WebRTCPhone extends Emitter implements Phone {
1545
1577
 
1546
1578
  // If the phone registered with a current callSession (eg: when switching network):
1547
1579
  // send a reinvite to renegociate ICE with new IP
1548
- if (this.shouldSendReinvite && this.currentSipSession
1549
- && this.currentSipSession.state === SessionState.Established) {
1580
+ if (this.shouldSendReinvite && this.currentSipSession && this.currentSipSession.state === SessionState.Established) {
1550
1581
  this.shouldSendReinvite = false;
1551
- const pc = this.currentSipSession.sessionDescriptionHandler.peerConnection;
1582
+ // @ts-ignore
1583
+ const pc = this.currentSipSession?.sessionDescriptionHandler?.peerConnection;
1552
1584
  const isConference = pc ? pc.sfu : false;
1553
1585
  const hasVideo = this.currentCallSession && this.currentCallSession.cameraEnabled;
1554
1586
 
1555
1587
  try {
1556
1588
  // Send reinvite with iceRestart
1557
1589
  this.sendReinvite(this.currentCallSession, null, isConference, !hasVideo, true);
1558
- } catch (e) {
1559
- logger.error('WebRTC reinvite after register, error', { message: e.message, stack: e.stack });
1590
+ } catch (e: any) {
1591
+ logger.error('WebRTC reinvite after register, error', {
1592
+ message: e.message,
1593
+ stack: e.stack,
1594
+ });
1560
1595
  }
1561
1596
  }
1562
1597
  });
1563
-
1564
1598
  this.client.on(this.client.CONNECTED, () => {
1565
1599
  logger.info('WebRTC client connected');
1566
-
1567
1600
  this.stopHeartbeat();
1568
1601
  });
1569
-
1570
1602
  this.client.on(this.client.DISCONNECTED, () => {
1571
1603
  logger.info('WebRTC client disconnected');
1572
-
1573
1604
  this.eventEmitter.emit(ON_UNREGISTERED);
1574
1605
 
1575
1606
  // Do not trigger heartbeat if already running
@@ -1580,71 +1611,62 @@ export default class WebRTCPhone extends Emitter implements Phone {
1580
1611
  // Tell to send reinvite when reconnecting
1581
1612
  this.shouldSendReinvite = true;
1582
1613
  });
1583
-
1584
1614
  this.client.on(this.client.ON_TRACK, (session, event) => {
1585
1615
  this.eventEmitter.emit(ON_TRACK, session, event);
1586
1616
  });
1587
-
1588
1617
  this.client.on('onVideoInputChange', stream => {
1589
1618
  this.eventEmitter.emit(ON_VIDEO_INPUT_CHANGE, stream);
1590
1619
  });
1591
-
1592
1620
  this.client.on(this.client.MESSAGE, (message: Message) => {
1593
1621
  this._onMessage(message);
1622
+
1594
1623
  this.eventEmitter.emit(ON_MESSAGE, message);
1595
1624
  });
1596
-
1597
1625
  this.client.on(this.client.ON_NETWORK_STATS, (session, stats, previousStats) => {
1598
1626
  const callSession = this.getCallSession(this.getSipSessionId(session));
1599
-
1600
1627
  this.eventEmitter.emit(ON_NETWORK_STATS, callSession, stats, previousStats);
1601
1628
  });
1602
-
1603
1629
  // Used when upgrading directly in screenshare mode
1604
- this.client.on(this.client.ON_SCREEN_SHARING_REINVITE, (sipSession: Session, response: any, desktop: boolean) => {
1630
+ this.client.on(this.client.ON_SCREEN_SHARING_REINVITE, (sipSession: Inviter | Invitation, response: any, desktop: boolean) => {
1605
1631
  const sipSessionId = this.getSipSessionId(sipSession);
1606
1632
  const localStream = this.client.getLocalStream(sipSessionId);
1607
1633
  const callSession = this.callSessions[sipSessionId];
1608
-
1609
1634
  logger.info('Updrading directly in screensharing mode', {
1610
1635
  sipSessionId,
1611
- tracks: localStream ? localStream.getTracks() : null,
1636
+ tracks: localStream?.getTracks() || null,
1612
1637
  });
1613
1638
 
1614
- this._onScreenSharing(localStream, sipSession, callSession, false, desktop);
1639
+ this._onScreenSharing(localStream as MediaStream, sipSession, callSession, false, desktop);
1615
1640
  });
1616
1641
  }
1617
1642
 
1618
1643
  // Find a corresponding sipSession from a CallSession
1619
- findSipSession(callSession: ?CallSession): ?Session {
1644
+ findSipSession(callSession: CallSession | null | undefined): Invitation | Inviter | null | undefined {
1620
1645
  const keys = this.client.getSipSessionIds();
1621
1646
  const keyIndex = keys.findIndex(sessionId => callSession && callSession.isId(sessionId));
1622
1647
 
1623
1648
  if (keyIndex === -1) {
1624
- const currentSipSessionId = this.currentSipSession
1625
- ? this.getSipSessionId(this.currentSipSession)
1626
- : this.client.getSipSessionIds()[0];
1649
+ const currentSipSessionId = this.currentSipSession ? this.getSipSessionId(this.currentSipSession) : this.client.getSipSessionIds()[0];
1627
1650
  return currentSipSessionId ? this.client.getSipSession(currentSipSessionId) : null;
1628
1651
  }
1629
1652
 
1630
1653
  return this.client.getSipSession(keys[keyIndex]);
1631
1654
  }
1632
1655
 
1633
- getCallSession(sipSessionId: string): ?CallSession {
1656
+ getCallSession(sipSessionId: string): CallSession | null | undefined {
1634
1657
  return this.callSessions[sipSessionId];
1635
1658
  }
1636
1659
 
1637
- getSipSessionId(sipSession: Session) {
1660
+ getSipSessionId(sipSession: Inviter | Invitation): string {
1638
1661
  return this.client.getSipSessionId(sipSession);
1639
1662
  }
1640
1663
 
1641
- getSipSessionIdFromCallSession(callSession: CallSession) {
1664
+ getSipSessionIdFromCallSession(callSession: CallSession): string | null {
1642
1665
  const sipSession = this.findSipSession(callSession);
1643
-
1644
1666
  return sipSession ? this.getSipSessionId(sipSession) : null;
1645
1667
  }
1646
1668
 
1647
- _updateCallSession(callSession: CallSession) {
1669
+ _updateCallSession(callSession: CallSession): void {
1648
1670
  const sipSessionId = this.getSipSessionIdFromCallSession(callSession);
1649
1671
 
1650
1672
  if (sipSessionId) {
@@ -1652,7 +1674,8 @@ export default class WebRTCPhone extends Emitter implements Phone {
1652
1674
  }
1653
1675
  }
1654
1676
 
1655
- _onMessage(message: Message) {
1677
+ _onMessage(message: Message): void {
1678
+ // @ts-ignore
1656
1679
  if (!message || message.method !== 'MESSAGE') {
1657
1680
  return;
1658
1681
  }
@@ -1660,19 +1683,24 @@ export default class WebRTCPhone extends Emitter implements Phone {
1660
1683
  let body;
1661
1684
 
1662
1685
  try {
1686
+ // @ts-ignore
1663
1687
  body = JSON.parse(message.body);
1664
- } catch (e) {
1688
+ } catch (e: any) {
1665
1689
  return;
1666
1690
  }
1667
1691
 
1668
- const { type, content } = body;
1692
+ const {
1693
+ type,
1694
+ content,
1695
+ } = body;
1669
1696
 
1670
1697
  switch (type) {
1671
1698
  case MESSAGE_TYPE_CHAT:
1672
1699
  this.eventEmitter.emit(ON_CHAT, content);
1673
1700
  break;
1674
1701
 
1675
- case MESSAGE_TYPE_SIGNAL: {
1702
+ case MESSAGE_TYPE_SIGNAL:
1703
+ {
1676
1704
  this.eventEmitter.emit(ON_SIGNAL, content);
1677
1705
  break;
1678
1706
  }
@@ -1681,12 +1709,7 @@ export default class WebRTCPhone extends Emitter implements Phone {
1681
1709
  }
1682
1710
  }
1683
1711
 
1684
- _createIncomingCallSession(
1685
- sipSession: Session,
1686
- cameraEnabled: boolean,
1687
- fromSession?: ?CallSession,
1688
- autoAnswer: boolean = false,
1689
- ): CallSession {
1712
+ _createIncomingCallSession(sipSession: Invitation | Inviter, cameraEnabled: boolean, fromSession?: CallSession | null | undefined, autoAnswer = false): CallSession {
1690
1713
  return this._createCallSession(sipSession, fromSession, {
1691
1714
  incoming: true,
1692
1715
  ringing: true,
@@ -1695,82 +1718,80 @@ export default class WebRTCPhone extends Emitter implements Phone {
1695
1718
  });
1696
1719
  }
1697
1720
 
1698
- _createOutgoingCallSession(
1699
- sipSession: Session,
1700
- cameraEnabled: boolean,
1701
- fromSession?: CallSession,
1702
- ): CallSession {
1703
- return this._createCallSession(sipSession, fromSession, { incoming: false, ringing: true, cameraEnabled });
1721
+ _createOutgoingCallSession(sipSession: Invitation | Inviter, cameraEnabled: boolean, fromSession?: CallSession): CallSession {
1722
+ return this._createCallSession(sipSession, fromSession, {
1723
+ incoming: false,
1724
+ ringing: true,
1725
+ cameraEnabled,
1726
+ });
1704
1727
  }
1705
1728
 
1706
- _createAcceptedCallSession(
1707
- sipSession: Session,
1708
- cameraEnabled?: boolean,
1709
- fromSession?: CallSession,
1710
- ): CallSession {
1729
+ _createAcceptedCallSession(sipSession: Invitation | Inviter, cameraEnabled?: boolean, fromSession?: CallSession): CallSession {
1711
1730
  return this._createCallSession(sipSession, fromSession, {
1712
1731
  cameraEnabled: cameraEnabled !== undefined ? cameraEnabled : false,
1713
1732
  });
1714
1733
  }
1715
1734
 
1716
- _createMutedCallSession(sipSession: Session, fromSession?: CallSession): CallSession {
1735
+ _createMutedCallSession(sipSession: Invitation | Inviter, fromSession?: CallSession): CallSession {
1717
1736
  return this._createCallSession(sipSession, fromSession, {
1718
1737
  muted: true,
1719
1738
  });
1720
1739
  }
1721
1740
 
1722
- _createUnmutedCallSession(sipSession: Session, fromSession?: CallSession): CallSession {
1741
+ _createUnmutedCallSession(sipSession: Invitation | Inviter, fromSession?: CallSession): CallSession {
1723
1742
  return this._createCallSession(sipSession, fromSession, {
1724
1743
  muted: false,
1725
1744
  });
1726
1745
  }
1727
1746
 
1728
- _createCameraResumedCallSession(sipSession: Session, fromSession?: CallSession): CallSession {
1747
+ _createCameraResumedCallSession(sipSession: Invitation | Inviter, fromSession?: CallSession): CallSession {
1729
1748
  return this._createCallSession(sipSession, fromSession, {
1730
1749
  videoMuted: false,
1731
1750
  });
1732
1751
  }
1733
1752
 
1734
- _createCameraDisabledCallSession(sipSession: Session, fromSession?: CallSession): CallSession {
1753
+ _createCameraDisabledCallSession(sipSession: Invitation | Inviter, fromSession?: CallSession): CallSession {
1735
1754
  return this._createCallSession(sipSession, fromSession, {
1736
1755
  videoMuted: true,
1737
1756
  });
1738
1757
  }
1739
1758
 
1740
- _createCallSession(sipSession: Session, fromSession?: ?CallSession, extra: Object = {}): CallSession {
1759
+ _createCallSession(sipSession: Invitation | Inviter, fromSession?: CallSession | null | undefined, extra: Record<string, any> = {}): CallSession {
1741
1760
  // eslint-disable-next-line
1742
1761
  const identity = sipSession ? sipSession.remoteIdentity || sipSession.assertedIdentity : null;
1762
+ // @ts-ignore
1743
1763
  const number = identity ? identity.uri._normal.user : null;
1744
- const { state } = sipSession || {};
1764
+ const {
1765
+ state,
1766
+ } = sipSession || {};
1745
1767
  const sessionId = this.getSipSessionId(sipSession);
1746
1768
  fromSession = fromSession || this.callSessions[sessionId];
1747
-
1748
1769
  const callSession = new CallSession({
1749
1770
  callId: fromSession && fromSession.callId,
1750
1771
  sipCallId: sessionId,
1751
1772
  sipStatus: state,
1752
1773
  displayName: identity ? identity.displayName || number : number,
1774
+ // @ts-ignore: @HEADSUP: startTime should be a number, not a date
1753
1775
  startTime: fromSession ? fromSession.startTime : new Date(),
1754
1776
  creationTime: fromSession ? fromSession.creationTime : null,
1755
1777
  answerTime: fromSession ? fromSession.answerTime : null,
1756
1778
  endTime: fromSession ? fromSession.endTime : null,
1757
1779
  answered: state === SessionState.Established,
1758
1780
  paused: this.client.isCallHeld(sipSession),
1759
- isCaller: fromSession ? fromSession.isCaller : ('incoming' in extra ? !extra.incoming : false),
1781
+ isCaller: fromSession ? fromSession.isCaller : 'incoming' in extra ? !extra.incoming : false,
1760
1782
  cameraEnabled: fromSession ? fromSession.isCameraEnabled() : this.client.hasVideo(sessionId),
1761
1783
  number,
1762
1784
  ringing: false,
1763
1785
  muted: fromSession ? fromSession.isMuted() : this.client.isAudioMuted(sipSession),
1764
1786
  videoMuted: fromSession ? fromSession.isVideoMuted() : false,
1765
1787
  recording: fromSession ? fromSession.isRecording() : false,
1766
- recordingPaused: false, // @TODO
1788
+ recordingPaused: false,
1767
1789
  sipSession,
1768
1790
  conference: !!fromSession && fromSession.isConference(),
1769
1791
  ...extra,
1770
1792
  });
1771
-
1772
1793
  this.callSessions[callSession.getId()] = callSession;
1773
-
1774
1794
  return callSession;
1775
1795
  }
1796
+
1776
1797
  }