ue-softphone-sdk 2.1.9 → 2.2.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 (390) hide show
  1. package/dist/{index.d.ts → types/index.d.ts} +3 -7
  2. package/dist/ue-softphone-sdk.js +1 -2
  3. package/package.json +6 -6
  4. package/{new-rollup.config.mjs → rollup-new.config.mjs} +1 -1
  5. package/rollup.config.js +14 -15
  6. package/src/index.ts +23 -49
  7. package/tsconfig.json +10 -26
  8. package/dist/api/bye.d.ts +0 -16
  9. package/dist/api/dtmf.d.ts +0 -15
  10. package/dist/api/emitter.d.ts +0 -88
  11. package/dist/api/exceptions/content-type-unsupported.d.ts +0 -8
  12. package/dist/api/exceptions/index.d.ts +0 -5
  13. package/dist/api/exceptions/request-pending.d.ts +0 -9
  14. package/dist/api/exceptions/session-description-handler.d.ts +0 -8
  15. package/dist/api/exceptions/session-terminated.d.ts +0 -8
  16. package/dist/api/exceptions/state-transition.d.ts +0 -8
  17. package/dist/api/index.d.ts +0 -58
  18. package/dist/api/info.d.ts +0 -16
  19. package/dist/api/invitation-accept-options.d.ts +0 -19
  20. package/dist/api/invitation-progress-options.d.ts +0 -38
  21. package/dist/api/invitation-reject-options.d.ts +0 -25
  22. package/dist/api/invitation.d.ts +0 -179
  23. package/dist/api/inviter-cancel-options.d.ts +0 -9
  24. package/dist/api/inviter-invite-options.d.ts +0 -28
  25. package/dist/api/inviter-options.d.ts +0 -43
  26. package/dist/api/inviter.d.ts +0 -236
  27. package/dist/api/message.d.ts +0 -16
  28. package/dist/api/messager-message-options.d.ts +0 -11
  29. package/dist/api/messager-options.d.ts +0 -17
  30. package/dist/api/messager.d.ts +0 -26
  31. package/dist/api/notification.d.ts +0 -16
  32. package/dist/api/notifier.d.ts +0 -8
  33. package/dist/api/publisher-options.d.ts +0 -33
  34. package/dist/api/publisher-publish-options.d.ts +0 -6
  35. package/dist/api/publisher-state.d.ts +0 -21
  36. package/dist/api/publisher-unpublish-options.d.ts +0 -6
  37. package/dist/api/publisher.d.ts +0 -65
  38. package/dist/api/referral.d.ts +0 -38
  39. package/dist/api/registerer-options.d.ts +0 -46
  40. package/dist/api/registerer-register-options.d.ts +0 -11
  41. package/dist/api/registerer-state.d.ts +0 -21
  42. package/dist/api/registerer-unregister-options.d.ts +0 -16
  43. package/dist/api/registerer.d.ts +0 -144
  44. package/dist/api/session-bye-options.d.ts +0 -11
  45. package/dist/api/session-delegate.d.ts +0 -73
  46. package/dist/api/session-description-handler-factory.d.ts +0 -15
  47. package/dist/api/session-description-handler.d.ts +0 -74
  48. package/dist/api/session-info-options.d.ts +0 -11
  49. package/dist/api/session-invite-options.d.ts +0 -28
  50. package/dist/api/session-message-options.d.ts +0 -11
  51. package/dist/api/session-options.d.ts +0 -8
  52. package/dist/api/session-refer-options.d.ts +0 -14
  53. package/dist/api/session-state.d.ts +0 -45
  54. package/dist/api/session.d.ts +0 -359
  55. package/dist/api/subscriber-options.d.ts +0 -11
  56. package/dist/api/subscriber-subscribe-options.d.ts +0 -6
  57. package/dist/api/subscriber.d.ts +0 -94
  58. package/dist/api/subscription-delegate.d.ts +0 -12
  59. package/dist/api/subscription-options.d.ts +0 -8
  60. package/dist/api/subscription-state.d.ts +0 -19
  61. package/dist/api/subscription-subscribe-options.d.ts +0 -6
  62. package/dist/api/subscription-unsubscribe-options.d.ts +0 -6
  63. package/dist/api/subscription.d.ts +0 -84
  64. package/dist/api/transport-state.d.ts +0 -37
  65. package/dist/api/transport.d.ts +0 -159
  66. package/dist/api/user-agent-delegate.d.ts +0 -84
  67. package/dist/api/user-agent-options.d.ts +0 -253
  68. package/dist/api/user-agent-state.d.ts +0 -14
  69. package/dist/api/user-agent.d.ts +0 -200
  70. package/dist/core/dialogs/dialog-state.d.ts +0 -34
  71. package/dist/core/dialogs/dialog.d.ts +0 -161
  72. package/dist/core/dialogs/index.d.ts +0 -4
  73. package/dist/core/dialogs/session-dialog.d.ts +0 -196
  74. package/dist/core/dialogs/subscription-dialog.d.ts +0 -120
  75. package/dist/core/exceptions/exception.d.ts +0 -8
  76. package/dist/core/exceptions/index.d.ts +0 -3
  77. package/dist/core/exceptions/transaction-state-error.d.ts +0 -8
  78. package/dist/core/exceptions/transport-error.d.ts +0 -8
  79. package/dist/core/index.d.ts +0 -15
  80. package/dist/core/log/index.d.ts +0 -3
  81. package/dist/core/log/levels.d.ts +0 -10
  82. package/dist/core/log/logger-factory.d.ts +0 -21
  83. package/dist/core/log/logger.d.ts +0 -19
  84. package/dist/core/messages/body.d.ts +0 -64
  85. package/dist/core/messages/digest-authentication.d.ts +0 -51
  86. package/dist/core/messages/incoming-message.d.ts +0 -79
  87. package/dist/core/messages/incoming-request-message.d.ts +0 -10
  88. package/dist/core/messages/incoming-request.d.ts +0 -67
  89. package/dist/core/messages/incoming-response-message.d.ts +0 -10
  90. package/dist/core/messages/incoming-response.d.ts +0 -12
  91. package/dist/core/messages/index.d.ts +0 -13
  92. package/dist/core/messages/md5.d.ts +0 -32
  93. package/dist/core/messages/methods/ack.d.ts +0 -18
  94. package/dist/core/messages/methods/bye.d.ts +0 -21
  95. package/dist/core/messages/methods/cancel.d.ts +0 -21
  96. package/dist/core/messages/methods/constants.d.ts +0 -20
  97. package/dist/core/messages/methods/index.d.ts +0 -13
  98. package/dist/core/messages/methods/info.d.ts +0 -21
  99. package/dist/core/messages/methods/invite.d.ts +0 -86
  100. package/dist/core/messages/methods/message.d.ts +0 -21
  101. package/dist/core/messages/methods/notify.d.ts +0 -21
  102. package/dist/core/messages/methods/prack.d.ts +0 -21
  103. package/dist/core/messages/methods/publish.d.ts +0 -21
  104. package/dist/core/messages/methods/refer.d.ts +0 -21
  105. package/dist/core/messages/methods/register.d.ts +0 -21
  106. package/dist/core/messages/methods/subscribe.d.ts +0 -54
  107. package/dist/core/messages/outgoing-request-message.d.ts +0 -94
  108. package/dist/core/messages/outgoing-request.d.ts +0 -67
  109. package/dist/core/messages/outgoing-response.d.ts +0 -42
  110. package/dist/core/messages/parser.d.ts +0 -14
  111. package/dist/core/messages/utils.d.ts +0 -24
  112. package/dist/core/session/index.d.ts +0 -2
  113. package/dist/core/session/session-delegate.d.ts +0 -70
  114. package/dist/core/session/session.d.ts +0 -134
  115. package/dist/core/subscription/index.d.ts +0 -2
  116. package/dist/core/subscription/subscription-delegate.d.ts +0 -27
  117. package/dist/core/subscription/subscription.d.ts +0 -55
  118. package/dist/core/timers.d.ts +0 -20
  119. package/dist/core/transactions/client-transaction.d.ts +0 -45
  120. package/dist/core/transactions/index.d.ts +0 -10
  121. package/dist/core/transactions/invite-client-transaction.d.ts +0 -116
  122. package/dist/core/transactions/invite-server-transaction.d.ts +0 -127
  123. package/dist/core/transactions/non-invite-client-transaction.d.ts +0 -69
  124. package/dist/core/transactions/non-invite-server-transaction.d.ts +0 -57
  125. package/dist/core/transactions/server-transaction.d.ts +0 -35
  126. package/dist/core/transactions/transaction-state.d.ts +0 -13
  127. package/dist/core/transactions/transaction-user.d.ts +0 -72
  128. package/dist/core/transactions/transaction.d.ts +0 -79
  129. package/dist/core/transport.d.ts +0 -31
  130. package/dist/core/user-agent-core/allowed-methods.d.ts +0 -4
  131. package/dist/core/user-agent-core/index.d.ts +0 -3
  132. package/dist/core/user-agent-core/user-agent-core-configuration.d.ts +0 -99
  133. package/dist/core/user-agent-core/user-agent-core-delegate.d.ts +0 -37
  134. package/dist/core/user-agent-core/user-agent-core.d.ts +0 -179
  135. package/dist/core/user-agents/bye-user-agent-client.d.ts +0 -10
  136. package/dist/core/user-agents/bye-user-agent-server.d.ts +0 -10
  137. package/dist/core/user-agents/cancel-user-agent-client.d.ts +0 -10
  138. package/dist/core/user-agents/index.d.ts +0 -26
  139. package/dist/core/user-agents/info-user-agent-client.d.ts +0 -10
  140. package/dist/core/user-agents/info-user-agent-server.d.ts +0 -10
  141. package/dist/core/user-agents/invite-user-agent-client.d.ts +0 -35
  142. package/dist/core/user-agents/invite-user-agent-server.d.ts +0 -77
  143. package/dist/core/user-agents/message-user-agent-client.d.ts +0 -10
  144. package/dist/core/user-agents/message-user-agent-server.d.ts +0 -10
  145. package/dist/core/user-agents/notify-user-agent-client.d.ts +0 -10
  146. package/dist/core/user-agents/notify-user-agent-server.d.ts +0 -16
  147. package/dist/core/user-agents/prack-user-agent-client.d.ts +0 -10
  148. package/dist/core/user-agents/prack-user-agent-server.d.ts +0 -16
  149. package/dist/core/user-agents/publish-user-agent-client.d.ts +0 -10
  150. package/dist/core/user-agents/re-invite-user-agent-client.d.ts +0 -18
  151. package/dist/core/user-agents/re-invite-user-agent-server.d.ts +0 -41
  152. package/dist/core/user-agents/re-subscribe-user-agent-client.d.ts +0 -17
  153. package/dist/core/user-agents/re-subscribe-user-agent-server.d.ts +0 -10
  154. package/dist/core/user-agents/refer-user-agent-client.d.ts +0 -10
  155. package/dist/core/user-agents/refer-user-agent-server.d.ts +0 -16
  156. package/dist/core/user-agents/register-user-agent-client.d.ts +0 -10
  157. package/dist/core/user-agents/register-user-agent-server.d.ts +0 -11
  158. package/dist/core/user-agents/subscribe-user-agent-client.d.ts +0 -65
  159. package/dist/core/user-agents/subscribe-user-agent-server.d.ts +0 -11
  160. package/dist/core/user-agents/user-agent-client.d.ts +0 -103
  161. package/dist/core/user-agents/user-agent-server.d.ts +0 -79
  162. package/dist/grammar/grammar.d.ts +0 -26
  163. package/dist/grammar/index.d.ts +0 -4
  164. package/dist/grammar/name-addr-header.d.ts +0 -24
  165. package/dist/grammar/parameters.d.ts +0 -16
  166. package/dist/grammar/pegjs/dist/grammar.d.ts +0 -50
  167. package/dist/grammar/uri.d.ts +0 -62
  168. package/dist/main.d.ts +0 -9
  169. package/dist/new-index.d.ts +0 -199
  170. package/dist/platform/web/index.d.ts +0 -4
  171. package/dist/platform/web/modifiers/index.d.ts +0 -5
  172. package/dist/platform/web/modifiers/modifiers.d.ts +0 -41
  173. package/dist/platform/web/session-description-handler/index.d.ts +0 -14
  174. package/dist/platform/web/session-description-handler/media-stream-factory-default.d.ts +0 -6
  175. package/dist/platform/web/session-description-handler/media-stream-factory.d.ts +0 -6
  176. package/dist/platform/web/session-description-handler/peer-connection-configuration-default.d.ts +0 -5
  177. package/dist/platform/web/session-description-handler/peer-connection-delegate.d.ts +0 -63
  178. package/dist/platform/web/session-description-handler/session-description-handler-configuration.d.ts +0 -16
  179. package/dist/platform/web/session-description-handler/session-description-handler-factory-default.d.ts +0 -11
  180. package/dist/platform/web/session-description-handler/session-description-handler-factory-options.d.ts +0 -9
  181. package/dist/platform/web/session-description-handler/session-description-handler-factory.d.ts +0 -16
  182. package/dist/platform/web/session-description-handler/session-description-handler-options.d.ts +0 -47
  183. package/dist/platform/web/session-description-handler/session-description-handler.d.ts +0 -212
  184. package/dist/platform/web/simple-user/index.d.ts +0 -7
  185. package/dist/platform/web/simple-user/simple-user-delegate.d.ts +0 -72
  186. package/dist/platform/web/simple-user/simple-user-options.d.ts +0 -90
  187. package/dist/platform/web/simple-user/simple-user.d.ts +0 -226
  188. package/dist/platform/web/transport/index.d.ts +0 -6
  189. package/dist/platform/web/transport/transport-options.d.ts +0 -30
  190. package/dist/platform/web/transport/transport.d.ts +0 -125
  191. package/dist/ue-softphone-sdk.js.map +0 -1
  192. package/dist/version.d.ts +0 -1
  193. package/dist/webPhoneSdk.d.ts +0 -24
  194. package/dist/webrtc.d.ts +0 -17
  195. package/src/api/api-extractor.json +0 -358
  196. package/src/api/bye.ts +0 -27
  197. package/src/api/dtmf.ts +0 -27
  198. package/src/api/emitter.ts +0 -110
  199. package/src/api/exceptions/content-type-unsupported.ts +0 -11
  200. package/src/api/exceptions/index.ts +0 -5
  201. package/src/api/exceptions/request-pending.ts +0 -12
  202. package/src/api/exceptions/session-description-handler.ts +0 -11
  203. package/src/api/exceptions/session-terminated.ts +0 -11
  204. package/src/api/exceptions/state-transition.ts +0 -11
  205. package/src/api/index.ts +0 -58
  206. package/src/api/info.ts +0 -27
  207. package/src/api/invitation-accept-options.ts +0 -20
  208. package/src/api/invitation-progress-options.ts +0 -36
  209. package/src/api/invitation-reject-options.ts +0 -22
  210. package/src/api/invitation.ts +0 -816
  211. package/src/api/inviter-cancel-options.ts +0 -9
  212. package/src/api/inviter-invite-options.ts +0 -29
  213. package/src/api/inviter-options.ts +0 -44
  214. package/src/api/inviter.ts +0 -1126
  215. package/src/api/message.ts +0 -27
  216. package/src/api/messager-message-options.ts +0 -12
  217. package/src/api/messager-options.ts +0 -18
  218. package/src/api/messager.ts +0 -89
  219. package/src/api/notification.ts +0 -27
  220. package/src/api/notifier.ts +0 -7
  221. package/src/api/publisher-options.ts +0 -34
  222. package/src/api/publisher-publish-options.ts +0 -6
  223. package/src/api/publisher-state.ts +0 -21
  224. package/src/api/publisher-unpublish-options.ts +0 -6
  225. package/src/api/publisher.ts +0 -418
  226. package/src/api/referral.ts +0 -89
  227. package/src/api/registerer-options.ts +0 -55
  228. package/src/api/registerer-register-options.ts +0 -12
  229. package/src/api/registerer-state.ts +0 -21
  230. package/src/api/registerer-unregister-options.ts +0 -17
  231. package/src/api/registerer.ts +0 -814
  232. package/src/api/session-bye-options.ts +0 -12
  233. package/src/api/session-delegate.ts +0 -80
  234. package/src/api/session-description-handler-factory.ts +0 -16
  235. package/src/api/session-description-handler.ts +0 -89
  236. package/src/api/session-info-options.ts +0 -12
  237. package/src/api/session-invite-options.ts +0 -29
  238. package/src/api/session-message-options.ts +0 -12
  239. package/src/api/session-options.ts +0 -8
  240. package/src/api/session-refer-options.ts +0 -15
  241. package/src/api/session-state.ts +0 -45
  242. package/src/api/session.ts +0 -1448
  243. package/src/api/subscriber-options.ts +0 -12
  244. package/src/api/subscriber-subscribe-options.ts +0 -6
  245. package/src/api/subscriber.ts +0 -536
  246. package/src/api/subscription-delegate.ts +0 -13
  247. package/src/api/subscription-options.ts +0 -8
  248. package/src/api/subscription-state.ts +0 -19
  249. package/src/api/subscription-subscribe-options.ts +0 -6
  250. package/src/api/subscription-unsubscribe-options.ts +0 -6
  251. package/src/api/subscription.ts +0 -161
  252. package/src/api/transport-state.ts +0 -37
  253. package/src/api/transport.ts +0 -169
  254. package/src/api/user-agent-delegate.ts +0 -95
  255. package/src/api/user-agent-options.ts +0 -322
  256. package/src/api/user-agent-state.ts +0 -14
  257. package/src/api/user-agent.ts +0 -1014
  258. package/src/core/api-extractor.json +0 -358
  259. package/src/core/dialogs/dialog-state.ts +0 -35
  260. package/src/core/dialogs/dialog.ts +0 -605
  261. package/src/core/dialogs/index.ts +0 -4
  262. package/src/core/dialogs/session-dialog.ts +0 -996
  263. package/src/core/dialogs/subscription-dialog.ts +0 -557
  264. package/src/core/exceptions/exception.ts +0 -11
  265. package/src/core/exceptions/index.ts +0 -3
  266. package/src/core/exceptions/transaction-state-error.ts +0 -11
  267. package/src/core/exceptions/transport-error.ts +0 -11
  268. package/src/core/index.ts +0 -19
  269. package/src/core/log/index.ts +0 -3
  270. package/src/core/log/levels.ts +0 -10
  271. package/src/core/log/logger-factory.ts +0 -119
  272. package/src/core/log/logger.ts +0 -42
  273. package/src/core/messages/body.ts +0 -171
  274. package/src/core/messages/digest-authentication.ts +0 -190
  275. package/src/core/messages/incoming-message.ts +0 -152
  276. package/src/core/messages/incoming-request-message.ts +0 -14
  277. package/src/core/messages/incoming-request.ts +0 -75
  278. package/src/core/messages/incoming-response-message.ts +0 -14
  279. package/src/core/messages/incoming-response.ts +0 -13
  280. package/src/core/messages/index.ts +0 -18
  281. package/src/core/messages/md5.ts +0 -437
  282. package/src/core/messages/methods/ack.ts +0 -22
  283. package/src/core/messages/methods/bye.ts +0 -22
  284. package/src/core/messages/methods/cancel.ts +0 -22
  285. package/src/core/messages/methods/constants.ts +0 -21
  286. package/src/core/messages/methods/index.ts +0 -13
  287. package/src/core/messages/methods/info.ts +0 -22
  288. package/src/core/messages/methods/invite.ts +0 -104
  289. package/src/core/messages/methods/message.ts +0 -22
  290. package/src/core/messages/methods/notify.ts +0 -22
  291. package/src/core/messages/methods/prack.ts +0 -22
  292. package/src/core/messages/methods/publish.ts +0 -22
  293. package/src/core/messages/methods/refer.ts +0 -22
  294. package/src/core/messages/methods/register.ts +0 -22
  295. package/src/core/messages/methods/subscribe.ts +0 -59
  296. package/src/core/messages/outgoing-request-message.ts +0 -299
  297. package/src/core/messages/outgoing-request.ts +0 -77
  298. package/src/core/messages/outgoing-response.ts +0 -174
  299. package/src/core/messages/parser.ts +0 -265
  300. package/src/core/messages/utils.ts +0 -144
  301. package/src/core/session/index.ts +0 -2
  302. package/src/core/session/session-delegate.ts +0 -88
  303. package/src/core/session/session.ts +0 -158
  304. package/src/core/subscription/index.ts +0 -2
  305. package/src/core/subscription/subscription-delegate.ts +0 -30
  306. package/src/core/subscription/subscription.ts +0 -61
  307. package/src/core/timers.ts +0 -24
  308. package/src/core/transactions/client-transaction.ts +0 -78
  309. package/src/core/transactions/index.ts +0 -10
  310. package/src/core/transactions/invite-client-transaction.ts +0 -504
  311. package/src/core/transactions/invite-server-transaction.ts +0 -432
  312. package/src/core/transactions/non-invite-client-transaction.ts +0 -257
  313. package/src/core/transactions/non-invite-server-transaction.ts +0 -241
  314. package/src/core/transactions/server-transaction.ts +0 -47
  315. package/src/core/transactions/transaction-state.ts +0 -13
  316. package/src/core/transactions/transaction-user.ts +0 -82
  317. package/src/core/transactions/transaction.ts +0 -149
  318. package/src/core/transport.ts +0 -32
  319. package/src/core/user-agent-core/allowed-methods.ts +0 -19
  320. package/src/core/user-agent-core/index.ts +0 -3
  321. package/src/core/user-agent-core/user-agent-core-configuration.ts +0 -111
  322. package/src/core/user-agent-core/user-agent-core-delegate.ts +0 -50
  323. package/src/core/user-agent-core/user-agent-core.ts +0 -905
  324. package/src/core/user-agents/bye-user-agent-client.ts +0 -16
  325. package/src/core/user-agents/bye-user-agent-server.ts +0 -14
  326. package/src/core/user-agents/cancel-user-agent-client.ts +0 -14
  327. package/src/core/user-agents/index.ts +0 -26
  328. package/src/core/user-agents/info-user-agent-client.ts +0 -15
  329. package/src/core/user-agents/info-user-agent-server.ts +0 -14
  330. package/src/core/user-agents/invite-user-agent-client.ts +0 -405
  331. package/src/core/user-agents/invite-user-agent-server.ts +0 -269
  332. package/src/core/user-agents/message-user-agent-client.ts +0 -14
  333. package/src/core/user-agents/message-user-agent-server.ts +0 -14
  334. package/src/core/user-agents/notify-user-agent-client.ts +0 -15
  335. package/src/core/user-agents/notify-user-agent-server.ts +0 -30
  336. package/src/core/user-agents/prack-user-agent-client.ts +0 -16
  337. package/src/core/user-agents/prack-user-agent-server.ts +0 -37
  338. package/src/core/user-agents/publish-user-agent-client.ts +0 -14
  339. package/src/core/user-agents/re-invite-user-agent-client.ts +0 -127
  340. package/src/core/user-agents/re-invite-user-agent-server.ts +0 -109
  341. package/src/core/user-agents/re-subscribe-user-agent-client.ts +0 -78
  342. package/src/core/user-agents/re-subscribe-user-agent-server.ts +0 -14
  343. package/src/core/user-agents/refer-user-agent-client.ts +0 -15
  344. package/src/core/user-agents/refer-user-agent-server.ts +0 -30
  345. package/src/core/user-agents/register-user-agent-client.ts +0 -14
  346. package/src/core/user-agents/register-user-agent-server.ts +0 -14
  347. package/src/core/user-agents/subscribe-user-agent-client.ts +0 -341
  348. package/src/core/user-agents/subscribe-user-agent-server.ts +0 -14
  349. package/src/core/user-agents/user-agent-client.ts +0 -378
  350. package/src/core/user-agents/user-agent-server.ts +0 -276
  351. package/src/grammar/grammar.ts +0 -55
  352. package/src/grammar/index.ts +0 -4
  353. package/src/grammar/name-addr-header.ts +0 -58
  354. package/src/grammar/parameters.ts +0 -45
  355. package/src/grammar/pegjs/README.md +0 -9
  356. package/src/grammar/pegjs/dist/grammar.ts +0 -1557
  357. package/src/grammar/pegjs/src/grammar.pegjs +0 -1009
  358. package/src/grammar/uri.ts +0 -370
  359. package/src/lib/socket.io.esm.min.js +0 -7
  360. package/src/main.ts +0 -26
  361. package/src/new-index.ts +0 -2478
  362. package/src/platform/react/README.md +0 -1
  363. package/src/platform/web/index.ts +0 -4
  364. package/src/platform/web/modifiers/index.ts +0 -5
  365. package/src/platform/web/modifiers/modifiers.ts +0 -180
  366. package/src/platform/web/session-description-handler/api-extractor.json +0 -358
  367. package/src/platform/web/session-description-handler/index.ts +0 -14
  368. package/src/platform/web/session-description-handler/media-stream-factory-default.ts +0 -22
  369. package/src/platform/web/session-description-handler/media-stream-factory.ts +0 -10
  370. package/src/platform/web/session-description-handler/peer-connection-configuration-default.ts +0 -17
  371. package/src/platform/web/session-description-handler/peer-connection-delegate.ts +0 -72
  372. package/src/platform/web/session-description-handler/session-description-handler-configuration.ts +0 -17
  373. package/src/platform/web/session-description-handler/session-description-handler-factory-default.ts +0 -45
  374. package/src/platform/web/session-description-handler/session-description-handler-factory-options.ts +0 -10
  375. package/src/platform/web/session-description-handler/session-description-handler-factory.ts +0 -17
  376. package/src/platform/web/session-description-handler/session-description-handler-options.ts +0 -56
  377. package/src/platform/web/session-description-handler/session-description-handler.ts +0 -938
  378. package/src/platform/web/simple-user/api-extractor.json +0 -358
  379. package/src/platform/web/simple-user/index.ts +0 -7
  380. package/src/platform/web/simple-user/simple-user-delegate.ts +0 -82
  381. package/src/platform/web/simple-user/simple-user-options.ts +0 -102
  382. package/src/platform/web/simple-user/simple-user.ts +0 -1099
  383. package/src/platform/web/transport/api-extractor.json +0 -358
  384. package/src/platform/web/transport/index.ts +0 -6
  385. package/src/platform/web/transport/transport-options.ts +0 -34
  386. package/src/platform/web/transport/transport.ts +0 -742
  387. package/src/version.ts +0 -8
  388. package/src/webPhoneSdk.ts +0 -67
  389. package/src/webrtc.ts +0 -318
  390. /package/dist/{config.d.ts → types/config.d.ts} +0 -0
@@ -1,814 +0,0 @@
1
- import {
2
- C,
3
- Grammar,
4
- Logger,
5
- OutgoingRegisterRequest,
6
- OutgoingRequestMessage,
7
- URI,
8
- equivalentURI,
9
- NameAddrHeader
10
- } from "../core";
11
- import { Emitter, EmitterImpl } from "./emitter";
12
- import { RequestPendingError } from "./exceptions";
13
- import { RegistererOptions } from "./registerer-options";
14
- import { RegistererRegisterOptions } from "./registerer-register-options";
15
- import { RegistererState } from "./registerer-state";
16
- import { RegistererUnregisterOptions } from "./registerer-unregister-options";
17
- import { UserAgent } from "./user-agent";
18
-
19
- /**
20
- * A registerer registers a contact for an address of record (outgoing REGISTER).
21
- * @public
22
- */
23
- export class Registerer {
24
- private static readonly defaultExpires = 600;
25
- private static readonly defaultRefreshFrequency = 99;
26
-
27
- private disposed = false;
28
- private id: string;
29
- private expires: number;
30
- private refreshFrequency: number;
31
- private logger: Logger;
32
- private options: RegistererOptions;
33
- private request: OutgoingRequestMessage;
34
- private userAgent: UserAgent;
35
-
36
- private registrationExpiredTimer: number | undefined;
37
- private registrationTimer: number | undefined;
38
-
39
- /** The contacts returned from the most recent accepted REGISTER request. */
40
- private _contacts: Array<string> = [];
41
-
42
- /** The number of seconds to wait before retrying to register. */
43
- private _retryAfter: number | undefined = undefined;
44
-
45
- /** The registration state. */
46
- private _state: RegistererState = RegistererState.Initial;
47
- /** Emits when the registration state changes. */
48
- private _stateEventEmitter: EmitterImpl<RegistererState>;
49
-
50
- /** True is waiting for final response to outstanding REGISTER request. */
51
- private _waiting = false;
52
- /** Emits when waiting changes. */
53
- private _waitingEventEmitter: EmitterImpl<boolean>;
54
-
55
- /**
56
- * Constructs a new instance of the `Registerer` class.
57
- * @param userAgent - User agent. See {@link UserAgent} for details.
58
- * @param options - Options bucket. See {@link RegistererOptions} for details.
59
- */
60
- public constructor(userAgent: UserAgent, options: RegistererOptions = {}) {
61
- // state emitter
62
- this._stateEventEmitter = new EmitterImpl<RegistererState>();
63
-
64
- // waiting emitter
65
- this._waitingEventEmitter = new EmitterImpl<boolean>();
66
-
67
- // Set user agent
68
- this.userAgent = userAgent;
69
-
70
- // Default registrar is domain portion of user agent uri
71
- const defaultUserAgentRegistrar = userAgent.configuration.uri.clone();
72
- defaultUserAgentRegistrar.user = undefined;
73
-
74
- // Initialize configuration
75
- this.options = {
76
- // start with the default option values
77
- ...Registerer.defaultOptions(),
78
- // set the appropriate default registrar
79
- ...{ registrar: defaultUserAgentRegistrar },
80
- // apply any options passed in via the constructor
81
- ...Registerer.stripUndefinedProperties(options)
82
- };
83
-
84
- // Make sure we are not using references to array options
85
- this.options.extraContactHeaderParams = (this.options.extraContactHeaderParams || []).slice();
86
- this.options.extraHeaders = (this.options.extraHeaders || []).slice();
87
-
88
- // Make sure we are not using references to registrar uri
89
- if (!this.options.registrar) {
90
- throw new Error("Registrar undefined.");
91
- }
92
- this.options.registrar = this.options.registrar.clone();
93
-
94
- // Set instanceId and regId conditional defaults and validate
95
- if (this.options.regId && !this.options.instanceId) {
96
- this.options.instanceId = Registerer.newUUID();
97
- } else if (!this.options.regId && this.options.instanceId) {
98
- this.options.regId = 1;
99
- }
100
- if (this.options.instanceId && Grammar.parse(this.options.instanceId, "uuid") === -1) {
101
- throw new Error("Invalid instanceId.");
102
- }
103
- if (this.options.regId && this.options.regId < 0) {
104
- throw new Error("Invalid regId.");
105
- }
106
-
107
- const registrar = this.options.registrar;
108
- const fromURI = (this.options.params && this.options.params.fromUri) || userAgent.userAgentCore.configuration.aor;
109
- const toURI = (this.options.params && this.options.params.toUri) || userAgent.configuration.uri;
110
- const params = this.options.params || {};
111
- const extraHeaders = (options.extraHeaders || []).slice();
112
-
113
- // Build the request
114
- this.request = userAgent.userAgentCore.makeOutgoingRequestMessage(
115
- C.REGISTER,
116
- registrar,
117
- fromURI,
118
- toURI,
119
- params,
120
- extraHeaders,
121
- undefined
122
- );
123
-
124
- // Registration expires
125
- this.expires = this.options.expires || Registerer.defaultExpires;
126
- if (this.expires < 0) {
127
- throw new Error("Invalid expires.");
128
- }
129
-
130
- // Interval at which re-REGISTER requests are sent
131
- this.refreshFrequency = this.options.refreshFrequency || Registerer.defaultRefreshFrequency;
132
- if (this.refreshFrequency < 50 || this.refreshFrequency > 99) {
133
- throw new Error(
134
- "Invalid refresh frequency. The value represents a percentage of the expiration time and should be between 50 and 99."
135
- );
136
- }
137
-
138
- // initialize logger
139
- this.logger = userAgent.getLogger("sip.Registerer");
140
-
141
- if (this.options.logConfiguration) {
142
- this.logger.log("Configuration:");
143
- Object.keys(this.options).forEach((key) => {
144
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
145
- const value = (this.options as any)[key];
146
- switch (key) {
147
- case "registrar":
148
- this.logger.log("· " + key + ": " + value);
149
- break;
150
- default:
151
- this.logger.log("· " + key + ": " + JSON.stringify(value));
152
- }
153
- });
154
- }
155
-
156
- // Identifier
157
- this.id = this.request.callId + this.request.from.parameters.tag;
158
-
159
- // Add to the user agent's session collection.
160
- this.userAgent._registerers[this.id] = this;
161
- }
162
-
163
- /** Default registerer options. */
164
- private static defaultOptions(): Required<RegistererOptions> {
165
- return {
166
- expires: Registerer.defaultExpires,
167
- extraContactHeaderParams: [],
168
- extraHeaders: [],
169
- logConfiguration: true,
170
- instanceId: "",
171
- params: {},
172
- regId: 0,
173
- registrar: new URI("sip", "anonymous", "anonymous.invalid"),
174
- refreshFrequency: Registerer.defaultRefreshFrequency
175
- };
176
- }
177
-
178
- // http://stackoverflow.com/users/109538/broofa
179
- private static newUUID(): string {
180
- const UUID: string = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
181
- const r: number = Math.floor(Math.random() * 16);
182
- const v: number = c === "x" ? r : (r % 4) + 8;
183
- return v.toString(16);
184
- });
185
- return UUID;
186
- }
187
-
188
- /**
189
- * Strip properties with undefined values from options.
190
- * This is a work around while waiting for missing vs undefined to be addressed (or not)...
191
- * https://github.com/Microsoft/TypeScript/issues/13195
192
- * @param options - Options to reduce
193
- */
194
- private static stripUndefinedProperties(options: Partial<RegistererOptions>): Partial<RegistererOptions> {
195
- return Object.keys(options).reduce((object, key) => {
196
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
197
- if ((options as any)[key] !== undefined) {
198
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
199
- (object as any)[key] = (options as any)[key];
200
- }
201
- return object;
202
- }, {});
203
- }
204
-
205
- /** The registered contacts. */
206
- public get contacts(): Array<string> {
207
- return this._contacts.slice();
208
- }
209
-
210
- /**
211
- * The number of seconds to wait before retrying to register.
212
- * @defaultValue `undefined`
213
- * @remarks
214
- * When the server rejects a registration request, if it provides a suggested
215
- * duration to wait before retrying, that value is available here when and if
216
- * the state transitions to `Unsubscribed`. It is also available during the
217
- * callback to `onReject` after a call to `register`. (Note that if the state
218
- * if already `Unsubscribed`, a rejected request created by `register` will
219
- * not cause the state to transition to `Unsubscribed`. One way to avoid this
220
- * case is to dispose of `Registerer` when unregistered and create a new
221
- * `Registerer` for any attempts to retry registering.)
222
- * @example
223
- * ```ts
224
- * // Checking for retry after on state change
225
- * registerer.stateChange.addListener((newState) => {
226
- * switch (newState) {
227
- * case RegistererState.Unregistered:
228
- * const retryAfter = registerer.retryAfter;
229
- * break;
230
- * }
231
- * });
232
- *
233
- * // Checking for retry after on request rejection
234
- * registerer.register({
235
- * requestDelegate: {
236
- * onReject: () => {
237
- * const retryAfter = registerer.retryAfter;
238
- * }
239
- * }
240
- * });
241
- * ```
242
- */
243
- public get retryAfter(): number | undefined {
244
- return this._retryAfter;
245
- }
246
-
247
- /** The registration state. */
248
- public get state(): RegistererState {
249
- return this._state;
250
- }
251
-
252
- /** Emits when the registerer state changes. */
253
- public get stateChange(): Emitter<RegistererState> {
254
- return this._stateEventEmitter;
255
- }
256
-
257
- /** Destructor. */
258
- public dispose(): Promise<void> {
259
- if (this.disposed) {
260
- return Promise.resolve();
261
- }
262
- this.disposed = true;
263
- this.logger.log(`Registerer ${this.id} in state ${this.state} is being disposed`);
264
-
265
- // Remove from the user agent's registerer collection
266
- delete this.userAgent._registerers[this.id];
267
-
268
- // If registered, unregisters and resolves after final response received.
269
- return new Promise((resolve) => {
270
- const doClose = (): void => {
271
- // If we are registered, unregister and resolve after our state changes
272
- if (!this.waiting && this._state === RegistererState.Registered) {
273
- this.stateChange.addListener(
274
- () => {
275
- this.terminated();
276
- resolve();
277
- },
278
- { once: true }
279
- );
280
- this.unregister();
281
- return;
282
- }
283
- // Otherwise just resolve
284
- this.terminated();
285
- resolve();
286
- };
287
-
288
- // If we are waiting for an outstanding request, wait for it to finish and then try closing.
289
- // Otherwise just try closing.
290
- if (this.waiting) {
291
- this.waitingChange.addListener(
292
- () => {
293
- doClose();
294
- },
295
- { once: true }
296
- );
297
- } else {
298
- doClose();
299
- }
300
- });
301
- }
302
-
303
- /**
304
- * Sends the REGISTER request.
305
- * @remarks
306
- * If successful, sends re-REGISTER requests prior to registration expiration until `unsubscribe()` is called.
307
- * Rejects with `RequestPendingError` if a REGISTER request is already in progress.
308
- */
309
- public register(options: RegistererRegisterOptions = {}): Promise<OutgoingRegisterRequest> {
310
- if (this.state === RegistererState.Terminated) {
311
- this.stateError();
312
- throw new Error("Registerer terminated. Unable to register.");
313
- }
314
-
315
- if (this.disposed) {
316
- this.stateError();
317
- throw new Error("Registerer disposed. Unable to register.");
318
- }
319
-
320
- // UAs MUST NOT send a new registration (that is, containing new Contact
321
- // header field values, as opposed to a retransmission) until they have
322
- // received a final response from the registrar for the previous one or
323
- // the previous REGISTER request has timed out.
324
- // https://tools.ietf.org/html/rfc3261#section-10.2
325
- if (this.waiting) {
326
- this.waitingWarning();
327
- const error = new RequestPendingError("REGISTER request already in progress, waiting for final response");
328
- return Promise.reject(error);
329
- }
330
-
331
- // Options
332
- if (options.requestOptions) {
333
- this.options = { ...this.options, ...options.requestOptions };
334
- }
335
-
336
- // Extra headers
337
- const extraHeaders = (this.options.extraHeaders || []).slice();
338
- extraHeaders.push("Contact: " + this.generateContactHeader(this.expires));
339
- // this is UA.C.ALLOWED_METHODS, removed to get around circular dependency
340
- extraHeaders.push(
341
- "Allow: " + ["ACK", "CANCEL", "INVITE", "MESSAGE", "BYE", "OPTIONS", "INFO", "NOTIFY", "REFER"].toString()
342
- );
343
-
344
- // Call-ID: All registrations from a UAC SHOULD use the same Call-ID
345
- // header field value for registrations sent to a particular
346
- // registrar.
347
- //
348
- // CSeq: The CSeq value guarantees proper ordering of REGISTER
349
- // requests. A UA MUST increment the CSeq value by one for each
350
- // REGISTER request with the same Call-ID.
351
- // https://tools.ietf.org/html/rfc3261#section-10.2
352
- this.request.cseq++;
353
- this.request.setHeader("cseq", this.request.cseq + " REGISTER");
354
- this.request.extraHeaders = extraHeaders;
355
-
356
- this.waitingToggle(true);
357
-
358
- const outgoingRegisterRequest = this.userAgent.userAgentCore.register(this.request, {
359
- onAccept: (response): void => {
360
- let expires: number | undefined;
361
-
362
- // FIXME: This does NOT appear to be to spec and should be removed.
363
- // I haven't found anywhere that an Expires header may be used in a response.
364
- if (response.message.hasHeader("expires")) {
365
- expires = Number(response.message.getHeader("expires"));
366
- }
367
-
368
- // 8. The registrar returns a 200 (OK) response. The response MUST
369
- // contain Contact header field values enumerating all current
370
- // bindings. Each Contact value MUST feature an "expires"
371
- // parameter indicating its expiration interval chosen by the
372
- // registrar. The response SHOULD include a Date header field.
373
- // https://tools.ietf.org/html/rfc3261#section-10.3
374
- this._contacts = response.message.getHeaders("contact");
375
- let contacts = this._contacts.length;
376
- if (!contacts) {
377
- this.logger.error("No Contact header in response to REGISTER, dropping response.");
378
- this.unregistered();
379
- return;
380
- }
381
-
382
- // The 200 (OK) response from the registrar contains a list of Contact
383
- // fields enumerating all current bindings. The UA compares each
384
- // contact address to see if it created the contact address, using
385
- // comparison rules in Section 19.1.4. If so, it updates the expiration
386
- // time interval according to the expires parameter or, if absent, the
387
- // Expires field value. The UA then issues a REGISTER request for each
388
- // of its bindings before the expiration interval has elapsed.
389
- // https://tools.ietf.org/html/rfc3261#section-10.2.4
390
- let contact: NameAddrHeader | undefined;
391
- while (contacts--) {
392
- contact = response.message.parseHeader("contact", contacts);
393
- if (!contact) {
394
- throw new Error("Contact undefined");
395
- }
396
-
397
- // If we are using a randomly generated user name (which is the default behavior)
398
- if (this.userAgent.configuration.contactName === "") {
399
- // compare the user portion of the URI under the assumption that it will be unique
400
- if (contact.uri.user === this.userAgent.contact.uri.user) {
401
- expires = Number(contact.getParam("expires"));
402
- break;
403
- }
404
- } else {
405
- // otherwise use comparision rules in Section 19.1.4
406
- if (equivalentURI(contact.uri, this.userAgent.contact.uri)) {
407
- expires = Number(contact.getParam("expires"));
408
- break;
409
- }
410
- }
411
-
412
- contact = undefined;
413
- }
414
-
415
- // There must be a matching contact.
416
- if (contact === undefined) {
417
- this.logger.error("No Contact header pointing to us, dropping response");
418
- this.unregistered();
419
- this.waitingToggle(false);
420
- return;
421
- }
422
-
423
- // The contact must have an expires.
424
- if (expires === undefined) {
425
- this.logger.error("Contact pointing to us is missing expires parameter, dropping response");
426
- this.unregistered();
427
- this.waitingToggle(false);
428
- return;
429
- }
430
-
431
- // Save gruu values
432
- if (contact.hasParam("temp-gruu")) {
433
- const gruu = contact.getParam("temp-gruu");
434
- if (gruu) {
435
- this.userAgent.contact.tempGruu = Grammar.URIParse(gruu.replace(/"/g, ""));
436
- }
437
- }
438
- if (contact.hasParam("pub-gruu")) {
439
- const gruu = contact.getParam("pub-gruu");
440
- if (gruu) {
441
- this.userAgent.contact.pubGruu = Grammar.URIParse(gruu.replace(/"/g, ""));
442
- }
443
- }
444
-
445
- this.registered(expires);
446
- if (options.requestDelegate && options.requestDelegate.onAccept) {
447
- options.requestDelegate.onAccept(response);
448
- }
449
- this.waitingToggle(false);
450
- },
451
- onProgress: (response): void => {
452
- if (options.requestDelegate && options.requestDelegate.onProgress) {
453
- options.requestDelegate.onProgress(response);
454
- }
455
- },
456
- onRedirect: (response): void => {
457
- this.logger.error("Redirect received. Not supported.");
458
- this.unregistered();
459
- if (options.requestDelegate && options.requestDelegate.onRedirect) {
460
- options.requestDelegate.onRedirect(response);
461
- }
462
- this.waitingToggle(false);
463
- },
464
- onReject: (response): void => {
465
- if (response.message.statusCode === 423) {
466
- // If a UA receives a 423 (Interval Too Brief) response, it MAY retry
467
- // the registration after making the expiration interval of all contact
468
- // addresses in the REGISTER request equal to or greater than the
469
- // expiration interval within the Min-Expires header field of the 423
470
- // (Interval Too Brief) response.
471
- // https://tools.ietf.org/html/rfc3261#section-10.2.8
472
- //
473
- // The registrar MAY choose an expiration less than the requested
474
- // expiration interval. If and only if the requested expiration
475
- // interval is greater than zero AND smaller than one hour AND
476
- // less than a registrar-configured minimum, the registrar MAY
477
- // reject the registration with a response of 423 (Interval Too
478
- // Brief). This response MUST contain a Min-Expires header field
479
- // that states the minimum expiration interval the registrar is
480
- // willing to honor. It then skips the remaining steps.
481
- // https://tools.ietf.org/html/rfc3261#section-10.3
482
- if (!response.message.hasHeader("min-expires")) {
483
- // This response MUST contain a Min-Expires header field
484
- this.logger.error("423 response received for REGISTER without Min-Expires, dropping response");
485
- this.unregistered();
486
- this.waitingToggle(false);
487
- return;
488
- }
489
- // Increase our registration interval to the suggested minimum
490
- this.expires = Number(response.message.getHeader("min-expires"));
491
- // Attempt the registration again immediately
492
- this.waitingToggle(false);
493
- this.register();
494
- return;
495
- }
496
- this.logger.warn(`Failed to register, status code ${response.message.statusCode}`);
497
- // The Retry-After header field can be used with a 500 (Server Internal
498
- // Error) or 503 (Service Unavailable) response to indicate how long the
499
- // service is expected to be unavailable to the requesting client...
500
- // https://tools.ietf.org/html/rfc3261#section-20.33
501
- let retryAfterDuration = NaN;
502
- if (response.message.statusCode === 500 || response.message.statusCode === 503) {
503
- const header = response.message.getHeader("retry-after");
504
- if (header) {
505
- retryAfterDuration = Number.parseInt(header, undefined);
506
- }
507
- }
508
- // Set for the state change (if any) and the delegate callback (if any)
509
- this._retryAfter = isNaN(retryAfterDuration) ? undefined : retryAfterDuration;
510
- this.unregistered();
511
- if (options.requestDelegate && options.requestDelegate.onReject) {
512
- options.requestDelegate.onReject(response);
513
- }
514
- this._retryAfter = undefined;
515
- this.waitingToggle(false);
516
- },
517
- onTrying: (response): void => {
518
- if (options.requestDelegate && options.requestDelegate.onTrying) {
519
- options.requestDelegate.onTrying(response);
520
- }
521
- }
522
- });
523
-
524
- return Promise.resolve(outgoingRegisterRequest);
525
- }
526
-
527
- /**
528
- * Sends the REGISTER request with expires equal to zero.
529
- * @remarks
530
- * Rejects with `RequestPendingError` if a REGISTER request is already in progress.
531
- */
532
- public unregister(options: RegistererUnregisterOptions = {}): Promise<OutgoingRegisterRequest> {
533
- if (this.state === RegistererState.Terminated) {
534
- this.stateError();
535
- throw new Error("Registerer terminated. Unable to register.");
536
- }
537
-
538
- if (this.disposed) {
539
- if (this.state !== RegistererState.Registered) {
540
- // allows unregister while disposing and registered
541
- this.stateError();
542
- throw new Error("Registerer disposed. Unable to register.");
543
- }
544
- }
545
-
546
- // UAs MUST NOT send a new registration (that is, containing new Contact
547
- // header field values, as opposed to a retransmission) until they have
548
- // received a final response from the registrar for the previous one or
549
- // the previous REGISTER request has timed out.
550
- // https://tools.ietf.org/html/rfc3261#section-10.2
551
- if (this.waiting) {
552
- this.waitingWarning();
553
- const error = new RequestPendingError("REGISTER request already in progress, waiting for final response");
554
- return Promise.reject(error);
555
- }
556
-
557
- if (this._state !== RegistererState.Registered && !options.all) {
558
- this.logger.warn("Not currently registered, but sending an unregister anyway.");
559
- }
560
-
561
- // Extra headers
562
- const extraHeaders = ((options.requestOptions && options.requestOptions.extraHeaders) || []).slice();
563
- this.request.extraHeaders = extraHeaders;
564
-
565
- // Registrations are soft state and expire unless refreshed, but can
566
- // also be explicitly removed. A client can attempt to influence the
567
- // expiration interval selected by the registrar as described in Section
568
- // 10.2.1. A UA requests the immediate removal of a binding by
569
- // specifying an expiration interval of "0" for that contact address in
570
- // a REGISTER request. UAs SHOULD support this mechanism so that
571
- // bindings can be removed before their expiration interval has passed.
572
- //
573
- // The REGISTER-specific Contact header field value of "*" applies to
574
- // all registrations, but it MUST NOT be used unless the Expires header
575
- // field is present with a value of "0".
576
- // https://tools.ietf.org/html/rfc3261#section-10.2.2
577
- if (options.all) {
578
- extraHeaders.push("Contact: *");
579
- extraHeaders.push("Expires: 0");
580
- } else {
581
- extraHeaders.push("Contact: " + this.generateContactHeader(0));
582
- }
583
-
584
- // Call-ID: All registrations from a UAC SHOULD use the same Call-ID
585
- // header field value for registrations sent to a particular
586
- // registrar.
587
- //
588
- // CSeq: The CSeq value guarantees proper ordering of REGISTER
589
- // requests. A UA MUST increment the CSeq value by one for each
590
- // REGISTER request with the same Call-ID.
591
- // https://tools.ietf.org/html/rfc3261#section-10.2
592
- this.request.cseq++;
593
- this.request.setHeader("cseq", this.request.cseq + " REGISTER");
594
-
595
- // Pre-emptive clear the registration timer to avoid a race condition where
596
- // this timer fires while waiting for a final response to the unsubscribe.
597
- if (this.registrationTimer !== undefined) {
598
- clearTimeout(this.registrationTimer);
599
- this.registrationTimer = undefined;
600
- }
601
-
602
- this.waitingToggle(true);
603
-
604
- const outgoingRegisterRequest = this.userAgent.userAgentCore.register(this.request, {
605
- onAccept: (response): void => {
606
- this._contacts = response.message.getHeaders("contact"); // Update contacts
607
- this.unregistered();
608
- if (options.requestDelegate && options.requestDelegate.onAccept) {
609
- options.requestDelegate.onAccept(response);
610
- }
611
- this.waitingToggle(false);
612
- },
613
- onProgress: (response): void => {
614
- if (options.requestDelegate && options.requestDelegate.onProgress) {
615
- options.requestDelegate.onProgress(response);
616
- }
617
- },
618
- onRedirect: (response): void => {
619
- this.logger.error("Unregister redirected. Not currently supported.");
620
- this.unregistered();
621
- if (options.requestDelegate && options.requestDelegate.onRedirect) {
622
- options.requestDelegate.onRedirect(response);
623
- }
624
- this.waitingToggle(false);
625
- },
626
- onReject: (response): void => {
627
- this.logger.error(`Unregister rejected with status code ${response.message.statusCode}`);
628
- this.unregistered();
629
- if (options.requestDelegate && options.requestDelegate.onReject) {
630
- options.requestDelegate.onReject(response);
631
- }
632
- this.waitingToggle(false);
633
- },
634
- onTrying: (response): void => {
635
- if (options.requestDelegate && options.requestDelegate.onTrying) {
636
- options.requestDelegate.onTrying(response);
637
- }
638
- }
639
- });
640
-
641
- return Promise.resolve(outgoingRegisterRequest);
642
- }
643
-
644
- /**
645
- * Clear registration timers.
646
- */
647
- private clearTimers(): void {
648
- if (this.registrationTimer !== undefined) {
649
- clearTimeout(this.registrationTimer);
650
- this.registrationTimer = undefined;
651
- }
652
-
653
- if (this.registrationExpiredTimer !== undefined) {
654
- clearTimeout(this.registrationExpiredTimer);
655
- this.registrationExpiredTimer = undefined;
656
- }
657
- }
658
-
659
- /**
660
- * Generate Contact Header
661
- */
662
- private generateContactHeader(expires: number): string {
663
- let contact = this.userAgent.contact.toString();
664
- if (this.options.regId && this.options.instanceId) {
665
- contact += ";reg-id=" + this.options.regId;
666
- contact += ';+sip.instance="<urn:uuid:' + this.options.instanceId + '>"';
667
- }
668
-
669
- if (this.options.extraContactHeaderParams) {
670
- this.options.extraContactHeaderParams.forEach((header: string) => {
671
- contact += ";" + header;
672
- });
673
- }
674
-
675
- contact += ";expires=" + expires;
676
-
677
- return contact;
678
- }
679
-
680
- /**
681
- * Helper function, called when registered.
682
- */
683
- private registered(expires: number): void {
684
- this.clearTimers();
685
-
686
- // Re-Register before the expiration interval has elapsed.
687
- // For that, calculate the delay as a percentage of the expiration time
688
- this.registrationTimer = window.setTimeout(() => {
689
- this.registrationTimer = undefined;
690
- this.register();
691
- }, (this.refreshFrequency / 100) * expires * 1000);
692
-
693
- // We are unregistered if the registration expires.
694
- this.registrationExpiredTimer = window.setTimeout(() => {
695
- this.logger.warn("Registration expired");
696
- this.unregistered();
697
- }, expires * 1000);
698
-
699
- if (this._state !== RegistererState.Registered) {
700
- this.stateTransition(RegistererState.Registered);
701
- }
702
- }
703
-
704
- /**
705
- * Helper function, called when unregistered.
706
- */
707
- private unregistered(): void {
708
- this.clearTimers();
709
-
710
- if (this._state !== RegistererState.Unregistered) {
711
- this.stateTransition(RegistererState.Unregistered);
712
- }
713
- }
714
-
715
- /**
716
- * Helper function, called when terminated.
717
- */
718
- private terminated(): void {
719
- this.clearTimers();
720
-
721
- if (this._state !== RegistererState.Terminated) {
722
- this.stateTransition(RegistererState.Terminated);
723
- }
724
- }
725
-
726
- /**
727
- * Transition registration state.
728
- */
729
- private stateTransition(newState: RegistererState): void {
730
- const invalidTransition = (): void => {
731
- throw new Error(`Invalid state transition from ${this._state} to ${newState}`);
732
- };
733
-
734
- // Validate transition
735
- switch (this._state) {
736
- case RegistererState.Initial:
737
- if (
738
- newState !== RegistererState.Registered &&
739
- newState !== RegistererState.Unregistered &&
740
- newState !== RegistererState.Terminated
741
- ) {
742
- invalidTransition();
743
- }
744
- break;
745
- case RegistererState.Registered:
746
- if (newState !== RegistererState.Unregistered && newState !== RegistererState.Terminated) {
747
- invalidTransition();
748
- }
749
- break;
750
- case RegistererState.Unregistered:
751
- if (newState !== RegistererState.Registered && newState !== RegistererState.Terminated) {
752
- invalidTransition();
753
- }
754
- break;
755
- case RegistererState.Terminated:
756
- invalidTransition();
757
- break;
758
- default:
759
- throw new Error("Unrecognized state.");
760
- }
761
-
762
- // Transition
763
- this._state = newState;
764
- this.logger.log(`Registration transitioned to state ${this._state}`);
765
- this._stateEventEmitter.emit(this._state);
766
-
767
- // Dispose
768
- if (newState === RegistererState.Terminated) {
769
- this.dispose();
770
- }
771
- }
772
-
773
- /** True if the registerer is currently waiting for final response to a REGISTER request. */
774
- private get waiting(): boolean {
775
- return this._waiting;
776
- }
777
-
778
- /** Emits when the registerer waiting state changes. */
779
- private get waitingChange(): Emitter<boolean> {
780
- return this._waitingEventEmitter;
781
- }
782
-
783
- /**
784
- * Toggle waiting.
785
- */
786
- private waitingToggle(waiting: boolean): void {
787
- if (this._waiting === waiting) {
788
- throw new Error(`Invalid waiting transition from ${this._waiting} to ${waiting}`);
789
- }
790
- this._waiting = waiting;
791
- this.logger.log(`Waiting toggled to ${this._waiting}`);
792
- this._waitingEventEmitter.emit(this._waiting);
793
- }
794
-
795
- /** Hopefully helpful as the standard behavior has been found to be unexpected. */
796
- private waitingWarning(): void {
797
- let message = "An attempt was made to send a REGISTER request while a prior one was still in progress.";
798
- message += " RFC 3261 requires UAs MUST NOT send a new registration until they have received a final response";
799
- message += " from the registrar for the previous one or the previous REGISTER request has timed out.";
800
- message += " Note that if the transport disconnects, you still must wait for the prior request to time out before";
801
- message +=
802
- " sending a new REGISTER request or alternatively dispose of the current Registerer and create a new Registerer.";
803
- this.logger.warn(message);
804
- }
805
-
806
- /** Hopefully helpful as the standard behavior has been found to be unexpected. */
807
- private stateError(): void {
808
- const reason = this.state === RegistererState.Terminated ? "is in 'Terminated' state" : "has been disposed";
809
- let message = `An attempt was made to send a REGISTER request when the Registerer ${reason}.`;
810
- message += " The Registerer transitions to 'Terminated' when Registerer.dispose() is called.";
811
- message += " Perhaps you called UserAgent.stop() which dipsoses of all Registerers?";
812
- this.logger.error(message);
813
- }
814
- }